找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1892|回复: 0
打印 上一主题 下一主题
收起左侧

基于msp430f149单片机的SR04的超声波源程序

[复制链接]
跳转到指定楼层
楼主
超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了,另外还有比较常用的国外的几款SRF系列的超声波模块,目前的超声波模块精度能到1cm。

1.模块简介

HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。

2. 模块参数


(1)模块主要电气参数

使用电压:DC---5V   静态电流:小于2mA       电平输出:高5V     电平输出:低0V         

感应角度:不大于15度   

探测距离:2cm-450cm

高精度 可达0.2cm

  超声波模块有4个引脚,分别为Vcc、  Trig(控制端)、  Echo(接收端)、 GND;其中VCC、GND接上5V电源, Trig(控制端)控制发出的超声波信号,Echo(接收端)接收反射回来的超声波信号。

  此次调试主要是调试的是基于msp430f149的超声波测距的,没有外加显示,有需要的小伙伴可以持续关注,后续会发布相应的帖子。

  超声波的使用,使用了定时器A的定时和对上升沿和下降沿的捕获等;全部代码在附加件中,欢迎大家下载和交流!

部分代码如下:

#pragma vector=TIMERA1_VECTOR

__interrupt void Timer_A(void)

{


  switch(TAIV)

  {

    case 2 :if(Edge==RISE)

              {

                RiseCapVal = TACCR1;

                TACCTL1 |= CAP+CM_2+CCIS_0+SCS+CCIE;//改为下降沿捕获

                Edge = FALL;//下降沿捕获标志

              }

            else

              {


                _DINT();

                Period = TACCR1-RiseCapVal;  //这里要注意是否考虑溢出,跟测试距离有关,希望大家拓展

                S=(Period*17)/100;   // 距离计算 s=340m/s*Period/2*10^(-6)*1000(mm)

                TACCR1 = 0;

                TACCTL1|= CAP+CM_1+CCIS_0+SCS+CCIE;//改为上升沿捕获

                Edge = RISE;//上升沿捕获标志

                _EINT();

              }

             break;

    case 4 : break;

    case 10: //TA_Overflow_Cnt++;   //溢出标志

             break;

  }

}


void init_timerA(void)

{

  TACTL   |= TASSEL_2+MC_2+TAIE+TACLR+ ID_3;//SMCLK,8MHz,8分频,连续计数,中断允许,计数器清零

  TACCTL1 |= CAP+CM_1+CCIS_0+SCS+CCIE;//捕获模式,上升沿捕获(CM_2),CCI1A输入,同步捕获,中断允许

}


void init_IO(void)

{

  P1DIR |= BIT1;   //P1.1输出,普通I/O

  P1DIR &=~ BIT2;  //P1.2输入

  P1SEL |=  BIT2; //P1.2第二功能,捕获输入


  P1OUT &=~BIT1;  // 开始低电平,控制驱动波形发生

}


void init_clk(void)

{

    uchar i;

    BCSCTL1&=~XT2OFF;   //打开XT振荡器

    BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M

    do

    {

      IFG1 &= ~OFIFG;//清除振荡错误标志

      for(i = 0; i < 0xff; i++)  _NOP();//延时等待

    }

    while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待晶振起振

    IFG1&=~OFIFG;


}



全部代码51hei下载地址:
单纯的超声波测距.zip (116.21 KB, 下载次数: 15)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表