今天想着把测距模块全部一网打尽了,把点对点和点对面两种测距全部搞定,于是有了这篇关于超声波模块的博客分享,主要还是分享代码,原理啥的网上都有,这次是基于MSP430F5529的driverlib库,没有找到开源的代码就自己分享一下了!

1.基本原理

还是稍稍讲一下原理,不然等下可能代码看不懂。两个引脚,一个TRIG,一个ECHO,就是触发和回响,顾名思义,trig是用来触发启动超声波模块的,echo模块是用来回收超声波的。此次使用的是US-100超声波模块,其实和常见的HC-SR04/5系列是一样的,代码均可用。

基本原理
trig引脚给一个大于10us的高电平脉冲,即会启动超声波模块。

启动之后,模块内部会发送一段8个40KHZ的脉冲,随后,在echo引脚会接受到一段时长的高电平,这个高电平时长就是模块发出的脉冲出去之后,碰到障碍物返回的时间。

2.代码

废话不多说,直接上大家最喜欢的代码。

1.初始化配置

/** ultrasonic.c**  Created on: 2022年7月19日*      Author: S10*/
#include "ultrasonic.h"void wave_Init(void)
{GPIO_setAsOutputPin(Trig_Port,Trig_Pin);//设置触发引脚为输出模式GPIO_setAsPeripheralModuleFunctionInputPin(Echo_Port,Echo_Pin);//设置接收引脚为输入模式//Start timer in continuous mode sourced by SMCLKTimer_A_initContinuousModeParam initContParam = {0};//定义连续模式初始化结构体initContParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;//确定时钟源SMCLKinitContParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_16;//16分频initContParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;//禁用Tim A中断initContParam.timerClear = TIMER_A_DO_CLEAR;//重置计数方向等.....initContParam.startTimer = false;//先不开启计数器Timer_A_initContinuousMode(TIMER_A2_BASE, &initContParam);//清除比较模式中断(初始化比较模式)Timer_A_clearCaptureCompareInterrupt(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);Timer_A_initCaptureModeParam initCapParam = {0};//定义比较模式初始化结构体initCapParam.captureRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2;//选择TIM_A2的捕获比较通道2initCapParam.captureMode = TIMER_A_CAPTUREMODE_RISING_AND_FALLING_EDGE;//捕获上升沿initCapParam.captureInputSelect = TIMER_A_CAPTURE_INPUTSELECT_CCIxA;//确定输入选择为CCIxA(这个不知道怎么看怎么确定)initCapParam.synchronizeCaptureSource = TIMER_A_CAPTURE_SYNCHRONOUS;//与时钟同步initCapParam.captureInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE;//使能捕获中断Timer_A_initCaptureMode(TIMER_A2_BASE, &initCapParam);Timer_A_startCounter( TIMER_A2_BASE,//开启计时TIMER_A_CONTINUOUS_MODE);//Enter LPM0, enable interrupts开启全局中断__bis_SR_register(GIE);//For debugger__no_operation();
}void wave_star(void)
{GPIO_setOutputHighOnPin(Trig_Port,Trig_Pin);delay_us(20);//10us高电平即可触发GPIO_setOutputLowOnPin(Trig_Port,Trig_Pin);
}
/** ultrasonic.h**  Created on: 2022年7月19日*      Author: S10*/#ifndef ULTRASONIC_H_
#define ULTRASONIC_H_
#include "driverlib.h"#define Trig_Port GPIO_PORT_P2
#define Trig_Pin  GPIO_PIN4
#define Echo_Port GPIO_PORT_P2
#define Echo_Pin  GPIO_PIN5#define CPU_CLOCK       16000000
#define delay_us(us)    __delay_cycles(CPU_CLOCK/1000000*(us))void wave_Init(void);
void wave_star(void);#endif /* ULTRASONIC_H_ */

初始化代码大家根据自己所选引脚进行修改即可。

2.中断服务函数

switch(__even_in_range(TA2IV,14))//中断标志位——对应捕获通道{case 2 :break;//如果是CCR1产生的中断case 4 : //如果是CCR2产生的中断if(GPIO_getInputPinValue(Echo_Port,Echo_Pin) == 1)//读取此时电平状态,高电平则为上升沿捕获{Data_first = Timer_A_getCaptureCompareCount(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);}else//读取此时电平状态,低电平为下降沿捕获{Data_second = Timer_A_getCaptureCompareCount(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);if(overflow_times == 0)HIGH_Time = (Data_second - Data_first);elseHIGH_Time = ((Data_second - Data_first) + overflow_times * 65535);Distance = (((float)HIGH_Time/1000000)* 340)/2 ;//m}
//        Timer_A_clearCaptureCompareInterrupt(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);break;case 10: break;case 14:if(GPIO_getInputPinValue(Echo_Port,Echo_Pin)){overflow_times++;}elseoverflow_times = 0;
//        Timer_A_clearTimerInterrupt(TIMER_A2_BASE);break;//此时发生计数器溢出default: break;}// Enable global interrupt_BIC_SR_IRQ(LPM0_bits);

