1、引言
智能小车是一个集自动控制、环境监测、无线遥控等多功能于一体的综合系统,人们习惯称其为移动轮式机器人,目前以单片机为核心的移动机器人还存在处理数据局限、控制不稳定等不足之处,国内市场暂时还没有出现具有真正意义的跟随性智能载物小车。本设计基于单片机的智能小车测距模块、红外遥控模块和小车智能控制模块,通过软硬件设计调试,实现了小车的自动跟随状态。主要利用超声波测距模块实现小车与目标之间距离的实时检测,当两者距离较近小车就“缓慢跟随”,一旦测得距离较远,小车将“加快脚步”,直到追上目标,并且小车可以跟随目标一起转弯,不会“跟丢”。
2、硬件设计
2.1、系统总体设计
为实现小车智能跟随,采用了超声波测距、电机驱动、红外遥控等功能模块设计。通过超声波所测距离,判断小车快速前进,慢速前进或停止。小车以STM32为主控芯片,将2个超声波测距模块测得的距离值经过运算后,输出两路PWM(PuLSEWIDTHMODuLATION)波分别控制左右2个电机的转速。电源给控制部分和电机驱动部分供电。另外STM32连接了LCD显示模块和红外接收电路,分别用于显示运动、状态信息和接收遥控器的控制信号。系统总体设计如图1所示。
图1 系统总体
2.2、超声波测距模块
超声波是指频率高于20KHz的声波,超声波在介质中传播时遇到不同的界面将产生反射、绕射、折射等原理在各行各业得到广泛应用。本设计所使用的测距模块为HC-SR04超声波模块,该模块测量范围为3~400CM,精度最高可达3MM,由超声波发射探头、控制电路和驱动电路组成。模块对外引出4个引脚分别为VCC、GND、TRIG和ECHO。测距需要IO口触发,即先给控制端TRIG至少10μS的高电平信号,模块将自动发送8个40KHz的方波并自动检测ECHO端是否有返回信号,若有返回信号则高电平持续时间即为超声波在空气中传播的时间。由此可得:测试距离=(高电平时间×声速)/2。因此将模块的VCC、GND接入系统电源,TRIG、ECHO端接单片机普通IO口即可实现超声波测距。
2.3、电机驱动模块
小车通过一个L298N电机驱动模块驱动左右电机控制小车的运动。电机采用PWM调速,即改变直流电机电枢电压的的占空比来改变平均电压,从而实现直流电机调速。除了2个电机对应的PWM信号调速之外,该模块还需要4路逻辑输入控制电机M1、M2转向,模块连接如图2所示。因此将PWM信号输入端接入单片机定时器输出,逻辑输入端接单片机配置为输出模式的IO口即可实现对该模块的控制。
图2 电机驱动模块连接
2.4、红外遥控
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强、信息传输可靠、功耗低、成本低、易实现等显著优点。本设计使用的是NEC编码方式的遥控器,红外接收选择HS0038红外遥控器接收头,接收头有3个引脚分别为VCC、GND和DATA。VCC、GND分别接系统的正、负极,DATA接入单片机定时器的一路输入捕获通道即可对红外遥控信号进行解码。
2.5、LCD显示
选择LCD12864作为显示模块。该显示屏支持中、英文字符显示,显示信息量大并且支持串行通信,控制十分方便。由于STM32主频高达72MHz,故在本设计中选择串行控制LCD12864,在满足速度要求的条件下节省了IO口。除了将电源引脚、背光引脚接入系统电源并将PSB引脚接地之外,用单片机的3个IO口操作CS、SID、SCLK3个引脚便可实现对该显示模块的控制。
3、软件设计
3.1、主程序设计
上电后先进行系统初始化,包括时钟配置、延时函数初始化以及调试程序时所需串口的初始化。然后进行定时器的初始化,本系统中定时器分别用于PWM信号的产生、超声波测距判断高电平时间和输入捕获实现红外解码,故需要启用3个定时器并进行相关配置。在进行LCD12864初始化和红外接收初始化之后就进入WHILE(1)循环,判断当前模式,若为自动跟随模式,就对2个超声波测距模块测得的距离数据进行比例控制计算,并根据输出量控制左右2个电机转速;若为遥控模式,就根据红外解码得到的遥控器键值控制小车的运动。主程序流程如图3所示。
图3 主程序流程
3.2、测距程序设计
实现测距,要先给超声波模块TRIG端10μS以上的脉冲,模块将自动发送超声波并接收返回信号,测量高电平时间即可通过计算得到距离值。程序的关键是高电平时间测量,本设计将STM32接ECHO的IO口配置为外部中断IO,上升沿触发中断后立即打开定时器,直到判断ECHO为低电平时关闭定时器,此时定时器计数寄存器的值便可以转换为高电平时间,进而得到距离。
3.3、红外遥控和小车运动控制
本设计使用的遥控器是NEC编码方式。对于NEC码,在接收头收到的信号逻辑1应该是560μS低加1680μS高,逻辑0应该是560μS低加560μS高。NEC遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。根据NEC协议内容可以用定时器的输入捕获模式完成红外解码,同时扫描解码结果,得到键值。实际测得本设计所用到的按键键值如表1所示。
表1 键值
小车左右侧分别有一个驱动轮,利用电机驱动模块可以实现电机的正反转以及速度调节,2个电机配合即可实现小车各个方向的运动。小车右转的程序如下:
VOIDMOVE_RIGHT(VOID)
{
IN1=1;
IN2=0;//IN1、IN2对应左电机,10正转
IN3=0;
IN4=1;//IN3、IN4对应右电机,01反转
PWM_LEfT(50);
PWM_RIGHT(50);
}
这段程序对L298N模块的4路逻辑输入进行了配置并分别用占空比为50%的PWM信号控制左右电机。左电机正转、右电机反转体现在小车上就是小车原地向右旋转。同理编写MOVE_LEfT()、MOVE_fORWARD()、MOVE_BACKWARD()等几个函数供外部调用。
3.4、比例控制程序设计
当一个机器人被设计用来自动维持某一数值,如距离、压力等,它一般都包含一个控制系统。在本设计中该系统由传感器和电机组成,可以通过处理器编程对传感器的输入做出决定,从而控制输出。对小车采用闭环控制中最常用的比例控制算法来维持其与目标物体之间的距离,比例控制框图如图4所示。
图4 比例控制
以上控制环路将不断调整电机转速使实测距离趋近目标距离,对左右电机用同样的控制环路分别控制,将使小车能跟随目标物转弯、旋转,提高系统可靠性。程序设计如下:
GET_DISTANCE();//测距
DuTyCyCLE_LEfT=(SETDISTANCE-LEfTDISTANCE)*
KP+CENTER;//左侧运算
DuTyCyCLE_RIGHT=(SETDISTANCE-RIGHTDISTANCE)*
KP+CENTER;//右侧运算
PWM_LEfT(DuTyCyCLE_LEfT);
PWM_RIGHT(DuTyCyCLE_RIGHT);//更新PWM信号占
空比
……
4、系统测试
在环境温度一定的室内对小车的跟随性能进行测试,分别在不同跟随距离下观察小车是否能准确跟随,并测量响应时间。系统测试结果如表2所示。
表2系统测试
5、结论
以STM32为控制芯片,设计并制作了一种可遥控智能跟随小车。经测试,在空旷地该小车可自动360°跟随目标物体,系统响应快,保持距离准确,同时小车可以由遥控器一键切换为遥控模式,使设计更为人性化。该小车成可实现多辆跟随,可应用于简单的工厂搬运或者超市、家居等生活场合。
相关文章