基于STM32F103ZET6 HC_SR04超声波测距模块

这是最后的实验现象,改变不同的角度即可测得距离

板子 PZ6806L 超声波模块 HC_SR04

HC_SR04模块讲解

通过该超声波模块说明书,可明白供电需VCC 5V  还需GND  ECHO(回响信号)  TRIG(触发信号)

也就是说总共需要4根线,其中VCC和GND只需要接到开发板上的5V电源和GND即可

这是我的接线图

ECHO 使用的是PC3引脚,TRIG 使用的是PC2引脚

PC3和PC2只是普通的引脚,没任何特殊性,可凭自己想法配置不同的引脚

从超声波时序图看出,若想能够使用该模块,

1 使用你要触发信号拉高10us以上

2 接着模块内部自己发出8个40khz脉冲,不需要管,接着模块会输出回响信号,而回响信号高电平的

脉冲宽度,与距离成正比

以上知道这些就可以正常使用,至于距离公式后面会再解释

注意:

接着就是代码部分,主函数最后再介绍

HC_SR04配置函数及ECHO高电平时间

首先是头文件

配置一个变量 time,用于存储回响信号高电平的时间

void hc_sr04_init(void); 该函数是引脚的配置函数

float  Get_hcsr04length(void);该函数是用来发送触发信号,并得到回响信号的高电平时间

void hc_sr04_init(void)
{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ,ENABLE);//打开GPIOC的时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//配置引脚2,trig触发信号
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//配置为推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);//触发信号,首先把它拉低,避免额外影响

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//配置引脚3,echo回响信号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//配置为模拟输入
GPIO_Init(GPIOC, &GPIO_InitStructure);//echo信号
GPIO_ResetBits(GPIOC,GPIO_Pin_3);//也同样拉低
}

float Get_hcsr04length(void)
{
GPIO_SetBits(GPIOC,GPIO_Pin_2);
delay_us(20);
GPIO_ResetBits(GPIOC,GPIO_Pin_2); //TRIG发送触发信号,延时10us以上就可以了

while(PCI(3)==0) //当echo一直是低电平的时候,就清空,并且关闭计时器
{
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2,DISABLE);
}
while(PCI(3)==1)//一旦echo被拉高了,就说明模块传需要的数据回来了,打开计时器
{
TIM_Cmd(TIM2,ENABLE);
}
time=TIM_GetCounter(TIM2);//当被拉高的echo再次变回低电平时,将计时器的值赋给time
return time;//返回time
}

计时器函数的配置

void TIM_Counter(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2的时钟

TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 71;//72MHx/72=1us,
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
TIM_Cmd(TIM2,DISABLE);//关闭,需要的时候再打开
}

部分主函数

int main(void)
{

float Distance=0;//存储距离
delay_init(72); //配置滴答计时器
RCC_Configuration();//时钟配置
GPIO_Configuration();//GPIO配置,只是PC0(LED0),用来提示系统正常运行
TIM_Counter();//计时器的配置
USART1_Configuration();//串口配置,
hc_sr04_init();//HC_SR04初始化配置好(即PC2,PC3的配置)

  while(1)
  {
GPIO_ResetBits(GPIOC,GPIO_Pin_0);//提示系统正常运行进该循环

Distance =(Get_hcsr04length()*340/2/1000);//从函数得到距离值,340是声音的速度,除于2,是因为声波发出到接收,是一次来回,除于1000,是将距离定为mm(毫米),该函数返回的就是之前time的值
printf("距离是%.2f\r\n",Distance);
delay_ms(1000);//延时1秒钟,这样不会输出太过频繁
  }
}

这是我的工程文件

百度网盘  密码 v3y7

https://pan.baidu.com/s/1MNVf70_gnZ5aqSm6XInrMA

如有需要,可结合自己板子修改下代码即可使用,欢迎交流,咱们共同进步

原文地址:https://www.cnblogs.com/zzlloveyty/p/10696656.html

时间: 2024-07-31 05:19:00

基于STM32F103ZET6 HC_SR04超声波测距模块的相关文章

