超声波(HC-SR04)

news/2024/11/8 0:44:48/

超声波(HC-SR04)

1、

在这里插入图片描述

2、工作流程

①单片机引脚触发Trig测距,给至少10us的高电平
②模块自动发送8个40khz的方波,自动检测是否有信号返回
③有信号返回,通过IO口输出高电平,并单片机ji’shu’an2高电平的持续时间
④超声波从发射到返回的时间
测量距离=(高电平的时间*340m/s)/2 (因为声波一去一回,两倍的距离所以要除以2)
在这里插入图片描述

3、涉及单片机主要模块:输入捕获

(1)主要代码如下:

#include "HC_SRO4.h"
uint32_t HC_SRO4Val;//储存没到65535的值
uint32_t count=0;//进入更新中断的次数
uint16_t edge=0;//上升沿标志位
uint32_t startFlag;//开始中断标志位
uint32_t sr04_Over=0;//测量完成标志位//内部函数的声名
uint32_t calculate(void);
void HC_SRO4Start(void);//利用GPIO模拟strig信号
void HC_SRO4Start(void)
{uint32_t i;HAL_GPIO_WritePin(GPIO_Trig, PIN_Trig, GPIO_PIN_SET);for(i=0;i<72*40;i++)__NOP();HAL_GPIO_WritePin(GPIO_Trig, PIN_Trig, GPIO_PIN_RESET);
}//距离计算函数
//测量距离=(高电平时间*声速(340M/s))/2
//340mm/ms;340mm/1000us=0.34mm/us;
uint32_t calculate(void)
{		uint32_t res;//测量结果承接uint32_t hTime;hTime=count*65535+HC_SRO4Val; //usres=(hTime*0.034)/2;//cmreturn res;
}//超声波的各类初始化函数
void HC_SRO4_Init(void)
{HAL_TIM_IC_Start_IT(&HC_SRO4_HTIM,HC_SRO4_CHANNEL);//使能定时器中断__HAL_TIM_ENABLE_IT(&HC_SRO4_HTIM, TIM_IT_UPDATE);//使能定时器更新中断HC_SRO4Start();
}//结果输出函数
uint64_t HC_SRO4_result(void)
{uint32_t result;//测量结果承接if(sr04_Over){sr04_Over=0;count=0;result=calculate();HC_SRO4Start();}return result;
}//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==HC_SRO4_TIM){if(startFlag==1){			if(count>0x3f)//超时判断{startFlag=0;//计数中断结束TIM_RESET_CAPTUREPOLARITY(&HC_SRO4_HTIM, HC_SRO4_CHANNEL);//清除原来的设置TIM_SET_CAPTUREPOLARITY(&HC_SRO4_HTIM,HC_SRO4_CHANNEL,  TIM_ICPOLARITY_RISING );//将其变为上升沿捕获,因}else {count++;//记录溢出中断的次数}}}}//输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==HC_SRO4_TIM){if(edge==1){startFlag=0;//计数中断结束edge=0;
//		HC_SRO4Val=0;sr04_Over=1;//高电平时间结束标志位HC_SRO4Val=HAL_TIM_ReadCapturedValue(&HC_SRO4_HTIM,HC_SRO4_CHANNEL);//将缓冲区多余的值记录下来TIM_RESET_CAPTUREPOLARITY(&HC_SRO4_HTIM, HC_SRO4_CHANNEL);//清除原来的设置TIM_SET_CAPTUREPOLARITY(&HC_SRO4_HTIM,HC_SRO4_CHANNEL,  TIM_ICPOLARITY_RISING );//将其变为上声沿捕获,因为已经计数完了,把	它还原回原样}else{startFlag=1;//计数中断开始edge=1;//上升后标志位__HAL_TIM_SET_COUNTER(&HC_SRO4_HTIM,0);//清除原来的计数值TIM_RESET_CAPTUREPOLARITY(&HC_SRO4_HTIM, HC_SRO4_CHANNEL);//清除原来的设置TIM_SET_CAPTUREPOLARITY(&HC_SRO4_HTIM,HC_SRO4_CHANNEL, TIM_ICPOLARITY_FALLING  );//将其变为下降沿捕获	}}}

