智能车制作

标题: 北京科技大学的舵机控制 [打印本页]

作者: lulinhan    时间: 2015-4-10 15:45
标题: 北京科技大学的舵机控制
在调舵机的程序的时候,
pp->loca_PreU = pp->loca_Kp * loca_error + pp->loca_Ki * pp->loca_PreIntegral + pp->loca_Kd * loca_derror;// 位置PID算法
是直接把pp->loca_PreU/1000变成PWM吗,但是pp->loca_PreU/1000值不确定,该怎样对应上PWM呢,


作者: 闲听雨打芭蕉    时间: 2015-4-13 17:17
同问!都没资料谈到这个问题,懂的也没人来解释一下,郁闷。。。
作者: 平凡之路    时间: 2015-6-20 15:43
float32 PID_realize_D(float32 speed/*输入值,偏差*/)
{
pid_D.err=speed;
pid_D.integral+=pid_D.err;
pid_D.PID_output=pid_D.Kp*pid_D.err+pid_D.Ki*pid_D.integral+pid_D.Kd*(pid_D.err-pid_D.err_last);
pid_D.err_last=pid_D.err;
if(pid_D.PID_output>=30)  pid_D.PID_output=30;
if(pid_D.PID_output<=-30)  pid_D.PID_output=-30;
return pid_D.PID_output;
}
setServo1((int8)(PID_realize_D(-offset)));//舵机PID控制
舵机控制一般用PD控制,加上空间微分(就是轨迹的变化方向),效果更好,不用除去1000,通过PID参数都可以让它自己匹配了,但要设置舵机的左右限制
作者: 天芒    时间: 2015-6-20 17:13
北科的公式里面,根据我的理解,之所前面要用很大的整型数据,算出来要除以1000什么的,是为了不在计算中引入浮点型数据的计算,这一点其实是很有必要的。不过你说 “但是pp->loca_PreU/1000值不确定,该怎样对应上PWM呢” 这个话,我就莫名其妙的想笑,这都快七月了,你还在说胡话,睡得挺深的啊。




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2