从机械到电路教你做智能小车

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

X-SHARK 智能小车V1.0 设计参考手册西安电子科技大学测控技术与仪器教研中心
2006-05-09
1.概述
X-SHARK智能巡线小车模型是一辆完全由PCB拼装的小车。

所有的机械结构和零部件都安装固定在电路板上。

因此完全不需要机械加工,非常适合业余机器人爱好者自制。

本文简述了X-SHARK智能巡线小车的设计思路和实现过程。

包括小车的机械结构、电路、软件、控制算法、调试方法等。

可作为一般的设计参考。

小车的左右后轮分别由2只6V直流减速电机提供动力;前导向轮是一只万向轮。

430单片机的PWM发生器产生2路占空比可变的方波,经三极管扩流后分别驱动后轮左右电机。

控制2路PWM的比例,不仅可以调节小车向前运动的速度,还可通过2路PWM占空比的差异,改变小车运动方向。

10只反射式红外传感器位于小车前方,垂直探测地面的黑线。

由传感器采回的数据求出黑线偏移量,由PID算法计算出转弯量,再计算PWM发出两轮的速度差,控制小车沿轨迹行驶。

小车离意外开黑线时,传感器无数据,还有相应的错误处理和寻线程序。

2.机械结构
2.1 后轮(驱动轮)
两块2mm厚的PCB板通过2支沉头螺栓定为一体,构成了后轮的主体。

用小锉刀沿两板夹缝,挫一道V型槽,上一条O型橡胶圈,就构成一只轮胎。

后轮的固定采用过盈配合。

轮的中心孔为2.8mm,比电机轴略小0.2mm。

PCB板挖空2个圆孔,并用狭缝和中心孔贯通,构成一个有弹性的“卡缝”。

将电机轴用力推入轮中心孔,PCB由于弹性形变会略微扩张,弹力将轴紧紧抱死。

改进:现在的缺点是O型圈容易脱落,可用704硅橡胶固定。

另外为了固定O型圈,需要用挫加工V型槽。

可改为3块PCB构成轮子,中间一块半径略小2mm。

2.2 前轮(导向轮)
前轮是决定小车能否灵活拐弯的关键部分。

这辆小车和汽车不同,不是靠前轮摆舵控制转弯,而是靠左右后轮速度差来实现转弯控制。

这样前轮实际上是从动轮。

下图中,当左轮速度高于右轮时,小车右转弯;前轮的速度可以分解为前进的速度和水平侧移的速度。

普通定轴前轮只能垂直方向前进,水平方向是无法左右滑动的。

因此小车不可能实现拐弯(实际的结果是:因为前轮不能活动,右轮也成了从动轮,两轮速度一样,直线前进)。

所以前轮一定要能够侧滑,并能转向。

最简单的方法是使用万向轮。

一般机械上使用的万向轮非常笨重,实验效果很不理想。

这里我们设计了一种简易的万向轮:用一根镀锌铁丝弯成半圆形作为支架,穿一小轮。

当小车右转弯时,小轮相对于支架左滑动(其实是小轮因为地面摩擦而不动,支架右滑),转弯角也随之改变;小轮还会根据转弯量自动地调整到合适的角度。

这种结构小轮是自由的,只要有轻微的力,就能使小轮滑动,转向非常灵活。

2.3 电机
小车的动力采用直流减速电机直接驱动,省去了齿轮组、传动部件等复杂的机械结构。

这里选择了6V/300rpm的电机,速度和力矩都比较适中。

电机的安装采用焊接。

电机背面2个电源端子用粗铜丝焊在电路板上,克服电机自由转动。

电路板上刻有一比电机略长的槽口,卡住电机,用拉紧的铜丝焊在电路板将电机固定,克服前后运动。

改进:减速电机成本高,且300rpm以上的电机需12V供电,不方便。

竞速车可改为
录音机的磁带驱动电机(约3000rpm,车轮要减小)。

2.4 传感器
传感器选用反射式红外传感器ST188,它的最佳探测距离为4-12mm。

因此需要调整传感器离路面的高度8mm左右。

传感器引脚很细,容易晃动,需要穿过一块支撑板以增加强度;同时还可以通过铜柱的高度或增加垫片来细调传感器离地面的距离。

3.硬件电路
3.1 电机驱动电路
左右轮电机由2只三极管S9013控制。

当PWM_L为高时,Q6导通,左轮电机MG1通电,当PWM_L为低时,Q6截止,MG1失电。

控制PWM_L信号高低电平的时间比,就可以控制MG1的转速。

同样的方法控制右轮,利用左右轮速度差还可以转向。

二极管是为了防止电机线圈电感突然断开时,产生的高压击穿三极管。

102电容吸收电机电刷火花产生的干扰,防止其干扰其他电子设备。

