此博客已停用 个人博客: Mangogeek.com
全部博文(71)
分类: 嵌入式
2011-07-09 09:54:21
用CXA20106制作2CM-400CM的超声波(已出实物)
小弟最近玩超声波,最初参考网上最常用的CXA20106电路制作信号接收回路,发现以下典型问题:
1.CXA20106接收增益很大,导致发射探头衍射的波会第一个到达接收电路,示意图如下
由于发射和接收探头距离大约是5mm到10mm左右,导致发射探头输出8个超声波后,会由于衍射作用(很微弱)直接进入接收探头,导致接收到如图r1一样的回波,但这个波不是我们所需要的,我们需要测量的是t1到r2之间经过的时间。R1的存在也导致了cxa20106制作接收有很大盲区的问题(笔者按这种方法制作的盲区大约在10cm--25cm左右)。如果测量物体很近,导致r2与r1重叠,无法分辨的原因,根本解决方法是将r1消除掉。
2.网上大多数卖的都是需要单片机配合定时器来采集数据,有一个TRIG,还有一个out,通过trig一个高电平,测量直到out输出低电平的时间,得到距离,但这样有个问题,比如主单片机在所有定时器占用情况下,会导致无法测量数据或者测量变得很棘手。
发现上述问题,小弟设计一款超声波电路,能很好的解决以上两个问题。不说废话了,上图
先说第一个问题如何解决的,此次设计的超声波接收电路依然是cxa20106,与普遍超声波电路不同的是这个芯片的2脚多接了个两个电阻,U1芯片2脚是控制整体接收增益的,笔者试验如果只用C1和R1可以降低很多增益,使接收只能从2cm-30cm,再远的话由于返回的超声波太弱而无法接收,适当减小R1的值可以提高增益,这样我们如果通过R2和Ra串联接负极的话(相当于减小了R1的值,提高了增益),测量距离会编程15cm-400cm左右,有时好的话会变成500cm,这里小弟设计打算用stm8的PC7接口来控制整体增益。
第二个问题对于很多人来说肯定想到如何解决了,既然超声波上用到了单片机,那串口输出数据就很简单了!对,小弟这里用的就是串口来输出数据。9600bps,8数据位1停止位。在终端里面打印如下,单位是毫米mm:
说说整体工作过程。上述电路加电后,单片机将PD3、PD2口初始化为推挽模式,PD2和PD3是直接驱动发射探头。经过发射8个40Khz超声波后,将PC7口设置为高阻态,此时整机处于低增益模式下,打开Tim2的1通道捕获中断,等待回波,此时单片机有件很重要的事儿就是当波传出后,等待2ms,让接收探头躲过第一次衍射的波!打开高增益(PC7=0),来接收距离远物体返回的波。一旦接收到波,捕获模式会自动保存定时器的数据到捕获寄存器,此时就可以将数据转变为距离了。
用单片机的捕获中断做的稳定性不错在1m内,固定距离测量,串口输出数据精确度在1mm左右,在3m距离下,测量结果大约有2mm跳变