标题: 基于STM32超声波测距代码 [打印本页]

作者: ewqdsacxz    时间: 2018-12-3 21:45
标题: 基于STM32超声波测距代码
我所使用的测距模块是HC-SR04,C-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测
距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。

HC-SR04基本工作原理:
(1)采用IO口TRIG触发测距,给最少10us的高电平信呈。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回, 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2。


程序编写思路是:1、配置好使用到的GPIO以及定时器;
2、给模块TRIG端口发送大于10us的高电平信号,当收、收到ECHO回响信号是,打开定时器开始定时;
3、当回响信号消失,关闭定时器;
4、通过定时器定时时间来确定距离。

上时序图表明你只需要提供一个 10uS以上脉冲触发信号,该模块内部将发出8个 40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。 公式: uS/58=厘米或者uS/148=英寸; 或是: 距离=高电平时间*声速( 340M/S) /2;建议测量周期为 60ms以上, 以防止发射信号对。
回响信号的影响

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "key.h"
  5. #include "usart.h"
  6. #include "exti.h"
  7. #include "timer.h"
  8. #include "UltrasonicWave.h"


  9. int main(void)
  10. {
  11. // SystemInit();
  12.         delay_init(72);                  //延时初始化
  13.         NVIC_Configuration();
  14.         uart_init(9600);         //串口初始化
  15.         LED_Init();                            //LED端口初始化
  16.         KEY_Init();               //按键端口初始化
  17.         Timerx_Init(5000,7199);   //10Khz的计数频率,计数到5000为500ms
  18.         UltrasonicWave_Configuration();               //对超声波模块初始化

  19.         while(1)
  20.         {
  21.                 UltrasonicWave_StartMeasure();                //开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间

  22.                 LED0=!LED0;
  23.                 delay_ms(1000);               
  24.                
  25.                
  26.         }
  27. }
复制代码

所有资料51hei提供下载:
STM32超声波测距.rar (300.81 KB, 下载次数: 478)




作者: 子墨高    时间: 2018-12-28 11:12
很给力
作者: 18668004028    时间: 2018-12-28 17:15
可以研究一下
作者: 噜啦    时间: 2020-12-18 08:39
很实用

作者: 809128670    时间: 2021-3-13 11:19
可以用,很好
作者: yangshanglin    时间: 2021-12-5 11:21
你好,我最近正在学习,我使用您的代码他显示一直都是0.85cm,不会变化,是我hc-sr04的问题吗1




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1