根据目标金属物的非接触式探测定位和移动的具体要求,设计实现了一种自动循迹小车。小车的轨迹如图 1所示,轨迹由0.6~0.9 mm细铁丝标识,同时在轨道上随机出现4枚硬币,要求小车能够沿铁丝跑道准确前进并检测出硬币[1]。
|
图 1 小车行走路径图 |
为了达到要求,设计采用MSP430F5529单片机作为控制核心、采用LDC1000传感器实现金属的检测,同时结合舵机、直流电机、测速模块、12864液晶显示屏、蜂鸣器等模块实现自动循迹前进、显示、报警等功能[2-4]。系统硬件总体结构框图如图 2所示。
|
图 2 系统硬件框图 |
小车动力部分采用HC02-48型直流电机和PWM控制方式以保证较低的功耗和对车速的精准控制,同时利用舵机带动LDC1000传感器在设定范围内进行平面扫描测量,再通过单片机的SPI接口实现高速数据采集,从而顺利实现小车在设定轨道上的准确运行。
2 理论分析与计算 2.1 PWM调速原理及算法设计采用MSP430F5529作为主控芯片,该芯片自带PWM脉冲输出端口,通过设定使其工作在8位PWM模式下,通过设置输出占空比达到调节电机速度的目的。采用PWM调速,即通过改变平均电压调节转速:
| ${U_d} = \beta {U_S}。$ | (1) |
电机装好后,β是个常数,改变电机电压,可以保持机械特性曲线平行下移,而硬件不改变。通过对单片机编程可控制脉冲的占空比,即可实现电机的调速。当需要拐弯时,单片机产生两个不同占空比的脉冲,由左右速率差来进行拐弯,能实现90°以上的大角度快速拐弯,通过控制转轮的速率和方向确定小车的行进轨道。[5-6]
2.2 最优速度控制算法速度与控制算法可以分为3个部分:直行、直行偏离微调、转弯。
直行速度控制:结合设计要求及小车定性,将左右轮设置同一最大值。根据传感器传回的信号判断,若车体发生偏移,则调用车身调整函数进行微调。
直行偏离微调:若检测到左偏,右侧电机减速; 否则左侧电机减速。
转弯控制:当检测到金属线,并且舵机一直左转时,左轮速度减慢,右轮速度保持不变。当转过一定角度后,直行并循线检测前行,实现左转,右转同理。
2.3 循线检测算法设计循线检测的实施实际上是使用了一种简单的算法进行金属源寻找,即直接使舵机的转角与金属源的位置成比例,在检测金属确定位置时设置13个位置进行扫描巡点,使用金属传感器检测小车是否一直在铁丝轨道上运行。金属源位置扫描定位图如图 3所示。
|
图 3 金属源位置定位 |
金属源的检测采用LDC1000传感器,该传感器是TI公司推出的一款全新的电感数字转换器,利用了电磁感应原理,LDC实际上是一个特殊的ADC,外接一个传感线圈。[7]LDC1000是通过检测等效并联电阻RP来测定金属物体是靠近还是远离线圈,当有金属物体接近线圈时,就会使传感器的数值发生变化,对这一变化进行判断便可得知小车是否在正确的轨道上,同时通过对金属源检测位置的定位检测可以得到当前前进的方向是否偏离,以便纠正。[8]同时当传感器检测为铁丝时,由于铁丝的表面积较小,单片机读出LDC1000采集回来的数据就小;当检测为硬币时,由于硬币的面积比铁丝大多了,所以采集回来的数据将比之前大很多。因此,可通过多次实验人为交互式地设定一个阈值来区分铁丝与硬币。
3 主要电路设计 3.1 LDC1000传感器与单片机的连接本设计采用LDC1000来判断小车是否行走在细铁丝上。LDC1000收集到的数据发送给单片机,单片机经过计算后再判断小车下一步的行走方向。
MSP430F5529与LDC1000的硬件连接如图 4所示。通过SDI、SDO、SCLK 3根数据线互连实现高速数据传送。其中MSP430F5529对LDC1000进行数据读写采用SPI通信,首先将片选信号CSB置低,然后MSP430F5529通过SDI线向LDC1000写入访问寄存器地址,最高位为0表示写入,为1表示读出,剩余7位为寄存器地址。如果为读,SDO线上发送来自其地址寄存器上的8位数据; 如果为写,SDI线接收来自MSP430F5529的8位数据并且将其写入寄存器。
|
图 4 LDC1000与MCU连接图 |
电机驱动采用L298芯片,其内部包含4通道逻辑驱动电路,具有2套H桥电路,可同时控制2个电机,工作电压高,且输出电流可高达2 A,能为电机提供较大的动力,以便提高寻找速度。电机驱动电路如图 5所示。
|
图 5 电机驱动电路 |
单片机外接液晶LCD12864用于显示时间、距离、检测数值等相关参数,在检测到硬币时蜂鸣器发出报警信号。液晶显示及报警电路如图 6所示。
|
图 6 液晶显示及报警电路 |
软件设计首先进行初始化,然后立刻调用显示子函数,进入显示界面将时间、距离、舵机状态等信息显示出来。再根据不同的功能调用不同的函数,核心算法和控制相关的代码放在子程序中。在每个控制周期,读取传感器的反馈值,经过计算后,对直流电机进行控制,从而控制小车的行驶状态,并且将传感器所测的数据及时显示出来。传感器采集到的数据经过MCU的计算用来控制舵机的动作,舵机执行过程中会产生新的传感器测量数值,当前测量数值又作用于小车,从而控制小车转向、直行或后退运动。系统主流程图如图 7所示,小车控制流程图如图 8所示。
|
图 7 系统主流程图 |
|
图 8 小车控制部分程序流程图 |
在小车循迹程序设计中,对LDC1000所检测到的多组数值求其平均值进行处理,并把此均值设定为标准参考值。然后小车开始行进,行进过程中不断检测是否有硬币(使LDC1000一直来回摆动检测),若检测到有硬币则蜂鸣器报警,若没有硬币则继续行驶。行驶过程中依然不断检测,若检测到小车在铁丝上行走,则说明小车状态正常,使其继续保持前行。若检测到小车不在铁丝正上方,则需要立即判断铁丝是处于小车的左边还是右边,从而控制小车的转向。若小车已经彻底检测不到任何信号,说明其已经脱轨,立刻使小车后退,直至能检测到信号为止。
5 测试方案与测试结果小车在赛题要求的标准轨道上进行正常运行测试,每次跑1圈,全程用时记录如表 1所示。
| 表 1 小车全程用时数据记录 |
在赛题要求的标准轨道直线段上随机放置4枚直径约为19 mm的镀镍钢芯硬币,再将小车放在轨道上进行测试,每次跑1圈,测试硬币检测准确度。因现行硬币都以钢芯电镀其他金属方式制作,因此LDC1000传感器可以有效识别镀层特征,从而实现硬币鉴别。有关硬币检测的检测结果如表 2所示。
| 表 2 硬币漏检率和误检率测试 |
通过数次测试与改进,本系统基本完成了设计的要求,通过对记录数据进行分析,可得该小车在直行和转弯过程中基本都能根据细铁丝标识的平面跑道运动,准确度较高,运行速度较快。从调试结果来看,该自动循迹小车已达到了设计要求,后续可通过改进算法、优化程序等方法提高小车的运行速度和测量值的准确度。
| [1] | 2016年TI杯大学生电子设计竞赛题C-自动循迹小车[DB/OL]. (2016-07-25)[2017-01-05]. http://nuedc.xidian.edu.cn/uploads/soft/160725/2-160H50J503.zip. |
| [2] | 郭志超, 何爱龙. 自动循迹避障寻光智能小车软件系统设计[J]. 新乡学院学报, 2017(6): 61–63. |
| [3] | 张猛, 丁爱国, 陈欣欢. 基于单片机的智能循迹小车设计[J]. 山东工业技术, 2017(8): 281. |
| [4] | 刘红, 刘康. 基于单片机的自动循迹小车的设计与制作[J]. 电脑知识与技术, 2017(5): 198. |
| [5] | 程丛丛, 田为民, 秦雷. 基于单片机的智能循迹小车[J]. 山东工业技术, 2017(7): 2. |
| [6] | 许文卓, 顾亭, 孙浩谛, 等. 基于红外循迹的火灾报警小车循迹算法研究[J]. 甘肃科技, 2017, 33(4): 11–13. |
| [7] | 谢富珍, 戈林发. 基于51单片机的智能小车设计[J]. 新余学院学报, 2015, 20(4): 6–9. |
| [8] | 万正兵. 基于LDC1000的自动循迹小车的设计[J]. 福建电脑, 2016, 32(10): 111. |
2017, Vol. 32

