当前位置: 首页 > news >正文

位置式PID测试代码

位置式PID的测试demo

/*** @file pid.cpp* @author man, what can I say* @brief 位置式pid的测试文件* @version 0.1* @date 2024-10-17** @copyright Copyright (c) 2024**/#define MIN(X, Y) (X) < (Y) ? (X) : (Y)
#define MAX(X, Y) (X) > (Y) ? (X) : (Y)#include <stdio.h>
#include <unistd.h>struct pid_parameter
{float pid_1;float pid_2;float pid_3;float up;float ui; // 积分项float ud; // 微分项float min; // 限幅float max;float output;
};int set_pid_param(float pid_1, float pid_2, float pid_3, struct pid_parameter *ptr_pid_param)
{ptr_pid_param->pid_1 = pid_1;ptr_pid_param->pid_2 = pid_2;ptr_pid_param->pid_3 = pid_3;ptr_pid_param->up = 0.0;ptr_pid_param->ui = 0.0;ptr_pid_param->ud = 0.0;ptr_pid_param->min = -0.008333333; // 1/120ptr_pid_param->max = 0.008333333;ptr_pid_param->output = 0.0;return 0;
}int pid_calculate(float reference_value, float actual_value, struct pid_parameter *ptr_pid_param)
{float error = reference_value - actual_value;ptr_pid_param->up = ptr_pid_param->pid_1 * error;ptr_pid_param->ui = ptr_pid_param->pid_2 * error + ptr_pid_param->ui;ptr_pid_param->ud = ptr_pid_param->pid_3 * error - ptr_pid_param->ud;ptr_pid_param->output = ptr_pid_param->up + ptr_pid_param->ui + ptr_pid_param->ud;ptr_pid_param->ui = MAX(MIN(ptr_pid_param->ui, ptr_pid_param->max), ptr_pid_param->min);ptr_pid_param->ud = MAX(MIN(ptr_pid_param->ud, ptr_pid_param->max), ptr_pid_param->min);ptr_pid_param->output = MAX(MIN(ptr_pid_param->output, ptr_pid_param->max), ptr_pid_param->min);return 0;
}int main()
{float target = 100.0;float current = 10.0;struct pid_parameter pid_param;set_pid_param(0.5, 0.02, 0.0, &pid_param);while (1){pid_calculate(target, current, &pid_param);current = current + pid_param.output;printf("current : %f \n", current);fflush(stdout);usleep(2000);}return 0;
}

参考链接

【1】https://baijiahao.baidu.com/s?id=1788508113911352020&wfr=spider&for=pc
【2】pid控制器输出的量到底是什么? - 凸头匠的回答 - 知乎
https://www.zhihu.com/question/316306877/answer/1313013059


http://www.mrgr.cn/news/52220.html

相关文章:

  • C++ Vector 容器的模拟实现及应用详解
  • Dockerfile 中 Expose 命令的作用
  • SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
  • 12、论文阅读:利用生成对抗网络实现无监督深度图像增强
  • git 操作
  • 【java】深入解析Lambda表达式
  • 涉密网和非涉密网之间企业如何进行安全跨网文件交换?
  • Python可以实现列表排序的几种方法
  • 解决MybatisPlus updateById更新数据时将没传的数据也更新成了null
  • 深入理解计算机系统--计算机系统漫游
  • STM32L1x 片上温度传感器采用ADC及工厂校准数据提升测量温度精度
  • 惊!随身WiFi流量套餐竟有这些“坑爹”套路,你了解多少?随身WiFi哪个牌子好?
  • 【C语言】结构体的定义与使用
  • OpenAI多智能体框架Swarm实测—基于Qwen开源模型
  • Java学到什么程度才可以出来找工作呢?
  • Excel数据分析
  • jmeter用csv data set config做参数化1
  • VAS1085Q升降压线性LED驱动芯片车规认证AEC-Q100
  • 在TikTok平台进行户外直播的策略与技巧
  • (SEM)模型 ▎结构方程模型的建立、拟合、评估、筛选和结果展示