Microchip专家技术文章:如何使用超声波装置实现距离探测

分享到:

Microchip Technology Inc.
Keith Curtis
 

一台超声波装置、一个运算放大器和一个内部集成比较器且具有 4 个可用 I/O 引脚的单片机,即可实现超声波距离探测。
 
要了解这是如何实现的,我们可以用一个超声波发射器来广播一个40 kHz的脉冲信号或者数个同频率的振荡信号。从单片机驱动一到几个波长的方波至超声波装置就可以创建脉冲信号。该脉冲经由任何密度比空气大的物体反射之后,有部分发射的脉冲信号会返回被接收器接收。由于声音的传播速度是已知的,通过测量脉冲的往返时间并加以转换,我们就可以计算出两者之间的距离。
 
声音的传播需要借助某种介质,比如空气、水或钢铁。一般情况下,介质的密度越大,声音传播的速度就越快。而声音在空气中传播的速度会随着例如温度、湿度和海拔高度等因素的变化而变化。在室温条件下,我们可以认为声音以恒定每秒343 米的速度传播。这对于使用单片机来测定发射脉冲在数米范围内往返的时长而言是最理想的速度。
 
反射表面是何种类型的介质并不重要;在40 kHz的条件下,几乎所有表面都会反射迎面而来的声波。如果是垂直入射到表面则更为理想,因为这时脉冲会被直接反射回接收器。而与物体表面形成的入射角越大,被反射回接收器的脉冲就会越少。
 
超声波换能器的工作原理类似于一个压电蜂鸣器,只不过采用的是一个人耳听不见的、更高的频率。当电流通过压电装置时,它就会产生变形或弯曲,断电之后则会恢复到原来的形状。当一个40 kHz的方波被施加到该装置的引脚上时,会发射出一个40 kHz的声波脉冲。而超声波接收器的工作原理恰恰相反,它会对输入的超声波进行转换,从而生成一个振幅低得多的电压输出。
 
超声波装置有超声波发射器、超声波接收器或者收发一体型超声波装置等几种类型, 采用开放式或封闭式防水罩。本文演示使用的是接收和发射分开的开放型装置。由 于使用防水发射器需要更大的驱动电压,因此这种类型的装置使用起来最为简便。
 
图 1 所示的是一台超声波装置的等效电路。它在此充当的是电容负载,但考虑到感性和容性方面的因素,被调谐为 40 kHz 的谐振频率。输入信号频率为 40 kHz 的条件下,发射器被调谐为最大输出,而接收器被调谐为最大电压输出。这对所有其它频率会产生一个衰减过滤效应,并能在放大所接收的信号时有效消除噪声。图 1 底部的表格中列出了演示中装置所采用的各个典型值。

QQ截图20170905091528
图 1:超声波装置的等效电路


驱动超声波装置


以差分信号驱动容性超声波发射器可以在保持器件两端偏移0.0V的同时,实现最大的发射强度。此外,差分驱动引脚还消除了应用负电源来驱动装置的需要。
 
使用超声波换能器存在的一个问题即在驱动信号去除后换能器仍会继续振荡或是振 铃。振铃由换能器的谐振机械行为而引发。施加驱动之后,经过调谐的换能器会在 指定的超声波频率上产生像振铃一样的现象,而驱动撤除后不久振铃就会衰减掉。 在发射器振铃时,信号将在PCB中耦合传播或在发射器和接收器之间的空气中传播,看上去就像接收到的信号一样。因此,我们需要延迟打开接收器以确保振铃已经衰减掉,而接收到的所有信号均源自反射脉冲。如图2所示,振铃衰减所需的时间量决定了接收器可探测距离的最小值。

QQ截图20170905091454
图2:超声波装置


超声波装置应尽量采用接近指定频率的驱动频率,以提高输出功率。以Microchip 的PIC16F690单片机的8 MHz内部振荡器为例,我们可以很轻松地对其进行分频,以创建一个40 kHz的驱动信号。而PIC单片机的两个I/O引脚可用于生成40 kHz的差分信号以驱动超声波发射器。该演示使用Timer0定时器溢出中断程序来创建输出的时基。
 
使用很多PIC MCU上自带的ECCP模块是另一种驱动超声波装置的更为自动化的替代 方法。该模块可以被设置成以半桥模式在P1A和P1B两个引脚上输出选定频率的PWM, 其中一个为反相输出。ECCP模块使用Timer2定时器来创建PWM的时基。启用Timer2 后分频器可使得用户在设置中断标志之前设定好生成的脉冲数。这样,中断一次即 可完成一个超声波脉冲的发射。

一旦超声波信号创建好并从超声波发射器输出,紧接着的任务就是对返回的反射脉 冲进行探测和计时。由于返回的声波衰减显著,因此有必要先对其进行放大以便该 信号可以被比较器探测到。而这种放大操作可以由差分放大器配置中的单运放实现。

差分放大器

图3是一个差分放大器的电路示例图。此运算放大器电路可以放大跨接在两个输入引脚之间的超声波接收器两端的电压。通过匹配流经电阻R2和R4以及电阻R1和R3的输入偏置电流,我们可以减少输出端的共模噪声。

QQ截图20170905091553
图3:差分放大器电路


超声波接收器在此就像一个调谐的高Q值滤波器。差分运算放大器放大该接收器的过滤效果。而第一个运算放大器对输入信号和共模噪声进行放大和过滤处理。之后的各级运放也将放大全部噪声并需要使用额外的滤波器。为超声波接收器的第一增益级选择好合适的运算放大器,可以省去多个运算放大器和滤波器的需求。
 
