基于Charlieplexing算法的LED矩阵控制设计
摘要:
Charlieplexing 作为一种LED 显示器多路复用的方法,能够使人们控制的LED 数量大得多,在LED 领域应用广泛。利用“行列分时复用”的思想,它能使用N 条I/O 线路来控制N*(N — 1) 只LED, 而标准的多路复用发法控制的LED 则少得多。文中对使用Charlieplexing 的方法原理设计电路进行了详细分析,并对其控制LED 二极管时可能出现的问题经行了探讨,通过分析研究给出切实合理的解决方法
关键词:Charlieplexing;多路复用;三态
中图分类号:TN 710
0 引言
显示复用与数据传输中复用有非常大的区别,尽管它们具有相同的基本原则。在显示复用中,显示器的数据线是并行在一个微控制器的通用总线上。当打开显示器时,显示的数据与地址命令是分开的。这样就可以允许使用更少的I/O 引脚,比通常采取的方法来直接驱动同样数量的LED 显示。Charlieplexing 是由查理艾伦在1995 年初提出的,利用微控制器相对较少的I/O 引脚复用的技术,在显示驱动中来驱动一个LED 阵列。该方法利用了微控制器三态逻辑能力,以获得比传统复用的效率。虽然这是更有效的运用它的I/O,但是在大屏显示中会导致出现更复杂的设计。但是对于较少的LED,其I/O 的使用效率则明显提高。
1 Charlieplexing 基本原理
当使用 Charlieplexing 方法,n 引脚可以有n*(n—1)个组合。也就是说,它可以用n个引脚驱动n*(n—1)个LED 二极管。而传统的行列复用则需要更多的引脚来驱动相同的LED 二极管,也就是说要驱动6 个LED,用行列式需要5 个口,而这种方法只要3 个。LED越多,节省的IO 越多。比方说驱动20 个LED,行列式要用9 个,而这种只要5 个。
1.1 互补驱动
Charlieplexing 最简单的形式如图1 所示,是使用LED 的互补对称矩阵。
矩阵横坐标是LED 正负极性之间的电压值,纵坐标是LED1 和LED2。charlieplexed矩阵是这样的:通过应用一个正电压针脚1 和接地引脚0,LED1 会亮起。由于电流不能流过反向偏置的LED2,发光二极管2 将保持熄灭。如果在引脚1 和引脚2 的电压是反向的,发光二极管灯LED 2 将亮而LED1 将熄灭。
由图形可以计算得到4 线:3+2+1=6,由于LED 的两个方向,6*2LED=12LED,同时可以使用更简单的数学解释方式:4 选2 的排列,即A(2,4)=6。
1.2 三态逻辑扩展
这是一张 3 个IO 驱动6 只LED 的简化版电路图,电阻在这里起限流决定性作用:
这里出现了一个问题,为了使我们能够更好的演示前面那个例子,在使用其中的两个引脚前,必须断开另外的一个引脚。这可以使用微控制器引脚的三态逻辑来解决。单片机管脚通常有三种状态,5V、0V 和高阻态。输入方式置于高阻状态,从电流上讲是从电路上断开那个引脚,意思就是非常小的电流或者没有电流流过它。这使得电路在任何时候可以使用任何数目的引脚,只需要简单的改变引脚的状态。为了驱动上面6 个LED 矩阵,我们所期望亮的两个LED 相应的连接到5V 和0V,第三个脚设置为输入状态。这样做我们可以防止电流从第三引脚泄露出,以确保我们期望的LED 灯是唯一一个点亮。采用三态逻辑,只要引脚可用,矩阵理论上可以扩展到任何大小。任何可以被点亮的LED 采用5V 和0V 至其相应的管脚,矩阵的所有其他引脚设置成输入高阻态。
2 Charlieplexing 注意事项
2.1 LED 显示频率
因为 LED 二极管是单极性的,都具有一个阳极和阴极,Charlieplexing 通过输出一个变化的频率,几乎可以同时点亮LED 二极管。当频率确定,所有的LED 不会同时点亮,而是一个简单的发光二极管被点亮,然后再设置,点亮另一个,周期重复。但如果频率足够快,人眼会认为LED 是一直亮着的。为使显示为没有任何明显的闪烁,为每个LED 的刷新速率必须大于50Hz。基于Charlieplexing 的方法使用8 引脚来控制56 个LED,这个足够给8 个7 段数码管显示(不包括小数点)。通常情况下7 段数码管有一个共同的阳极,或者一个共阴极,假设它是一种常见的共阴极。所有的8 个7 段LED 数码器不能同时打开通过任何Charlieplexing 的理想组合,由8 位直接得到56 位的信息是不可能的,相反,人眼被使用的闪烁给欺骗了。只有一个7 段数码管显示,其它7 个发光二极管可以在任何时候被激活。这将是该做的方法为8 个数码管中的8 个共阴极每一个都分配一个独特的I / O 端口引脚。在任何时候,只有唯一一个I/O 控制引脚被置低,因此只有它的7 段数码管的阳极连接到正极就可以使LED 点亮。这样就激活一个7 段数码管,被激活的7 段数码管显示的7 段LED 阳极可以在任何组合转向由其他7 个I/O 端口或高阻抗模式的任意组合。它们通过电阻被连接到剩下的7 个引脚中(共阴极连接到引脚本身,不是通过一个电阻,否则电流会分流到所有打开的数码管)。但为了显示所需的数字需要使用8 个数码管,只有7 段数码管在同一时段被显示,因此8 个引脚必须通过单独的循环,并在每个频率至少为50Hz。一次显示必须刷新在400Hz 通过全部8 段,确保LED 的闪关灯不低于50 次每秒,这就要求微处理器执行中断至少400 次每秒。
2.2 峰电流
由于占空比下降,一个 Charlieplexing 电路的显示速度必须比传统的复用显示技术更快。当显示的数量变大,通过LED 的平均电流必须(大约)大于一个维持它持续点亮的常数,这要求增加相应的电流峰值。这将导致限制了使用Charlieplexing 显示数量的问题。LED通常有一个最大峰值电流额定值以及平均额定电流。如果微控制器代码崩溃,已点亮的LED比传统的复用处在一个非常大的电压下,增加了一个危险故障。
2.3 三态要求
所有的输出端口用于驱动一个charlieplexed 必须有三态。如果电流足够低以至于不能直接驱动微控制器的I/O 引脚显示,这是没有问题的,但如果必须使用外部状态,每个三态一般需要两个输出线,以控制消除了一个charlieplexed 显示优势。由于来自微控制器引脚的电流通常仅限于20mA,因此这严重限制了一个charlieplexed 显示的实际尺寸。但是,这是可以做到使一段数码管在一个时刻亮。
2.4 正向电压的复杂性
Charlieplex 矩阵比传统的复合矩阵明显更加复杂,无论是在所需的PCB 板布局和微控制器编程,这增加了设计时间。当使用不同正向的电压的LEDs,不如使用不同的彩色LEDs,可能存在的问题就是我们不期望亮的LED 会亮起。
如果我们仔细看看上面的设计,我们会注意到,例如我们想点亮D1,可以令Net1=1,Net2=0,Net3=Z,这样,D1 就亮起来了,什么问题也没有,可是如果D1 损坏,或者没有安装时,问题就来了。当电源电压较高时(例如5V),会形成图中箭头所示电流回路,造成D4、D5 两只LED 被意外点亮,而3V 电压为什么没事呢,因为对于大部分LED,3V 电压还没达到LED 压降的两倍,所以不会导致两只二极管串联导通(称之为二极管连锁现象)。
这仅仅是3 个IO 的情况,有更多IO 的情况下将更糟糕,而且如果你使用了扩流电路,问题会非常棘手,这也是为什么Charliplex 结构的电压必须小心选择LED 压降和电源电压的原因,否则只要有一两个坏点就足以毁了整个屏幕的画面。不光是LED 屏,某些扫描键盘中也存在类似现象。
2.5 LED 故障
如果一个 LED 出现故障,无论是成为一个开路电路,或者是一个短路电路,或者是漏电路(潜在的并联电路导致电流分流),将会影响一个整体的显示,而且实际坏了的LED很难被发现,当不只是一个LED 而是可能潜在的一系列LEDs 会被同时点亮,如果对电路没有详细的了解,哪一个LED 坏了和怎么设置LED 点亮的区分就不能很容易的建立。
如果坏了的 LED 成为一个断路,LED2 两端的电压可能会建立起来,知道找到一个路径通过两个LEDs。有很多这样的路径,因为引脚被用来控制阵列减2 个方向;如果在节点M 阳极和节点N 阴极上的LED 坏了,可能每个LED 在节点M 阳极,阴极是P,随之而来的LED 阳极是P 并且阴极是N,都会被点亮。
如果有8 个I/O 引脚控制矩阵,这意味着将会有6 个独立的路径通过每两个LEDs,也就是12 个LED 会被无意点亮,但是幸运的是这只发生在假定一个LED 坏了,这可能只发生一小部分时间,当有故障的LED 没有被点亮时,这不会影响整体的功能。如果问题是在节点x 和y 间短路,则每次任何一个LED1 是以x 或者y 最为它的阳极或阴极,其他的节点z 作为他另外一个点击,假定将要被点亮(假定LED1 的阴极连接x),LED2 的阴极y 和阳极z 将也会点亮,所以任何时间任一节点x 或y 作为阳极或者阴极,两个LEDs 会代替一个而点亮。在这种情况下,它只是无意的点亮一个附加的LED,但是它的频率比较快,不只是当坏的LED 假定被点亮,当任何一个LED 有一个引脚和坏了的LED 是共用的也会假定被点亮。
这个问题变得特别困难来确定是否有两个或者两个以上的LED 是坏的。这意味着不像大多数方法一样,其中一个LED 损坏的原因只是被烧毁了。当使用Charlieplexing,一个或两个烧毁的发光二极管,无论失败的模式,几乎肯定会导致意想不到的LED 被点亮,这些仍然工作的很可能使整个设备完全无法使用,立即发生连锁反应。设备的使用寿命和破坏特征都必须要在设计时考虑。
3 结论
Charlieplexing 除了应用在LED 二极管的输出控制上,也可以用于微处理器输入信号的复用上,一个典型应用如一个标准(4*3)12 键盘只需要使用4 个I/O 线,而传统的行列扫描方法需要4+3=7 个I/O 线,因此Charlieplexing 节约了三个I/O 口。虽然Charlieplexing面临一系列问题待解决,但是其应用在LED 控制中仍具有广泛前景。