超声波模块详细介绍(stm32循迹小车中超声波的介绍)

超声波模块是非常重要的一个模块,今天给大家全面介绍一下超声波模块的原理以及用法,代码的编写。

1 超声波模块的认识

首先,市面上的常见超声波模块主要分为以下几种:

  1. HC-SR04超音波模块
  2. US-100超声波模块
  3. US-015超声波模块


4. HY-SRF05超声波模块

5. HC-SR04超声波测距模块

2 超声波模块使用方法

我们主要讲解一下stm32寻迹小车最常用的HC-SR04模块。
从上图,我们可以看到HC-SR04超声波模块有四个引脚,分别为VCC、Trig(控制端)、Echo(发送回响信号)、GND。
硬件连接图

HC-SR04基本工作原理:
(1)采用IO口TRIG触发测距,给最少10us的高电平信号。
(2)模块自动发送8个40khz周期电平并检测回波,一旦检测到有回波信号则输出回响信号。
(3)回响信号: 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2 或者 us/58 =厘米 或者 us/148=英寸。
时序图如下:

总的来说,给控制口Trig发一个 10us以上的高电平,就可以在接收口等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。

流程图

3 模块源码(stm32c8t6)

根据上述了解,我们可以知道,超声波的变成主要配置两个引脚,分别为控制端Trig以及可以发出回响信号的Echo。控制端Trig是需要一个10us的高电平触发,所以这里的GPIO模式时推挽输出。而Echo引脚需要作为输入捕获通道,则模式为浮空输入。

