精华内容
下载资源
问答
  • 用于stm32的hcsr04控制模板,代码为项目所用,调试无bug,可通过修改收发引脚达到串行控制多个超声波模块的效果,代码移植方便,逻辑清楚,实时打印距离,欢迎下载调试!
  • stm32-HC-SR04超声波传感器例程,里面有详细的代码,可以直接使用。
  • stm32超声波传感器

    千次阅读 2021-01-15 21:56:54
    GPIOD #define dist_Trig_RCC RCC_APB2Periph_GPIOD 在dist.c中对引脚进行初始化 //对超声波传感器的端口进行初始化 void dist_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量 RCC_APB2...


    一、简介

    在这里插入图片描述

    检测物体距离,提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;
    小于2cm会不正常输出
    测试距离=(高电平时间声速(340M/S))/2 。
    4.测距离公式: uS/58=厘米或者 uS/148=英寸; 或是: 距离=高电平时间
    声速( 340M/S) /2; 建议测
    量周期为 60ms 以上, 以防止发射信号对回响信号的影响

    二、工作过程

    Trig置高 10uS 以上,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。 回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:距离= 高电平时间*声速(340M/S)/2;

    三、连接

    在这里插入图片描述

    Vcc:接5V电压
    GND:接地
    Trig:触发控制信号输入,给最少 10us 的高电平信呈 接PD5
    Echo:信号输出,PD3。
    四、代码
    在dist.h中对引脚进行宏定义,方便移植

    #define dist_Echo_PORT GPIOD
    #define dist_Trig_PORT GPIOD
    #define dist_Echo_PIN GPIO_Pin_3
    #define dist_Trig_Pin GPIO_Pin_5
    
    #define dist_Echo_RCC RCC_APB2Periph_GPIOD
    #define dist_Trig_RCC RCC_APB2Periph_GPIOD
    
    在dist.c中对引脚进行初始化
    //对超声波传感器的端口进行初始化
    void dist_INIT(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
    	
    	RCC_APB2PeriphClockCmd(dist_Echo_RCC|dist_Trig_RCC,ENABLE);//开启时钟
    	
    	GPIO_InitStructure.GPIO_Pin=dist_Echo_PIN;  //选择你要设置的IO口
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;	 //设置浮空输入
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  //设置传输速率
    	GPIO_Init(dist_Echo_PORT,&GPIO_InitStructure); 	   /* 初始化GPIO */
    
    	GPIO_InitStructure.GPIO_Pin=dist_Trig_Pin;  //选择你要设置的IO口
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 //设置推挽输出
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  //设置传输速率
    	GPIO_Init(dist_Trig_PORT,&GPIO_InitStructure); 	   /* 初始化GPIO */
    
    }
    

    因为需要发送—接收使用的是定时器的计时功能,所以需要对定时器进行初始化

    void TIM4_Init(void)
    {
    	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟
    	
    	 TIM_TimeBaseInitStructure.TIM_Prescaler = 0;
    	  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    	  TIM_TimeBaseInitStructure.TIM_Period = 0xffff;
    	  TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
    	  TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    	  TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);   
    	  TIM_PrescalerConfig(TIM4,71, TIM_PSCReloadMode_Immediate);   
    	
    	  TIM_ARRPreloadConfig(TIM4,DISABLE);  
    	  TIM_SetCounter(TIM4,0);			 //TIM4计数值清零
    	  TIM_Cmd(TIM4,DISABLE); 			 //TIM4计数器失能
    }
    

    根据定时器的值,来确定离物体的距离

    int GetDistance(void)
    {
      int dis;
    	int count;
    	GPIO_ResetBits(dist_Echo_PORT,dist_Echo_PIN);			//echo端口复位
    	GPIO_ResetBits(dist_Trig_PORT,dist_Trig_Pin);			//trig端口复位
        TIM_SetCounter(TIM4,0);			 //TIM4计数值清零
    	GPIO_SetBits(dist_Trig_PORT,dist_Trig_Pin);		          //trig置高 发出10us的高电平信号 
    	delay_nus(10); 
    	GPIO_ResetBits(dist_Trig_PORT,dist_Trig_Pin);
    	delay_nus(100);  		  
    	while(GPIO_ReadInputDataBit(dist_Echo_PORT, dist_Echo_PIN) == 0);
    	TIM_Cmd(TIM4,ENABLE);    //开启计数器
           //开启定时器开始计时
    	while(GPIO_ReadInputDataBit(dist_Echo_PORT, dist_Echo_PIN));   //等待echo置低
    	TIM_Cmd(TIM4,DISABLE);   //关闭计数器
    
    	count = TIM_GetCounter(TIM4);//获取计数器值
    	dis = (int)count/60.034;//转换为距离,即29.034us超声波能传播1cm
    	return dis;
    }
    

    最后在main函数里面可以用串口打印查看

    int main()
    {
    	int dist=0;
    	SysTick_Init(72); 
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
    	LED_Init();
    	USART1_Init(115200);
    	dist_INIT();
      TIM4_Init(); 
    	
    	while(1)
    	{
    		dist=GetDistance();
    		printf("距离为:%d\n",dist);
    		delay_ms(1000);
    	}
    }
    

    问题:之前做智能小车比赛的时候都是用这个代码,没有什么问题,换了个板子就不行了,下学期上课再研究

    展开全文
  • STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关资料 STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关资料 STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关...
  • 这是关于超声波传感器STM32平台上实现的,HC-SR04传感器,欢迎大家下载
  • 基于STM32超声波传感器测距(含代码)

    万次阅读 多人点赞 2019-02-17 20:30:23
    上学期写的嵌入式系统课程实验报告中超声波传感器设计部分, 在此分享一下~ 1. 实验原理 超声波传感器采用的是HC-SR04,具有VCC、GND、Trig、Echo四个引脚,其使用方法为:将Trig 设置为高电平并保持至少10us,...

            上学期写的嵌入式系统课程实验报告中超声波传感器设计部分, 在此分享一下~

    1. 实验原理

            超声波传感器采用的是HC-SR04,具有VCC、GND、Trig、Echo四个引脚,其使用方法为:将Trig 设置为高电平并保持至少10us,传感器将发出 8 个脉冲的声波。对于声波产生回声所需的整个时间内, Echo 为高电平。测量该高电平时间即可知经过的时间,则可计算障碍物的距离。

             测量Echo 为高电平的时间是利用STM32的通用定时器进行输入捕获,测量得到的高电平时间通过公式:距离 =  Thigh *340/2 (m) ,其中Thigh 单位为秒(s), 340米/秒(m/s)为声速。

    2. 设计分析

            由STM32F4xx数据手册可知,所采用的板子有TM2-TM5四个通用定时器,该设计中采用TIM3定时器(16位)。它具有输入捕获模式、输出比较模式、单脉冲模式等多种功能模式,其中,输入捕获模式可以设置捕获上升沿或下降沿对输入信号进行捕获,发生捕获事件时,当前计数值可被获得,如果已使能中断则可触发中断。本设计采用输入捕获模式对Echo信号进行捕获与计时。

            根据HC-SR04数据手册得知,该超声波传感器射程为2cm-4m,代入距离公式中可得Thigh的范围大致为0.0235~ 0.0002857s,即1/Thigh的范围在42.5-8500Hz之间,故选择计数器时钟1MHz即可满足要求。

    3. 设计过程

    1. 用 STM32CubeMX配置对应引脚生成项目代码。

    1)配置引脚

    在左端设置TIM3为内部时钟输入,并使能通道1,可以看到右边PA6变为绿色,在电路图中寻找PA6对应的外部引脚编号为D12,该引脚将连接超声波传感器的Echo引脚,为方便器件连接,选择D12相邻的外部引脚D11作为输出与Trig连接,故配置D11相应的引脚PA7为GPIO输出。引脚配置图与电路图见下方所示。

    图1 引脚配置图

     

    图2 引脚对应电路图

     

    2)配置计时器TIM3参数

          板子没有焊外部晶振,故时钟源选用HIS,定时器时钟频率为16MHz。如下图所示。

    图3 时钟配置图

             定时器TIM3参数配置如下图所示,预分频系数位15,即TIM3定时器最后频率为16 MHz/(15+1)=1MHz;最大计数值为0xffff(65535),并在NVIC中开启中断。 

    图4 TIM3参数配置图

     

    3)生成项目代码

    2. 用Keil打开生成的项目代码,增加处理逻辑代码

    1)首先定义捕获次数capture_cnt,捕获计数值capture_value1,capture_value2,及高电平时间hightime与距离distance。

    2)查看HAL库中关于TIM的函数,在主函数的while 中添加以下代码。根据捕获次数进行不同操作。当捕获次数为0时,使能TIM3中断模式的输入捕获,并设置其触发捕获方式为上升沿触发;当发送捕获时,进入捕获中断函数(其中中断函数为自动生成的,里面调用了触发回调函数,故可直接在回调函数中处理),在捕获回调函数中获取当前计数值赋给capture_value1,再更改捕获方式为下降沿触发;当再次发生捕获时,将当前计数值赋给capture_value2,然后停止输入捕获。在主函数中,根据capture_value1和capture_value2直接的差值即可得到时间,再代入距离公式便求得距离。

     

     3)在主函数的while循环中打开串口接收,判断接收到的数据为00时,进行距离测量:给超声波模块的Trig引脚一个高电平。

     

    此处附上项目代码以供参考:

    https://download.csdn.net/download/qq_36999901/12912654

    展开全文
  • 超声波的使用步骤超声波原理概述相关资料工作原理时序图实物图连接代码实现详细步骤注意事项 超声波原理概述 相关资料 https://pan.baidu.com/s/15NaQ2ld7WXPiCuXjirEOBA 提取码:1234 工作原理 (1)采用IO口TRIG触发...

    超声波原理概述

    相关资料

    https://pan.baidu.com/s/15NaQ2ld7WXPiCuXjirEOBA 提取码:1234

    工作原理

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

    时序图

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

    实物图连接

    文章开头的资料链接有教程;
    以下是我的stm32f4开发板的连接图:
    在这里插入图片描述
     

    代码实现详细步骤

    • 自定义两个引脚并初始化:PA2(输出)–TRIG, PA3(输入)–ECHO。
      详细步骤可查看链接: GPIO的初始化.
    //设置PA2为输出、快速、推挽、上拉,PA3为输入、快速、推挽、上拉
    
    • 初始化定时器,并设置1us计一个数(以TIM3为例)。
    void Tim3_Init(void)
    {
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
    
    	//1、能定时器时钟。
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    		
    	TIM_TimeBaseInitStruct.TIM_Prescaler    = 84-1;    //84分频 84000 000/84 = 1MHZ  1us
    	TIM_TimeBaseInitStruct.TIM_Period		= 50000-1;  //计50000个数 在10000HZ下,用时1s
    	TIM_TimeBaseInitStruct.TIM_CounterMode  = TIM_CounterMode_Up; //向上计数
    	TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1; //分频因子
    	//2、初始化定时器,配置ARR,PSC。
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);		
    	
    	//5、不使能定时器。
    	TIM_Cmd(TIM3, DISABLE);
    	
    }
    
    • 测距流程
      A.启动信号
      B.设置定时器的CNT = 0
      C.等待高电平到来。While(PAin(3) == 0 );
      D.开定时器
      E.等待低电平到来。While(PAin(3) == 1);
      F.获取定时CNT值,关闭定时器
      G.通过CNT值得到高电平时间,算出测量距离。
    int Get_CSB_Value(void)
    {
    	u32 echo_time, t = 0;
    
    	//给trig上拉超过10us高电平
    	PAout(2) = 0;
    	delay_us(5);
    	PAout(2) = 1;
    	delay_us(15);
    	PAout(2) = 0;
    	
    	//设置定时器CNT值为0
    	TIM_SetCounter(TIM3, 0);
    	//TIM3->CNT;
    	
    	//等待echo高电平  做超时等待
    	while(PAin(3) == 0)
    	{
    		t++;
    		delay_us(2);
    		if( t >= 1000) //2ms
    			return -1;
    	
    	}
    	//开定时器
    	TIM_Cmd(TIM3, ENABLE);
    	//计数直到高电平结束
    	
    	//做超时等待
    	t = 0; 
    	while(PAin(3) == 1)
    	{
    		t++;
    		delay_us(2);
    		if( t >= 11500) //23.2ms
    		{
    			TIM_Cmd(TIM3, DISABLE);
    			return -2;	
    		}				
    	}
    	//关定时器
    	TIM_Cmd(TIM3, DISABLE);
    
    	//读取CNT值
    	echo_time = TIM_GetCounter(TIM3);
    
    	return echo_time/58;
    }
    
    

    最后在main函数初始化,调用,在串口上打印输出该函数即可
    链接: 串口详初始化及打印细步骤.

    注意事项

    1.超声波模块在刚上电时,测距误差会受到极大的影响,负数都有可能出现,需要等待该模块稳定都测距才恢复正常。
    2.最好采用采集多次距离取平均距离的方式,会比较精准,后续再更新。

    展开全文
  • 超声波传感器介绍及其使用一级目录二级目录三级目录 一级目录 二级目录 三级目录

    超声波传感器型号

    HC-SR04超声波测距模块

    实物图

    在这里插入图片描述

    引脚

    VCC:电源线,连接单片机的5V(VCC5)
    GND:地线,连接单片机的接地(GND)
    TRIG:触发控制信号输入
    ECHO:回响信号输出

    超声波传感器原理图

    在这里插入图片描述

    特点

    HC-SR04 超声波测距模块可提供2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;
    模块包括超声波发射器、接收器与控制电路。

    工作原理

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

    超声波传感器时序图

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

    测量误差的产生

    测量偏差主要是如下原因产生:超声波发射器的发散角
    图一:
    超声波发射头产生的超声波波型
    显示的是超声波发射头产生的超声波波型
    图二:
    如果有这样的 2 个障碍物存在,必然会导致有测量偏差产生。
    如果有这样的 2 个障碍物存在,必然会导致有测量偏差产生。
    解决的方式有两种:
    1、更换发散角小的发射头
    2、避免探测到这种结构的物体

    注意

    1、此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。
    2、测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的结果

    超声波传感器部分代码

    //测距
    float Senor_Using(void)
    {
    	float length = 0,sum = 0;
    	u16 tim;
    	unsigned int i = 0;
    	//测五次数据计算一次平均值
    	while(i != 5)
    	{
    		GPIO_SetBits(GPIOA,GPIO_Pin_6); //拉高信号,作为触发信号
    		delay_us(20); //高电平信号超过10us
    		GPIO_ResetBits(GPIOA,GPIO_Pin_6); //等待回响信号
    		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7) == RESET);
    		//回响信号到来,开启定时器计数
    		TIM_Cmd(TIM2,ENABLE);
    		i += 1; //每收到一次回响信号+1,收到5次就计算均值
    		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7) == SET);//回响信号消失
    		TIM_Cmd(TIM2,DISABLE);//关闭定时器
    		tim = TIM_GetCounter(TIM2); //获取计TIM2数寄存器中的计数值
    		length = (tim+overcount*1000)/58.0; //通过回响信号计算距离
    		sum = length+sum;
    		TIM2->CNT = 0; //将TIM2计数寄存器的计数值清零
    		overcount = 0; //中断溢出次数清零
    		delay_ms(100);
    	}
    	length = sum/5;
    	return length; //距离作为函数返回值
    }
    
    	int int_length,decimal_lenght;
    	int_length = (uint16_t)length; //小数点前数字
    	decimal_lenght = length * 1000 - int_length * 1000;	//小数点后数字
    

    实验现象

    串口显示
    在这里插入图片描述
    OLED显示
    在这里插入图片描述

    源码获取

    链接:https://pan.baidu.com/s/11q_EI447-BNL9n7mMmuHFA
    提取码:79x3
    在这里插入图片描述

    展开全文
  • STM32F103单片机对于超声波传感器HC-SR04的学习,里面是超声波传感器的keil工程文件。。。
  • stm32f103vet6开发板,J-Link,超声波传感器HC-SR04 原理 超声波模块工作的原理:首先需要触发trig,就像是打开或是使能的作用,让超声波工作起来。然后,超声波通过echo返回一段高电平,高电平的时间,就是声音...
  • STM32控制3路超声波传感器

    千次阅读 多人点赞 2018-03-06 20:17:37
    使用STM32定时器输入捕获模块控制3路超声波传感器 本次使用的超声波传感器是常见HC-SR04,该传感器常常使用在小型机器人和智能小车的避障系统中。 在上图中,5v和GND为模块提供电能,Trig用于触发模块测距,Echo...
  • 利用stm32超声波模块连接,利用OLED显示超声波的数值。
  • 资源包括:程序,程序设计报告 ...思路:通过驱动超声波模块,测量出小车与障碍物之间的距离,并通过蓝牙反馈数据到手机,同时根据测量数据进行舵机的转动控制,从而实现智能避障(建议先看程序设计报告总结部分)
  • 这是一个我们实训课所做的东西,用了两块STM32F4开发板来实现超声波测距,一个板子测距,然后通过CAN总线传输给另一个板子用LCD液晶显示屏显示。
  • 该资源,由STM32的调试的超声波模块,可以串口显示数据,也可以12864显示数据(串口方式)。
  • 开发板使用stm32F103系列都行,使用串口,电平两种读取方式,亲测可行。
  • 先贴代码,以后再补说明 TIM_ICInitTypeDef TIM5_ICInitStructure; void TIM5_Cap_Init(u16 arr,u16 psc) ... GPIO_InitTypeDef GPIO_...打印Log直接输出采样到的高电平时间和目标到传感器的直线距离。
  • 基于STM32超声波测距报警系统,详细的源代码,实现测距显示,报警,且报警范围可调的功能。
  • STM32F427主控的HY-SR04超声波传感器数据读取传感器接线工作原理测量触发信号高电平输入信号时长捕获hc-sr04的初始化及数据获取函数温度补偿 本文主要介绍HY-SR04超声波传感器在大疆A板上的应用 传感器接线 Tring-...
  • 哈信息20级 基于STM32L475开发板以及HC-SR04超声波传感器进行超声波测距 压缩包内包括cubeMX工程文件以及keil工程源码
  • 利用STM32F103调用BH1750传感器(GY-30模块)检测光照强度,并将检测的数据显示在TFTLCD液晶显示屏上。内含相关代码以及接线说明(含51单片机资料),i2c采用正点原子版本
  • stm32超声波测距带温度补偿
  • 1.stm32小蓝板一块 2.超声波传感器HC-SR04一个 3.杜邦线4根。 4.stlink下载器一个 5.usb供电线一根 注意:该超声波传感器模块需工作在5.0V电压,所以仅仅有stlink下载器3.3v供电是不够的,需要再加上usb5.0v供电
  • stm32单片机 超声波+蜂鸣器+led 代码 ,可以参考一下。
  • 当探测距离小于一定数值时,LED会被点亮,该安全数值通过宏定义来实现。微控制器采用的是STM32F103VET6
  • STM32+超声波传感器(HC_RS04)+光照传感器(BH1750)+温湿度传感器(DHT11)+烟雾传感器(MQ_2)的例子
  • 提出了一种基于STM32单片机的超声波测距系统的设计方案。与传统单片机相比,STM32的主频和定时器的频率高达72 MHz,提高了时间测量的分辨率。在开启定时器计时的同时,启动PWM通道驱动超声波发射器和输入捕获通道...
  • 基于STM32F1超声波模块驱动程序,代码细节描述清晰,易于理解阅读
  • 核心板STM32F1,通过超声波模块测障碍物距离(定时器),OLED时时显示所测得距离值,同时增加了蜂鸣器短距报警,通过设定距离阈值,当小于其时,蜂鸣器“滴滴滴”报警,且距离越小,报警频率越快.......测试通过
  • stm32f407超声波驱动代码,网上买的SRF05模块,自己写了一段代码,利用自带的捕获功能对结果进行解算。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 969
精华内容 387
关键字:

stm32超声波传感器