邢东洋
(中国民航大学,天津 300300)
随着当今社会的科技一直进步,探测类型设备的使用范围逐渐扩大,人们对探测类型电子设备的要求也越来越高。但对于当前世界所掌握的探测技术水平现状来看,人们真正能够具体运用到的探测技术还是存在一定的局限性,同时超声波探测领域还是一个正在快速发展的探测技术领域以及具有良好经济效益的产业。
本系统以STM32 单片机处理器为控制核心,通过在舵机上放置超声波传感器模拟雷达系统,通过PWM信号控制舵机的运动,通过超声波传感器发送超声波检测障碍物信息, STM32 处理器将采集到的信号处理成距离信息,通过UART接口传送到上位机界面,同时上位机界面还可以同步显示舵机的的实时转动角度。当测到的物体距离小于安全范围的时候,上位机界面显示红色,并通过蜂鸣器和LED灯闪烁进行报警。超声波雷达预警系统的总体结构如图1 所示。
图1 超声波雷达预警系统结构框图
2.1 STM32 处理器及最小系统介绍。本系统采用的是STM32F103C8T6 处理器。STM32F103C8T6 是一款基于ARM 32 位的Cortext M3 内核的单片机,供电范围是2.0V~3.6 V,CPU工作频率最大可达72 MHz,具有单周期的乘法指令和硬件除法,以及优先级可编程的中断系统。同时它还具有64 KB 的Flash 存储器与20 KB 的SRAM存储器,另外还集成了非常丰富的片内外设,如看门狗、定时器、GPIO 口、DMA 控制器、ADC、UART、SPI 接口、IIC 接口等,具有成本低、速度快、性价比高等优点[1]。
本系统所使用的STM32 最小系统电路如图2 所示。它主要包括核心芯片CPU电路、外部时钟电路、电源电路、JTAG下载电路、系统复位电路、按键开关电路等组成。最小系统电路是整个控制电路的核心。
图2 STM32 最小系统电路图
2.2 超声波测距模块。超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
本系统的超声波测距模块采用HC-SR04 模块,该模块系统能够同时实现具有2cm~400cm的非接触式远距离高度传感器和自动遥控远距离高度检测器功能。其主要特点之一是系统结构简单,由于SR04 传感器的探头发出信号和接收信号都比较微弱,所以模块自带信号放大电路,控制电路简单容易,而且制造成本低[2]。图3 为HC-SR04 模块电路图。
图3 HC-SR04 模块电路图
HC-SR04 传感器总共有4 个引脚:回波引脚(ECHO)、脉冲触发引脚(TRIG)、VCC和GND。超声波模块会通过IO口TRIG来触发程序将一个高电压输出信号传输到脉冲触发引脚。超声波模块里的信号发送头便会往外发送一段超声波信号,同时回波引脚的电平将由低变高等待高电平输出,一有输出定时器便开始工作进行时间记录。当超声波接收器获取到反射回来的超声波信号后,回波引脚的电压信号就会由高电压降到低电压。此时定时器停止记录时间工作,定时器所记录到的时间值即为整个测测过程所用到的时间。测量距离与声速之间满足下列关系:测试距离=(高电平时间*声速(340m/s))/2 就可以算出本设备到障碍物的距离。多次重复周期的测量,就可让本系统达到实时更新。
2.3 舵机模块的控制。舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型,遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达[3]。本系统所使用的舵机如图4 所示。
图4 舵机实物
本系统使用的是一个可转180 度角度的舵机。舵机的控制一般需要一个20ms 左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms 范围内的角度控制脉冲部分。以180 度角度伺服为例,那么对应的控制关系如表1 所示。
表1 脉冲时间与舵机角度对应关系
小型舵机的工作电压一般为4.8V或6V,转速也不是很快,常见舵机的速度一般在0.11/60°-0.21/60°之间,更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。舵机上有三根线,分别为VCC、GND、信号线。而不需要另外接驱动模块,直接用单片机的管脚控制就行了。控制信号一般要求周期为20ms 的PWM信号。如果要更为精确的控制舵机(转动角度差<=1 度),则需要控制输出PWM信号的占空比,例如:可以把0-180 分为1024 份(可以任取,决定与定时器的时钟频率),范围为0.5ms-2.5ms,则可以得到0.09 度/us,因此可以由PWM=0.5+N*0.09(N 是角度)控制舵机转动0-180 度间的任意角度。
2.4 UART上位机通信协议。本系统使用STM32 开发板上的UART串口与上位机进行通信。通信的特点是:异步、串行、全双工。部分无线通信模块具有UART通信接口,比如蓝牙模块、NBIOT 模块、WIFI 模块、GSM模块、GPS 模块等。UART 是一种容易实现的MCU 和电脑间的通信方式,可用于辅助调试代码(MCU 传送变量、寄存器的值给电脑),也可用于电脑控制MCU(电脑传送指令数据给MCU),通过上位机控制下位机。本系统主要通过UART串口来传送舵机转动角度和物体距离等信息给上位机显示。
2.5 报警模块。报警模块分为两大部分,一部分是LED部分,报警时,LED 灯会规律较快的闪烁;另一部分是蜂鸣器部分,报警时,蜂鸣器会发出声响以达到提示的效果。系统将算出所得的测量距离数值跟已经提前设置好的预警距离数值进行比较,若算出所得的测量距离小于设置好的报警距离数值,则报警模块进入工作。本系统所使用的为普通红色LED灯及无源蜂鸣器。
3.1 上位机界面的开发。上位机显示软件的设计使用Processing 语言来编写,Processing 是一个为开发面向图形的应用而生的简单易用的编程语言和编程环境。Processing是一种革命性的语言,将枯燥无味的编程使用图像展现出来,具有可视化的特点。整个上位机软件主要包括:函数定义、建图部分、数据获取部分、绘图部分这四大部分。
函数定义即:开头初始定义上位机软件需要用到的角度函数名、雷达线函数名、长度跟宽度函数名、颜色函数名、背景图函数名、扫描线起始位置函数名等。
建图部分即:主要目的建立一个显示界面,界面左上角有波特率显示窗口、串口选择窗口、限制距离设置窗口、连接串口功能选项、清屏功能选项、报警功能选项。
数据获取部分:接收串口发送过来的数据;将数据分为两个部分,一个部分表示当前角度,另一个部分表示测量距离;将实际测量的数据按比例映射到软件图形显示界面上;舵机转动角度的判断,扫描范围一共180 度,若扫描角度超过180 度,则舵机进行反转。反之,若扫描角度低于0 度舵机也进行反转。
绘图部分:清屏函数(因为数据会残留在显示界面,故需要一段时间进行显示界面数据清除);绘制显示界面的分区线;极坐标的转换;根据角度信息和和距离信息在显示界面绘制障碍物,用红点表示障碍物;把角度、距离打印到功能窗口模块,显示出来。
3.2 系统软件编程设计。整个系统的单片机程序是在KEIL 编程环境下进行开发,选用C 语言进行编程。整个单片机硬件设备以STM32 单片机为核心设备,通过STM32主控制器控制其他模块部分。整个超声波单片机程序内容主要包括元件引脚的定义、初始化串口模块、初始化引脚的模式、舵机的转动角度判断及其延时函数、超声波数据函数、脉宽获取函数、预警距离判断函数、发送数据函数。系统的软件流程图如图7 所示。
图5 上位机软件流程图
图6 上位机软件界面图
图7 系统软件流程图
根据硬件部分和软件部分综合整理整个超声波雷达预警系统的工作原理就是:硬件设备开始上电;主程序对整个超声波测量系统开始进行初始化设置,让各个模块进入初始化状态避免出现意外;当超声波模块接收到单片机发来的发送命令便立刻发送信号系统打开计时器一边进行数据记录一边等待;检查是否获取到折射回来的超声波信号,若获取不到,则继续发送超声波信号。若获取到,则将定时器所记录到的时间进行算法运算。根据算法公式得出一个数值,此数值即为系统计算为本系统距离障碍物的测量距离;系统则将算出所得的测量距离数值跟已经提前设置好的预警距离数值进行比较;若算出所得的测量距离小于设置好的预警距离数值,则预警模块进入工作;预警模块分为两大部分,一部分是LED部分,报警时,LED 灯会规律较快的闪烁;另一部分是蜂鸣器部分,报警时,蜂鸣器会发出声响以达到提示的效果;若算出所得的测量距离大于设置好的预警距离数值,则预警模块不会工作,直到算出所得的测量距离小于设置好的预警距离数值时,才会工作;在主程序计算出测量距离数值的同时,会经过UART串口将舵机旋转角度跟算出的距离数值传输到上位机软件里来;上位机软件部分则会绘画出一个半圆图形,上面会有一条扫描线在180 度以内左右来回扫描,上位机软件则会根据串口发送来的数据绘制到半圆图形界面上,界面上左上角功能窗口会显示障碍物的角度方向位置跟测量距离数据并会一直实时更新,但需要不定时进行清屏数据处理。探测到的障碍物则会以红点的形式显示在画面上且停留几秒。功能窗口还有一个距离设置大小的功能模块,可以设置预警距离大小。
图8 为系统的测试图,该系统测试结果稳定,精度较高,测距范围为0.2cm-200cm ,在0.2cm-100cm 范围内,误差少于0.5cm,在100cm-200cm 范围内,误差少于2cm。可以应用在汽车障碍物测试,工业探测等领域。
图8 系统测试图