中级会员
- 积分
- 220
- 威望
- 176
- 贡献
- 20
- 兑换币
- 0
- 注册时间
- 2010-10-31
- 在线时间
- 12 小时
|
大家好,下面是我的闭环速度控制pID子函数 大家认真看下帮忙解决下问题,先谢谢啦、、、
uint Setpoint=0; //电机定义
uint Feedback=0;
float Kp=0.8; //比例常数
float Ki=0; //积分常数
float Kd=0; //微分常数
sint EE0=0; //当前误差
sint EE1=0; //前一次误差
sint EE2=0; //前前一次的误差
sint dianji1,dianji0;
float Zengliang;
int Dianji(int b,int c) //电机PID
{
EE0=b-c; //增量计算
Zengliang=Kp*(EE0-EE1)+Ki*EE0+Kd*(EE0-2*EE1+EE2);
dianji0=dianji1+Zengliang;
EE2=EE1; //存储误差,用于下次计算
EE1=EE0;
dianji1=dianji0;
if(dianji0>=960) //电机占空比幅值
dianji0=960;
if(dianji0<0)
dianji0=0;
return dianji0;
}
我用的是PIT定时中断(定时了5ms)
Feedback=PACNT(5ms产生的脉冲数)这样n1(编码器齿轮转速)=60*Feedback/(0.005*200),电机齿轮与的齿数比为24:18,那么电机转速n2=(18/24)*n1,n2/15300=反馈的占空比/1200,算下来是7*Feedback/20,那么就可以用PWMDTY45=Dianji(Setpoint,7*Feedback)来控制电机的输出占空比了,但是经过调解PID参数却得不到理想的结果,不知道是怎么回事,电机的输出跳变很大,不稳定,而且不符合理想值
大家看看我的程序和思路对吗?麻烦大家了。。。谢谢 |
|