谢伟成,伍彩云,陈正光
(沈阳理工大学 装备工程学院,辽宁沈阳,110159)
随着汽车工业和公路运输业的发展,汽车走进千家万户。驾驶汽车长途行驶的机率日益增加,而在高速公路上行驶时变换车速的频率较少,基本以较为稳定的速度形式。若长途驾驶时驾驶员右脚一直在控制油门时,久而久之驾驶员便会感到疲劳,易发生交通事故,对驾驶安全距离的控制可以保证驾驶员人身安全,为此本文利用单片机对安全距离控制系统进行设计。
本系统基于超声波测距的舵机控制及报警功能,主要是通过软件设计代码并进行Proteus仿真,最后完成实物设计。系统以AT89C51 作为主控芯片,外加3 个独立按键,超声波模块和LCD 显示屏构成。利用超声波模块测量与目标距离,并在LCD 上显示距离,LCD 上一行显示所设置的上下限,下一行显示实时距离,用三个独立按键控制距离上下限,当实际测量距离不在范围内时,蜂鸣器报警并且舵机开始工作,直至测量距离恢复至规定范围内,通过软件仿真完成上述功能,并且制作出实物。系统结构框图如图1 所示。
本设计采用AT89C51 单片机为主控芯片,晶振电路,复位电路,时钟电路等构成了单片机最小系统[1]。最小系统包括单片机和必要的电源等所需的部件,电源、时钟等电路是单片机运行的必要条件,可以使单片机始终处于正常运行状态。最小系统可通过其内存扩展、A/D 扩展可以使单片机完成更复杂的功能。
本设计所采用的HC-SR04 超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。两个压电陶瓷超声传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。超声波探头需要来自单片机I/O 口的至少10μs 的脉冲信号来驱动HC-SR04 超声波探头。此时超声波探头会主动发出8 个40kHz 的方波信号,ECHO引脚会发出ECHO 信号启动定时器。当超声波探头检测到回波信号时,回波引脚将拉下大电流电平,定时器将停止计时。此时T0 记录的持续高电平时间为超声波往返时间。
LCD1602 已经很常见了,所以本设计采用LCD1602,在LCD1602 的第一行显示设置的距离范围阈值的上下限,第二行显示所测得距离的实时数值。字符型LCD 通常有14 条引脚线或16 条引脚线的 LCD。本设计布线结构如图2 所示。
独立按键式直接用I/O 口线构成的单个按键电路,其特点式每个按键单独占用一根I/O 口线,每个按键的工作不会影响其他I/O 口线的状态。独立式按键电路配置灵活,软件结构简单,将常开按键的一端接地,另一端接一个I/O 口,但每个按键必须占用一个I/O 口线,适用于按键需求不是很多的设计中。独立式键盘的实现方法是利用单片机I/O 口读取口的电平高低来判断是否有键按下。根据本设计的需要选用了独立式键盘接法。
舵机内部有一个参考电压,微处理器产生的PWM 信号通过信号线进入舵机产生直流偏置电压,与舵机内部的参考电压进行比较,得到电压差输出。正负电压差输出到电机驱动芯片,以确定正负旋转。当舵机开始转动时,由舵机内部的级联减速器带动电位器转动,使电压差为零,电机停止转动。
本文所使用的是方法是定时器+中断,定时器每0.5ms中断一次,需要中断40 次才能达到20ms。同时需要一个全局变量来记录中断的次数,当中断达到40 次时,全局变量重新清零。当中断次数小于a 时,信号线输出高电平,否则输出零。此时a 的值对应关系如下(1—0 度,2—45 度,3—90 度,4—135 度,5—180 度)。该方法其实就是产生PWM,通过控制PWM 占空比来控制舵机旋转角度。
系统主要包括超声波模块,LCD 显示,按键控制模块,舵机控制模块,其中,显示模块第一行显示的是预先设置的安全距离上下限,第二行显示的是实时距离数值,HC-SR04超声波模块将距离转变电压输入给AT89C51 单片机,单片机将其预设的安全距离进行比较,如果不在安全范围内,系统报警并且触发舵机开始工作,改变小车运行速度,直至其在安全范围内,实现安全距离控制功能。按键模块能够实现对安全距离的修改和设置。结合以上各个模块,整体仿真电路如图3 所示。
系统软件设计流程图如图4 所示,本设计先进行程序初始化,再调用超声波模块,利用函数计算出距离,然后调用按键函数,设置距离阈值范围,LCD 驱动函数调取实时距离数值以及设置的距离阈值范围数值进行显示,再将测得的距离范围数值与设置的距离阈值范围进行比较,最后根据比较结果,若测得的距离范围数值在设置范围阈值内,则不调用蜂鸣器及舵机驱动函数,若测得的距离范围数值在设置范围阈值外,则调用蜂鸣器及舵机驱动函数,使之工作。
图4 主程序流程图
单片机引脚触发Trig测距,给至少 10μs 的高电平信号,模块自动发送 8 个40kHz 的方波,自动检测是否有信号返回,有信号返回,通过ECHO 输出一高电平,可使用单片机定时器计算高电平持续的时间,超声波从发射到返回的时间计算公式:测试距离=(高电平时间⋆声速(340M/S))/2[3]。超声波模块流程图如图5所示。
图5 超声波模块流程图
LCD 显示程序最重要的是LCD 显示的驱动函数,当定义完驱动函数后,将读取的距离测量值,设置的所需要显示的内容利用驱动函数里的显示函数显示即可。本设计中LCD 第一行显示距离范围阈值的上下限,第二行显示实时检测距离数值,流程图如图6 所示。
图6 LCD 模块流程图
键盘去抖动是单片机对键盘处理的一个重要的过程。目前的技术有硬件去抖动和软件去抖动,本设计选择了软件去抖动,通过先查寻按键当有低电平出现时立即延10~200ms以避开抖动(经典值为20ms),延时结束后再读一次I/O口的值,这一次的值如果为1 表示低电平的时间不到10~200 ms,视为干扰信号。当读出的值是0 时则表示有按键按下,调用相应的处理程序。本设计中共有三个按键,分别为设置键,增加键,减少键,用于设置距离范围阈值。
利用定时器+中断,使单片机产生周期为20ms,高电平t 等于0.5ms-2.5ms 之间的这样一个方波。高电平在一个周期(20ms)的持续时间与一个周期持续时间之比即可换算为对应的舵机角度(0.5ms--0度,1ms--45 度,1.5ms--90 度,2ms--135 度,2.5ms--180 度)。本设计中,测得的实时距离数值是否在预先设置的距离范围阈值内,将决定舵机是否工作,流程图如图7 所示。
图7 舵机模块流程图
系统测试时,预先设置的安全距离上限为280cm,下限是20cm,放置小车距离目标40cm 时,硬件系统测试结果如图8 所示,液晶显示屏上行显示L:20,H:280,第二行显示00040cm,与测量值一致,舵机未运行,蜂鸣器未报警,小车处于安全距离范围内。
图8 实物演示(安全距离范围内)
将小车放置距离目标5cm 时,硬件系统测试结果如图9 所示,液晶显示屏上行显示L:20,H:280,第二行显示00005cm,与测量值一致,由于测量值未在安全距离范围外,此时舵机开始运行,蜂鸣器报警。系统各个模块能够按照事先设计好的功能运行,系统的软件指令运行正常,液晶屏能够实时显示数值,具有很好的实时性,满足安全距离控制功能,达到了预期的设计目标。
图9 实物演示(安全距离范围外)
本文结合超声波的特性设计了一个简单实用的安全距离控制系统。当小车与目标的距离不在范围内时,系统中的舵机启动运行,控制小车油门,使小车重新进入目标范围内,并通过LCD 显示距离和预先设置范围。当实际测量距离不在范围内时,蜂鸣器报警并且舵机开始工作,直至测量距离恢复至规定范围内。若经过大量实测以及调试,该系统可以实现安全距离控制。该设计可用于汽车定速巡航等方面,能够一定程度上为用户带来便利,具有很好的应用价值。