倪爽 蔡文杰 张燕 谢鹏飞
摘要:本文主要论述基于STM32的遥控小车,通过红外用NEC编码方式来控制小车,包括遥控模式和循迹模式。运动状态包括控制小车向前、向后、左转、右转、停止、变速(用PWM控制电机转速)运动。循迹模式用来模拟小车运行路径,对AGV小车的设计提供路径支持,需要用到避障模块,在检测到有物体后转向、前进一段距离再次转向,进入另一道路线,直至连续两次检测到前方有物体,小车停止。实验结果表明,小车在一定程度上可以模拟AGV小车的运行路径,搭配遥控模式,更加方便可靠。
关键词:红外控制;移动小车;STM32;AGV
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2021)07-0228-03
Abstract: This paper mainly discusses the remote control trolley based on STM32, which is controlled by NEC coding through infrared, including remote control mode and tracking mode. The motion state includes controlling the car to move forward, backward, turn left, turn right, stop and change speed (motor speed is controlled by PWM). Tracking mode is used to simulate the running path of AGV trolley, which provides path support for the design of AGV trolley. Obstacle avoidance module is needed. After detecting an object, it turns, advances for a certain distance and turns again, and enters another route, until the object in front is detected twice in succession, and the trolley stops. The experimental results show that the trolley can simulate the running path of AGV trolley to a certain extent, which is more convenient and reliable with the remote control mode.
Key words: Infrared Control;Small Car;STM3;AGV
1 引言
随着时代的发展,现在的机器人技术已经满足不了人们的需求,不论是功能型机器人还是搬运机器人,都有着很大的发展空间。本文基于STM32设计一款模拟AGV小车路径规划的程序,给自动导引小车( Automated Guided Vehicle,AGV)的设计提供一定的帮助。
由于红外遥控是一种无线、非接触控制技术,具有抗干扰能力强、信息传输可靠、功耗低、成本低、易实现等显著优点[1]。本文选择红外来和主控芯片交互。通过遥控来观察小车各种运动状态,能够基本实现小车正常循迹。在即将碰到墙壁的时候,避障模块返回信号到对应端口,STM32控制小车转弯,进入下一路段。
关于车辆避障的研究目前较少,如果可以通过机器学习来使得机器人有较高级的自动避障功能,那么实际生活中会发生天翻地覆的变化[2]。
2 整体架构
在控制端通过红外遥控器和STM32进行通信。STM32作为整个系统的核心,分析请求的数据并且控制电机驱动模块的逻辑电压进而控制小车的运动状态。图1为小车的整体架构。
总体来说分为两种运动模式,第一种为遥控,即按下按键,小车进行相应的运动。第二种为自动循迹,根据下载好的路径,小车有了一定的“智能”化,不需要时刻控制小车的运动轨迹。
3 设计框图
本文在硬件上面选用stm32F103RCT6,其优势是体积小,功能齐全。还有红外遥控器、红外接收器、避障模块及L298N驱动模块,电源用充电宝即可。
这里选择PB0、PB1端口控制左电机,PB10、PB11端口控制右电机。PB9作为红外接收端,PB6、PB7分别作为左右端的避障模块来使用。
首先介绍电机驱动模块,如图3。
使用时,电机需要外接工作电压,同时接地端要与开发板共地。用IN1-IN4的逻辑电压分别控制OUT1-OUT4的输出电压,这样便可以控制电机的转动。
用IN1和IN2来控制电机的左轮,当IN1与IN2都为0时,电机处于停止状态。IN1为1,IN2为0时,处于正转。IN1为0,IN2为1处于反转。
红外选用常见的NEC编码方式,由同步碼头,地址码,地址反码,控制码控制反码组成[3]。
逻辑1由560us高电平加1680us低电平构成,逻辑0由560us高电平加560us低电平构成。同步码头由9ms低电平加4.5ms高电平构成。接收端收到的信号与之相反。
红外避障模块在检测到前方有物体的时候,将OUT端口置零,以此来判断是否有障碍。
4软件部分
在主函数中先进行系统初始化,包括延时函数初始化,以及NVIC分组配置、调试程序时所需串口的初始化、外部显示TM1638。然后进行定时器的初始化,本系统用定时器TIM2和定时器TIM3进行电机控制,用定时器TIM4来进行红外输入捕获解码。在红外接收初始化完成之后就进入控制循环,读取红外输入的键值进行匹配,若键值有效,再次进行匹配,如果是遥控模式,STM32识别发射的红外信号,控制小车运动,通过遥控器退出遥控。如果是循迹模式,根据写入到STM32中的代码进行运动。图5为主函数流程图。
具体的按键与键值匹配如表1。在接收到发射端的控制指令后,接收端控制小车做出相应动作。电机采用PWM调速,即改变直流电机电枢电压的占空比来改变平均电压,从而实现直流电机调速[4]。
而小车的运动函数以“前进”为例,前进要求两个轮子同时前进。
void forward(void)
{
//右轮前进
TIM_SetCompare3(TIM2,5000);
TIM_SetCompare4(TIM2,speed); //前进调整数值
//左轮前进
TIM_SetCompare3(TIM3,speed); //调这个
TIM_SetCompare4(TIM3,5000);
}
这里涉及到PWM调速,首先在主函数中设置了定时器TIM3和定时器TIM2的ARR为4999和PSC为71,用函数TIM3_PWM_Init(4999,71)表示;使用TIM_SetCompare3(TIM3,speed)这个函数时将定时器TIM3的通道四比较值设为speed。当speed为0时,对应的通道持续高电平,此时,通道四5000表示对应端口持续低电平,这样小车便全速前进。同样的,后退,转弯只需要改变比较值即可。
图6为循迹模式的路径。
在碰墙后触发中断,先关闭中断,小车左转,前进一个身位再次左转,并且将下一次转弯设置为右转同时打开中断,继续前进。在右转后,将下一次转弯设置为左转,重复上面操作。如果连续触发中断,表明循迹完成,小车停止。
5结论
以STM32为控制芯片制作的遥控小车,其中遥控模式反应灵敏,循迹运动略有不足,对于转弯点的把握不到位,图7为小车成品图。
表2为转弯时间与倾斜角度的关系,小车在转弯后并不是直线。另外小车的负载和万向轮的方向在一定程度也会干扰小车直线行驶。
經过数据分析,由于万向轮的摩擦系数较大,初始万向轮为直线行驶下至转弯完成时间接近二次函数,转90度共需615ms。
该车可粗略模拟出循迹机器人行走路线,加之遥控控制,能够基本完成小车的运动控制,对于AGV的设计提供一些基础性的参考。
参考文献:
[1] 李从宏. 基于功能码的红外遥控软件解码技术[J].单片机与嵌入式系统应用,2010(9):72-73.
[2] 卫静婷, 陈利伟.基于STM32的语言控制和自动避障智能小车的设计[J].电子测试,2018(8).
[3] 聂诗良, 李磊民. 红外遥控信号的一种编码解码方法[J].仪表技术与传感器,2004(8): 28-29.
[4] 兰羽. 基于红外传感器 ST188 的自动循迹小车设计[J].电子设计工程,2013,21(3):64-66.
【通联编辑:王力】