[自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发

前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分展示 三.基于C#的客户端软件说明 3-1.整体框架介绍: 3-2.部分技术细节介绍 3-2-1.串口操作 3-2-2.JiSuan函数说明及核心算法介绍 四.阶段小结 五.相关链接 一.整体思路 >_<" 如下图,利用我们上三节开发的超声波发射与接收设备构成一个:2固定接收头+1可移动

[自娱自乐] 3、超声波测距模块DIY笔记(三)

前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对齐的情况下最多只有10CM.本节主要介绍并制造一种大功率超声波发射装置~ 目录 一.浪里淘金,寻找最简超声波功率提高方案 1.1.优化波形发生程序 1.2.尝试各种其他超声模块方案 1.3.用三极管放大信号 1.4.MAX232放大信号方案 二.步步为营,打造高效准确超声测距算法 2.1.接收MCU

[自娱自乐] 2、超声波测距模块DIY笔记(二)

前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发射模块功率太小的问题,下面主要做该过程的总结! 一.尝试找出一个简单的超声波接收电路: >_<" 首先根据我现有的电子元件,最终找到一个比较适合的简单设计方法:这里用一个芯片CX20106A也就是上一节我说的这种方案简单但是不利于理解超声波接收部分的具体细节!但是为了方便设计,我还是选择

超声波测距模块

要做的事:两个视频介绍.算坐标 疑问:探测频率.和探测最大耗时.探测最大耗时里面的返回值范围.返回距离比返回时间耗时长(且5m和10m一样) 1.探测频率:500Hz,即每秒500次,一次2ms. 若安装12个,则扫描一圈24ms. 若机器人的速速为1m/s,24ms前进24mm=2.4cm 2.探测时间:传输时间+1ms, 若10m=29ms+1ms=30ms,一圈=30ms*12=360ms=0.36s,机器人前进36cm. 若3m=9ms+1ms=10ms,一圈=10ms*12=120ms

数字电路期末课程设计总结(二) ——超声波测距模块

废话不多说. 超声波测距模块有5个引脚,这里我们只用4个. 超声波测距模块引脚如上所示,Trig为触发信号输入,Echo为回响信号输出,这两个引脚为实现测距功能的核心功能引脚. 时序图如下: 超声波模块的工作原理为:采用触发测距,每次触发给至少10μS高电平信号,收到高电平信号后,模块自动发送8个40kHz方波的超声波信号,并自动检测是否有信号返回:若有信号范围,通过Echo输出一个高电平,高电平持续时间就是超声波从发射到返回所用的时间. 由超声波模块工作时序图可以看出,每次测量时,给Trig控

[自娱自乐] 1、超声波测距模块DIY笔记(一)

前言 就像学软件要了解些组成.编译等知识一样,玩硬件如果只用人家封装好的模块,而不了解它们的内部机制,感觉也有点不自在~其实,在很长时间以前就觉得该在模拟电路方面深入点了,可是总是找不到切入点,拿无线电的知识发现根本无法涉足,最近正好由于做一个软硬件结合的“玩具”而引发了必须自己设计传感器的需求,所以就趁势在模拟电路的海洋里遨游下吧,嘿嘿~下面是今天(不,是昨天)做的关于这方面的调查和研究,哈哈,课太多又要把最新版的Ubuntu想方法装进我的老掉牙的只有40G大小的移动硬盘里,结果就忙到了现在~

KS103超声波测距模块

max232:电平转换芯片,将电脑的RS-232标准串口(高+12V,低-12V)转换为(高+5V,低0V). 电脑串口(RS -232) => 单片机串口(TTL串口) SIPEX SP3232EEN:西伯斯 KS103超声波测距模块,布布扣,bubuko.com

Arduino系列之超声波测距模块代码(一)

这里我将简单介绍超声波测距模块 SR04超声波传感器: 是利用超声波特性检测距离的传感器,其带有两个超声波探头,分别用作于发射和接收超声波.范围在3-450cm. 工作原理: 超声波发射器向某一方向发射超声波,在发射的同时开始计时: 超声波在空气中传播,途中遇到障碍物则立即返回,超声波接收器收到反射波则立即停止计时. 声波在空气中传播速度为340m/s,根据计时器记录时间t,即可算出发射点距离障碍物的距离S, 即S=340m/s*t/2,这就是所谓的时间差测距法. 超声波模块的使用及时序图: 使

「51单片机」收发一体超声波测距模块分析+代码

我用的超声波型号是US-020,四个接口的超声波用法基本相同. 一.概述 US-020超声波模块测距范围:2cm~7m 供电电压5V,静态功耗低于3mA 二.实物图 尺寸:45mm*20mm*1.6mm 三.接口 1.VCC 电源,直流5V 2.Trig 向此管脚输入10us以上高电平,可触发模块测距 3.Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和 4.GND 接地 四.测距工作原理 只要在Trig管脚输入10us以上高电平,系统会自动发出8个40KHz的超声波脉冲,然后