您当前的位置:五五电子网电子知识单片机-工控设备MSP430单片机MSP430超声波测距 正文
MSP430超声波测距

MSP430超声波测距

点击数:7426 次   录入时间:03-04 11:57:49   整理:http://www.55dianzi.com   MSP430单片机
   然后系统切换到通过接收传感器接收回声。比较器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 驱动电路简化了超声波测距应用的设计,提供了一种单片系统解决方案。本应用在15 英寸距离测量中的平均功耗为1.3 毫安。这包括LDO U2, 运算放大器U3 和CMOS 二进制反相器U4 的静态电流,运算放大器自身就由1 毫安的静态电流,电路其他部分的功耗为300 微安。LED 工作时需5 毫安,电流MSP430 在LCD 连续工作时需2.1 微安的平均电流。这是利用MSP430 的低功耗特性实现的,MSP430 大部分时间处于LPM3 睡眠状态,这时用到的CPU 资源仅为5.6%。
因为声波的速度与温度有关,测量值在非室温下准确度会下降。在本应用中引入一个简单的基于热电阻的温度测量和距离补偿,可以使系统在很大的温度范围内精确测量。如果需要测得的距离和温度数据可以存储在FLASH 存储器中。加上额外增益和使用多态LCD 来读出尽可能多的位数也可以增大测量范围。
 
MSP430源程序(汇编)

;******************************************************************************
;    MSP430F413 超声波距离测量示范程序
;    
;******************************************************************************
;    寄存器定义
;******************************************************************************
#define      DIGITS  R11
#define      Result  R10
#define      IRBT    R9
#define      IROP1   R4
#define      IROP2L  R5
#define      IROP2M  R6
#define      IRACL   R7
#define      IRACM   R8

;******************************************************************************
;   变量定义
;******************************************************************************
             RSEG UDATA0             
             htX100_msw: DS 2 ;         字变量存贮在RAM 200h和201h
             htX100_lsw: DS 2 ;                         202h和203h
                       
;******************************************************************************
             RSEG    CSTACK                  ; 指向开始堆栈段区
             DS      0                         
             RSEG    CODE                    ; 指向开始代码段区
RESET        MOV .w   #SFE(CSTACK),SP         ; 定义堆栈
             call    #Init_Device            ; MSP430 初始化
             MOV .w   #0,DIGITS               ; 初始化DIGITS 为'0'
Mainloop    
             bic.b   #CAON,&CACTL1           ; 比较器A关闭
             call    #Display                ; 显示数据在LCD上
             bis.w   #LPM3,SR                ; 在LPM3模式等待
            
;************************开始超声波发出和捕获测量******************************                                      
            
             clr.w   &CCTL1                  ; 不使用CCTL1
             clr.w   &TACTL                  ; 不使用timer_A      
             bis.b   #BIT0,&P1OUT            ; LED开           
SetupTimerA   MOV .w   #TASSEL0+TACLR+MC1,&TACTL
                                             ; TACLK = ACLK,16位向上模式
             bis.b   #BIT5,&P1SEL            ; ACLK o/p on P1.5
             MOV .w   #12,&CCR1               ; 12 周期 40KHz爆发
             MOV .w   #CCIE,&CCTL1            ; 比较模式中断
             bis.w   #LPM0,SR                ; 等待CCR1中断
             bic.b   #BIT5,&P1SEL            ; ACLK o/p on P1.5 OFF        

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


本文关键字:超声波  MSP430单片机单片机-工控设备 - MSP430单片机