3.2 传感器电路
传感器采用反射式红外传感器,来读取黑线位置。

为了提高控制精度,要求传感器排列紧密,越近越好。

但传感器排列紧密,传感器发射管的光线可能会从地面反射进入临近传感器的接收管。

为消除传感器之间互相干扰,传感器分5组,由P_SEN1~P_SEN5 这5根IO口控制传感器的电源。

下图是传感器电路的一部分。

传感器采取脉冲扫描式读。

例如某时刻P_SEN1高电平,其余P_SEN2~5低,这样1、6号传感器的红外发射管亮,其余传感器不发射红外线。

等待数据稳定后,读取1、6号传感器的数据。

然后关闭1、6号传感器,打开2、7号传感器电源,依次类推,读取10个传感器的数据。

这样可以保证任何时刻都不会有临近的传感器同时工作。

从而保证了相邻传感器之间不会互相干扰。

同时,红外发射管是除了电机之外耗电最大的器件,脉冲工作方式可以大大减少耗电量。

改进:目前的方法还不能消除环境光的干扰。

消除环境光有几种办法:一是用遮光罩;二是减低接收管灵敏度、加大红外脉冲强度,使得发射光强远高于环境光。

三是用AD来读取接收管的输出电压值,在红外不发射时读一次,发射时读一次,两次相减求差值作为判断依据,这样可以几乎完全消除环境光的影响。

3.3 红外数据传输电路
为了实时监测小车的运行状态,需要将小车的数据传到电脑或其他检测设备上。

本车设计了红外数据传输电路,可以在15米范围内接收小车的运行数据。

红外数据传输的原理非常简单:我们知道,单片机的串口通过电平转换后,可以直接和PC机通讯。

如果将串口数据(高低电平)调制到红外光上,就能对外发射。

那么在接收端,将光信号转换回高低电平信号,再转成232电平,就能和PC机通信。

为了达到一定距离的传输,还需要将红外线调制到一定频率上,这里选择了遥控器的调制频率(38KHz)。

发射电路图如下,MTXD脚为单片机的串口(UART)输出脚TXD,它控制一片555振
荡器的使能脚(4脚)。

当MTXD为高时,Q8导通,555的4脚低电平,不工作。

3脚一直高,红外发射管不亮。

当MTXD为低时,Q8截止,555的4脚高电平,震荡器工作。

3脚输出38KHz方波,红外发射管发射38KHz的红外光。

在接收端,为了恢复原始信号,需要对38KHz红外光进行接受、放大、解调、整形、等处理。

这里我们利用了电视机的一体化红外遥控接收头作为解调器件。

它专门处理并解调遥控器发出的38KHz红外光信号。

红外接收头的功能是在感应到38KHz红外光时,输出低电平,反之输出高电平。

那么当串口发1时,没有光发出,接收头输出1,当串口发0时,555驱动红外发射管发出38KHz 光,被接收头感应到,输出1。

这样就恢复了和串口完全一致的原始数据,再经过TTL/232电平转换,被计算机串口接收。

改进:受到调制方式和解调器件的限制,38KHz的调制下,最大只能实现2400bps的波特率。

增加调制频率到100KHz,并且自制解调电路(比如NE567做解调)。

预计可以实现9600bps的波特率。

3.4 处理器电路
小车采用一片MSP430F123作为控制器。

它具有2路PWM控制器和串口。

并且刚好用完全部22个IO口,其中:传感器输入10个IO口、传感器控制5个IO口、电机控制2个IO口、红外数传1个IO口、JTAG占用4个IO口。

系统采用32KHz晶振作为定时采样用,主时钟用800K左右的DCO。

另外留有JTAG口可以现场编程。

4.控制算法与软件
4.1 黑线位置判别
地面的黑线是导引线,位置读取和计算的准确度、稳定性将直接影响小车的控制和运行。

下图是实际运行中出现的情况,黑块表示感应到黑线的传感器。

传感器的排布较密,可能1~2个传感器都能踩到黑线;转弯处车身倾斜甚至3~4个传感器都能踩到黑线。

应该求黑线的中心位置作为结果。

计算的方法是从左数,找到第一个黑色传感器编i,再从右数,找到第一个黑色传感器编j。

(i+j)/2就是黑线中心位置。

改进:如果传感器读回这些数据,该如何处理?
4.2 转弯控制
前文已述,只要改变左右两轮的速度比,即可控制小车的转弯方向。

软件上占空比可设置为0~100.0%,分别对应到寄存器数据的0~1000。

按右图控制左右轮PWM寄存器的值,即可控制转向。

改进:这种方法的速度控制是开环的。

占空比和实际速度、实际转弯角之间并是很不严格的线性。

