设为首页
收藏本站
找回密码
开启辅助访问
登录
注册
只需一步,快速开始
首页
BBS
在线充值
搜索
工控币获得方法
联系方式
搜索
搜索
本版
帖子
用户
工控论坛
»
首页
›
电子技术
›
STM32/8
›
stm32的超声波测距源码+详解文档
返回列表
发新帖
stm32的超声波测距源码+详解文档
[复制链接]
0
|
0
|
2020-5-21 01:07:07
|
显示全部楼层
|
阅读模式
这个是超声波测距的代码,可以添加stm32程序中,并且有测距的组件就可以使用了。
还附加有原理讲解图文word
超声波测距.7z
(676.27 KB, 售价: 1 工控币)
2020-5-21 01:05 上传
点击文件名下载附件
HC-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、通过定时器定时时间来确定距离。
先由触发信号启动HC-RS04测距模块,也就是说,主机要先发送至少10us的高电平,触发HC-RS04,模块内部发出信号是传感器自动回应的,我们不用去管它。输出回响信号是我们需要关注的。信号输出的高电平就是超声波发出到重新返回接收所用的时间。用定时器,可以把这段时间记录下来,算出距离,结果要除于2,因为总时间是发送和接收的时间总和。
部分源程序如下:
#include "cs.h"
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
/*记录定时器溢出次数*/
uint overcount=0;
/*设置中断优先级*/
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructer;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructer.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructer.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructer);
}
/*初始化模块的GPIO以及初始化定时器TIM2*/
void CH_SR04_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructer;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/*TRIG触发信号*/
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_8;
GPIO_Init(GPIOB, &GPIO_InitStructer);
/*ECOH回响信号*/
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_9;
GPIO_Init(GPIOB, & GPIO_InitStructer);
/*定时器TIM2初始化*/
TIM_DeInit(TIM2);
TIM_TimeBaseInitStructer.TIM_Period=999;//定时周期为1000
TIM_TimeBaseInitStructer.TIM_Prescaler=71; //分频系数72
TIM_TimeBaseInitStructer.TIM_ClockDivision=TIM_CKD_DIV1;//不分频
TIM_TimeBaseInitStructer.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructer);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启更新中断
NVIC_Config();
TIM_Cmd(TIM2,DISABLE);//关闭定时器使能
}
float Senor_Using(void)
{
float length=0,sum=0;
u16 tim;
uint i=0;
/*测5次数据计算一次平均值*/
while(i!=5)
{
PBout(8)=1; //拉高信号,作为触发信号
delay_us(20); //高电平信号超过10us
PBout(8)=0;
/*等待回响信号*/
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==RESET);
TIM_Cmd(TIM2,ENABLE);//回响信号到来,开启定时器计数
i+=1; //每收到一次回响信号+1,收到5次就计算均值
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==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;//距离作为函数返回值
}
void TIM2_IRQHandler(void) //中断,当回响信号很长是,计数值溢出后重复计数,用中断来保存溢出次数
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志
overcount++;
}
}
复制代码
测距
,
超声波
,
stm32
相关帖子
•
STM32F407+OOP+FSM设计思想
•
STM32做平衡小车全套sch原理图pcb电路图文件 C程序代码 BOM表
•
STM32实现U盘功能 USB_Mass_Storage源码
•
STM32串口的LIN从模式代码
•
基于stm32和soem的EtherCAT主站代码
•
STM32+LabVIEW的USB数据采集与显示源程序
•
STM32示波器程序ILI9341_IO模拟源程序+Proteus仿真
•
STM32F407 FLAC软解压 源程序
•
用PROTEUS8.9仿真实现STM32 ADC一路连续转换,值显示在LCD12864上
•
Proteus实现stm32单片机的闪烁灯实验程序
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
路漫漫
194
主题
199
帖子
74
积分
初级会员
初级会员, 积分 74, 距离下一级还需 426 积分
初级会员, 积分 74, 距离下一级还需 426 积分
工控币
74
加好友
发消息
回复楼主
返回列表
电子技术综合讨论
单片机嵌入式
EDA设计仿真
STM32/8
51单片机
上位机开发及系统管理
Labview
Multisim仿真
图文推荐
350W开关电源原理图及PCB图 元件参数封装图 完整资料可量产
2021-04-04
STM32做平衡小车全套sch原理图pcb电路图文件 C程序代码 BOM表
2021-04-01
三菱FX系列PLC与变频器MODBUS ASCII通信示例程序和文档
2021-03-31
三菱FX2N PLC与三菱变频器ModbusRTU协议通讯应用教程和示例程序
2021-03-31
电镀生产线S7-200 PLC程序带注释
2021-03-25
热门排行
1
LIS3DH中文数据手册
2
STM32F407+OOP+FSM设计思想
3
有偿求iFIX 5.9英文版授权
4
求IFIX5.9授权文件
5
威纶通触摸屏对应的位地址怎么写
6
卡尔曼(kalman)滤波演示程序 c#源码
7
三菱FX5U 以太网CC-LINK BASIC总线控制伺服
8
VC2017+OPENCV4.30实现机器人与传感器的手
9
CISCO QSGMII接口介绍,介绍sgmii接口与QSG
10
西门子STEP7 modbus 软件包分享