`
rex686568
  • 浏览: 9071 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

机器人,电机控制中排除bug的科学过程

 
阅读更多

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

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

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;

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics