历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | 基于STM32超声波测距

2019-08-22 来源:eefocus

2019年7月26日
做小车的第5天。
今天我又学习了一个新的知识:超声波测距。
超声波测距(超声波测距模块US-025)的基本原理如下:
Trig端:向此管脚输入一个超过10us以上的高电平,可触发模块测距
Echo端:当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和。

只需要在Trig管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过Echo管脚输出。
根据Echo管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2

当测量距离超过US-025/US-026的测量范围时,仍会通过Echo管脚输出高电平的信号,高电平的宽度约为66ms。

代码大致如下:
/*******************************************************.h函数********/
#define TRIG_Send PBout(6) //输出端口为PB6
#define ECHO_Reci PBin(7) //输入端口为PB7

float Senor_Using(void);
void TIM3_Int_Init();

/**********************************************.c函数/
uint overcount=0; //记录定时器溢出次数
void TIM3_Int_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/*****************************************************************
PA6为输出端 PB6为输入端*****************/
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
GPIO_Init(GPIOB,&GPIO_InitStruct);
//定时器3初始化
TIM_TimeBaseStructure.TIM_Period = 999; //设置自动重转载值为999
TIM_TimeBaseStructure.TIM_Prescaler =71; //设置预分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );//使能制定TIM3中断,允许更新中断
//中断设置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

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

void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3,TIM_IT_Update)!= RESET) //检查是否发生TIM3中断
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清楚中断更新标志
overcount++;
}
}
/*************************main/
int main(void)
{
float length;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(9600);
TIM3_Int_Init();
while(1)
{
length = Senor_Using(); //调用测距函数
printf(“距离为:%.3fcmn”,length);
delay_ms(1000);
}
}
超声波测距模块原理图以及如下:在这里插入图片描述串口接收到的数据

在这里插入图片描述


推荐阅读

史海拾趣

CANOPUS公司的发展小趣事

CANOPUS公司最初由创始人Shinichi Usuda于1977年创立,当时他经营着一家乐器商店。他深知音乐的力量和乐器的重要性,于是决定将自己的商店逐渐转型为专注于鼓类乐器的制造与销售。经过几年的努力,CANOPUS逐渐在乐器市场上崭露头角,赢得了音乐爱好者的青睐。

ACCUTEK公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,ACCUTEK公司开始将目光投向国际市场。公司积极参加国际电子展会和技术交流活动,与全球多家知名企业建立了合作关系。同时,公司还在海外设立了多个分支机构,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,也为公司的长远发展注入了新的活力。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

随着公司规模的扩大,Electronic-Bauteile Goerlitz GmbH公司意识到供应链管理的重要性。公司通过优化供应链管理,实现了原材料采购、生产、物流等各个环节的协同作业。这不仅提高了生产效率,降低了成本,还确保了产品质量的稳定性和交货期的准确性。这些努力使得公司在竞争激烈的市场中保持了良好的竞争力。

Herley New York公司的发展小趣事

在技术创新的基础上,Electronic-Bauteile Goerlitz GmbH公司积极拓展市场。公司通过分析市场需求,调整产品策略,不断推出符合市场需求的新产品。同时,公司加强了品牌建设,通过参加国际展会、举办技术研讨会等活动,提高了品牌知名度和影响力。这些努力使得公司的产品在国内外市场上都取得了良好的销售业绩。

CAROLCABLE公司的发展小趣事

在激烈的市场竞争中,CAROLCABLE公司深知技术创新是企业发展的核心动力。因此,公司不断加大研发投入,引进先进的生产设备和技术人才,推动技术创新和产业升级。经过多年的努力,CAROLCABLE成功研发出了一系列具有自主知识产权的高性能线缆产品,这些产品在传输速度、稳定性和耐用性等方面均达到了行业领先水平。

随着产品技术的不断升级,CAROLCABLE开始积极拓展国内外市场。公司参加了多个国际电子线缆展会,与全球同行交流学习,寻找合作机会。同时,CAROLCABLE还加强与国内大型电子企业的合作,为其提供定制化的线缆解决方案。这些举措不仅为公司带来了更多的商机,也进一步巩固了CAROLCABLE在电子线缆行业的领先地位。

这两个故事仅是对CAROLCABLE公司发展起来的简要描述,实际上,公司的成长历程中还有许多值得探讨的细节和里程碑事件。如需了解更多关于CAROLCABLE公司的故事,建议查阅相关新闻报道或公司官方资料。

CML Microcircuits公司的发展小趣事

为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。

问答坊 | AI 解惑

高价求能检测被叫挂机的反极信号发生器

小弟现在搞通讯设备,,需要电话线路发送反极信号,但是电信局不给开,现有市场上的反极信号发生器没有检测被叫是否通话完毕挂机的功能,现在小弟高价求方案,或是成品。…

查看全部问答>

之前看到NEC有送开发板的活动,大家使用的如何呢?

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 之前看到NEC有送开发板的活动,大家使用过程中有什么感触或心得呢? 希望可以贴图出来分享下。 因为我们学校已经有自己的开发板了,所以当时没有申请,但是很想了解下相关的信息。  …

查看全部问答>

PCB互连设计过程中最大程度降低RF效应的基本方法

电路板系统的互连包括:芯片到电路板、PCB板内互连以及PCB与外部器件之间的三类互连。在RF设计中,互连点处的电磁特性是工程设计面临的主要问题之一,本文介绍上述三类互连设计的各种技巧,内容涉及器件安装方法、布线的隔离以及减少引线电感的措施 ...…

查看全部问答>

WINCE6.0 支持SQLCE3.0?

如何让WINCE6.0支持SQLCE3.0? 谢谢! …

查看全部问答>

请教: 利用4个感应探头来判断运动方向 的C程序

4个感应探头采集动作信号后输入51单片机   输出2个方向信号 。 这个命题我做不来 请高手指点。…

查看全部问答>

protel99se 覆铜

大家好:     小弟画了一块板子,现在PCB布线已经搞好,就差覆铜了,不规则覆铜,就是在顶层需要覆铜的地方才覆,不需覆铜的地方不覆,这样板子上覆铜的边缘就不是直线了,请问怎样实现不规则的覆铜,怎样设置,如何操作才能达到效果! ...…

查看全部问答>

便携式数据采集系统中ADC的选用指南

   真实世界的应用需要真实世界的物理连接,一般来说,这意味着模拟信号要在系统内的某处被数字化处理,以便于微处理器、ASIC或FPGA采集数据并做出决策。 基本选用标准 当选择一款模拟数字转换器(ADC)时,大多数设计师似乎只关注几个主 ...…

查看全部问答>

关于AD转换的问题请教大家

请问各位高手,我在用MSP430F133单片机实现AD转换的时候,测量输入电压后,程序显示的转换的结果与采用公式计算的结果不符,并且在不同的输入电压下,AD转换的结果并非线性关系,请教各位高手原因在那,以下是我写的程序:(系统采用内部2.5伏参考电 ...…

查看全部问答>

单片机控制可控硅

那位能说一说单片机控制可控硅的原理呀,…

查看全部问答>

C51初学者 的程序 日记(每天更新)

  1. 51单片机 P2.5 I/O口上的LED灯一闪一闪:   #include <reg51.h>sbit led0=P2^5;   void delay () {   unsigned int a;   a=50000;   while (a--); } void main (main){  vo ...…

查看全部问答>