stm32超声波测距程序
超声波测距程序
超声波测距程序超声波程序如下:/**********************************包含头文件**********************************/#include#include "1602.h"/************************************宏定义************************************/#define VELOCITY_30C 3495 //30摄氏度时的声速,声速V= 331.5 + 0.6*温度;#define VELOCITY_23C 3453 //23摄氏度时的声速,声速V= 331.5 + 0.6*温度;/************************************位定义************************************/sbit INPUT = P3^2; //回声接收端口sbit OUTPUT = P1^0; //超声触发端口sbit Beep = P2^0 ; // 蜂鸣器/********************************定义变量和数组********************************/long int distance=0; //距离变量uchar table[]=" Welcome to ";uchar table0[]=" chaoshengbo ";uchar table1[]="There's no echo.";uchar table2[]=" csbcj ";uchar table3[]="Distance:";uchar count;/***********************************函数声明***********************************/extern void initLCD();extern void write_date(uchar date);extern void write_com(uchar com);extern void delay(uint x);/************************************************************** ****************//* 函数名称 : Delay_xMs *//* 函数描述 : 延时函数 *//* 输入参数 : x *//* 参数描述 : 延时时间 *//* 返回值 : 无 *//************************************************************** ****************/void Delay_xMs(unsigned int x){unsigned int i,j;for(i = 0;i < x;i++ ){for(j = 0;j < 3;j++ ){;}}}/************************************************************** ****************//* 函数名称 : Alarm *//* 函数描述 : 蜂鸣器发声函数 *//* 输入参数 : t *//* 参数描述 : 发声的次数 *//* 返回值 : 无 *//************************************************************** ****************/void Alarm(uchar t){uchar i;for(i = 0;i < t;i++){Beep = 1;Delay_xMs(1000);Beep = 0;Delay_xMs(1000);}}/************************************************************** ****************//* 函数名称 : delayt *//* 函数描述 : 延时函数 *//* 输入参数 : x*//* 参数描述 : 延时时间数据 *//* 返回值 : 无 *//************************************************************** ****************/void delayt(uint x){uchar j;while(x-- > 0){for(j = 0;j < 125;j++){;}}}/************************************************************** ****************//* 函数名称 : Init_MCU *//* 函数描述 : 初始化单片机函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void Init_MCU(void){TMOD = 0x01; //定时器2初始化,设置为16位自动重装模式TL0 = 0x66;TH0 = 0xfc; //1msET0 = 1; //开定时器2EA = 1; //总中断使能}/************************************************************** ****************//* 函数名称 : Init_Parameter *//* 函数描述 : 初始化参数和IO口函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//******************************************************************************/void Init_Parameter(void){OUTPUT =1;INPUT = 1;count = 0;distance = 0;}/************************************************************** ****************//* 函数名称 : display_char *//* 函数描述 : 显示字符串函数 *//* 输入参数 : point,address *//* 参数描述 : 写入的字符串的地址指针 1602显示对应的地址 */ /* 返回值 : 无 *//************************************************************** ****************/void display_char(uchar *point,uchar address){uchar i;write_com(0x80 + address);for(i = 0;i < 16; i++){write_date(*point);point++;}}/************************************************************** ****************//* 函数名称 : display *//* 函数描述 : 显示数字*//* 输入参数 : number,address *//* 参数描述 : number写入的数据,address地址 *//* 返回值 : 无 *//************************************************************** ****************/void display(int number,uchar address){uchar b,c,d,e;b= (number / 1000);c= (number / 100) % 10;d = (number / 10) % 10;e = number % 10;write_com(0x80 + address);write_date(b + 48);write_date(c + 48);write_date(d + 48);write_date(46); //小数点的ASCIIwrite_date(e + 48);write_date(99); //"c"的ASCIIwrite_date(109); //"m"的ASCII}/************************************************************** ****************//* 函数名称 : Trig_SuperSonic *//* 函数描述 : 发出声波函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void Trig_SuperSonic(void)//出发声波{OUTPUT = 1;delayt(1);OUTPUT = 0;}/************************************************************** ****************//* 函数名称 : Measure_Distance *//* 函数描述 : 计算距离函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void Measure_Distance(void){uchar l;uint h,y;TR0 = 1;while(INPUT){;}TR0 = 0;l = TL0;h = TH0;y = (h << 8) + l;y = y - 0xfc66;//us部分distance = y + 1000 * count;//计算总时间TL0 = 0x66;TH0 = 0xfc;delayt(30);distance = VELOCITY_30C * distance / 20000;}/************************************************************** ****************//* 函数名称 : main *//* 函数描述 : 主函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void main(void){Beep = 0;rw = 0;initLCD();Init_MCU();Init_Parameter();Alarm(2);display_char(table,0x00);display_char(table0,0x40);Delay_xMs(30000);display_char(table2,0x00);display_char(table1,0x40);while(1){Trig_SuperSonic(); //触发超声波发射while(INPUT == 0) //等待回声{;}Measure_Distance(); //计算脉宽并转换为距离display_char(table3,0x40);display(distance,0x49); //显示距离Init_Parameter(); // 参数重新初始化delayt(100); //延时,两次发射之间要至少有10ms间隔}}/************************************************************** ****************//* 函数名称 : timer0 *//* 函数描述 : T0中断处理函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void timer0 (void) interrupt 1{TF0 = 0;TL0 = 0x66;TH0 = 0xfc;count++;if(count == 18)//超声波回声脉宽最多18ms{TR0 =0;TL0 = 0x66;TH0 = 0xfc;count = 0;}}/************************************************************** ****************/1602程序如下:/************************************宏定义************************************/#define uchar unsigned char#define uint unsigned int/************************************位定义************************************/sbit dula = P2^6;sbit wela = P2^7;sbit rs = P2^3;sbit rw = P2^4;sbit lcden = P2^5;/************************************************************** ****************//* 函数名称 : delay *//* 函数描述 : 延时函数 *//* 输入参数 : x *//* 参数描述 : 延时时间 *//* 返回值 : 无 *//************************************************************** ****************/void delay(uint x){uint a,b;for(a = x;a > 0;a--){for(b = 10;b > 0;b--){;}}}/************************************************************** ****************//* 函数名称 : write_com *//* 函数描述 : 1602写命令函数 *//* 输入参数 : com*//* 参数描述 : 控制命令 *//* 返回值 : 无 *//************************************************************** ****************/void write_com(uchar com){P0 = com;rs = 0;lcden = 0;delay(10);lcden = 1;delay(10);lcden = 0;}/************************************************************** ****************//* 函数名称 : write_date *//* 函数描述 : 1602写数据函数 *//* 输入参数 : date *//* 参数描述 : 要写入的数据 *//* 返回值 : 无 *//******************************************************************************/void write_date(uchar date){P0 = date;rs = 1;lcden = 0;delay(10);lcden = 1;delay(10);lcden = 0;}/************************************************************** ****************//* 函数名称 : initLCD *//* 函数描述 : 1602初始化函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//************************************************************** ****************/void initLCD(void){dula = 0;wela = 0;write_com(0x38);delay(20);write_com(0x0f);delay(20);write_com(0x06);delay(20);write_com(0x01);delay(20);}/************************************************************** ****************/51程序如下:#ifndef __REG51_H__#define __REG51_H__/* BYTE Register */ sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B;sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98; sfr SBUF = 0x99;/* BIT Register */ /* PSW */sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5;sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88;/* IE */sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8;/* IP */sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8;/* P3 */sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98;#endif。
基于stm32单片机的超声波测距仪设计报告
基于stm32单片机的超声波测距仪设计报告【文章标题】基于STM32单片机的超声波测距仪设计报告【引言】超声波测距是一种常见且有效的测量方法,被广泛应用于工业控制、自动化、智能家居等领域。
本文将深入讨论基于STM32单片机的超声波测距仪的设计原理、硬件搭建和软件编程,并分享对该设计的观点和理解。
【简介】1. 超声波测距原理简介(可使用子标题,如1.1)- 超声波的特性与应用- 超声波传感器原理及工作方式2. 设计方案(可使用子标题,如2.1)- 系统框图:硬件模块与连接方式- 所需材料清单及器件参数选择【正文】1. 超声波传感器的选型与特性比较(可使用子标题,如1.1)1.1 超声波传感器的种类与特点1.2 STM32单片机与超声波传感器的配合选择理由与原则2. 硬件电路设计与搭建(可使用子标题,如2.1)2.1 超声波发射电路设计与实现2.2 超声波接收电路设计与实现2.3 STM32单片机与超声波传感器的连接方法及引脚映射3. 软件编程实现(可使用子标题,如3.1)3.1 STM32单片机开发环境配置与准备3.2 程序框架和流程设计3.3 超声波信号处理与距离计算算法【总结】1. 设计成果总结与优缺点评价- 设计成果与功能实现总结- 设计过程中的挑战与解决方案- 设计的优点与改进空间2. 对基于STM32单片机的超声波测距仪设计的观点和理解- 本设计在硬件搭建和软件编程方面充分利用了STM32单片机的性能与功能- 超声波测距仪在工业自动化和智能家居等领域具有广阔应用前景 - 未来可以进一步提升设计的灵活性和可扩展性【参考资料】- 张三: 《超声波测距原理与应用技术》,出版社,2018年- 李四: 《STM32单片机与嵌入式系统设计》,出版社,2019年以上是本文基于STM32单片机的超声波测距仪设计报告,对这个主题的观点和理解。
希望这篇文章内容全面、深入,并能帮助您对超声波测距仪设计有更深刻的理解。
超声波测距并报警最终程序
//超声波模块显示程序#include <reg52.h> //包括一个52标准内核的头文件#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned longuchar a ;sbit Tx = P3^3; //产生脉冲引脚sbit Rx = P3^2; //回波引脚sbit bell = P3^6; //uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9 uint distance[4]; //测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器bit succeed_flag; //测量成功标志//********函数声明void conversion(uint temp_data);void delay_20us();void delay(uint z);void main(void) // 主程序{uint distance_data,a,b;uchar CONT_1;i=0;flag=0;Tx=0; //首先拉低脉冲输入引脚TMOD=0x11; //定时器0,定时器1,16位工作方式TR0=1; //启动定时器0IT0=0; //由高电平变低电平,触发外部中断ET0=1; //打开定时器0中断EX0=0; //关闭外部中断EA=1; //打开总中断0while(1) //程序循环{EA=0;Tx=1;delay_20us();Tx=0; //产生一个20us的脉冲,在Tx引脚while(Rx==0); //等待Rx回波引脚变高电平succeed_flag=0; //清测量成功标志EX0=1; //打开外部中断TH1=0; //定时器1清零TL1=0; //定时器1清零TF1=0; //TR1=1; //启动定时器1EA=1;a: while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)TR1=0; //关闭定时器1EX0=0; //关闭外部中断if(succeed_flag==1){distance_data=outcomeH; //测量结果的高8位distance_data<<=8; //放入16位的高8位distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据distance_data*=12; //因为定时器默认为12分频distance_data/=58; //微秒的单位除以58等于厘米} //为什么除以58等于厘米,Y米=(X秒*344)/2// X秒=(2*Y米)/344 ==》X 秒=0.0058*Y米==》厘米=微秒/58if(succeed_flag==0){distance_data=0; //没有回波则清零}distance[i]=distance_data; //将测量结果的数据放入缓冲区i++;if(i==3){distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;a=distance_data;if(b==a) CONT_1=0;if(b!=a) CONT_1++;if(CONT_1>=3){CONT_1=0;b=a;conversion(b);if(b<100){uchar c=0;for(c=200;c>0;c--){bell=~bell;delay(1);}i=0;goto a;}else if (b<200){uchar c=0;for(c=200;c>0;c--){bell=~bell;delay(2);}i=0;goto a;}}i=0;}}}//*************************************************************** //外部中断0,用做判断回波电平INTO_() interrupt 0 // 外部中断是0号{outcomeH =TH1; //取出定时器的值outcomeL =TL1; //取出定时器的值succeed_flag=1; //至成功测量的标志EX0=0; //关闭外部中断}//**************************************************************** //定时器0中断,用做显示timer0() interrupt 1 // 定时器0中断是1号{TH0=0xfd; //写入定时器0初始值TL0=0x77;switch(flag){case 0x00:P0=ge; P2=0x7f;flag++;break;case 0x01:P0=shi;P2=0xbf;flag++;break;case 0x02:P0=bai;P2=0xdf;flag=0;break;}}//显示数据转换程序void conversion(uint temp_data){uchar ge_data,shi_data,bai_data ;bai_data=temp_data/100 ;temp_data=temp_data%100; //取余运算shi_data=temp_data/10 ;temp_data=temp_data%10; //取余运算ge_data=temp_data;bai_data=SEG7[bai_data];shi_data=SEG7[shi_data]&0x7f;ge_data =SEG7[ge_data];EA=0;bai = bai_data;shi = shi_data;ge = ge_data ;EA=1;}//******************************************************************void delay_20us(){ uchar bt ;for(bt=0;bt<60;bt++);}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。
基于STM32单片机的高精度超声波测距系统的设计
基于STM32单片机的高精度超声波测距系统的设计一、本文概述超声波测距技术因其非接触、高精度、实时性强等特点,在机器人导航、车辆避障、工业测量等领域得到了广泛应用。
STM32单片机作为一种高性能、低功耗的嵌入式系统核心,为超声波测距系统的设计提供了强大的硬件支持。
本文旨在设计一种基于STM32单片机的高精度超声波测距系统,以满足不同应用场景的需求。
二、超声波测距原理本部分将介绍超声波测距的基本原理,包括超声波的产生、传播、接收以及距离的计算方法。
同时,分析影响超声波测距精度的主要因素,为后续系统设计提供理论基础。
三、系统硬件设计3、1在设计基于STM32单片机的高精度超声波测距系统时,我们遵循了“精确测量、稳定传输、易于扩展”的总体设计思路。
我们选用了STM32系列单片机作为系统的核心控制器,利用其强大的处理能力和丰富的外设接口,实现了对超声波发射和接收的精确控制。
在具体设计中,我们采用了回波测距法,即发射超声波并检测其回波,通过测量发射与接收之间的时间差来计算距离。
这种方法对硬件的精度和稳定性要求很高,因此我们选用了高精度的超声波传感器和计时器,以确保测量结果的准确性。
我们还考虑到了系统的可扩展性。
通过STM32的串口通信功能,我们可以将测量数据上传至计算机或其他设备进行分析和处理,为后续的应用开发提供了便利。
我们还预留了多个IO接口,以便在需要时添加更多的传感器或功能模块。
本系统的设计思路是在保证精度的前提下,实现稳定、可靠的超声波测距功能,并兼顾系统的可扩展性和易用性。
31、1.1随着物联网、机器人技术和自动化控制的快速发展,精确的距离测量技术在各个领域的应用越来越广泛。
超声波测距技术作为一种非接触式的距离测量方式,因其具有测量精度高、稳定性好、成本相对较低等优点,在工业自动化、智能家居、机器人导航、安防监控等领域得到了广泛应用。
STM32单片机作为一款高性价比、低功耗、高性能的嵌入式微控制器,在智能设备开发中占据重要地位。
超声测距模块实验报告
一、实验目的1. 理解超声波测距的基本原理。
2. 掌握超声波测距模块的硬件连接与软件编程。
3. 学习使用超声波测距模块进行距离测量。
4. 了解超声波测距在实际应用中的优势与局限性。
二、实验原理超声波测距是利用超声波在介质中传播的速度和距离之间的关系来测量距离的一种方法。
当超声波发射器发出超声波时,它会遇到障碍物并反射回来。
通过测量发射和接收超声波之间的时间差,可以计算出障碍物与发射器之间的距离。
超声波在空气中的传播速度大约为340m/s。
设超声波发射器与接收器之间的距离为d,超声波从发射器传播到障碍物并返回所需的时间为t,则有:\[ d = \frac{v \times t}{2} \]其中,v为超声波在空气中的传播速度,t为超声波往返所需的时间。
三、实验设备1. 超声波测距模块HC-SR042. STM32单片机开发板3. 调试工具4. 电源5. 导线四、实验步骤1. 硬件连接(1)将超声波测距模块的VCC、GND、TRIG和ECHO引脚分别连接到STM32单片机的3.3V、GND、GPIO和中断引脚。
(2)将STM32单片机的电源和地连接到实验平台的电源。
2. 软件编程(1)编写STM32单片机的程序,用于控制超声波测距模块。
(2)程序主要包含以下功能:- 初始化GPIO和中断引脚;- 发送触发信号;- 读取回响信号;- 计算距离;- 显示距离。
(3)使用HAL库函数实现上述功能。
3. 调试与测试(1)将程序烧录到STM32单片机中。
(2)使用调试工具检查程序运行情况。
(3)调整超声波测距模块的位置,测试不同距离下的测量结果。
五、实验结果与分析1. 实验数据通过实验,得到以下数据:| 距离(cm) | 测量值(cm) || :--------: | :--------: || 10 | 9.8 || 20 | 19.7 || 30 | 29.6 || 40 | 39.5 || 50 | 49.4 |2. 数据分析实验结果表明,超声波测距模块的测量精度较高,误差在±1cm以内。
基于stm32单片机的超声波测距仪设计报告
基于stm32单片机的超声波测距仪设计报告1. 引言超声波测距仪(Ultrasonic Distance Sensor)是一种常用的测距设备,通过发送超声波脉冲并接收其反射信号来测量目标与测距仪之间的距离。
本报告将详细介绍基于stm32单片机的超声波测距仪的设计过程。
2. 设计原理超声波测距仪的基本原理是利用超声波在空气中的传播速度和反射特性来计算目标物体与测距仪之间的距离。
其中,stm32单片机作为测距仪的控制核心,通过发射超声波脉冲并测量接收到的回波时间来计算距离。
2.1 超声波传播速度超声波在空气中的传播速度约为340m/s,可以通过测量超声波往返的时间来计算出距离。
2.2 超声波反射信号当超声波遇到障碍物时,会产生反射信号,测距仪接收到这些反射信号并测量其时间差,再通过计算即可得到距离。
3. 硬件设计本设计使用stm32单片机作为核心控制器,并搭配超声波发射器和接收器模块。
3.1 超声波发射器超声波发射器负责产生超声波脉冲,并将脉冲信号发送到待测物体。
3.2 超声波接收器超声波接收器负责接收从物体反射回来的超声波信号,并将其转换为电信号。
3.3 stm32单片机stm32单片机作为测距仪的核心控制器,负责发射超声波脉冲、接收反射信号并计算距离。
4. 软件设计本设计涉及的软件设计包括超声波信号发射、接收信号处理和距离计算等。
4.1 超声波信号发射使用stm32单片机的GPIO口控制超声波发射模块,产生一定频率和周期的脉冲信号。
4.2 接收信号处理通过stm32单片机的ADC模块,将超声波接收器接收到的模拟信号转换为数字信号,并对信号进行处理和滤波。
4.3 距离计算根据接收到的超声波反射信号的时间差,结合超声波的传播速度,使用合适的算法计算出距离。
5. 实验结果与分析经过实际测试,基于stm32单片机的超声波测距仪达到了预期的效果。
能够精确测量目标与测距仪之间的距离,并显示在相关的显示设备上。
超声波雷达测距实训报告
一、实训目的本次实训旨在通过实际操作,了解超声波雷达测距的原理和实现方法,掌握超声波传感器的基本使用技巧,并学会利用STM32单片机进行数据处理和显示,从而完成一个简单的超声波雷达测距系统。
二、实训器材1. STM32F103单片机开发板2. HC-SR04超声波传感器模块3. OLED显示屏4. 连接线5. 电源三、实训原理超声波雷达测距的原理是利用超声波在空气中的传播速度来测量距离。
当超声波传感器发射超声波时,它会遇到障碍物后反射回来,通过测量超声波从发射到接收的时间差,可以计算出障碍物与传感器之间的距离。
四、实训步骤1. 硬件连接:- 将HC-SR04超声波传感器模块的两个引脚分别连接到STM32单片机的GPIO引脚。
- 将OLED显示屏的相应引脚连接到STM32单片机的SPI或I2C接口。
- 将电源连接到STM32单片机和超声波传感器模块。
2. 软件设计:- 编写STM32单片机的初始化程序,配置GPIO引脚、SPI/I2C接口等。
- 编写超声波传感器的控制程序,用于控制超声波传感器的发射和接收。
- 编写数据处理程序,用于计算超声波从发射到接收的时间差,从而得到距离值。
- 编写OLED显示屏的显示程序,用于显示距离值。
3. 程序实现:- 使用STM32 HAL库函数或直接操作寄存器来实现程序。
- 通过定时器中断来实现超声波传感器的时序控制。
- 使用查表法或直接计算法来实现距离值的转换。
4. 系统测试:- 将系统放置在测试环境中,调整测试距离,观察OLED显示屏上显示的距离值是否准确。
- 分析测试结果,找出系统误差的来源,并进行优化。
五、实训结果与分析1. 测试结果:- 在不同的测试距离下,OLED显示屏上显示的距离值与实际距离基本相符,说明系统具有较高的测量精度。
2. 误差分析:- 超声波在空气中的传播速度受温度、湿度等因素的影响,导致测距误差。
- 超声波传感器的响应时间存在一定的延迟,也会导致测距误差。
基于STM32的HC-SR04超声波测距模块实验
基于STM32的HC-SR04超声波测距模块实验硬件环境STM32F407探索板(其他开发板皆可以)HC-SR04超声波模块软件环境KEIL5CUBEMX串口调试助手(sscom或其他)实验目标•了解HC-SR04超声波模块工作原理•实现超声波模块测距1、超声波模块介绍1.1 超声波测距原理及系统组成超声波测距是借助于超声脉冲回波渡越时间法来实现的。
设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出:D = ct/2,图2是相应的系统框图。
基本原理:经发射器发射出长约 6mm,频率为 40KHZ 的超声波信号。
此信号被物体反射回来由接收头接收,接收头实质上是一种压电效应的换能器。
它接收到信号后产生 mV 级的微弱电压信号。
1.2 HC-SR04模块原理HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm,模块包括超声波发射器、接收器与控制电路。
基本工作原理:(1)采用IO 口TRIG 触发测距,给最少10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2,下面是实物图。
如上图接线,VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO 回响信号输出等四个接口端。
1.3 超声波时序图以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。
一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
stm32与HC-SR04超声波传感器测距
stm32与HC-SR04超声波传感器测距⾸先,先来看⼀下这个模块的基本功能和原理。
HC-SR04超声波测距模块可提供2cm-400cm的⾮接触式距离感测功能,测距精度可达⾼到3mm;模块包括超声波发射器、接收器与控制电路。
像智能⼩车的测距以及转向,或是⼀些项⽬中,常常会⽤到。
智能⼩车测距可以及时发现前⽅的障碍物,使智能⼩车可以及时转向,避开障碍物。
注意是5v输⼊,但是我⽤stm32 的3.3v输⼊也是没有问题的。
⼆.⼯作原理1.给超声波模块接⼊电源和地。
2.给脉冲触发引脚(trig)输⼊⼀个长为20us的⾼电平⽅波3.输⼊⽅波后,模块会⾃动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动定时器计时)4.当超声波返回被模块接收到时,回波引脚端的电平会由1变为0;(此时应该停⽌定时器计数),定时器记下的这个时间即为超声波由发射到返回的总时长。
5.根据声⾳在空⽓中的速度为344⽶/秒,即可计算出所测的距离。
要学习和应⽤传感器,学会看懂传感器的时序图是很关键的,所以我们来看⼀下HC-SR04的时序触发图。
我们来分析⼀下这个时序图,先由触发信号启动HC-RS04测距模块,也就是说,主机要先发送⾄少10us的⾼电平,触发HC-RS04,模块内部发出信号是传感器⾃动回应的,我们不⽤去管它。
输出回响信号是我们需要关注的。
信号输出的⾼电平就是超声波发出到重新返回接收所⽤的时间。
⽤定时器,可以把这段时间记录下来,算出距离,别忘了结果要除于2,因为总时间是发送和接收的时间总和。
下⾯是亲测可⽤的驱动程序。
芯⽚型号为stm32f103zet6,超声波测距后通过串⼝打印到电脑上⾯。
驱动和测距;//超声波测距#include "hcsr04.h"#define HCSR04_PORT GPIOB#define HCSR04_CLK RCC_APB2Periph_GPIOB#define HCSR04_TRIG GPIO_Pin_5#define HCSR04_ECHO GPIO_Pin_6#define TRIG_Send PBout(5)#define ECHO_Reci PBin(6)u16 msHcCount = 0;//ms计数void Hcsr04Init(){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //⽣成⽤于定时器设置的结构体GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);//IO初始化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);//定时器初始化使⽤基本定时器TIM6RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //使能对应RCC时钟//配置定时器基础结构体TIM_DeInit(TIM2);TIM_TimeBaseStructure.TIM_Period = (1000-1); //设置在下⼀个更新事件装⼊活动的⾃动重装载寄存器周期的值计数到1000为1msTIM_TimeBaseStructure.TIM_Prescaler =(72-1); //设置⽤来作为TIMx时钟频率除数的预分频值 1M的计数频率 1US计数TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_ClearFlag(TIM6, TIM_FLAG_Update); //清除更新中断,免得⼀打开中断⽴即产⽣中断 TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //打开定时器更新中断hcsr04_NVIC();TIM_Cmd(TIM6,DISABLE);}//tips:static函数的作⽤域仅限于定义它的源⽂件内,所以不需要在头⽂件⾥声明static void OpenTimerForHc() //打开定时器{TIM_SetCounter(TIM6,0);//清除计数msHcCount = 0;TIM_Cmd(TIM6, ENABLE); //使能TIMx外设}static void CloseTimerForHc() //关闭定时器{TIM_Cmd(TIM6, DISABLE); //使能TIMx外设}//NVIC配置void hcsr04_NVIC(){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn; //选择串⼝1中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断NVIC_Init(&NVIC_InitStructure);}//定时器6中断服务程序void TIM6_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查TIM3更新中断发⽣与否{TIM_ClearITPendingBit(TIM6, TIM_IT_Update ); //清除TIMx更新中断标志msHcCount++;}}//获取定时器时间u32 GetEchoTimer(void){u32 t = 0;t = msHcCount*1000;//得到MSt += TIM_GetCounter(TIM6);//得到USTIM6->CNT = 0; //将TIM2计数寄存器的计数值清零Delay_Ms(50);return t;}//⼀次获取超声波测距数据两次测距之间需要相隔⼀段时间,隔断回响信号//为了消除余震的影响,取五次数据的平均值进⾏加权滤波。
超声波测距
2011年《电子设计综合创新实践》实践练习题设计报告题目名称:汽车倒车雷达姓名:王会斌3080103989(电信03)姓名:方丰斌3080102963(电信03)姓名:何雷骏3080103786(电信01)指导教师:阮秉涛完成日期: 2011.7.27汽车倒车雷达摘要:汽车倒车雷达在工程技术领域中有着重要的实用价值。
本次设计基于32位单片机STM32开发汽车倒车雷达,该微处理器具有高性能、低成本、低功耗等特点。
此系统通过单片机产生PWM信号,经电流放大后送给超声波发射头。
接收头的信号送给CX20102处理,并在屏蔽掉干扰信号后送给单片机。
单片机计算出发射端和反射端之间距离,来实现倒车防撞报警功能。
此系统具有结构简单,精度高,使用方便等特点。
关键词:STM32单片机超声波测距Car reversing radarAbstract: Car reversing radar in the field of engineering has an important practical value. The design of car parking radar is based on 32-bit STM32 microcontroller , which has a high-performance, low cost, low power consumption. This system use the microcontroller to generate PWM signal, which is gave to head after amplified by the current ultrasonic transmitter. Receiver signal is gave to CX20102, then is gave to the microcontroller after masking off the interference signal .The microcontroller calculates the distance between transmitter and reflective sides, in order to achieve the reverse collision warning function. This system has a simple structure, high precision, and is easy to use and so on. Keywords: STM32microchip Ultrasonic wave Measure Distance目录一、设计要求---------------------------------------3二、方案论证---------------------------------------4三、单元电路设计-----------------------------------6四、软件设计---------------------------------------9五、系统测试--------------------------------------11六、结论------------------------------------------11七、参考文献--------------------------------------12八、附录------------------------------------------13一、设计要求1.1设计任务设计并制作一台汽车倒车雷达装置(距离检测装置)。
基于STM32的超声波测距仪
基于STM32的超声波测距仪超声波是一种在许多领域都得到广泛应用的技术,其中之一就是测距。
基于STM32的超声波测距仪利用超声波技术,能够准确测量目标物体和测距设备之间的距离。
本文将介绍超声波测距的原理及其在STM32微控制器上的实现。
一、测距原理超声波测距利用超声波在空气中传播的特性进行测量。
它基于声波在不同介质中传播速度不同的原理,通过发射一束超声波并接收其反射回来的信号,计算出目标物体和测距设备之间的距离。
在超声波测距仪中,超声波传感器是实现测距的核心部件。
传感器发射一个短脉冲的超声波信号,并立即启动接收模式以接收反射回来的信号。
通过测量发射和接收之间的时间差,并乘以声速,即可得到目标物体和测距设备之间的距离。
二、STM32微控制器的应用STM32是一款常用于嵌入式系统开发的微控制器芯片,它具有出色的性能和强大的功能。
在超声波测距仪中,STM32可以作为核心控制单元,负责数据处理、信号生成和测距结果的显示。
1. 硬件设计超声波测距仪的硬件设计包括传感器模块、信号处理电路和显示模块。
其中,传感器模块负责发射和接收超声波信号,信号处理电路负责处理传感器输出的模拟信号,而显示模块则用于显示测距结果。
在STM32微控制器上,可以使用GPIO(通用输入输出)引脚来控制传感器模块的触发和接收功能。
利用定时器模块生成精确的时间延迟,并通过外部中断引脚来触发接收模式。
同时,可以利用ADC(模数转换器)模块将传感器输出的模拟信号转换为数字信号,并通过显示模块显示测距结果。
2. 软件实现在STM32的软件实现中,需要利用定时器和外部中断功能来控制超声波的发射和接收。
通过编写相应的中断服务函数,可以实现在接收到超声波反射信号时,获取时间戳并进行距离计算。
此外,还可以利用STM32的串口模块将测距结果发送给上位机或其他外部设备进行进一步处理。
通过串口通信,可以实现实时测距数据的传输和远程控制功能。
三、优化和应用基于STM32的超声波测距仪可以通过一些优化来提高测距的精确度和可靠性。
stm32超声波测距原理
stm32超声波测距原理STM32超声波测距原理引言:超声波测距是一种常用的测量技术,它利用超声波的传播速度和回波时间来测量目标物体与传感器的距离。
STM32是一种基于ARM Cortex-M内核的32位微控制器,具有丰富的外设和强大的计算能力,广泛应用于各种测量和控制系统中。
一、超声波测距原理超声波测距原理是利用超声波在空气中的传播速度及其传播时间来计算目标物体与传感器之间的距离。
具体过程如下:1. 发射超声波信号:STM32通过IO口控制超声波传感器向目标物体发射超声波信号。
超声波传感器内部包含一个震荡器,当接收到控制信号后,震荡器开始振动产生超声波。
2. 超声波传播:发射的超声波信号在空气中以声速传播,碰到目标物体后会发生反射。
3. 接收回波信号:超声波传感器同时兼具发射和接收功能,它可以接收到目标物体反射回来的超声波信号。
4. 计算距离:STM32通过定时器捕获功能记录超声波发射和接收的时间差,根据声速和时间差计算出目标物体与传感器之间的距离。
二、STM32实现超声波测距STM32作为控制器,可以实现超声波测距功能。
具体步骤如下:1. 初始化定时器:首先,需要初始化STM32的定时器,配置为捕获模式,并设置相关参数,例如计数边沿、预分频系数等。
定时器的作用是记录超声波发射和接收的时间差。
2. 发射超声波信号:通过STM32的IO口控制超声波传感器,使其发射超声波信号。
通常情况下,发射信号的持续时间为10微秒左右。
3. 接收回波信号:超声波传感器接收到反射回来的超声波信号后,将触发STM32的定时器,记录接收到回波信号的时间。
4. 计算距离:根据定时器记录的发射和接收时间差,结合声速的数值,可以通过简单的计算公式得到目标物体与传感器之间的距离。
三、注意事项1. 需要根据具体的超声波传感器和环境来选择合适的声速数值,常见的声速数值为340m/s。
2. 超声波测距的有效范围受到多种因素的影响,例如超声波传感器的发射功率、接收灵敏度、目标物体的形状和表面特性等。
《2024年基于STM32单片机的高精度超声波测距系统的设计》范文
《基于STM32单片机的高精度超声波测距系统的设计》篇一一、引言在现代电子技术的迅猛发展中,精确测量距离的设备扮演着重要的角色。
随着人类对于生活环境安全性的关注提升,对于各种设备的精度要求也在逐渐加强。
超声波测距技术以其非接触性、高精度、低成本等优点,在众多领域得到了广泛的应用。
本文将详细介绍基于STM32单片机的高精度超声波测距系统的设计。
二、系统概述本系统以STM32单片机为核心控制器,结合超声波测距模块,实现对目标物体的精确测距。
系统主要由STM32单片机、超声波测距模块、电源模块、信号处理模块和显示模块等组成。
通过单片机对超声波模块的控制,实现对目标的精确测距,并通过显示模块实时显示测距结果。
三、硬件设计1. STM32单片机:作为系统的核心控制器,负责整个系统的控制与数据处理。
STM32系列单片机具有高性能、低功耗的特点,能够满足系统对于精确度和稳定性的要求。
2. 超声波测距模块:采用高精度的超声波测距传感器,实现对目标物体的距离测量。
通过超声波的发送与接收,实现对目标的距离计算。
3. 电源模块:为系统提供稳定的电源支持,确保系统的正常工作。
电源模块需考虑到功耗问题,以实现系统的长时间运行。
4. 信号处理模块:对超声波测距模块的信号进行滤波、放大等处理,以提高测距的准确性。
5. 显示模块:实时显示测距结果,方便用户观察与操作。
四、软件设计1. 主程序:负责整个系统的控制与数据处理。
主程序通过控制超声波测距模块的发送与接收,获取目标物体的距离信息,并通过显示模块实时显示。
2. 超声波测距模块控制程序:控制超声波的发送与接收,实现对目标物体的距离测量。
通过计算超声波的发送与接收时间差,计算出目标物体的距离。
3. 数据处理程序:对获取的测距数据进行处理,包括滤波、计算等操作,以提高测距的准确性。
4. 显示程序:将处理后的测距结果显示在显示模块上,方便用户观察与操作。
五、系统实现1. 通过STM32单片机的GPIO口控制超声波测距模块的发送与接收,实现超声波的发送与接收功能。
《2024年基于STM32单片机的高精度超声波测距系统的设计》范文
《基于STM32单片机的高精度超声波测距系统的设计》篇一一、引言随着科技的不断发展,高精度测距技术被广泛应用于各个领域,如机器人导航、环境监测、智能家居等。
本文将介绍一种基于STM32单片机的高精度超声波测距系统的设计。
该系统采用先进的超声波测距原理,结合STM32单片机的强大处理能力,实现了高精度、快速响应的测距功能。
二、系统概述本系统主要由超声波发射模块、接收模块、STM32单片机以及相关电路组成。
通过STM32单片机控制超声波发射模块发射超声波,然后接收模块接收反射回来的超声波信号,根据超声波的传播时间和速度计算距离。
系统具有高精度、抗干扰能力强、测量范围广等特点。
三、硬件设计1. STM32单片机本系统采用STM32系列单片机作为主控制器,具有高性能、低功耗、丰富的外设接口等特点。
通过编程控制单片机的GPIO 口,实现超声波发射和接收的控制。
2. 超声波发射模块超声波发射模块采用40kHz的超声波传感器,具有体积小、功耗低、测距范围广等优点。
通过单片机控制发射模块的触发引脚,产生触发信号,使传感器发射超声波。
3. 超声波接收模块超声波接收模块同样采用40kHz的超声波传感器。
当传感器接收到反射回来的超声波信号时,会产生一个回响信号,该信号被接收模块的回响引脚捕获并传递给单片机。
4. 相关电路相关电路包括电源电路、滤波电路、电平转换电路等。
电源电路为系统提供稳定的电源;滤波电路用于去除干扰信号;电平转换电路用于匹配单片机与传感器之间的电平标准。
四、软件设计1. 主程序设计主程序采用C语言编写,通过STM32单片机的标准库函数实现各功能模块的初始化、参数设置以及控制逻辑。
主程序首先进行系统初始化,然后进入循环等待状态,等待触发信号的到来。
当接收到触发信号时,开始测距流程。
2. 测距流程设计测距流程主要包括发射超声波、等待回响信号、计算距离等步骤。
当接收到触发信号时,单片机控制超声波发射模块发射超声波;然后等待接收模块的回响信号。
基于stm32的超声波测距系统
基于stm32的超声波测距系统相比于传统的单片机,STM32单片机具有更高的时间测量分辨率,其主频与定时器频率高达72MHz,且该单片机在开启定时器的同时,会启动PWM通道驱动超声波发射器和通道捕捉回波信号,提高了测量的精度和准确性。
超声波测距是一种典型的非接触测量方式,在不同的传播介质中具有不同的传播速度其系统结构简单、成本低。
只有了解超声波测距的原理、了解STM32单片机才能设计出性能良好的STM32单片机的高精度超声波测距系统。
超声波测距的原理及检测方法超声波检测技术是基于非接触测量方式而逐渐发展起来的一门技术,这种非接触测量方式会经常出现在材料学、电子科学、测量学等学科当中。
超声波的产生是通过机械振动而得到,其传播速庶会随着传播介质的变化而变化。
超声波测距的实现主要是通过超声波的产生、传播与接收回波这三个主要过程。
目前,声波幅值检测法、渡越时间检测法和相位检测法是超声波测距的三种主要检测方法。
声波幅值检测法,容易受到传播介质的干扰,所以其测量精度较差。
渡越时间检测法,与其他两种检测方法相比,成本较低,测量范围较广,且实现简单,因此本文高精度超声波测距系统的设计决定采用渡越时间检测法。
相位检测法,在实际测量过程中,其测量精度要高于其他两种检测方法,但测量范围具有一定的局限性田。
STM32单片机的高精度超声波测距系统设计一、系统组成STM32单片机的高精度超声波测距系统的设计主要由STM32 单片机、超声波发射电路、接受电路、补偿电路和软件等构成。
该系统将STM32单片机作为整个系统的核心,通过协调各部分电路工作,进而实现高精度的超声波测距口。
二、系统硬件设计1.超声波发射电路超声波发射电路两个最主要的组成部分就是超声波探头和超声波激励电路。
超声波探头不仅是超声波发射电路的一个重要组成部分,更是整个超声波测距系统的重要组成部分。
它是超声波测距系统中用以发射或接受超声波信号的主要器件。
超声波激励电路的基本工作原理是首先利用相应的机理信号对一特定形式的电压进行处理之后,将其加载到超声波探头上,然后再通过超声波探头压电晶片将其自身所具有的电能转化为超声波信号图。
基于STM32的超声波测距仪
物联网技术 2023年 / 第9期320 引 言随着现代社会科技的飞速发展,电子技术不断得到创新,非接触式光学检测技术被广泛推广,如红外光谱测距新技术、雷达红外测距新技术、激光红外测距新技术、超声波激光测距新技术等均是我国目前应用较为普遍的非接触式光学红外测距技术[1]。
相对其他测距方法来说,超声波激光测距的主要优点是比较安全、耐受脏污,可以在条件较差的室内环境中使用,甚至可以在一般人员无法轻易进入的极端恶劣的环境中精准快速地进行测距。
例如,在粉尘烟雾和有毒化学物质污染较重,或者电磁噪声等其他环境因素干扰严重的环境下,如果通过人工进行测距则会非常困难[2],此时若通过超声波进行精确测距则非常方便。
因此,超声波精准测距技术被广泛地应用到各个领域,例如倒车雷达、扫地机器人、传送菜机器人、无人机等,甚至在我国的国防军事领域也被大量应用[3]。
超声波测距技术与目前其他非接触式测距技术方式相比,它信号的连续传播时间长、能量消耗较慢、指向性较强,更适用于直接测量近距离目标[4]。
与红外线和激光测距技术相比,超声波的测距效果比较稳定、价格低廉、下限高、耐高强度使用、易操作[5]。
因此,本文以STM32L052K8芯片为主要控制器设计了一个超声波测距仪,并对其性能进行了验证。
1 超声波测距原理1.1 超声波介绍声音是由外界某种物体振动而产生的,物体每秒振动的次数即为声频,单位为Hz。
物体的连续振动是指处在运动状态的物体在靠近振动平衡位置进行的一种连续规律的往复运动。
例如,用手轻敲鼓面几下后,鼓面立即开始一阵上下起伏的振动,这种上下起伏的振动状态又能够通过其他媒质迅速地向周围传播。
一般情况下,人能够清楚听到的声波频率为16 Hz ~20 kHz ;声频低于16 Hz 时,则为次声波或超低声;声频高于20 kHz 时,人耳无法准确听到,则为超声波[6]。
1.2 超声波测距原理如图1所示,超声波测距是通过超声波发射端向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播时碰到障碍物就立即返回来,超声波接收端收到反射波就立即停止计时。
超声波测距原理及调试程序
一、按如下图示连接好电缆线:1:VCC 电源+5V输入2:ECHO 计数(计时)管脚3:TRIG 触发输入4:DQ 温度传感器IO口(暂不提供本功能,不连接)5:GND 电源地6:PCW RS232通讯接口TXD,RS232电平(暂不提供本功能,不连接)7:PCR RS232通讯接口RXD,RS232电平(暂不提供本功能,不连接)二、程序处理单片机程序处理时,只要将TRIG脚给一段时间的高电平,模块自动就会发送40K的方波,发送完毕ECHO脚为高电平,模块自动检测是否有信号返回,如有信号返回,ECHO脚变为低电平,ECHO脚的高电平时间就是超声波走过的时间,测试简单方便。
身长转换公式:L=(331.5+0.6*T)*b*js+offset;其中L为测量长度,T为当前温度,b为长度转换系数(不同单片机该系数不同,需要自行测试得出该值),js为ECHO脚的高电平时计数值(可参考以下子程序),offset为偏移值(对测量精度要求不高时,此项可省略)各变量定义为:unsigned long L ; unsigned char T; float b;unsigned int js; float offset;对测量精度要求很高时,可对超声波测量距离进行校长标定处理,即在两个不同的点分别进行校正,校正时L、T、js都是已知量,可以求出长度转换系数b和偏移量offset,然后再根据每次测量的js值,可以求出实际的长度。
三、调用子程序注意:以下程序已经是成功运用到产品中的子程序,请放心调用,不要随意外传已成功的超声波测距程序~~室温25摄氏度。
#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid udelay(int a);sbit echo=P1^0;sbit trig=P1^2;uint i;unsigned long js=0;float l;uint ll;uint height[5];uint table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};uint led[]={0x00,0x01,0x02,0x03,0x04};void fdelay(int a);void display();void main(){echo=1;while(1){trig=1;udelay(50);trig=0;while(echo==0) ;while(echo==1) js++;l=0.3035*js+9.5;ll=(uint)(l*10);display();i=0;while(i<5){P2=led[i];P0=table[height[i]];fdelay(10);i++;}js=0;}}void display(){height[0]=( ll/1000);height[1]=(( ll/100)%10); height[2]=((ll/10)%10);height[3]=10;height[4]=(ll%10);}void fdelay(int a){uint ii=0;uint jj=0;for(jj=0;jj<a;jj++)for(ii=0;ii<=120;ii++); }void udelay(int a){uint ii=0;for(ii=0;ii<=a;ii++); }。
基于stm32F407的超声波测距程序及注意事项(HC-SR04)
基于stm32F407的超声波测距程序及注意事项(HC-SR04)⽹上的资料太杂太乱,调这个东西的时候⾛了不少弯路,现在分享出来,亲测管⽤!基本⼯作原理:(1)采⽤IO⼝TRIG触发测距,给⾄少10us的⾼电平信号;(2)模块⾃动发送8个40khz的⽅波,⾃动检测是否有信号返回;(3)有信号返回,通过IO⼝ECHO输出⼀个⾼电平,⾼电平持续的时间就是超声波从发射到返回的时间。
测试距离=(⾼电平时间声速(340M/S))/2;(4)本模块使⽤⽅法简单,⼀个控制⼝发⼀个10US以上的⾼电平,就可以在接收⼝等待⾼电平输出.⼀有输出就可以开定时器计时,当此⼝变为低电平时就可以读定时器的值,此时就为此次测距的时间,⽅可算出距离.如此不断的周期测,即可以达到你移动测量的值*5、 操作:初始化时将trig和echo端⼝都置低,⾸先向给 trig 发送⾄少10 us的⾼电平脉冲(模块⾃动向外发送8个40K的⽅波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空⽓中运⾏的时间,按照 测试距离=(⾼电平时间声速(340M/S))/2 就可以算出超声波到障碍物的距离。
程序:超声波端⼝初始化:GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIO时钟//trigGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOG, &GPIO_InitStructure);////echoGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输⼊GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOG, &GPIO_InitStructure);//¯定时器初始化:TIM4_Int_Init(250-1,8400-1);//定时器时钟84M,分频系数8400,所以84M/8400=10KHZ的技术频率,记⼀次数0.1ms,计数250次为25ms。
基于单片机的超声波测距系统设计
基于单片机的超声波测距系统设计超声波测距系统在物联网和机器人等领域有着广泛的应用。
超声波作为一种非接触的测量方式,可以有效地避免物体表面的污染,适用于各种环境下的距离测量。
本文将介绍基于单片机的超声波测距系统的设计方法。
超声波测距的原理超声波测距是基于声波传播时间的测量。
超声波发射器发出超声波,经物体反射后被接收器接收。
根据声波的传播速度和接收时间,可以计算出超声波的传播距离。
常用的超声波频率为40kHz左右,其传播速度约为340m/s。
单片机与超声波测距在超声波测距系统中,单片机作为主控制器,负责控制整个系统的运行。
它接收来自超声波发射器的信号,触发超声波的发送,并计时等待超声波的返回。
当超声波被接收器接收时,单片机通过计算时间差来计算距离。
距离计算距离计算公式为:距离 =声速×时间差 / 2。
在系统中,声速是已知量,因此关键是准确测量时间差。
单片机通过计时器来精确测量从超声波发射到接收的时间,从而计算出距离。
误差分析超声波测距系统可能出现的误差主要有以下几种:1、计时器计时误差:这是时间测量误差的主要来源。
为提高计时精度,可以使用高精度的计时器或者采取软件滤波算法来降低误差。
2、声速误差:由于环境温度、湿度等因素的影响,声速可能会发生变化,从而影响测量结果。
可以通过引入温度传感器来对声速进行补偿,以减小误差。
3、反射面误差:由于被测物体的表面形状和质地等原因,超声波可能无法完全反射回来,导致测量结果偏小。
为减少误差,可以在发射端和接收端加装角度调节装置,使超声波尽量垂直于被测物体表面。
应用实例以下是一个基于单片机的超声波测距系统的设计实例:1、硬件选择:选用STM32F103C8T6单片机作为主控制器,并选用HC-SR04超声波传感器作为超声波发射和接收器。
该传感器具有外接和控制电路简单、性能稳定、可靠性高等优点。
2、硬件连接:将超声波传感器的Trig和Echo引脚分别连接到单片机的GPIO口,以控制超声波的发射和接收。
基于STM32单片机的高精度超声波测距系统的设计
Ke r s TM3 co rc so ;utao i it c au n ;d u l o aao ;t -an c mp n ain( GC) y wo d :S 2 Mirp o e sr l s ncd s e me s r g o be c mp rtr i g i o e s t T r n a i me o ;
ta i o a c o o t l r t e b s r d t n lmi r c n r l , a i i o e h c ̄e u n y a d t e T me q e c n h i r ̄e u n y o h T 2 mir c n rl r r a h u o 7 MHz q e c ft e S M3 c o o t l e c p t 2 oe , wh c mp o e t e r s l t n o e me s r g t . h u e o t s t a o a tr P M h n es t rv l a o i i h i r v e o u i ft a u n i T e s p r r y i h t u c n sa t W h o h i me ii y c a n l o d e u t s n c i r