只用微控制器少量端口,用“Chipiplexing”有效驱动多只LED

2009年07月29日 22:18    发布者:贾延安
实际的微控制器都有强大的双向I/O端口,你可以用不同的技术来充分利用这些功能。最近有个设计实例描述了一种“Charlieplexing”方法,它是只用N个双向I/O端口和N个电阻,驱动M=N×(N–1)个LED的有效方式(参考文献1和参考文献2)。遗憾的是,采用Charlieplexing方法时,每次只能驱动一只LED,因此当使用大量LED时,只有很少时间能用于复用每只LED:TDRIVE=T/M,其中T是PWM激励周期。于是,为获得给定的平均电流和点亮LED,就必须用M倍的电流去激励它们,而通常无法从微控制器端口获得这种峰值电流。

  本设计描述的是“Chipiplexing”方法,这种方法需要增加N个廉价的双极晶体管。本电路使用的是PNP型晶体管,但也可以采用NPN器件。(Chipiplexing这个词出自于我的昵称Chipi。)付出这些额外成本带来的好处是可以同时驱动N-1只LED,因此将峰值电流减小到N-1分之一。



  图1表示N=3和M=6的方案,但可以将相同准则用于不同的N值;在这种情况下,可以同时驱动两只LED。限流电阻并联在新增PNP晶体管的基射极上,所有集电极连接到地。如果你将一个微控制器端口设为零(或地),则相应PNP晶体管就有一个接地的基极,其射极为一个固定电压(一般是 0.7V)。通过其余端口就可以激励所有阴极连接到这个射极的LED。如果将端口设为1,即电池电压,LED点亮;如果将端口设为高阻,则LED熄灭。



表1驱动LED的九种可用端口组合

  表1表示三个微控制器端口的九个可能组合:六个可用Charlieplexing方法每次驱动一只LED,三个新组合每次驱动二只LED。微控制器端口将晶体管基极接地。这一动作固定了集射结的压降,并将所有LED电流拉入大地,而不会给微控制器端口过大压力,微控制器端口只吸入晶体管基极电流再加上每只电阻的0.7V。每个端口都设定到只驱动一只LED电流的电池电压。

  采用Charlieplexing方法时,两只电阻处于LED电流路径上;不过,这种情况下可以很容易算出限流电阻值R=(VBAT–VLED–0.7)/ILED,其中VBAT是电池电压,VLED是 LED电压,而ILED是所需要的LED电流。随着LED数量的增加,优点会更明显。对于N=5,20只LED情况,这种方案驱动每只LED时间为 20%,而采用Charlieplexing方法时驱动时间只有5%。