|
本帖最后由 ilovepp 于 2012-8-1 17:14 编辑
方案所需的硬件:双轮驱动+万向轮的小车一辆,电子罗盘一个,光电计数器一对(只在实验测试中用,最终的小车上不需要)
1.控制方案的需求:
该控制方案要求对两轮小车的行驶方向进行精确控制,包括灵活的转弯,稳定的直线行走两个核心要求。速度控制上只需要简单的定义几级速度即可,不需对其进行精确控制。
2.电机控制
由于对小车行驶的控制最终落实在对电机的控制上,因此电机的控制策略至关重要。而对电机特性的掌握是制定电机控制策略的前提。这里所谓电机的特性是指,电机的输出与控制信号PWM的占空比之间的关系。为了探索这个关系我设计了下面的实验:
实验一:直流电机特性实验
实验目的:探索车轮的转速与PWM占空比之间的关系
实验步骤:
1.给小车的左右轮各安装一个光电测速码盘
2.让小车的左右轮以相同的PWM占空比行驶一段时间,记录下该段时间内左右光电码盘的计数值,然后增加PWM的占空比重复该步骤记录多组计数值
3.将采集到的数据用matlab描点作图
实验结果:如实验一结果图所示
图注:横轴为占空比乘以3600,纵轴为圈速乘以20;蓝色为左轮的数据,红色为右轮的数据
由实验一结果中可得出以下结论:
1.车轮转速与PWM占空比在图中的范围内满足简单的线性关系。
2.将左轮直线向右平移200个单位后将与右路直线重合
因此直流电机的控制策略是让左轮的PWM占空比时刻比右轮的PWM占空比多200来,
即可保证两轮的转速大致相同。同时,当左右电机增加或减少相同的PWM值时,左右轮增加或减少的速度相同。
3.反馈输入
得到直流电机的控制策略后,仍然不能实现对小车行驶方向的精确控制,因为小车在行驶过程中很容易受到环境的干扰从而偏离航向,所以必须引入闭环机制。闭环系统中的反馈值为罗盘测出来的航向。测量航向使用的是HMC5883这款芯片, HMC5883是一个三轴磁传感器,能够测出相互正交的三个轴上的磁场强度。由于小车只在平面上运动故只需要使用x和y两个轴。 但是x轴传感器和y轴传感器的零点以及对磁场的灵敏度不同,必须要对读到的值进行校正后才能使用。因为每个轴传感器都是线性的,所以当地磁感应线在水平面上的分量与传感器x轴的交角为 时有:
可见从传感器读到的点(x,y)理论上应落在一个中心在(X,Y),半长轴半短轴分别为a或b的椭圆上。因此只要根据测出来的一系列的点拟合出椭圆,然后便可由 求出 来。为此我设计了如下试验:
实验二:罗盘校准
实验目的:得到校准参数X,Y,a,b
实验步骤:
(1) 将罗盘固定在小车上(注意远离车电机,铁片)
(2) 用手将小车每次旋转一个小角度直至旋转一周,并记录下大约一百多对的测量值
(3) 利用matlab将这些点拟合成椭圆,并得到该椭圆的中心(X,Y),半长短轴a,b
实验结果:如实验二结果图1
成功拟合出一个椭圆来,它的参数是X=168 Y=-268 a= 304 b=314
结果验证:
使用上述参数进行校准,将小车放在垂直的的四个方向上,传感器给出的角度如实验二结果图2所示:
由图可知测量误差在5度以内。满足系统的要求。
3.PID控制
在完成了电机控制和反馈输入两个课题的研究后,就可以对航向进行PID控制了。在该PID控制器中,设定值为给定的航向,反馈值为罗盘测量得到的航向,输出值为左右电机PWM占空比之差。
1.算法
采用的是增量式数字PID算法,算法的核心代码为:
LastOutput = pPID->LastOutput+
pPID->Proportion * (Error-pPID->LastError) +
pPID->Integral * Error +
pPID->Derivative * (Error-2*pPID->LastError+pPID->PrevError);
从式子可以看出:
(1).第二行为比例项贡献的增量,该增量与本次误差与上次误差的差值有关
(2).第三行为积分项贡献的增量,该增量与本次的误差有关,在每次测量后得到了积累,因此可用作消除静态误差用
(3).第四行为微分项贡献的增量,该增量与误差变化的趋势有关,该项其实是一段弧线对应弦的中点与该弧中点的轴坐标只差,因此当弧线向下凸时该项为正将曲线向上拉,而当弧线向上凸时该项为负将曲线向下拉,这样可以减小曲线的震荡幅度
2.参数整定
PID参数的整定的目的是让小车能够更好的转弯以及直线行驶。衡量参数好坏的标准如下:
1.“快”,即从开始转弯到转弯完成的用时越短越好
2.“准”,即实际转弯角度与指定转弯角度越接近越好
3.“稳”,即转弯完成后以及直线行走时左右摇晃越小越好
为了能够将以上指标可视化,从而得到合适的PID参数,我设计了如下实验:
实验三:小车PID控制实验
实验目的:找到能够实现“快”“准”“稳”的P,I,D参数
实验步骤:
(1)令I=D=P=0,设定行驶方向为85度(实验楼走廊的向东方向)
(2)P=P+2
(3)将小车朝向实验室走廊向西的方向上启动,小车将做180度转弯的动作,小车在行驶中每隔40毫秒记录下当前角度,采集到400个点后小车停止
(4)从小车上读取采集到的点,用matlab绘制曲线进行观察,如果对曲线满意就跳转回到第二步继续增大比例项系数,直至系统出现不稳定或严重的震荡。
实验发现随着P的增加,曲线走势越来越好,但是当P>15时,系统出现不稳定现象。因此取P=12,其对应的曲线如实验结果图中的蓝色曲线所示。由图可知蓝色曲线代表的过程的静态误差很小,因此PID系统的积分作用可以省去,即I=0;下面只需要调节微分项系数D。继续做实验。
(5)令D=100,D=300,D=500,分别使用步骤(3)的办法采集数据并绘图。如实验结果图所示,绿色曲线对应的D=100,红色对应的D=300,品红色对用D=500;由图可知绿色曲线不够“稳”,品红色曲线虽“稳”但不够“快”,而红色曲线既“稳”又“快”,因此取D=300
实验结果:如实验三结果图所示
图注:横坐标是时间,单位为秒。纵坐标是方向角,单位为度。水平方向上的三条虚线由上到下依次为165度,155度(期望角度),145度
整定后的PID参数为P=12 I=0 D=300,其动态过程如上图中的红线所示,由图还可以看出即使转最大的180度弯,整个转弯动作仅需要大约2秒种时间。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|