rex686568

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

昨天晚上进行四轮全向机器人的电机调试实验,  出现了电机疯转的情况,  在此总结一下排除电机问题的基本步骤.

我们可以从机械到硬件再到软件, 理清思路:

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;

}


posted on 2015-02-01 12:02  rex686568  阅读(365)  评论(0编辑  收藏  举报