找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2086|回复: 0
收起左侧

单片机超声波测距的DIY与仿真深入研究与小结

[复制链接]
ID:306528 发表于 2018-4-13 15:15 | 显示全部楼层 |阅读模式
前言
就像学软件要了解些组成、编译等知识一样,玩硬件如果只用人家封装好的模块,而不了解它们的内部机制,感觉也有点不自在~其实,在很长时间以前就觉得该在模拟电路方面深入点了,可是总是找不到切入点,拿无线电的知识发现根本无法涉足,最近正好由于做一个软硬件结合的“玩具”而引发了必须自己设计传感器的需求,所以就趁势在模拟电路的海洋里遨游下吧,嘿嘿~下面是今天(不,是昨天)做的关于这方面的调查和研究,哈哈,课太多又要把最新版的Ubuntu想方法装进我的老掉牙的只有40G大小的移动硬盘里,结果就忙到了现在~

第一步、淘宝上看看有没有现成的超声波模块散件:


ps:比较便宜的一个,采用芯片,右边像排阻的东西!网上有人说这种芯片来做超声波接收芯片有点误人子弟~,不过想做成收发单独的东西,用他们的产品只能模仿学习一下电路!

PS:这几款和上面一款类似~还有比较坑的几款就是直接采用超声波测距模块~


PS:怎么像楼主在帮人家做广告呢~哈哈~

第二步、查阅相关资料,看看怎么DIY:

下面是从一个同学的毕业设计的论文中看到的,他没有采用上述淘宝卖家普遍采用的接收模块,而是用普通的模拟电路知识设计的。由于protues这个软件无法 模拟出超声波的真正的收发,所以下面的各个元件的参数我无法确是否正确,下图就先仅作框架参考~(一会要仔细分析那个同学毕业设计给的方法到底行不 行!),这里先大致说一下,左下部分为超声波发送模块,通过一根线和MCU的P3.6脚相连,想通过单片机在该脚产生40KHz的矩形波然后通过多个 74HC04进行放大从而驱动超声波发送模块,右下部分的接收模块包含接收、滤波、比较等运算,最后能根据接收到的超声波是否为40KHz而产生一个信号 从而引发单片机中断。

此外,我还发现,用80c52+12MHz的晶振,产生40KHz的矩形波在protues里模拟很不正常!这里for(a=0;a<200; a++){ P36=!P36;  delays();}就是每隔一定时间让P36脚的电压翻转实现输出矩形波的效果,显然设这里的delays()的延时为t,那么产生的矩形波的周期就是 2*t,若果需要40Khz的矩形波则delay()延时t就大约为12.5us,而如下面代码中我采用的是delays()延时10次,结果产生的波形 如下图所示:以MCU的12Mhz来算,这10次i--应该不会占用那么多的机器周期吧!(这个确实很令人疑惑)

复制代码
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define ulong unsigned long
4 #define uint  unsigned int
5 sbit P36=P3^6;
6 sbit P32=P3^2;
7 uchar data tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
8 bit again;
9 void delays();
10 void main()
11 {
12     uchar a;//一次发送方波数
13     TMOD=0x01;//T0计数方式1
14     TH0=0;
15     TL0=0;
16     IT0=1;//INT0负脉冲触发
17     EA=1;//开总中断
18     EX0=1;//开外部INT0中断
19
20     again=1;
21     while(1)
22     {
23         while(again==1)
24         {
25             P36=0;
26             TR0=1;//T0开始计数
27             for(a=0;a<200;a++)//产生100个40Khz方波
28             {
29                 P36=!P36;
30                 delays();
31             }
32             //again=0;
33         }
34     }
35 }
36 void intersvro(void)interrupt 0 using 1 //INT0中断服务程序
37 {
38     uint bwei,swei,gwei;
39     uchar DH,DL;
40     ulong COUNT;
41     ulong num;
42     TR0=0;//停止计数
43     DH=TH0;
44     DL=TL0;
45     COUNT=TH0*256+TL0;
46     num=(344*COUNT)/20000;
47     bwei=num/100;
48     swei=num%100/10;
49     gwei=num%10;
50     P1=tab[bwei];
51     P0=tab[swei];
52     P2=tab[gwei];
53     TH0=0;
54     TL0=0;
55 }
56 void delays()
57 {
58     int i=10;
59     while(i--);
60 }
复制代码

鉴于上述的疑惑,我暂且把它归结为protues仿真效果不好,要实测!但是感觉还是不怎么甘心呢,于是就拿555做个多谐振荡器来试着产生40Khz的矩形波试试:结果发现结果还是挺接近的~那么看样还是80C52的问题了!在此过程中又萌发一个利用555产生这个40kHz的矩形波,然后MCU只是给出使能信号使555工作就行了,这样一方面可以减轻MCU的工作量,另一方面又会产生比较标准的40KHz的矩形波,哈哈,不错,不错!(这里T=(R1+2*R2)*C*Ln2   占空比Q=(R1+R2)/(R1+2*R2)   D1是为了产生对称的方波)。

最后,还是对那个接收部分不放心,于是还得拿出模拟电路的书仔细分析一下~这里我从LM741研究起,在网上找了些资料包括说明文档甚至是英文的说的都不是很好,于是往书里找资料,发现竟然是当时学的一个芯片!!!进而发现上述的接收部分的核心非常类似于有源滤波器,可是由于模拟电路知识差不多考完就忘了,当初那些复杂的公式还是强记的,所以上面那个电路虽不复杂但是还是牵连很多知识的!准备有空好好重学一下它了!

经过这些调查和学习发现,如果不用特殊的模块(淘宝上商家卖的那种采用红外线驱动芯片来驱动超声波)也能用简单的运放电路做出来,可能用运放做出来的简单的电路存在精度不是很高的问题吧~接下来准备再仔细研究一下芯片式的和普通运放式的,然后采购些元件,具体做了~


小结:
时间过得真是快,还没干点什么事它就没有了!有时候蓦然回首,会被它的无情吓到!今天就大致了解了下超声波模块,在产品方面千篇一律细分可分成两种阵营(直接模块上的二次开发与开发模块一体开发),还是如当初的想法,这些都不适合改造以满足自己的需求;在技术方面,发现有采用集成芯片的和采用普通运放的,客观来说他们各有利弊吧,而感觉自己的模电知识略显薄弱,要加把劲啦!

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表