MSP430超声波测距
扫描二维码
随时随地手机看文章
本应用报告描述了一种采用MSP430F413 超低功耗微控制器的基于超声波的距离测量系统。系统向测量目标发射超声波脉冲然后接收相应的反射波。MSP430 集成的模拟比较器A 用于检测到达系统的回声。超声波脉冲从系统到目标然后反射回系统所需的时间可以由MSP430精确的测量。假设声波室温下在空气中的速度为1100 英尺/秒,MSP430 计算系统与目标间的距离并采用内部集成的LCD驱动器将其显示在一两位的静态液晶显示器上。距离以英寸为单位显示,精度为1 英寸本系统能够测量的最小距离是8 英寸,因为受到发射器传感器稳定时间;能够测量的最大距离为99英寸,回声的强度取决于反射物的材质形状、和尺寸。地毯之类的吸音材料或者反射面积小于两平方英尺的物体反射能力很弱,这类目标最大测量范围相对较小。如果系统接收到的回声的强度很小以至于比较器A 无法检测到就超出了系统的测量范围。这时系统将显示错误信息“E”。
DIY样品图如下:
以下将按几个部分来讲述此次超声波距离测量步骤:
1-工作原理
2-电路描述
3-软件
UltrasonIC.s43
设备初始化子
程序主循环程序
计算子程序
BT_ISR 子程序
显示子程序
延时子程序
工作原理
本应用基于声波的反射。声波在其传播的介质中被定义为纵波。当声波受到尺寸大于其波长的目标物阻挡时就会发生反射;反射波称为回声。如果声波在介质中传播的速度是已知的,而且测量到声波从声源到达目标然后返回声源的时间,从声源到目标的距离就可以精确地计算出来。这就是本应用的测量原理。这里声波传播的介质就是空气,采用不可见的超声波。
假设室温下声波在空气中的传播速度是1100 英尺/秒,测量到的声波从声源到达目标然后返回声源的时间是t,秒距离d可以由下列公式计算:
d=1100 12 t (英寸)
因为声波经过的距离是声源与目标之间距离的两倍,声源与目标之间的实际距离应该为d/2。
电路描述
本应用中中用来发射和接收超声波的装置是40KHz的陶瓷超声波传感器。MSP430 采用晶体振荡器产生的一个40KHz 方波信号的12周期脉冲序列驱动发射传感器,接收传感器则接收回声。MSP430 的定时器A被定义为40KHz晶振频率计数器,因此时间测量精度为25 微秒,这对本应用来说足够用了。测量的时间基准是非常稳定的因为它由石英晶体振荡器产生。接收传感器收到的回声由运算放大器放大后送到比较器A 的输入端。比较器A 检测到其输入端的回声信号后触发定时器A 计数值的捕捉来捕获比较寄存器CCR1 的值。捕捉在回声到达系统的瞬间进行。捕获的计数值就是超声波脉冲序列从系统出发到达目标然后返回系统的时间。从系统到目标的距离(用英寸表示)就可由MSP430 用测得的时间算出并显示在两位静态液晶显示器上。显示更新后MSP430 马上转入LPM3 睡眠模式来降低功耗。基本定时器1 被编程用来每205 毫秒中断MSP430 一次。基本定时器1的中断信号唤醒MSP430 并重复测量周期更新显示。
图1 显示的是本应用的电路原理图。其中MSP430F413 U1 是系统的核心部分。参考文献[1]是这个芯片的技术资料。LCD1 是一由MSP430F413内部集成的LCD 驱动器驱动的两位低压静态液晶显示器。R03 连接到Vss R13 和R23, 悬空将LCD 外围电路设置为静态LCD 驱动模式。这里方便的选用了一个40KHz 的低频晶振,与本应用中采用的超声波传感器的谐振频率相匹配。R12 作为复位线的上拉电阻,内部集成的掉电保护电路可以预防掉电情况。C9 位于靠近芯片电源线的位置,提供MSP430 的电源耦合。14 脚的接插件(J1) 提供JTAG接口与MSP430 相连,可使用MSP430FLASH 仿真工具进行在线调试和编程LED1 用来指示测量周期。端口引脚P1.5 被定义为输出超声波发射器所需要的40KHz 方波ACLK信号。
传感器的输出驱动电路直接由9V 电池供电并提供18Vpp 驱动超声波发射器。18Vpp 是通过一个二进制非门CD4049(U4)桥电路实现的。参考文献[6]是它的技术资料。其中一个非门用来为驱动器的一侧提供180 度的相移信号。另一侧由相内信号驱动。这种结构使输出端的电压提高了一倍,为发射传感器提供了18Vpp 电压。两个门并联连接以便每一侧能够为传感器提供足够的驱动电流。电容C6 C7 阻断了到传感器的直流通路。因为CD4049 工作于9V 而MSP430 工作于Vcc 3.6V。 MSP430 和输出驱动器之间的逻辑电平是不匹配的,双极性晶体管Q1 就作为这两种逻辑电平之间的转换器。
运算放大器U3 是TI 公司的高速运算放大器TLV2771 。参考文献[5]是它的技术资料。这个放大器具有高增益带宽并在40KHz 时提供充分的高增益。运算放大器连接成反相放大器构造。R7、R5 设置增益为55、C5 提供高频滚降。R3、R4 偏置非反相输入端,为运算放大器的单输入工作提供一个虚拟中间值。放大后的超声波信号在这个虚拟中间值。上下波动传感器RX1 的高Q 值提供选择性并丢弃除了40KHz 之外的频率。运算放大器的输出端连接到比较器A 的输入端CA0 (即端口引脚P1.6)。 比较器A 的参考电平内部选择为0.5Vcc 。当接收到回声时电压高于参考电平从而触发比较器A 的输出CAOUT 。调整R3 可以得到需要的灵敏度并优化测量范围。
MSP430 和超声波信号放大器电路由9V 电池经TI 公司的LDO 芯片TPS77001调制后的3.6V 电压供电。参考文献[4]是它的技术资料。电阻R1和R2 调整稳压器输出电压为3.6V。 C1和C2 是推荐使用的稳压器的正常工作的供电电容。发射器的驱动电路是由9V 电池直接供电的。开关S1 是本应用的电源开关。
图2 显示的是12 周期的40KHz 脉冲序列的波形轨迹图。我们注意到19.2V 的峰峰电压波动。方波顶部的正弦响铃波是由于传感器内部的谐振。
图3 显示的是一个完整测量周期的波形轨迹。轨迹1显示的是发射传感器输出端的12周期的40KHz脉冲序列。轨迹2 显示的是接收传感器输出经运算放大器放大后在引脚1上的输出。轨迹上的第一个脉冲序列信号,代表直接从发射器上收到的信号被MSP430忽略。接下去的脉冲序列代表目标反射的回声,被MSP430 用于测量。轨迹3 显示的是MSP430 测得的时间间隔的宽度。这个宽度代表该脉冲序列从系统到达目标再返回所花的时间,显然它取决于所测量的距离。
图1
图2
图3
软件Ultrasonic.s43
设备初始化子程序
这个子程序初始化及设置外围电路。首先关闭看门狗电路,采用一个软件延时让低频晶振稳定,将FLL+倍频器设置为64 来产生2.56MHz 的MCLK频率。P1.0 设置为输出控制LED。未使用的端口引脚设置为输出,端口引脚P1.5 设置为输出带缓冲的40KHz ACLK。频率基本定时器1 启动并设置为提供一个150Hz LCD 频率并每205 毫秒中断CPU 开始一次测量周期比较器A 内部参考电平设置为0.5Vcc ,CAPD 位设置为关闭比较器输入引脚的输入缓冲。LCD 模块打开并在本应用中设置为静态模式驱动两位静态LCD 。LCD存储器清零,LCD 的初始显示为00。基本定时器1 中断和全局中断打开,这样基本定时器1 就可以周期性中断CPU。
主循环程序
主循环用存储在DIGITS 缓冲区内的值更新液晶显示器然后MSP430置于LPM3 睡眠模式。MSP430 维持在睡眠模式直至基本定时器1 中断发生及BT_ISR 返回活动模式。这时就开始一个测量周期定时器A 设置为16 位增计数模式,选择ALCK 作为其时钟源。CCR1 设置为比较模式,初始值为12 以便在P1.5 引脚上输出12 个周期的40KHz 的脉冲序列接下去是一个36ACLK 周期的延时,保证输出传感器稳定这是通过设置CCR1为初始值36 的比较模式实现的,在CCR1 处于比较等待状态时,MSP430保持LPM0 状态。
然后系统切换到通过接收传感器接收回声。比较器A 被设置为等待回声,在回声到达的瞬间提供一个捕获中断。定时器A 计数值从捕获比较寄存器CCR1 中得到。这个值就是超声波序列从发射传感器到达目标然后返回这段距离所需的时间。计数值加上48 加以调整,以补偿12 个周期脉冲序列和36 个周期发射传感器稳定延时的损失。CCR1调整后的值就是脉冲序列发出时刻到回声到达系统这段时间的准确值。然后,就调用计算子程序计算实际距离单位为英寸并返回结果。如果结果超出范围,回声信号就接收不到,比较器A 也不会产生捕获中断。MSP430 保持LPM 状态知道下一个基本定时器1 中断将其唤醒,通过检测其CCTL1 控制寄存器中的CAIFG 位来确“E” 。程序最终返回到主程序,更新LCD 显示并返回LPM3 睡眠模式。下一个基本定时器1 中断将MSP430 唤醒至活动状态重复程序执行过程。
计算子程序
计算子程序负责本应用中的数学计算。CCR1 中调整后的16 位数值存储为变量Result, 这个值就代表超声波序列从系统到目标然后返回系统这段距离所需的时间。因为定时器A 计数间隔为25 微秒,对应的时间值为Result25 微秒假设室温下声音的速度为1100 英寸/秒,可以看出,从定时器A计数值得到的Result 每6 个值对应于1 英寸的距离。
为了采用MSP430 现有的整数计算达到要求的精度,16 位的Result 首先乘以100 然后除以6。16位*16位的乘法是由子程序Mu100 完成的,32位的结果存储在变量htX100_msw 和htX100_lsw 中,然后除以6 并将结果保存在变量DIGITS 中DIGITS 中的值是二进制格式的,由hex2bcd 子程序将这个二进制值转换成BCD码然后丢弃BCD 码,的最后两个数字来补偿前面所作的与100 的乘法。两位的结果值返回到变量DIGITS中。
BT_ISR 子程序
基本定时器1 中断子程序BT_ISR 对保存在堆栈中的状态寄存器SR 中的位进行操作以使MSP430 能够返回活动状态继续执行主循环中LPM3之后的程序代码。
显示子程序
这个子程序用变量DIGITS 的值更新两位静态LCD 显示。静态显示器的段值存储在查寻表LCD_Tab 中。通过将DIGITS中的数字与LCD_Tab 查寻表中的位置相关联,LCD 存储器就可以装入所需要的段值。
延时子程序
这个子程序产生一个16 位的软件延时。由于软件减计数的变量处于堆栈的顶部(TOS),寄存器不会受到影响。延时时间到后,子程序返回前堆栈指针(SP)恢复到原始值。
结论
内部集成的模拟比较器A、带硬件捕获/比较寄存器的16 位定时器A、基本定时器1、 LCD 驱动电路简化了