在单片机控制电路里,三极管主要要来驱动较大功率的外围元件,相信大家已经非常熟悉他的用法了。有的时候,三极管还有一个功能就是进行不同电压之间的转换控制,比如51单片机的IO口是5V系统,如果直接接12V的电压,就会烧坏单片机。这个时候就需要加一个三极管,三极管的工作电压高于单片机的IO口电压,用5V的IO口来控制12V的电路,如图所示。
上图中,当IO口输出高电平5V时,三极管导通,OUT输出低电平0V,当IO口输出低电平时,三极管截止,OUT则由于上拉电阻R2的作用而输出12V的高电平,这样就实现了低电压控制高电压的工作原理。
所谓的驱动,主要是指电流输出能力。我们再来看这两个图之间的对比
图中上边的LED灯,当IO口是高电平时,小灯熄灭,当IO口是低电平时,小灯点亮。
下边那个图呢,按照这种推理,IO口是高电平的时候,应该有电流流过并且点亮小灯,但是实际并非如此。
单片机主要是个控制器件,具备四两拨千斤的特点。就如同杠杆必须有一个支点一样,想要撑起整个地球必须有力量承受的支点。单片机的IO口可以输出一个高电平,但是他的输出电流很有限,普通IO口输出高电平的时候,大概只有几十到几百uA的电流,达不到1mA,也就点不亮这个LED小灯或者亮度很低,这个时候如果我们想高电平点亮LED,用上三极管就可以这样来处理,我们板上的这种型号,可以通过500mA的电流,有的三极管通过的电流还更大一些,如图所示。
图中,当IO口是高电平,三极管导通,因为三极管的电流放大作用,c极电流就可以达到mA以上了,就可以成功点亮LED小灯。
虽然我们用了IO口的低电平可以直接点亮LED,但是单片机的IO口作为低电平,输入电流就可以很大吗?当然不可以。单片机的IO口电流承受能力,不同型号不完全一样,就STC89C52来说,整个单片机的工作电流,不要超过50mA,单个IO口总电流不要超过6mA。即使一些增强型51的IO口承受电流大一点,可以到25mA,但是还要受到总电流50mA的限制。那我们来看电路图的8个LED小灯的这个部分电路,如图所示。
那么我们把电路图里的这部分再摘出来看。
通过电路图来计算一下,5V的电压减去LED本身的压降,减掉三极管e和c之间的压降,限流电阻用的是330欧,那么每条支路的电流大概是8mA,那么8路LED如果全部同时点亮的话电流总和就是64mA。这样如果直接接到单片机的IO口,那单片机肯定是承受受不住的,即使短时间可以承受,长时间工作就会不稳定,甚至导致单片机烧毁。
除了三极管之外,其实还有一些驱动IC,这些驱动IC可以作为单片机的缓冲器,仅仅是电流驱动缓冲,不起到任何逻辑控制的效果,比如74HC245D这个芯片,这个芯片在逻辑上起不到什么别的作用,就是当做电流缓冲器的,通过查看其数据手册,74HC245稳定工作在70mA电流是没有问题的,比单片机的8个IO口大多了,所以我们可以把他接在小灯和IO口之间做缓冲,如图所示
74HC245是个双向缓冲器,1引脚DIR是方向引脚,当这个引脚接高电平的时候,右侧所有的B编号的电压都等于左侧A编号对应的电压。比如A0是高电平,那么B0就是高电平,A1是低电平,B1就是低电平等等。如果DIR引脚接低电平,得到的效果是左侧A编号的电压都会等于右侧B编号对应的电压。因为我们这个地方控制端是左侧接的是P0口,所以我们要求B等于A的状态,所以1脚我们直接接的高电平。图中还有一排电阻R10到R17是上拉电阻。
还有最后一个使能引脚19脚OE,这个引脚上边有一横,表明是低电平有效,当接了低电平后,74HC245就会按照刚才上边说的起到双向缓冲器的作用,如果OE接了高电平,那么无论DIR怎么接,A和B的引脚是没有关系的,也就是74HC245功能不能实现出来。