#include "delay.h"
#include "sys.h"硬件连接
串口1:RX PA10  TX PA9
超声波:Trig PB11    ECHG PB9
备注:以下代码非原创,只是经过修改适配成C8T6
若侵权,请告知。//超声波硬件接口定义
#define HCSR04_PORT     GPIOB
#define HCSR04_CLK      RCC_APB2Periph_GPIOB
#define HCSR04_TRIG     GPIO_Pin_11
#define HCSR04_ECHO     GPIO_Pin_9
#define TRIG_Send PBout(11)
#define ECHO_Reci PBin(9)//超声波计数
u16 msHcCount = 0;//定时器4设置
void hcsr04_NVIC()
{NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}//IO口初始化 及其他初始化
void Hcsr04Init()
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG;      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);GPIO_InitStructure.GPIO_Pin =   HCSR04_ECHO;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   TIM_DeInit(TIM4);TIM_TimeBaseStructure.TIM_Period = (1000-1); TIM_TimeBaseStructure.TIM_Prescaler =(72-1); TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);          TIM_ClearFlag(TIM4, TIM_FLAG_Update);  TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);    hcsr04_NVIC();TIM_Cmd(TIM4,DISABLE);
}//打开定时器4
static void OpenTimerForHc()
{TIM_SetCounter(TIM4,0);msHcCount = 0;TIM_Cmd(TIM4, ENABLE);
}//关闭定时器4
static void CloseTimerForHc()
{TIM_Cmd(TIM4, DISABLE);
}//定时器4终中断
void TIM4_IRQHandler(void)
{if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  {TIM_ClearITPendingBit(TIM4, TIM_IT_Update  ); msHcCount++; //计数器开始加}
}//获取定时器4计数器值
u32 GetEchoTimer(void)
{u32 t = 0;t = msHcCount*1000;t += TIM_GetCounter(TIM4);TIM3->CNT = 0;  //计数器归零delay_ms(50);return t;
}//通过定时器4计数器值推算距离
float Hcsr04GetLength(void )
{u32 t = 0;int i = 0;float lengthTemp = 0;float sum = 0;while(i!=5)  //测量五次取平均{TRIG_Send = 1;   //给控制端高电平delay_us(20);TRIG_Send = 0;  //超声波模块已开始发送8个40khz脉冲while(ECHO_Reci == 0);   //若ECHO_Reci为低电平,则一直循环,直到为高电平。  OpenTimerForHc();  //此时说明检测到高电平,开启定时器,开始计时。       i = i + 1;while(ECHO_Reci == 1); //若ECHO_Reci为高电平,则一直循环,直到为低电平。 CloseTimerForHc();   //此时说明检测到低电平,关闭定时器,停止计时     t = GetEchoTimer();        //获取定时器时间lengthTemp = ((float)t/58.0); //数据处理,转换成cmsum = lengthTemp + sum ;  //五次测得数据累加}lengthTemp = sum/5.0; //取平均return lengthTemp;
}

stm32循迹小车系列文章:
1.stm32循迹小车详细制作过程(附加完全版代码)
2.L298n电机驱动详细介绍(stm32循迹小车中L298n的用法)
3.超声波模块详细介绍(stm32循迹小车中超声波的介绍)

此博客收录在stm32循迹小车教程专栏中。
stm32交流群在下方,寻迹程序在群资料,超声波马上补上,有问题可以直接在群里问,互相交流学习。

超声波模块详细介绍(stm32循迹小车中超声波的介绍)相关推荐

  1. STM32循迹小车/Android蓝牙控制小车(三)

    STM32循迹小车/Android蓝牙控制小车(三) 循迹蓝牙小车的第三篇终于来了,这篇开篇先来介绍一下整个开发过程中得构思思路.本来这应该放在第一篇,但是实际思路会因为开发过程中遇到的问题而改变,到 ...

  2. 实例4,循迹模块的使用和循迹小车的实现

    1.循迹模块介绍: 2.循迹原理: 3.硬件接线: 4.循迹编程思路流程图: 5.循迹程序第一稿(后面再写几篇文章加计时.测距.蓝牙等模块). 一.循迹模块 目前大一新生,多数用的是数字式的循迹模块, ...

  3. STM32循迹小车系列教程(三)—— 使用灰度传感器循迹

    本章节主要讲解如何获取灰度传感器值以及如何使用灰度传感器循迹 灰度传感器简介 灰度传感器如图 1 所示: 灰度传感器 使用一对抗干扰较强的光电传感器,其中发射管的光源采用高亮白色聚光 LED,发射管端 ...

  4. STM32循迹小车系列教程(一)—— 使用PWM控制电机

    本章节主要讲解直流减速电机控制原理,电机驱动电路,以及如何使用PWM控制直流减速电机 前言 1.软件准备:STM32CubeMx.Keil5_ MDK 2.硬件准备:STM32F103C8T6核心板. ...

  5. 三天让车跑起来!stm32循迹车 —— 第一天:基本模块使用方法

    声明在前:本系列以程序设计为主,适用于刚学会32,想完成一个基本项目却不知道怎么上手的小伙伴.想学习硬件方面如:电路.画板等内容的朋友请不要在本系列耽误您的时间,关闭即可. 眼瞅着日子一天天地过去,学 ...

  6. 【电赛优秀作品集】自动循迹小车制作方案

    简单来说自动循迹小车就是集光,机,电于一体的简易智能小车.参赛者通过论证,比较,实验之后,制作出了简易小车的循迹电路系统,整个系统基于普通玩具小车的机械结构,并利用了小车的底盘,前后轮电机及其自动复原 ...

  7. 神经网络视觉循迹小车

    大四狗下学期想学习机器学习.深度学习等相关知识,于是毕设想做些神经网络相关的东西,因为本科期间参加过大学生智能车竞赛,于是想利用小车,通过神经网络,实现自主学习,完成在规定赛道上的行驶.现在在这里,记 ...

  8. 经典PID在智能自寻迹小车中的应用分析

    PID调速在对于初学者在学习自动化专业知识时是一个很重要的知识,也是很基础的工程常识.对于大学本科阶段,飞思卡尔杯(原恩智浦杯)智能汽车竞赛是自动化专业含金量相当高的一项赛事.下面楼主将详细讲解在自寻 ...

  9. 详细介绍如何从零开始制作51单片机控制的智能小车(二)———超声波模块、漫反射光电管、4路红外传感器的介绍和使用

       我会通过本系列文章,详细介绍如何从零开始用51单片机去实现智能小车的控制,在本系列的上一篇文章中介绍了如何让小车动起来,本文作为本系列的第二篇文章,主要介绍让小车实现自动避障所涉及的一些传感器, ...

最新文章

  1. Cyber​​ RT开发人员工具
  2. ubunu16.04 TensorFlow object detection API 应用配置
  3. RabbitMQ应对不同阶段丢失消息的处理方案
  4. web业务系统权限控制
  5. 利用python制作漂亮的词云图_利用python制作漂亮的词云图
  6. 三分钟Docker-推送本地镜像到仓库
  7. 【剑指offer】_19 滑动窗口中的最大值
  8. 阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)
  9. Angular 第一章 开始
  10. 操作系统--设备管理
  11. 《敏捷制造——敏捷集成基础结构设计》——2.3 集成基础结构数据访问模型
  12. [patterns practices] Web 服务安全:场景、模式和实现指南
  13. CommandName属性和CommandArgument属性
  14. Python比较文件不同
  15. html中 为什么在页面点击提交后reset按钮就不起作用了
  16. 计算机论文 指导老师评语,毕业设计指导老师评语(精选5篇)
  17. Swift --- 下标(subscript)
  18. mysql explain是什么意思_MySQL中EXPLAIN解释命令详解
  19. 怎样成为公司喜欢的人?小技巧
  20. PM第1步:产品需求文档

热门文章

  1. 微信分身的四种免费使用方法
  2. 求1-50是7的倍数的数值之和
  3. 使用fme对excel表格进行更新修改
  4. 数据结构——2路归并排序
  5. linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存-linux运维
  6. STM32循迹PWM调速及阿克曼舵机转向
  7. idea方法注解模板
  8. python实现模糊聚类绝对值减数法
  9. 使用Docker打包镜像并发布
  10. python包在哪个文件夹_python之包和文件目录规范