欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

蓝桥杯之超声波

程序员文章站 2022-03-11 20:42:05
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar...

超声波原理

电路结构

发射电路

蓝桥杯之超声波

接收电路

蓝桥杯之超声波
超声波硬件电路我们不用过多关心,需要我们关心的如何编写其驱动程序,这里为了言简意洁,给出驱动的原理和程序即可。
首先我们要知道超声波发送和接收的引脚在哪
蓝桥杯之超声波
在此处可以看见这个跳帽的位置,N_A1就是发射的引脚,而N_B1就是接收的引脚(这里刚学的的同学,可以仔细看一下电路),因此我们知道了
N_A1所连接的P10就是发射引脚,N_B1所连接的P11就是接收引脚
知道了引脚后,解释原理

发射和接收的原理

发射

由单片机产生8个38KHZ的脉冲信号,加到超声波探头的引脚上,使内部的压电晶片产生共振,向外发射超声波。	
因此程序方面,需要有超声波发生程序(38k是因为接收电路是红外电路,决定,这点可以记住就行)
//超声波发生程序,此处是一个周期为26us,也就是频率为1/26us,接近38k
void SendWaves()
{
	uchar i=8;
	while(i--)
	{
		Sonic_Txd=1;
		Delay13us();
		Sonic_Txd=0;
		Delay13us();		
	}
}

接收

接收原理:当接收到38k的发射信号后,接收引脚将由高电平变为低电平,因此程序的设计可以启用一个定时器,在
发射的时候清空定时器的初值,然后开始发送超声波并且开启计时,当引脚电平变为低电平的时候则结束计时,并通
过定时器来计算发射到接收的时间,用   测试距离=(高电平时间*声速(340M/S))/2;即可计算出距离!		

为了节省单片机的资源,这里采用PCA模块的定时器,专用于超声波

//首先是PCA的初始化,下面的程序只执行一次,放在man函数后面运行一次即可
CPMD |= 0x08 //将定时器时钟设置为SYSSclk(这里为11.0592MHZ),因为采用查询法,关闭溢出中断
CCON = 0x00  //将溢出位CF置零,将CR置零停止PCA计数
//这里就初始化完成了,我们要的只是这个定时器的定时和查询是否溢出效果就OK
//至于其它PWM和捕获匹配等,自行了解
//超声波测距
void SonicDrive()
{
	uint time,distance;
    SendWaves();
    CH = 0;  //清空定时器的初值
    CL = 0;
    CR = 1;  //开启计时
	 //当没有接收到信号,并且没有超时的时候,一直在这里循环
    while((Sonic_Rxd) && (CF==0)); ?/注意这里while后面的分号!
	 //当退出的时候,有两种情况,要么接收到了信号,要么超时了!
    CR= 0;    //首先要关闭计时!
    if(CF == 1) //如果是因为超时退出
    {
        CF = 0; //清除溢出标志
        /*
			    此处放超时的程序,看要求,不显示,或者返回一个什么东西
			 */
    }
    else   //否则,则应该是接收到信号而退出
    {
        time = (CH * 256) + CL; //将计时器的计时取出,合并数据
        distance = (uint)((time * 0.017) / 11.0592);  //计算距离
			  /*
			此处可以放对距离的处理,进行显示,或者数据计算平均值之类的,怎么精确怎么来
			*/
  	}
}
//注:因为我手上没有转接板,此处程序没有经过验证,知识提供思路,具体需要具体分析。多思考

对PCA有任何疑问的可以参照STC15F2K60S2手册进行查找。

本文地址:https://blog.csdn.net/qq_37429313/article/details/107942703