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

用STM32单片机成功驱动一个超声波模块后,接下来便有了疑问如何用stm32单片机驱动多个超声波模块呢?(驱动一个超声波模块可以参考:stm32驱动超声波模块测距
超声波模块型号为HC-SR04,模块驱动方式选择利用外部中断的方式驱动(具体细节可参见上面链接)。
经过一个下午的思考实验发现了两种驱动多个超声波模块的方法:

  1. 分时测量
  2. 同时测量

1.分时测量:

通过类似于实现流水灯的方法,多个超声波模块依次测量并将测量结果依次输出。
优点:各个超声波模块测量过程中不会出现相互干扰的情况。
缺点:整体测量周期长,数据采样频率比较低。
这里有几个问题点需要注意:

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

2.同时测量:

创建一个系统时钟,每一个超声波模块在测量过程中只记录时间戳,不直接占用定时器,这样便可以实现多个超声波模块同时测量。
优点:整体测量周期短,数据采样频率高。
缺点:各个超声波模块在测量过程中可能出现相互干扰情况。
使用建议:将各个模块尽量大角度朝不同的方向。

  • 18
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
超声波模块是一种常用的测距传感器,可以通过发送并超声波信号来测量与目标物体的距离。stm32f103c8t6是一款单片机芯片,我们可以通过编写驱动程序来实现与超声波模块的通信和控制。 首先,我们需要定义超声波模块的引脚连。通常,超声波模块一个触发引脚和一个收引脚,我们需要将其连stm32f103c8t6的GPIO引脚上。 在驱动程序中,我们需要初始化超声波模块的GPIO引脚。通过设置GPIO引脚的模式为输出,我们可以将触发引脚设置为高电平,然后延时一段时间。着,我们将触发引脚设置为低电平,以向超声波模块发送触发信号。 超声波模块收到触发信号后,会发射超声波信号,并开始计时。当超声波信号被目标物体反射回来时,收引脚会收到一个高电平信号。我们可以利用定时器来计算收引脚高电平的持续时间,从而得到超声波信号的往返时间。 根据声速和往返时间,我们可以计算出目标物体与超声波模块的距离。通常,声速的值为340米/秒,根据公式 距离 = 声速 × 时间/2,我们可以得到最终的距离值。 除了测量距离外,我们还可以通过调整超声波信号的频率和幅度,来实现不同的功能。例如,我们可以通过测量超声波信号往返时间的变化来检测目标物体的运动。 总结来说,编写stm32f103c8t6超声波模块驱动程序需要初始化GPIO引脚,发送触发信号,计算往返时间,并根据声速计算距离。通过这些步骤,我们可以实现对超声波模块的控制和测距功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值