如果我写得好,请顶我一下,我将再接再厉!
前阵子做个小车玩,是走迷宫的那种.苦于没有所谓的距离传感器,就自己做个吧.结果也犯了不少错误.现和大家分享.
买了几个两毛钱一个的发射管(注意,不是发光二极管,虽然长得一样,但是这个是发射红外线,你可能肉眼看不出它再发光,但是你若是用手机或数码相机的摄像头看,你就会看到它的光).
(发射管) (接收管)
看来比较简单,一个发射,一个接受.发射管发射红外线,遇到遮挡就会反射回来(遮挡是黑色的除外,因为黑色吸收了红外线),接收管接收到红外线以后阻值发生了变化,因此可以利用电阻分压改变输出电压.看看电路:
发射电路,一开始我就是这样,一个限流电阻直接发射管(红外线发光管).后来发现一个随之而来的问题,就是多个传感器工作时电流比较的大,达到0.5A左右.而且传感器发热严重.要知道,发热严重,性能就会严重的降低.于是想到,是不是可以在需要的时候开通,不需要的时候关闭.形成这种扫描式的.结果衍生出了以下的电路:
这个电路的原理也是一目了然的:当单片机的IO口输出高电平时,R1所在的支路有电流I1,因此R2所在的支路就有I1*E(E为三极管的放大倍数,比如我用的是30).这样,三极管就相当于一个电子开关.单片机输出1的时候,发光管接通,单片机输出0的时候,发光管截止.这样就起到了用单片机来控制发光管关闭的效果.
经过实验,发现该电路效果非常的明显.在大多数情况下,电流表几乎检测不到电流的所在.用精密的电流表,发现电流在5MA左右.而且整个电路的检测距离更远,更准确.具体分析其原因是:长时间处于发光状态,发热严重,发光管效率降低,电阻增大,发射功率降低.而间歇发射,发光管发光效率更高,更省电.
至于接受电路,我使用的就比较的简单.
其中,Sout为信号的输出.其实这个电路就太简单了,你看.红外线使着接收管的电阻发生了很大的变化,所以两个电阻的比值就发生了变化,根据分压原理,输出的电压值也就改变了.
接下来的问题就是对现在的这个高电压和低电压进行处理.有人说,直接接到单片机上进行编程不就可以了?不是的!注意,这里的输出电压虽然也有高和低,但是这里的电压是个"模拟量",不是标准的TTL电平.举个例子,我测得有反射(前方有障碍物)的时候,电压是4V,没有发射(前方没有障碍物)的时候,电压是2.1V.显然,你如果直接接到单片机上,单片机收到的都是高电平.
处理的办法有两个:使用AD转换或是使用电压比较器.
这两个方法各有各自的优缺点,我们来分析一下:
一.AD转换
大家都知道,就是将输出的电压值,用AD芯片进行数字化,比如5V转换成了1200.等等...这样做的好处是显而易见的,我们能够方便的对数据进行处理.比如,我们令数值小于300的表示没有检测到障碍物或是障碍物比较的远.数值大于300的表示检测到障碍物.而且硬件上也比较的简单,直接将输出接到AD的输入引脚即可(现在的许多MCU内部都自带ADC,所以根本就不需要外围电路,直接接上即可).这样做的不足也有,就是你需要编写AD检测的程序,而且占用CPU时间.
二.比较器
所谓的比较器,就是电压比较器,看电路:
看,就是这么个简单的电路,当Ui>U时,Uo一直是低电平;当Ui<U时,Uo就是高电平.因此,我们只要调节一下参考电压,就可以使着输出符合我们的要求--低于这个阀值的时候是高电平,高于这个阀值的时候是低电平.这就实现了模拟量转换为数字量.看看电路图:
这个电路就很简单了,可以看出多了下面的那块电路,是用来调节基准电压的嘛.也是一个电阻分压的原理,这样你设置不同的阀值,就可以控制输出了.比如:我们刚才说的低电压是2.1V,高电压是4V,我们要把这个电平转变成TTL,因此我们可以把基准电压设置成3V,因此经过电压比较器,2.1V就输出高--5V,4V就输出低--<1V.这不就是TTL嘛.
电路中的比较器可以使用便宜的LM324来搭建.LM324是四运放集成块.
用户377235 2014-5-7 10:25
额合计为加快
用户377235 2013-9-23 15:15
用户387625 2011-9-21 10:50
用户330746 2011-8-3 22:39
用户1610497 2010-8-7 20:45
用户779582 2009-10-31 19:57
用户191877 2009-7-21 15:39
用户1478309 2009-5-30 21:16
fulingda_311004677 2009-5-23 14:53
用户194267 2009-5-13 18:20