从机械到电路教你做智能小车
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.。