加上电机的差异、负重的不同、电池电量的差别、轮胎大小的差别都会造成速度的差异。

虽然下一节的巡线算法可以将这些误差都包进反馈环而得以校正,但会造成控制性能的下降。

车轮上可以安装反射辐条,或者打孔,用红外传感器计算脉冲频率而测量速度,并做
速度反馈,将轮速严格保持在指令给定的速度上,控制性能会有明显提高。

4.2 巡线算法
小车是一个非常典型的惯性系统。

对于这一类被控对象,PID算法能简单有效的进行控制。

对PID算法做个简单的说明:
假设小车中心线在黑线中心线上,偏差为0,小车正常行驶。

如果某时刻检测到黑线偏左,就要向左转弯;如果检测到黑线偏右,就要向右转。

偏得越多,就要向黑线方向打越大的舵角。

这就是比例控制(P)
遗憾的是,这种方法并不能将小车稳定在线上,因为小车有惯性。

假设黑线偏左,说明小车偏右了,需要左传舵,等到小车回到中心的时候,停止转舵,可是小车的惯性会使车身继续左转,直到冲过黑线,黑线又偏右。

然后控制过程反复,车身是在左右摇摆中向前行走的。

这种摇摆叫做“超调”,超调越大,控制越不稳定,容易出轨。

为了克服惯性,最简单的办法是任何控制动作都提前一点。

适当调整提前量可以抵消惯性;另外,即使偏移量相同的情况下,在不同半径的弯道,也需要不同的舵角。

这些都是比例控制不能实现的。

我们除了位置信息之外,还需要知道轨迹的变化趋势。

为了实现提前控制,在时间上,除非延长传感器,否则没有办法提前获知转弯。

那么我们只能在控制量上想办法。

一个函数的导数,反映了该函数的变化趋势。

同样我们可以用黑线位置的微分值来提前得到变化趋势。

用本次位置减去前次位置求出差值,就大致知道偏移量的变化趋势。

将该差值和比例相加后一起作为控制量,即可实现提前控制。

这就叫做比例微分控制(PD控制)
下图是小车的控制系统框图:
传感器位置求出后,减去中心值,得到和中心的偏差量。

该偏差量乘以比例系数得到比例控制量。

并且计算相邻若干次偏差量之间的差值,乘以微分系数,得到微分控制量。

将比例控制量和微分控制量相加,作为最终的舵角控制量。

积分控制在此系统中没有使用,原因是躲角到位置之间本身就是积分关系的,另外积分控制有相当大的滞后,对控制稳定性不利。

4.3 搜线算法
当小车因小车因惯性、超调、控制失败、环境干扰、黑线中断、等原因冲出黑线后,需要启用错误处理算法,从新搜寻黑线。

这里用了一个最简单的方法:当判断传感器没有读到黑线位置时,不运算也不输出,这样小车会保持冲出黑线前最后一刻的姿态,继续前进。

如果黑线中断或被遮挡,小车会沿原定路线走,如果小车因为超调、惯性拐出跑道,会继续满舵转圈寻找黑线。

这种方法简单,但很多情况下会找不到跑道。

是一个值得改进的地方。

同学们可以发挥想象,在实验中不断改进错误处理算法,使小车能应付各种突发情况。

例如若干秒满舵转圈仍找不到黑线,就放大转圈半径,等。

5.调试与测试
5.1 比例、微分系数的调整
小车巡迹性能由P 、D两个系数决定。

对于不同质量、不同速度、不同电机、不同传感器排布、不同采样速度的小车,以及不同最小转弯半径的跑道,都要仔细调整这几个参数。

调整的方法请参考《自控原理》和《过程控制》、《计算机控制》中关于PID参数整定方法。

需要同学们非常有耐心的反复调整和摸索,才能将小车性能调到最佳。

5.2 行驶测试
1.直线跑道测试:看小车能否沿直线稳定的前进,左右摆动越小越好,若摆动过大,
判断是超调还是欠调,改变对应的PD系数。

另外可以轻轻敲击小车,使之偏离中心,看恢复稳定时间。

2.初始位置测试:将小车不同角度放在跑道上,开始运行,看稳定时间。

3.圆形跑道测试。

实验单方向拐弯性能,看弯道是否平稳、均匀。

否则调整微分系数
4.8字跑道测试。

实验双向拐弯性能。

并且可以测试90度交叉干扰
5.直角弯测试。

试验严重超调后,稳定时间。

6.倒弯测试。

小与90度弯,试验极限情况下寻线性能。

7.随机跑道测试。

8.残缺跑道测试。

用白纸遮挡跑道一部分,测试搜线性能
9.带干扰跑道测试。

跑道有岔道、双线、断线等,测试抗干扰性能
10.。

相关文档
最新文档