ATmega16的语音型超声波测距仪的设计
扫描二维码
随时随地手机看文章
摘要:介绍一种以单片机ATmega16为核心的超声波测距仪。该测距仪利用单片机ATmega16的输入捕获功能,测量超声波从发射探头发射至接收探头接收所经过的时间;采用DS18B20测量环境温度,补偿温度的变化对超声波传播速度的影响,提高测量精度;利用语音芯片ISD4004播报测量结果等语音信息。给出了测距仪的关键硬件电路、测量时间的输入捕获中断子程序和录音/放音子程序。测试结果表明,该测距仪测量精度高,语音播报清晰、流畅。
关键词:单片机;超声波测距;语音芯片;温度补偿
引言
用超声波测量距离是一种非常实用的非接触测量方法,广泛应用于物料液面测量、机器人定位、汽车防撞系统等领域。传统的超声波测距方法是用单片机的一个定时器和一个外部中断来测量超声波从发射探头发射到被接收探头接收所经过的时间t,再根据超声波测量距离的公式S=vt/2进行计算,得到距离S。这种方法除了多占用单片机的一个外部中断源外,还会使测量时间t的误差增大,降低测量精度。本文介绍了一种用AVR单片机ATmega16作为核心控制器的距离仪,该测距仪利用ATmega16输入捕获功能实现时间t的精确测量;用温度传感器DS18B20检测周围环境的温度,补偿温度变化对超声波传播速度的影响,提高测量精度;用语音芯片ISD4004实现测距结果等语音信息的播报功能。
1 总体设计方案
测距仪的总体设计方案如图1所示。系统以AVR单片机ATmega16作为核心控制器,负责控制和协调各模块电路的工作。超声波发射模块发射40 kHz的超声波信号,超声波接收模块对接收到的回波信号进行放大、滤波、比较,形成下降沿。温度传感器DS18B20负责对环境温度进行检测,补偿温度变化对超声波传播速度的影响。显示电路采用YM12864中文液晶显示器,显示当前温度和距离等信息。语音电路采用ISD4004语音芯片,该芯片采用SPI通信接口,可以方便地与ATmega16单片机进行通信,实时播报测量距离等语音信息。
2 硬件电路
2.1 超声波发射模块
超声波发射模块电路如图2所示。由ATmega16的PB3发送10μs的高电平至SN8P2501B的P2.2,当P2.2检测到高电平时,从P2.3输出低电平,三极管Q1饱和导通,MAX3232接通电源,SN8P2501B内部的定时器产生8个40 kHz的脉冲信号,由P2.4和P2.5推挽输出,经MAX3232升压后推动超声波换能器发送超声波信号。然后P2.3输出高电平,三极管Q1截止,关断MAX3232的电源,停止发射超声波信号。
2.2 超声波接收模块
超声波接收模块电路如图3所示。从超声波发射探头发出的超声波信号遇障碍物后返回,被接收探头接收并转换成微弱的电信号,经集成运算放大器TL074放大、滤波、比较后,产生下降沿,触发SN8P2501B的P2.2引脚产生中断,在中断程序中将P2.1置高电平。高电平持续的时间即为超声波从发射探头发射遇到障碍物后返回,并被接收探头接收所经过的时间。
2.3 语音播报模块
语音播报模块电路如图4所示。由集成稳压芯片AMS1117—3.3构成的稳压电路输出3.3 V电压供给语音芯片ISD4004。ISD4004的语音输入由麦克风MIC输入或由插头输入,插入插头时麦克风输入电路自动断开,此时可以与电脑连接进行录音。放音时,音频输出经LM386放大驱动扬声器进行放音。ATmega16通过SPI接口向ISD4004发送录音地址和录音命令进行录音,发送放音地址和放音命令进行放音。中文液晶YM12 864和温度传感器DS18B20与单片机ATmega16的连接较为简单,在此不作详述。
3 软件设计
3.1 超声波测距程序设计
超声波测量距离的表达式为S=[(331.4+0.607T)×t]/2。其中,T为环境温度,t为从发射超声波信号到接收到回波信号所经过的时间。由此可见,测量距离的关键是尽可能精确地测出时间t。测量时间t常用的方法是用一个定时器/计数器和一个外部中断来实现。定时器/计数器用来计时,外部中断设置成电平触发方式,用于检测一个脉冲的上升沿和下降沿,当ATmega16外部中断引脚输入电平由低变高时触发第一次中断,读取时间值t1,然后将外部中断设置为下降沿触发中断,等到ATmega16外部中断引脚输入的电平由高变低时,再次触发中断,读取时间值t2,然后将外部中断设置为上升沿触发中断,两次时间值之差t=t2-t1即为脉冲的宽度。这种方法除了多占用ATmega16的一个外部中断源外,读取的时间值精度还容易受到中断响应时间的影响,造成测量距离误差增大。单片机ATmega16具有一路输入捕获功能,配合内部的定时器/计数器T/C1,可以非常方便和精确地测出一个脉冲从上升沿到下降沿间的时间。方法是先将T/C1设置为输入捕获模式、上升沿捕获,并开启全局中断;当发射探头发射的超声波信号遇到障碍物后返回,被接收探头接收时,ATmega16的PD6(ICP1)引脚由低电平变高电平,触发第一次输入捕获,将T/C1的TCNT1中的计数值自动写入输入捕获寄存器ICR1,在程序中将ICR1的值保存在变量t1中,然后将T/C1设置为下降沿捕获;当接收到的信号下降沿到来时,再一次触发输入捕获,将ICR1的值保存在变量t2中,然后将TCNT1中的值清0,并将T/C1设置为上升沿捕获。假设单片机ATmega16所使用的晶振为8 MHz,采用1/8分频,则两次捕获发生的时间之差t=t2-t1(μs)即为发射超声波信号至接收到回波信号所经过的时闻。定时器/计数器T/C1捕获中断程序如下:
3.2 语音播报程序设计
语音播报程序主要分为录音和放音程序。由单片机ATmega16的SPI端口按照ISD4004的时序要求发送录/放音地址和命令。录音程序将需要录制的语音元素按照事先分配好的录音地址分段录制到IDS4004中。把录音起始地址存放在数组当中,在放音程序中根据要播报的语音信息查找到相应语音元素的地址,发送放音命令,即可清晰流畅地播报出语音信息。录音和放音的参考子程序如下:
4 测试结果与分析
测试条件为:在环境温度为29℃,超声波发射探头与接收探头离地面30cm,障碍物为0.6 cm×0.5 cm垂直于地面放置的木板,用钢卷尺测量实际距离,测试结果如表1所列。
结语
本文设计的超声波测距仪充分利用ATmega16的输入捕捉功能,实现了2cm~4.2 m的距离测量,通过ATmega16的硬件SPI接口控制语音芯片ISD4004实时播报测量距离等语音信息。多次测试结果表明,该测距仪具有工作稳定可靠、重复性好、测量精度高、语音播报流畅清晰等特
点。可应用于物料液位测量、汽车防撞系统、机器人定位等场合,在非接触测量方面具有很好的应用前景。