昨天晚上进行四轮全向机器人的电机调试实验, 出现了电机疯转的情况, 在此总结一下排除电机问题的基本步骤.
我们可以从机械到硬件再到软件, 理清思路:
1.电机通过各种东西安在底盘上,
这个比较好检查, 可以最先检查, 很可能电机螺丝松懈了.
2.电机通过码盘线和电源线与电机控制盒相连,
3.电机控制盒与单片机通过TIM PWM波输出口相连, 也连有电源线
这个第二歩检查, 如果电机不动, 不抱死, 或失去控制, 很可能是线短了
4.底层控制方面, 电机控制自下而上有 电流环(电路相关),速度环(与赋的速度相关), 位置环(与电机码盘相关)
这几个人家写好之后, 不乱改是不会错的
5.稳定控制方面, 有PID调节.
这个最后检查: PID 超调, 陀螺仪接触不良, 多个PID调用了同一组Errorpast
6.最上层则是路径规划, 或者手柄.
可能程序烧错了, 手柄接触不良, 目标点算错了
如果快速检查不行, 就要进行单元测试了.
Plus:上次程序明明能用,这次不行, 往往是硬件或者烧错程序.
<p style="margin:0in;font-family:SimSun;font-size:11.0pt"><span lang="zh-CN">//这次是</span><span lang="en-US">PID</span><span lang="zh-CN">出问题了</span></p><p style="margin:0in;font-family:SimSun;font-size:11.0pt"><span lang="en-US">//PID </span><span lang="zh-CN">一定要使用独立的</span><span lang="en-US">ep</span></p> double PID(double Error,struct PID pid) { double A=0; double B=0; double C=0; double delta=0; A = (pid.p*(1+1/pid.i+pid.d)); B = -pid.p*(1+2*pid.d); C = pid.p*pid.d; delta = A*Error + B*pid.ep1 + C*pid.ep2; pid.mend += delta; ///// pid.ep2 = pid.ep1; pid.ep1 = Error; ///// return pid.mend; }