|
#define VV_MIN 0
Ka = Kp //设置调节死区 //速度PID计算 pp->vl_PreU = VV_MAX; signed long vi_PreDerror; //速度PID,前一次,速度误差之差,d_error-PreDerror;电机控制输出值 }PID; PID sPID; // PID Control Structure void PIDInit(void) { sPID.vi_Ref = 0 ; //速度设定值 sPID.vi_FeedBack = 0 ; //速度反馈值 sPID.vi_PreError = 0 ; //前一次,速度误差,,vi_Ref - vi_FeedBack sPID.vi_PreDerror = 0 ; //前一次,速度误差之差,d_error-PreDerror; sPID.v_Kp = VV_KPVALUE; sPID.v_Ki = VV_KIVALUE; sPID.v_Kd = VV_KDVALUE; sPID.vl_PreU = 0 ; //电机控制输出值 } unsigned int v_PIDCalc( PID *pp ) { signed long error,d_error,dd_error; error = (signed long)(pp->vi_Ref - pp->vi_FeedBack); // 偏差计算 d_error = error - pp->vi_PreError; dd_error = d_error - pp->vi_PreDerror; pp->vi_PreError = error; //存储当前偏差 pp->vi_PreDerror = d_error;定义PID参数 #define VV_KPVALUE 3 //比例 #define VV_KIVALUE 40 //积分 #define VV_KDVALUE 3 //微分 #define VV_MAX 10000 //返回的最大值,是pwm的周期值 |
本文介绍了一种基于嵌入式系统的速度PID控制算法实现,详细展示了如何通过定义PID结构体来存储关键参数,并在主循环中进行PID计算,最终调整PWM输出以达到期望的速度控制效果。


被折叠的 条评论
为什么被折叠?



