飞思卡尔光电组原理图包括:CCD传感器、按键电路、LCD液晶屏显示电路、电源部分、电机驱动、速度检测、控制器等。
见截图:
*********************************************************************************************/
** 电机PWM调速频率为10KHZ。
** 舵机角度控制精确到1.5度是合适的。
** 舵机控制一般采用PD控制。(非线性设计)
*************************************位置型PD控制 ********************************************
位置型PD控制
perror[2]=(width[2]-width[4])/2;
out_p=Kp*perror[2]/20 //计算比例项,20为控制周期
out_d[2]=Kd*(perror[2]-perror[1])/20 //计算微分项
out[2]=out_p+out_d[2]+center_conter; //由于舵机转角受限,所以注意输出量的限制
perror[1]=perror[2]; //保存上次的误差
out_d[1]=out_d[2]; //保存上次微分环节的值
其中Kp是比例系数;out[2]是舵机的调节量;Kd是微分系数;peeror[2]是本次信号采集计算出的误差;perror[1]是上次信号采集计算出的误差;center_conter是舵机的中心位置的计数值。
非线性PD算法
其中out_p为比例项输出;当-20<perror[2]<20时作为死区,不进行调节;当-100<perror[2]<-20或者20<perror[2]<100时,比例系数Kp1=0.5;当perror[2]<-100或者perror[2]>100时,比例系数Kp2=1.33。这样即实现了系统在小偏差时缓慢的调节,也可以保证当遇到弯道,产生较大的偏差时,舵机能够迅速动作。具体的软件实现如下:
if(perror[2]>-20&&perror[2]<20) out_p = 0;
else
{
if(perror[2]>20&&perror[2]<100) out_p = perror[2]/2-10;
if(perror[2]>-100&&perror[2]<-20) out_p = perror[2]/2+10;
if(perror[2]>=100) out_p = perror[2]*4/3-100;
if(perror[2]<=-100) out_p = perror[2]*4/3+100;
}
微分部分的非线性由类似方法实现。
***********************************************PID调节经验************************************
(1) 确定比例系数Kp
确定比例系数Kp 时,首先去掉PID 的积分项和微分项,可以令Ti=0、Td=0,使之成为
纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp 由0 开始逐渐增
大,直至系统出现振荡;再反过来,从此时的比例系数Kp 逐渐减小,直至系统振荡消失。
记录此时的比例系数Kp,设定PID 的比例系数Kp 为当前值的60%~70%。
(2) 确定积分时间常数Ti
比例系数Kp 确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现
振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID 的积分
时间常数Ti 为当前值的150%~180%。
(3) 确定微分时间常数Td
微分时间常数Td 一般不用设定,为0 即可,此时PID 调节转换为PI 调节。如果需要设定,
则与确定Kp 的方法相同,取不振荡时其值的30%。
(4) 系统空载、带载联调
对 PID 参数进行微调,直到满足性能要求。