打印

12_51单片机应用_超声波&定时器

[复制链接]
901|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
通过利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。单片机入门绘制电路板,需要正品元器件可去唯样商城,原厂真货。

Operating Voltage
Dc5V
Operating Current
15ma
Operating Frequency
40KHz
Max Range
4m
Min Range
2cm
Ranging Accuracy
3mm
Measuring Angle
15°
Trigger Input Signal
10µS TTL脉冲
Dimension
45 x 20 x 15
通过Trig引脚发一个 10US 以上的高电平,模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
有信号返回时,Echo有高电平输出,高电平时间即是超声波往返时间。
测试距离 = (高电平时间*声速)/2

通过单片机的定时器获得计时功能来获得检测距离,开启定时器后TH和TL寄存器数值会自动增加。直到关闭定时器,再读出其中的数值即可计算距离。
/*开始计时*/while(!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间    TR0 =1;//启动定时器0,开启计时while(ECHO);//ECHO不为0,即脉冲返回结束,计时结束    TR0 =0;//停止计时,此时的ECHO的高电平时间就是     超声波发出到重新返回接收所用的时间
#ifndef _HC_SR04_H_#define _HC_SR04_H_#include <intrins.h>//提供        _nop_();/*供HC-SR04提供启动时间*//*位定义*/sbit TRIG = P1 ^0;sbit ECHO = P1 ^1;/*全局变量定义,超出距离标志位为1,不超出为0*/bit HC_SR04_flag;/*函数声明*/void HC_SR04_Init(void);//初始化T0定时器,用于HC_SR04unsignedint HC_SR04(void);//返回距离#endif
#include "HC_SR04.h"/********************************************************************************* 函数名称: HC_SR04_Init** 功能描述: 初始化定时器0,用以记录从发射到返回的时间Time** 参数说明: void** 返回说明: void** 创建人员: Main** 创建日期: 2020-06-01**------------------------------------------------------------------------------** 修改人员:** 修改日期:** 修改描述:**------------------------------------------------------------------------------********************************************************************************/void HC_SR04_Init(void){    TMOD |=0x01;    TH0 =0;    TL0 =0;    ET0 =1;//允许T0中断,可关闭,只有特别大的才开    EA =1;    TRIG =0;//先使启动端置低,等待高电平启动}/********************************************************************************* 函数名称: HC_SR04** 功能描述: 返回测量距离** 参数说明: void** 返回说明: 测量距离,单位(cm)** 创建人员: Main** 创建日期: 2020-12-22**------------------------------------------------------------------------------** 修改人员: Main** 修改日期: ** 修改描述: **------------------------------------------------------------------------------********************************************************************************/unsignedint HC_SR04(void){unsignedint distance;//用于记录测得的距离unsignedint time;//用于记录超声波发出到重新返回接收所用的时间/*启动HC_SR04*/    TRIG =1;//升高电平,打开触发信号    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    _nop_();    TRIG =0;/*开始计时*/while(!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间,当为低电平时卡住不动    TR0 =1;//启动定时器0,开启计时while(ECHO);//ECHO不为0,即脉冲返回结束,计时结束    TR0 =0;//停止计时,此时的ECHO的高电平时间就是     超声波发出到重新返回接收所用的时间/*计算时间及距离*/    time =(TH0 *256+ TL0)*1.29;//可改变此数据来提高精确度    distance =(time *0.034)/2;//单位是cm,0.34是mm    TH0 =0;//清零,进行下一次测距    TL0 =0;//返回距离return distance;}/********************************************************************************* 函数名称: T0_Time_Sr04** 功能描述: 超出测量距离的异常** 参数说明: None** 返回说明: void** 创建人员: Main** 创建日期: **------------------------------------------------------------------------------** 修改人员:** 修改日期:** 修改描述:**------------------------------------------------------------------------------********************************************************************************/void T0_Time_Sr04() interrupt 1{    HC_SR04_flag =1;//        TI=1;//        printf("超出距离");//        TI=0;}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

40

帖子

0

粉丝