大概就是这些了,还需要注意的一点是在主函数中要记得调用超声波启动函数。

在使用过程中,超声波模块和平面的法向量之间的角度需要注意,否则会造成测量不准确。

该模块测量精度在2cm-450cm,可谓是非常强大了.有任何疑问可以私信我或者评论区留言,看到一定回。有表述不好的地方或者可以优化的地方,也请各位点出来一下,共同进步!

模块学习(四)——超声波测距相关推荐

  1. 输入捕获模块的使用–超声波测距

    输入捕获模块的使用–超声波测距 @(MSP432P401R) 输入捕获的配置 基本默认即可 输入捕获的API的使用 参数 Capture_Mode即捕获模式,经实际测试,MSP432P401R只能使用 ...

  2. 我的stm32学习——HC-SR04超声波测距模块

    一.前言 从大一开始一直有着写点东西的想法,如今即将迈入大三,却迟迟没有动笔.没有太多的借口,就是懒,"间歇性的踌躇满志,持续性的混吃等死"说的就是我本人啦.前不久刷微信看到同学在 ...

  3. 学习HC-SR04超声波测距模块,代码附带卡尔曼滤波

    硬件引脚 VCC-供5V的电压(一定要是5v) GND-接地 Trig-HC-SR04超声波测距模块上的触发引脚,用于向模块发送一个10微秒的高电平触发信号,触发模块开始进行距离测量 Echo-用于接 ...

  4. 51单片机学习篇-- --超声波测距(HC--SR04)笔记

    开篇先说一句废话···· 本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛! 开篇 本单片机购买的时候带的超声波模块是HC-SR04,根据好多材料都说用这个的原因是便宜,,,不过没关系 ...

  5. 基于52单片机的超声波测距模块(hc-sr04超声波测距模块+1602液晶显示器)

    二年级课设做了超声波测障仪,用的是hc-sr04超声波测距模块+1602液晶显示器和52单片机. 由于自己之前的学习很是不牢固,在课设的时候没少走弯路,最后在第二个周的星期五做了出来,浪费了很多的时间 ...

  6. python模块学习(四)

    re模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  7. Python3 学习第十一弹: 模块学习四之sys库

    sys模块 提供一些与python解释器关系紧密的变量和函数1> argv 命令行参数通过命令行可以向python传输参数2> exit([arg]) 程序退出,可以返回给命令行一个错误参 ...

  8. 超声波测距传感器模块在畜牧业的应用

    我国现代养殖是一种"高投入.高产出.高效益"的产业.资本密集型和劳动集约化是其基本特征.这种集约化的产业耗费了大量的人力和自然资源,并在某种程度上对环境造成负面影响.如今物联网应用 ...

  9. HC-SR04超声波测距模块介绍

    超声波简介 超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好.能量集中.传输过程中衰减较小.反射能力较强等优点.超声波传感器可广泛应用于非接触式检测方法,它不受光线.被测物颜 ...

  10. 超声波测距模块的使用

    超声波测距模块的使用 超声波测距模块: 超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前 ...

最新文章

  1. Linq基础知识小记二
  2. 使用谷歌 Colab Notebooks,这 6 个小技巧你需要掌握
  3. 收藏!深度学习计算机视觉模型解析!
  4. 快照复制,事务复制,合并复制的区别
  5. ipsec***原理与配置
  6. 二维矩阵与二维矩阵之间的卷积
  7. 【百家稷学】深度学习与计算机视觉核心理论与实践(中国地质大学实训)
  8. 编辑距离—leetcode72
  9. 复仇!3:1 KO叙利亚!.NET程序员用算法推演出国足进世界杯概率...
  10. 2、JAVA开发环境的搭建
  11. invoke 按钮点击_h5+ app内点击按钮实现复制功能 实现方法
  12. onenote组织知识体系_我们的家人教给我们有关组织生活的知识
  13. aspnet登录界面代码_SAP系统基础操作培训1-环境登录介绍
  14. docker 启动mysql_两行命令安装MySQL,Docker就是效率的化身
  15. PPT 处理图片背景为透明
  16. 关于Java基础部分知识的综合应用之成员调度系统的项目
  17. AppStore上线审核
  18. Vue2.0高仿饿了么核心模块移动端Web App项目爬坑(一)
  19. Input elements should have autocomplete attributes (suggested: new-password)
  20. 【Aviator】(二)应用实战

热门文章

  1. 计算机网络——面试复习
  2. 【Simulink教程案例20】基于simulink的OFDM通信系统信道估计建模与仿真
  3. 用java代码实现获取微信公众号用户关注列表
  4. 三道经典的逻辑推理面试题:病狗、三盏灯、买鸡
  5. Spring Boot+MyBatis Plus+JWT 问卷系统!开源!
  6. 如何解决:对路径的訪问被拒绝这个问题.
  7. 实时更新:TIOBE世界编程语言排行榜(2021年11月份)
  8. 数据存储大讲堂:谈磁盘列阵与RAID技巧
  9. SegmentFault 讲堂一周岁:Keep learning
  10. 多页面分页打印功能实现