stm32外界stm32连接多个传感器器必须启动ADX模块吗

包含STM32模拟IIC程序同时含有MPU6050,L3G4200BMP085,ADXL345HMC5883L这些加速度计、陀螺仪等的驱动函数,能够直接读取数据也可以使用其中的IIC函数完成其他stm32连接多个传感器器读取。

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

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

  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便很明显知道该超声波模块没有接

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

我要回帖

更多关于 stm32连接多个传感器 的文章

 

随机推荐