单片机
返回首页

STM32驱动多个超声波模块(只用一个定时器)

2022-08-10 来源:csdn

用STM32单片机成功驱动一个超声波模块后,接下来便有了疑问如何用stm32单片机驱动多个超声波模块呢?(驱动一个超声波模块可以参考:stm32驱动超声波模块测距)

超声波模块型号为HC-SR04,模块驱动方式选择利用外部中断的方式驱动(具体细节可参见上面链接)。

经过一个下午的思考实验发现了两种驱动多个超声波模块的方法:


分时测量

同时测量

1.分时测量:

通过类似于实现流水灯的方法,多个超声波模块依次测量并将测量结果依次输出。

优点:各个超声波模块测量过程中不会出现相互干扰的情况。

缺点:整体测量周期长,数据采样频率比较低。

这里有几个问题点需要注意:


一个超声波模块需要在测量完成后再开始下一个模块的测量

超声波模块在测量的过程中有时会跳动明显超出量程的值

在带电拔掉超声波模块可能出现程序异常

为解决上面几个问题,需要根据超声波模块的量程(2cm-400cm)进行限辐,这里我根据需要将超声波模块的最远距离设定为255cm。这样最远距离的测量时间为15ms(255cm x 2 / 100 / 340m/s * 1000 = 15ms),这样便可以将定时器计时超过15ms时直接按15ms计算。这样便基本可以解决上面的问题1和问题2,一个模块测量完成的时间不会超过15ms(实际预留时间时建议在此基础上多几毫秒),这样每过一个15ms便可以完成一个模块的测距。问题3可以通过每次测量开始前将超声波数据的初始值初始化为量程的最小值2cm,并将超声波模块的ECHO引脚设为低电平来解决(在上电状态下拔掉超声波模块,ECHO引脚会呈现高电平状态导致一直进外部中断)。这样如果串口上位机距离值一直打印为2cm便很明显知道该超声波模块没有接。


2.同时测量:

创建一个系统时钟,每一个超声波模块在测量过程中只记录时间戳,不直接占用定时器,这样便可以实现多个超声波模块同时测量。

优点:整体测量周期短,数据采样频率高。

缺点:各个超声波模块在测量过程中可能出现相互干扰情况。

使用建议:将各个模块尽量大角度朝不同的方向。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章