使用STM32F407控制5路超声波传感器

       最近在做小车避障的功能,需要用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

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值