记录一段旅程–使用74HC595串转并8位移位寄存器来控制LED点阵。
背景
点亮了一颗led,就会想点亮更多的led灯,或许还会想用led灯来显示数字、图案之类的东西。
主题活动
- 探讨74HC595和LED点阵之间的电气与数字接口,因为我们这次的主要活动是使用74HC595来驱动LED点阵。
- 点亮以及熄灭一个点:讨论单片机IO口上的数字信号是如何传递到LED点阵上指定的位置上的。
- 显示一些数字。
- 显示一些图案。
为了使篇幅简短一些,这次只进行第一个主题活动,二三四在下篇进行。
一、 74HC595和LED点阵之间的电气与数字接口
电气接口
起一个简单的头,我们先来看看手里的普中开发板是怎么处理这个问题的。由于led点阵与74HC595以及单片机IO共同形成led点阵模块,为了确保分析的完整性,需要将led点阵与单片机IO间的接口一并讨论。



为了让事情变得简单一点,我们先从上面的复合电路中抽取基本单元来加以分析。

第一眼看到这个图有一点点吃惊,因为先不管74HC595是ttl器件还是cmos器件,在VCC=5V的条件下,Qn输出的高电平都肯定会大于4V。但是红色LED的正向压降基本在2V以下,如果74HC595的管脚能提供相当大的电流,比如大于500mA的驱动力,led会先被烧坏,但是好巧不巧,74HC595的管脚驱动力最值为35mA,那么在led烧坏前,74HC595的输出MOS管的导通阻抗有可能由于受损而增大,反倒适配了led的工作要求。
当然上面说的只是我个人感觉,感觉过得去就过得去的感觉,也不存在一个吃席的风险,反正灯也能正常亮起来,设计合不合理我也不在乎,只是对这种厂家(不用加限流电阻省钱)和用户双赢的设计表示很赞,让人有有一种想了解实际工况的冲动。
为了方便对比,只测试QA和QH上亮灯时的工作情况,并在QA输出端与led之间增加150R限流电阻。由于74HC595的每个输出管脚驱动8个灯,所以每个电路采集8组数据,提前注明VCC=5.2V。

| 索引 | Ea(V) | Eb(V) | Ec(V) |
|---|---|---|---|
| 1 | 1.909 | 1.425 | 0.457 |
| 2 | 1.909 | 1.427 | 0.460 |
| 3 | 1.913 | 1.437 | 0.458 |
| 4 | 1.909 | 1.430 | 0.456 |
| 5 | 1.902 | 1.419 | 0.454 |
| 6 | 1.904 | 1.421 | 0.453 |
| 7 | 1.903 | 1.423 | 0.453 |
| 8 | 1.902 | 1.421 | 0.452 |
根据上面的数据,再依赖一个感觉仙人的这么一个概念,当驱动1颗led灯时,8条数据大差不差。取第一条数据来看,二极管的正向导通电压为1.425-0.457=0.968V,支路上的电流是(1.909-1.425)/150 = 3.23mA。
接下来看看H通道不加限流电阻的情况。QH’是不小心画上去的,这里不予理睬。

| 索引 | Ea(V) | Eb(V) |
|---|---|---|
| 1 | 1.458 | 0.457 |
| 2 | 1.466 | 0.457 |
| 3 | 1.458 | 0.458 |
| 4 | 1.460 | 0.457 |
| 5 | 1.460 | 0.454 |
| 6 | 1.462 | 0.453 |
| 7 | 1.461 | 0.454 |
| 8 | 1.469 | 0.452 |
同样也是依赖感觉,我觉得只需要用第一条数据就行了。能知道的信息就是二极管的正向导通电压是1.458-0.457=1.001V。对比前面测试的情况,发现两种情况单片机IO口上的电压也是差不多的。
后来又发现当74HC595每条输出线同时驱动八颗LED时情况有点不对劲,这次的led灯明显没有前面刺眼睛了。同时驱动8颗led和只驱动1颗led的情况对比,8路led的正向导通电压为0.905V,和前面的感觉也没差多少,比较明显的区别在于QA和QH端口上,单片机IO的端口上的电位差得就有点多了。对比3种情况感觉是VCC和QA之间,单片机IO和GND之间有不可忽略的阻抗。

再从74HC595的手册中找出输出管脚的结构。89c52单片机的P0口是mos开漏输出,在这个例子中,只考虑74hc595和单片机的mos导通电阻,就可以获得一个简单的等效电路。


从定性分析的角度来看,上面的电路可以解释测试单个led灯时的测试数据。但无法解释同时点亮8颗led与只点亮一颗led的不同之处,所以还需要下面的8颗led的组合结构图。8颗led是分别由不同的单片机IO控制的,结论已经很明显了,根据KCL,在Qn只能提供有限的电流的情况下,当每路led只能分到更少的电流时,单片机IO上的压降就会减少,同时表现出led不够亮的现象。

神奇的事情还在后面,我们来进行简单的定量分析,对比QA通道同时驱动八颗LED和只驱动1颗LED的情况。两次算出来的74HC575的输出MOS的导通电阻不同,这个电阻是可变的,当然我也不在乎,因为我觉得到这里就可以停手了,有些东西还是暂时还是少知道的好。驻足于此处,回头放眼望去,一路上的一草一木,一股对设计师的敬佩之情又涌上心头。

数字接口
数字接口其实很简单,将led灯亮状态记作1,灯灭记作0。Qn是74HC595的输出,Pn是MCU的输出。
| Qn(in) | Pn(in) | LED state(out) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
欲知后事如何,且听下回分解。
这篇博客介绍了如何使用74HC595串转并移位寄存器控制LED点阵,主要探讨了74HC595与LED点阵之间的电气和数字接口。通过实验分析了74HC595的输出特性,并讨论了在驱动LED时的电流分配问题,展示了单片机IO口与LED点阵接口的工作原理。
3495

被折叠的 条评论
为什么被折叠?