(2)其头文件

#ifndef _HC_SRO4_H
#define _HC_SRO4_H
#include "main.h"
#include "time.h"
/* 注意事项
1、记得要开定时器中断
2、输入捕获通道记得打开
3、配置一个GPIO口作为Trig
4、PSC配置成72-1	
5、计数配置(ARR)65535
*/extern TIM_HandleTypeDef htim2;
#define HC_SRO4_HTIM     htim2
#define HC_SRO4_TIM      TIM2
#define HC_SRO4_CHANNEL  TIM_CHANNEL_1
#define GPIO_Trig        GPIOA
#define PIN_Trig         GPIO_PIN_4//用户调用函数
void HC_SRO4_Init(void);//超声波初始化函数
uint32_t HC_SRO4_result(void);//返回测量结果函数#endif

(3)调用方法
将这两个函数写到main函数里
void HC_SRO4_Init(void);//main函数里
uint32_t HC_SRO4_result(void);//main函数的while循环里


http://www.ppmy.cn/news/719645.html

相关文章

关于两个HC05通讯的实际操作流程

市场上HC05模块有好几种&#xff0c;一般都是带有按键的。像下边这种&#xff08;6只引脚的&#xff09;&#xff08;这个是从优信电子那搞过来的&#xff0c;他的模块的按键有点问题&#xff0c;不用摁照样能进入AT模式&#xff09; 要使模块之间交互数据&#xff0c;必须要能…

74HC595实验

74HC595实验 实验现象 利用74HC595芯片实现LED流水灯的效果 理论学习 实现穿行数据转换为并行数据的控制模式 原理图 代码编写 #define latchpin 8 #define clockpin 12 #define datapin 11 //定义三个引脚 unsigned char table[8] {0x01,0x02,0x04,0x08,0x10,0x20,0x40…

hc sr04流程图_超声波测距模块工作原理_HC-SR04模块详解

超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了,另外还有比较常用的国外的几款SRF系列的超声波模块,目前的超声波模块精度能到1cm。本文主要…

hc 05 蓝牙c语言程序,ATK-HC05 运用在STM32平台上的HC05蓝牙通信代码用C语言编写 - 下载 - 搜珍网...

1&#xff0c;ATK-HC05蓝牙串口模块/1&#xff0c;ATK-HC05蓝牙串口模块原理图/ATK-HC05-V11_SCH.pdf 1&#xff0c;ATK-HC05蓝牙串口模块/1&#xff0c;ATK-HC05蓝牙串口模块原理图/封装库/99SE/ATK-HC05-V1.3_PCB.lib 1&#xff0c;ATK-HC05蓝牙串口模块/1&#xff0c;ATK-HC…

SM74HC595D电路级联教程

SM74HC595D电路级联教程 1简述 SM74HC595D 是一种具有8 位锁存、8 位串行输入、 8 位串/并行输出、 串—并移位寄存器和三态输出功能的通用LED 驱动芯片。具有8 位移位寄存器和一个存储器&#xff0c;三态输出功能。 该设备具有串行输入&#xff08;SER&#xff09;和串行输出…

bert中 [CLS] 和 [SEP]怎么使用

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种基于Transformer的预训练语言模型。在BERT中&#xff0c;[CLS] 和 [SEP] 是特殊的标记&#xff08;tokens&#xff09;&#xff0c;用于表示句子的开始和结束&#xff0c;或者在处理…

串口控制74HC164C语言,51单片机74HC164串口控制数码管显示

一般数码管需要接7个脚才能显示,如果用单片机本身的I/O口,虽然可以但是浪费宝贵的i/O口资源。本例用移位寄存器74HC164作为数码管驱动进行控制。 74HC164特性 是一种8位串转并口的控制芯片,用于数码管和液晶显示等. 工作电压2--6V 管脚定义: …

11、超声波传感器HC-SR04使用

目录 1、简介 2、使用例子 正文 1、简介 超声波传感器可以通过使用超声波来测量距离。它通过发出特定频率的声波来测量距离,并等待该声波反弹。通过记录在产生的声波和声波反弹之间所花费的时间,可以计算传感器和物体之间的距离。 HC-SR04规格 电源:5v DC 测距距离:2…