首页 > 编程知识 正文

查重算法原理

时间:2023-05-03 11:11:36 阅读:226321 作者:2037

▪ 基本信息

基于程序算法让相同针脚数量的IO口能点亮更多的灯,模拟物理方式扩展 IO口;例如常规的设计 6 个IO口只能驱动 6 个LED灯,但利用算法优化有6个IO口就可以驱动 30 个 LED 灯。这就是著名的 美好的果汁复用算法,实现的效果:N 个 IO 口可以驱动 N*(N-1) 个 LED 灯;

 

▪ 实现原理

步骤1. 一个非常简单的示例

该电路使用两个端口控制两个LED。

这里是工作原理。两个LED反并联连接,红色LED的阳极(左)连接到绿色LED的阴极(右)。

Port1 变为高电平而 Port2 变为低电平时,则绿色LED点亮,并且当 Port1 变为低电平并且 Port2 变为高电平时,红色LED点亮。

 

步骤2:再增加一个端口

新增一个 Port3 端口,分别与 Port1 Port2 相连。

从上图中我们可以看出,增加了一个端口可以控制更多LED。我们将电路分为3个子电路,每个子电路显示2个端口。因此,我们有2个LED由端口1和2控制,另外2个LED由端口1和3控制,另外2个LED由端口2和3控制,总共6个LED。将上面的电路图重新整理得到如下电路图:

 

与以前一样,微控制器仅通过3个端口即可单独控制6个LED。以此类推,我们在增加一个 Port4 的话,那么其和 Port1、Port2、Port3 都会接入各2个灯,那么4个IO口就可以控制12个灯了。

 

 

步骤3:利用IO口三态进行控制

这是一张 3 个 IO 驱动 6 只 LED 的简化版电路图,电阻在这里起限流决定性作用:

 

单片机管脚通常有三种状态,5V、0V 和高阻态(管脚设置为高阻态后,从电流上讲是从电路上断开那个引脚,意思就是非常小的电流或者没有电流流过它)。通过三态的特性,我们可以点亮上述电路图终端任何一个灯,例如:

P1 = 5V,P2 = 0V,P3 = 高阻态;那么上述中 P1->LED1->P2 和 P1->LED6,LED4->P2 能各形成一个回路,由于两路形成并联,LED6,LED4 和 LED1 是并联,所以电压被钳位到 LED1 的点亮电压(例如2.2v),那么此时就只有 LED1 点亮。LED6,LED4 无法点亮。P1 = 5V,P2 = 高阻态,P3 = 0V;同理 LED6 点亮;LED1,LED3 由于并联原因电压被钳位到2.2v,电压太低不足以点亮2个灯。P1 = 高组态,P2 = 5V,P3 = 0V;同理LED 3 点亮。....

 

可以看出利用三态特性,我们就可以控制每个灯的亮和灭。

 

 

步骤4:程序的编写和控制简介

对于使用了 美好的果汁复用算法 的LED控制电路,程序开发基本步骤:

初始化所有端口为高阻态初始化指定 LED 灯对应的两个针脚为推挽输出设置两个针脚的高低电平

如是重复 1、2、3 步骤即可。

 

 

▪ 缺陷

1、LED 显示频率

因为 LED 二极管是单极性的,都具有一个阳极和阴极,Charlieplexing 复用技术的原理就是每次点亮一个发光二极管,然后再设置点亮另一个,周期重复。但如果频率足够快,人眼会认为 LED 是一直亮着的。为使显示为没有任何明显的闪烁,为每个 LED 的刷新速率必须大于 50Hz。

 

2、峰电流

由于占空比下降,一个 Charlieplexing 电路的显示速度必须比传统的复用显示技术更快。当显示的数量变大,通过 LED 的平均电流必须(大约)大于一个维持它持续点亮的常数,这要求增加相应的电流峰值。这将导致限制了使用 Charlieplexing 显示数量的问题。LED通常有一个最大峰值电流额定值以及平均额定电流。如果微控制器代码崩溃,已点亮的 LED比传统的复用处在一个非常大的电压下,增加了一个危险故障。

 

3、三态要求

所有的输出端口用于驱动一个 charlieplexed 必须有三态。如果电流足够低以至于不能直接驱动微控制器的 I/O 引脚显示,这是没有问题的,但如果必须使用外部状态,每个三态一般需要两个输出线,以控制消除了一个 charlieplexed 显示优势。由于来自微控制器引脚的电流通常仅限于 20mA,因此这严重限制了一个 charlieplexed 显示的实际尺寸。但是,这是可以做到使一段数码管在一个时刻亮。

 

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 屏,某些扫描键盘中也存在类似现象。

 

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 被点亮,这些仍然工作的很可能使整个设备完全无法使用,立即发生连锁反应。设备的使用寿命和破坏特征都必须要在设计时考虑。

 

▪ 扩展

Charlieplexing 除了应用在 LED 二极管的输出控制上,也可以用于微处理器输入信号的复用上,一个典型应用如一个标准(4*3)12 键盘只需要使用 4 个 I/O 线,而传统的行列扫描方法需要 4+3=7 个 I/O 线,因此 Charlieplexing 节约了三个 I/O 口。虽然 Charlieplexing面临一系列问题待解决,但是其应用在 LED 控制中仍具有广泛前景。

 

 

 

 

 

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。