前言
就像学软件要了解些组成、编译等知识一样,玩硬件如果只用人家封装好的模块,而不了解它们的内部机制,感觉也有点不自在~其实,在很长时间以前就觉得该在模拟电路方面深入点了,可是总是找不到切入点,拿无线电的知识发现根本无法涉足,最近正好由于做一个软硬件结合的“玩具”而引发了必须自己设计传感器的需求,所以就趁势在模拟电路的海洋里遨游下吧,嘿嘿~下面是今天(不,是昨天)做的关于这方面的调查和研究,哈哈,课太多又要把最新版的Ubuntu想方法装进我的老掉牙的只有40G大小的移动硬盘里,结果就忙到了现在~
第一步、淘宝上看看有没有现成的超声波模块散件:
http://item.taobao.com/item.htm?spm=a230r.1.14.261.ULkQ3g&id=22103767448&ns=1#detail
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研究起,在网上找了些资料包括说明文档甚至是英文的说的都不是很好,于是往书里找资料,发现竟然是当时学的一个芯片!!!进而发现上述的接收部分的核心非常类似于有源滤波器,可是由于模拟电路知识差不多考完就忘了,当初那些复杂的公式还是强记的,所以上面那个电路虽不复杂但是还是牵连很多知识的!准备有空好好重学一下它了!
经过这些调查和学习发现,如果不用特殊的模块(淘宝上商家卖的那种采用红外线驱动芯片来驱动超声波)也能用简单的运放电路做出来,可能用运放做出来的简单的电路存在精度不是很高的问题吧~接下来准备再仔细研究一下芯片式的和普通运放式的,然后采购些元件,具体做了~
小结:
时间过得真是快,还没干点什么事它就没有了!有时候蓦然回首,会被它的无情吓到!今天就大致了解了下超声波模块,在产品方面千篇一律细分可分成两种阵营(直接模块上的二次开发与开发模块一体开发),还是如当初的想法,这些都不适合改造以满足自己的需求;在技术方面,发现有采用集成芯片的和采用普通运放的,客观来说他们各有利弊吧,而感觉自己的模电知识略显薄弱,要加把劲啦!
相关链接:
LM741中文资料:http://pan.baidu.com/s/1qWuh3a8
LM741使用说明:细致+偏向于硬件与原理+文库
上述protues的电路:http://pan.baidu.com/s/1qWjsdQ0
上述MCU程序工程:http://pan.baidu.com/s/1mgl2f7y
一个讲超声波模块自制的资料(毕设可能):http://pan.baidu.com/s/1mg7gNJa
自制一个由你掌控的超声波测距传感器(硬件篇):链接+文库+可能随时间消失+详细+I暂不需
上述参考的毕业设计:链接+文库+可能消失+简易实现
超声波测距电路设计:非常细致的讲解了电路内部原理
本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4014855.html,如需转载请自行联系原作者