上图中,当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功能不能实现出来。