这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 高校专区» 坤创E-Geek/天科大新电社» 24. 蓝桥杯官方板CT107D超声波测距原理及使用

共6条 1/1 1 跳转至

24. 蓝桥杯官方板CT107D超声波测距原理及使用

高工
2019-02-23 00:08:03 打赏

同学们大家好,本节我们一起来分析一下蓝桥板上的超声波这个模块。从前几届的省赛试题中,我们发现超声波模块并没有涉及,可超声波却是国赛中经常考的一个知识点。因此,虽然以往省赛没有考到,但是不排除往后省赛会考到的可能性,因此这个模块每一年都应该引起重视本节会对超声波模块的原理电路以及实现的方法进行讲解;并在文中贴出部分核心代码仅供参考,到这里,大家应该能够有较强的自学能力了,所以这些核心的代码已经足够大家参考了。

首先,我们先来分析一下超声波模块的电路:


说明一下,图中JS1和JS2是超声波的接收元件和发射元件

03.png

跳线帽连接着N_A1—P10N_B1—P11

也就是说P10是发射端,P11是接收端。

其次,超声波测距的原理呢,其实就是发送端发送40KHZ的超声波,通过计算声音的发出和返回的时间差,通过声音的传播速度,计算来得出距离。CX2016A这里作为一个解调芯片将返回的信号进行解调之后在N_B1端输出一个与发送信号到接收信号的时间成正比的低电平信号。

以下是时序图:

04.png

通过时序图可以看出,测距的关键点就是怎么处理这个回响电平,我们知道回响电平持续的时间所用的路程是来回的,也就是说2倍;已知声速一般是340m/s(空气中)。于是就不难推出下面的公式:(设回响信号所持续时间是t,距离为D)

D=340*t/2

关键就是t 这个值怎么测,其实一般情况下,我们采用的方法是采用定时器:

记住,这个方法是要初始化定时器然后控制TR0或TR1,但是不要开定时器中断,一般为了增加测量距离使用的是16位定时器模式。

根据时序图,不难写出发送信号的代码如下:

void trigSig() { unsigned char i; for(i=0;i<8;i++) { delayus(); //这个延时要保证P10保持在40Khz的情况下震荡 P10=~P10; } }

接收并处理函数如下:(这里采用的是定时器1)

unsigned int recevieSig() { unsigned int distance; TH1=0; TL1=0; //初始化计数 trigSig(); //发送信号 TR1=1; //开启定时器计数 while(P11==1&&TF1==0); //当P11=0或者计数计满时跳出 TR1=0; //停止计数 if(TF1) //表示计数计满 达到软件限定最远距离 { distance =150; TF1=0; } else { distance = (unsigned int)(TH1<<8)+TL1; distance = distance *0.017*1.085; //单位cm } return distance; }

当然,以上仅仅是一种常用的方法;这个方法的好处是测出的距离比较准确,而缺点则是占用了51中珍贵的定时器资源。仅是一个超声波模块的使用,对于51单片机来说当然不是问题,但是综合到一块,一旦发现51单片机的资源不够用的时候,就要想尽办法的分配资源和优化程序,而难度也会陡然上升。同学们要多多练习,熟能生巧,才能合理分配单片机的内部资源,特别是有志于参加国赛的各位同学们。希望大家能够勤加练习,在比赛中取得优异的成绩哦!





关键词: 蓝桥杯 超声波测距 超声波模块 单片机 蓝桥杯国赛

院士
2019-02-23 09:33:41 打赏
2楼

话说为什么要通过这么多的7404反向器啊


助工
2019-02-23 09:58:48 打赏
3楼
哈哈,涨姿势

菜鸟
2019-02-24 20:11:42 打赏
4楼

蓝桥杯的超声波没有用过,回头试试


菜鸟
2019-10-15 16:04:41 打赏
5楼

为什么distance乘完0.017之后还要乘以1.085啊?


菜鸟
2020-08-02 10:03:16 打赏
6楼

请问有人知道超声波的测量范围吗


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]