由于Microchip MCP6022运算放大器的单位增益带宽(UGBW)为10 MHz,因此我们在下面的演示中选用了这一器件。在例如40 kHz这样特定的频率上,UGBW值更高意味着运算放大器的增益也更高。此处演示电路的增益由于受到UGBW的限制,并且不由R1/R2来定义,因而在40 kHz的条件下其增益在250到300之间。

数据限幅器是许多通信应用中常见的电路。我们可以通过阈值电压V_th和放大输入的比较来进行信号探测。在图4中,V_th被设为略低于V_US即放大超声波信号的平均值。

QQ截图20170905091608
图4:数据限幅器


一旦超声波脉冲被放大,C2IN-引脚的值就会降低到C2IN+引脚的值以下,而比较器的值也会因此发生转变。R2的值应远远大于R1的值,但不应过大,以免比较器因为放大信号中的噪声而发生转变。而R1的理想设定值,应使得阈值电压的值略大于所接收超声波信号的噪声。阈值电压的值越接近于所接收的信号,接收器可探测的距离就越大。
 
PIC单片机的C2OUT引脚可用于调试这一级的超声波接收器。而常见的问题是,阈值电压没有得到正确设置。如果该值设置得过低,就会限制接收器的可探测距离。而如果设置得过高,比较器将会从线上噪声尖峰切换开,从而也就无法再知晓信号出现的时间。
 
Timer1门控功能可为16位Timer1计数器的时钟信号提供一个使能信号。C2OUT即比较器输出可以被选作Timer1门控的一个内部源。当C2OUT信号较低时计数功能就会使能。一旦超声波信号被探测到且C2OUT值发生变化,计数就会停止。而存储在Timer1寄存器中的值就是以超声波信号计数形式表达的往返时间。根据装置的振荡器速度,这些计数将对应一个特定的时间值。
 
在探测到返回的超声波脉冲后,Timer1会存储一个对应于超声波脉冲传播时间的计数值。将这些计数除以二并乘以声音的速度就可以转换为距离。之所以除以二是因为这里进行的是往返程的测量,并且可以通过将计数值右移一位来实现。
 
载波频率的波长决定了系统的分辨率。40 kHz频率的波长约为0.85厘米。采用更高的载波频率可以提高分辨率,但却会使指向性受限、距离减小。此外,影响分辨率的因素还包括用于对返回脉冲进行计时的振荡器的精确度,以及信号在更复杂的滤波器中传播时所发生的延迟。将所有的因素考虑在内,以40 kHz频率运行的超声波系统的分辨率约为1厘米,并且不受距离影响,只有返回脉冲会被探测到。
 
有两种方法可以增加这一应用中的最大可探测距离:加大发射功率及提高接收器灵敏度。本演示使用I/O引脚来驱动发射器,最大工作电流和电压分别为20 mA和5V; 同时可以使用MOSFET驱动器来提升驱动电流和电压。40 kHz条件下的接收器的增益决定了什么会被比较器探测到。
 
该演示只使用一个运算放大器作为差分放大器。由于只有一个增益级,因此不需要进行滤波。而多级接收器就需要在第一增益级和比较器之间作一些滤波处理以便减少噪声。小心控制比较器的阈值电压还将确保即使是最小的返回脉冲也能被明确探测到。
 
如果使用的是独立的发射器和接收器,则应将二者按同一方向匹配安装。所发射的 信号和随后的振铃都会通过PCB泄漏到接收器电路中。而在电路板上的装置之间留 出更多空间或是放置一个保险装置,将有助于减少这种泄漏。安装超声波换能器时, 通常可使用橡胶或硅材料来减少往返于周围材料的超声波信号泄漏的量。

结论


超声波测距可以借助PIC16F690、MCP6022运算放大器以及MuRata MA40S4R/S超声波装置来完成。PIC单片机的两个端口引脚提供足够的驱动力来发射超声波脉冲。
Timer0和Timer1定时器被用于创建一个40 kHz的信号和对返回脉冲进行计时。
MCP6022放大了接收器的信号,而PIC16F690内部模拟比较器则用于探测信号中返回脉冲的存在。

继续阅读
Curiosity PIC32MZEF学习教程之:定时器测试

前面说过TC1使用的是外部32K的时钟源,因为这个晶振没有焊接,无法测试,所以我们这里选择的测试时钟为TC2。

Curiosity PIC32MZEF学习教程之:使用Harmony的动态驱动和状态机编写程序

上一篇中介绍了UART的收发数据操作,那些操作都是基于外设库的,而不是采用Harmony的动态驱动,也没有采用状态机的机制。本篇就来介绍一下如何使用Harmony的动态驱动和状态机来编写程序。其实状态机是挺简单的,就是事先定义好可能发生的哪些状态,然后主循环里根据不同的状态进行不同的处理,这个在项目中也是比较常用的方法。

Curiosity PIC32MZEF学习教程之:如何通过UART收发数据

PIC32MZEF一共有6个UART端口,资源还是比较丰富的。UART是比较常用的外设,特别是在调试的时候,串口打印信息很方便,测试起来很方便,这篇就来测试一下UART数据的发送和中断接收。

Curiosity PIC32MZEF教程——时钟系统介绍

时钟系统是一颗MCU的基础,MCU的一个重要考核指标。PIC32MZ EF系列采用MIPS32® M级核,工作频率可以达到200MHz。时钟系统也比较复杂,配置的寄存器比较多,下面就对照Harmony里面的时钟配置进行简单的介绍。

Curiosity PIC32MZEF学习教程之IO端口测试

本篇来进行最简单的IO端口测试,编写软件控制板卡上的LED灯闪烁。

©2017 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss