当前位置:   article > 正文

使用STM32F407控制5路超声波传感器_stm32 同时读取五个模拟量传感器

stm32 同时读取五个模拟量传感器

       最近在做小车避障的功能,需要用STM32F407控制5个传感器,结合板子的示例程序,调试了一段时间,终于成功读出5路传感器的测距信息。

      传感器原理不详细说了,基本上从Trig脚给一个脉宽10us以上的脉冲,然后发射探头发出8个40KHz的脉冲,检测到回波后,从Echo管脚输出高电平,高电平的持续时间与距离值关系为:(高电平时间*340m/s)/2。使用中,只要采集到Echo脚高电平的持续时间,就能测距了。

       在STM32F407上测量某一管脚的电平持续时间需要使用定时器的捕获功能(不知道有没有更简单的实现方法),查了手册,对于捕获模式的解释:在输入捕获模式下,当相应的ICx 信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx)来锁存计数器的值。发生捕获事件时,会将相应的CCXIF 标志(TIMx_SR 寄存器)置1,并可发送中断或DMA 请求(如果已使能)。如果发生捕获事件时CCxIF 标志已处于高位,则会将重复捕获标志CCxOF(TIMx_SR 寄存器)置1。可通过软件向CCxIF 写入0 来给CCxIF清零,或读取存储在TIMx_CCRx寄存器中的已捕获数据。向CCxOF 写入0 后会将其清零。其实就是在上升沿和下降沿分别记录定时器计数器的值,其差值相当于脉冲宽度。关于指点,网上找的图可以较清晰地表达:

       首先设置定时器通道 x 为上升沿捕获,这样, t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。 这样,根据定时器的计数频率,可以算出 t1~t2 的时间,从而得到高电平脉宽。 在t1~t2时,可能计数器会超过设定值arr,产生定时器溢出,这样就要对定时器溢出处理。最终,如图所示,t1~t2之间,CNT计数的次数等于:N*ARR+CCRx2,有了这个计数次数,再乘以 CNT 的计数周期,即可得到 t2-t1 的时间长度,即高电平持续时间。

       我用了TIM2和T

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/684095
推荐阅读
相关标签
  

闽ICP备14008679号