然后根据运动轨迹设计舵机的转动动作,写入程序,可以自主动作,也可以用遥控器之类控制。
其实还有更简单的啊,购买带遥控器的模型套件,直接装到你车上。不过如果是毕业设计或者开发,还是老老实实自己做吧
楼下说的arduino只是一个控制平台,相对简单一些,有一些现成的例程之类的。
180度舵机是一特殊的机器人专用舵机。你所说的0-180度,在专业玩家里不这样说的,而是说成±90度。即顺时针90度,逆时针90度。你可以自己写一个的。这种舵机比较特殊,但是只要满足一下PWM就可以实现了:
1. 周期T=20ms(即50HZ),占空比500us-2500us。
2. 500us舵机逆时针转90度,2500us舵机顺时针转90读。 (其中0度是1500us)
3. 即: TL+TH=20ms 改变TH的值,舵机角度随之改变。参数参照以上1.2点。
TL TH
_____ ____
_________| |_________|| _________|
4. 电路原理很简单,接好电源,地,信号线。
信号线接到单片机或者其他能输出PWM的控制脚。
PWM就不用说了。我给你一段PID的代码:#define AA_KPVALUE 150 #define AA_KIVALUE 100 #define AA_KDVALUE 30
typedef struct PID { sint an_Ref //角度PID,角度设定值 sint an_FeedBack //角度PID,角度反馈值 sint an_PreError //角度PID,前一次,角度误差,,an_Ref - an_FeedBack sint an_PreDerror //角度PID,前一次,角度误差之差,d_error-PreDerror sint an_Kp //角度PID,Ka = Kp sint an_Ki //角度PID,Kb = Kp * ( T / Ti ) sint an_Kd //角度PID, sint an_PreU //舵机控制输出值}PID
PID sPID//申请一个PID类型的变量
void PIDInit(void)//PID初始化 { sPID.an_Ref = 0 sPID.an_FeedBack = 0 sPID.an_PreError = 0 sPID.an_PreDerror = 0 sPID.an_Kp = AA_KPVALUE sPID.an_Ki = AA_KIVALUE sPID.an_Kd = AA_KDVALUE sPID.an_PreU = 0 }
unsigned int PIDCalc( PID *pp )//返回值赋给舵机 { sint error,d_error,dd_error error = pp->an_Ref - pp->an_FeedBack d_error = error - pp->an_PreError dd_error = d_error - pp->an_PreDerror pp->an_PreError = error pp->an_PreDerror = d_error pp->an_PreU +=pp->an_Kp*error+pp->an_Ki*d_error+pp->an_Kd*dd_error return ( pp->an_PreU )}在主函数中初始化PID,将设定值与返回值设置好后,调用unsigned int PIDCalc( PID *pp )把返回值给舵机。
设定值就是你想要让舵机转的角度赋给sPID.an_Ref,返回值就是舵机现在的角度。因为是一个闭环控制系统,需要将角度量化以后的值返回,赋给sPID.an_FeedBack,这个算法会根据设定值与现在所处的角度计算出下一次所偏转的角度,这是一种增量式数字PID的算法。若想修改转的速度就修改宏定义中这三个参数的值,其中AA_KPVALUE影响最大。PID的东西很多,我也只是初窥门径。希望对你有所帮助
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)