c语言实现PID算法
#include <stdio.h>struct _pid
{
floaterror; //差值
float error_last; //上一次差值
float integral; //差值的和
}
float Kp =0.01; //比例系数,提升速度
float Ki = 1; //积分系数,稳定输出
float Kd =0.01; //微分系数,减小振荡
float cur_speed = 0; //当前的速度
float level = 0; //用于输出pwm
float set_speed = 50; //设定的速度
struct _pid pid;
void pid_init()
{
pid.error = 0;
pid.error_last = 0;
pid.integral = 0;
}
void pid_control()
{
pid.error=set_speed-cur_speed;
pid.integral +=pid.error;
level =Kp*pid.error+Ki*pid.integral+Kd*(pid.error-pid.error_last);
pid.error=pid.error_lasst;
}
int main()
{
pid_init();
for(i=0;i<10;i++)
{
pid_control();
printf("当前速度%f等级 %f\n",cur_speed,level);
}
return 0 ;
}
PID算法本身不复杂,难的是参数调优。 有关PID算法的教程有很多,基础的知识其实就那么多,关键是怎么用好。 PID算法重在参数调优 PID的调试很麻烦吗?所谓的参数调优,针对不同设备,需要单独调试吗? 参数整定才是重点 C语言开发PID算法确实会更好 一些,C语言是一种编译型语言,生成的机器码执行效率高,适合对实时性要求较高的控制系统 这种pid还行,但是调参的时候就麻烦了 这是就适用于电机方面的PID操作吗? 这套代码具有较好的可移植性,可以在不同的硬件平台和操作系统上运行,便于跨平台开发 PID在嵌入式系统、机器人控制、自动化设备等领域应用广泛,有大量的开发资源和社区支持 我觉得这种算法挺好,简单易懂,很不错 写的好简单啊,PID有这么简单的吗? 这种就调节当前速度是不是就可以了? 看这个代码真的简单,以前移植的PID都是好麻烦的啊 话说,微分系统减小震荡这个是怎么玩的? 还是不错,现在这个算法很多了,关键是调试 C语言开发PID算法确实会更简单,PID算法涉及的层面还是很多的 PID参数优化确实很复杂重点就在参数调试 PID算法其实重在参数的调节
页:
[1]
2