想要更多项目私wo!!!
一、电路设计
基于STM32的超声波测距系统
超声波模块介绍
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此得到了广泛的应用。如图即为HC-SR04超声波测距模块
1、基本工作原理:
如图6为超声波测距传感器HC-SR04模块,VCC 接 5V 电源,GND 为地 线,TRIG 为触发控制信号输入,ECHO为回响信号输出。超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平。
2.、HC-SR04电气参数:
HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。
3、操作步骤为:
HC-SR04的Trig端口和Echo端口接入单片机的I/O口接,初始化时将trig和echo端口都置低,首先向给 trig 端发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),如图6,然后等待,捕捉 echo 端输出一个高电平,当单片机检测到上升沿(或高电平)的同时,打开定时器开始计时,再次等待,直到单片机检测到echo变成下降沿(或低电平)时,结束计数,读出计时器的时间,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即按照
*测试距离(S)=高电平时间(t)声速(v=340m/s)/2
就可以算出超声波到障碍物的距离。
二、运行结果
三、部分代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "LcdBsp.h"
#include "timer.h"
#include "SoundMeasure.h"
//说明:
//本例程采用定时器捕获进行异步脉宽测量,需先调用开始测量函数,
//然后主程序循环查询测量状态,
//因为同步测量的弊端非常明显,测量时间从数ms到数十ms不等,
//严重影响系统效率且执行时间不可预期,这在实际工程中是不被允许的
//trig PA3
//Echo PA1
u32 temp=0;//距离
char buf[30];
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
LED_Init();
USART1_Init(921600);//串口1初始化
LCD_Init();
SoundMeasure_Init();//初始化超声波测量
while(1)
{
if(SoundMeasure_StaCheck(&temp)!=0){//测量完成
printf("Distance:%5d.%d CM\r\n",temp/10,(temp)%10);//打印距离
sprintf(buf,"Distance:%3d.%dcm",temp/10,(temp)%10);
LCD_ShowString(10,60,200,24,24,(u8*)buf);//显示字符串
delay_ms(10);
}
SoundMeasure_Start();//开始新的一次测量
LED_TOGGLE(LED0);
delay_ms(500);
}
}