基于STM32的避障小车设计
2018-01-31李怀宇
李怀宇
【摘 要】基于超声波传感器测距原理和红外传感器避障原理,首先提出控制系统的总体方案,其为:前方遇障碍物,小车减速并判断左侧是否有障碍物,无则左转,有则继续判断右侧是否有障碍物,无则右转,有则制动并后退。之后从硬件设计、软件设计两方面展开,给出了以STM32单片机为核心、使用L298N驱动电机的避障小车系统的设计。设计的意义在于使用简单的传感器进行自动避障,避障方案易于实现且方便移植,其对于开发多功能自动机器人具有借鉴意义,同时它也可以用于智能玩具的开发。
【关键词】STM32;避障小车;超声波传感器;红外传感器;L298N
中图分类号:TP242.3 文献标识码: A 文章编号: 2095-2457(2018)30-0191-003
DOI:10.19694/j.cnki.issn2095-2457.2018.30.084
The Design of Obstacle Avoidance Car Based on STM32
LI Huai-yu
(College of Automation of Harbin Engineering University,Harbin Heilongjiang 150001 China)
【Abstract】Based on the principle of ultrasonic sensor ranging and infrared sensor obstacle avoidance, the overall scheme of the control system is proposed firstly, which is: encountering obstacles ahead, the car slows down and judges whether there are obstacles on the left side, if there is no left turn, if there is still judgement whether there are obstacles on the right side, if there is no right turn, if there is braking and back.Then the design of obstacle avoidance trolley system based on STM32 MCU and driven by L298N motor is given from two aspects of hardware design and software design. The design significance of the system lies in the use of simple sensors for automatic obstacle avoidance. The obstacle avoidance scheme is easy to implement and easy to transplant. It can be used for reference in the development of multi-functional automatic robots. At the same time, it can also be used in the development of intelligent toys.
【Key words】STM32; Obstacle avoidance car; Ultrasonic sensors; Infrared sensor; L298N
0 引言
随着科技的快速发展,很多行业都引入了智能化的设备,汽车行业也不例外。智能汽车可以用于码头无人操作自动运输,也可以在人类无法到达的危险环境中作业,其应用前景十分广阔。避障小车是一种可移动的轮式机器人,可以在无人操纵的情况下自主行走,遇到障礙物可以报警并自动避障。本文设计的避障小车以STM32F103ZET6为主控芯片,以红外光电传感器和超声波传感器为检测元件,以直流减速电机为执行元件,它基本满足了避障对于小车灵活性的要求。
1 控制系统总体方案
避障小车主要由主控模块、驱动模块、检测模块、报警模块、显示模块、电源模块六个主要模块组成,系统结构框图如图1所示。具体工作流程:当位于小车前方的超声波传感器检测到障碍物时,将障碍物的距离信号发送至单片机,单片机会对信号进行处理,通过LCD屏幕显示出来,之后对距离信号进行判断,若距离大于80厘米,则延续之前的运动;若距离在80到60厘米之间,则输出控制信号通过驱动模块使电机转速下降达到减速的目的;若距离在60厘米以内,则先使后轮减速并迅速判断安装在车身两侧的红外避障传感器是否检测到障碍物,如果两侧都无障碍物,单片机发出控制信号使前轮左转;如果左侧有障碍物,前轮右转;如果两侧都检测到障碍物,单片机发出控制信号使小车制动并后退。当转向绕开前方障碍物后,即超声波检测出前方80厘米内都没有障碍物时,前轮摆正。在小车运行过程中,若超声波传感器检测到车头与前方障碍物的距离低于20厘米时,后轮会紧急制动并后退同时拉响警报[1]。
2 系统硬件设计
2.1 车体框架
避障小车为前两轮利用直流电机转向,后两轮利用直流电机驱动的四轮结构。前轮的转向同样可以利用舵机来实现,不过本车使用的电机驱动模块L298N自带两路控制通道,因此为了防止有用资源的浪费和避免引入更多模块带来的软件设计问题,我们仍利用直流电机来实现前轮的转向功能。四轮车架结构简单稳定,足以承受上层各模块的重量。上层模块的重量主要集中在电源模块和连接了LCD屏幕的STM32主控板上,应注意将这两部分安装在小车四轮的中心靠后两轮的中线上,以防重心的偏移导致前轮转向用直流电机出现零位误差,即直流电机在没有控制指令的情况下发生偏转,改变了小车原有的路径。
2.2 主控模块
主控模块的核心是一块STM32F103ZET6芯片,该芯片是意法半导体公司推出的基于Cortex-M3内核的32位ARM微控制器。芯片具有2个基本定时器、4個通用定时器、2个高级定时器以及112个通用IO口,时钟频率达到72MHz,各种参数足以满足小车运行对主控芯片的要求,且其价格低廉,开发成本低,因此我们选择了该款芯片。
2.3 电机驱动模块
2.3.1 驱动原理
驱动模块使用的驱动芯片为L298N双H桥直流电机驱动芯片,驱动电路原理图如图3所示。L298N为SGS公司生产的专门用于驱动二相和四相电机的驱动器。它拥有四通道逻辑电路,内含两个H桥高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号。其上的四个端子IN1、IN2、IN3、IN4可以通过输入高低电平来控制电机A和电机B的正反转,具体组合方式如表1所示。端子ENA和ENB是使能端,可以接收来自单片机的PWM波进行调速。当使能信号为0时,电机处于自由停止状态;当使能信号为1时,配置IN所接单片机的相应引脚才可以使电机处于正转、反转、制动状态[2]。
2.3.2 驱动方式的选择
后轮电机的作用是驱动车辆,通过配置IN1和IN2来控制其运动状态,小车的运动过程需要加速和减速,因此还需对ENA引脚输入PWM波进行调速操作。前轮电机的作用是转向,电机的运动几乎是瞬间完成的,因此不需要对电极进行调速操作,仅使能ENB再对IN3和IN4进行高低电平配置即可。
2.3.3 注意事项
主控板应和L298N共地,否则高低电平的判断无法实现,即使线路连接和程序没有问题,电机也不会正常运转。
2.4 超声波测距模块
超声波模块固定在小车的正前方,用来检测正前方的障碍物。在这里笔者选用的型号是US-100,其测距范围为2cm-450cm,自带温度传感器可以自动对测试结果进行校正,具有电平输出和UART输出两种输出方式,小车使用的是电平输出。该模块具有五个端子,1号端子接VCC电源;4号和5号端子接外部电路的地;2号端子为Trig端;3号端子为Echo端。需要测距时,单片机会从Trig管脚输入一个10微秒以上的高电平,系统会发出8个40KHz的超声波脉冲,然后检测回波信号,经过温度校正后,将结果通过Echo管脚输出[3]。
2.5 红外避障模块
红外避障模块固定在小车的两侧,一侧使用一个,用来判断左右两侧是否有障碍物。当前方出现障碍物时,红外传感器的信号线中的电平由高置低,通过读取与信号线连接的单片机上的相应IO口的低电平即可判断出出现障碍物[4]。市面上的大部分红外传感器对外界的光干扰比较敏感,鉴于小车可能会在强光中运行,因此选择型号为HJ-IR2的红外传感器。其主要优点是抗光干扰能力强,检测距离为2cm-30cm。
2.6 蜂鸣器电路
单片机的IO口驱动能力不足以使蜂鸣器发声,因此我们通过三极管放大驱动电流来使其发声。当单片机输出高电平时,三极管导通,集电极电流通过蜂鸣器使之发出声音。
2.7 电源模块
本次设计中使用的是两节3.7伏可充电电池串联供电,供电电压为7.4伏,直接给L298N供电。另引出一路电源通过降压模块降压至5伏给主控板供电,降压模块上有数码管可以实时监测电源电压,当电压不足时需要及时充电[5]。主控板上自带ASM1117芯片,可以将5伏电压转换为3.3伏。
2.8 LCD显示模块
本次设计中为了使调试工作比较方便,特意加入了LCD显示模块来显示超声波所测距离。LCD屏幕连接在主控板上。
3 系统软件设计
在本次设计中笔者使用C语言进行编程,在编程过程中使用了模块化设计,方便移植。编译软件使用的是KeilμVision5,该款软件拥有功能强大的仿真调试器,便于检查错误。
3.1 主程序
先引用头文件,之后对各项定义的函数进行初始化,输出占空比为零的PWM波控制后轮进行启动,对超声波发送持续10微秒以上的高电平使它开始检测。若前方障碍物距离低于80厘米,将具体距离值显示在LCD屏幕上,并进一步判断:如果距离在60厘米到80厘米之间,输出一定占空比的PWM波使小车减速;如果距离在20厘米到60厘米之间,先减速再判断左侧红外传感器的信号结果,若为高电平即无障碍物则左转,转弯过程中每200微秒检测一次前方障碍物距离,当前方障碍物距离大于80厘米时前轮摆正;若为低电平则继续判断右侧是否有障碍物,无则右转,有则通过改变电机驱动IN1和IN2的配置使小车后退,延时一秒后重新判断障碍物距离;如果距离在20厘米以内,则使能相应IO口使蜂鸣器发声并使小车后退,延时一秒后重新判断障碍物距离。主程序流程图如图7所示。
图7 主程序流程图
3.2 定时器程序
STM32的通用定时器既可以用于测量输入信号的脉冲长度即输入捕获,也可以用于产生输出波形即输出比较和PWM波。STM32的通用定时器之间不会互相干涉,都是完全独立的。
3.2.1 输入捕获
超声波的信号回传使用了输入捕获。其信号线与单片机相连,配置单片机的相应引脚为输入捕获,先使用上升沿捕获来检测信号,记录发生上升沿的定时器的值,之后配置该引脚为下降沿捕获,当捕获到下降沿时再记录一次定时器的值,两值相减便是高电平脉宽。当然如果脉宽过长,没检测到下降沿时定时器已经溢出,则还需要额外对定时器溢出的次数进行计数才可以得到准确的高电平脉宽[6]。当测出脉宽为t时,将t乘以声速(带温度补偿的US-100传感器声速直接使用340m/s)再除以2(所测时间t为超声波被发出碰到障碍物再弹回被接收的总时长)即为所测距离。
3.2.2 输出PWM波
对后轮电机的速度调节使用的是PWM波,通过调节PWM波的占空比改变电机通断电时间从而达到调速的目的[6]。
4 结束语
本文简述了以STM32单片机为核心的避障小车系统的设计,包含了电机驱动模块、超声波模块、红外模块等。本系统的设计意义在于使用简单的传感器进行自动避障,避障方案易于实现且方便移植,其对于开发多功能自动机器人具有借鉴意义,同时它也可以被用于智能玩具的开发。预留的LCD屏幕可以显示小车更多的状态,方便开发者对小车功能的进一步开发,比如给小车安装无线手柄进行人为遥控,并使用无线模块将小车状态通过单片机之间的通信显示在另一单片机的LCD屏幕上。
【参考文献】
[1]嵇萍.基于单片机的自动避障小车设计[J].苏州市职业大学学报,2013, (1):33-35.
[2]冷雪锋.基于PID的STM32智能小车机器人的设计[J].自动化技术与应用,2016,第35卷(11):122-127.
[3]马巧梅.基于51单片机的汽车预警系统的设计与实现*[J].自动化技术与应用, 2017,第36卷(11):121-124.
[4]代德丹,王猛,李怡.智能避障小车[J].电子世界,2017,(20):111-112.
[5]胡海.基于单片机的自适应避障小车的设计[J].微型电脑应用,2017,第33卷(4):45-47.
[6]张洋,刘军.原子教你玩STM32(库函数版)(第二版)[M].北京:北京航空航天大学出版社,2015.