▪ 基本信息

基于程序算法让相同针脚数量的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 端口,分别与 Port1Port2 相连。

从上图中我们可以看出,增加了一个端口可以控制更多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 和高阻态(管脚设置为高阻态后,从电流上讲是从电路上断开那个引脚,意思就是非常小的电流或者没有电流流过它)。通过三态的特性,我们可以点亮上述电路图终端任何一个灯,例如:

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

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

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

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

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

如是重复 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 控制中仍具有广泛前景。

【算法】查理复用算法(Charlieplexing)相关推荐

  1. 基于Charlieplexing算法(查理复用算法)的LED矩阵控制设计

    目录 1.Charlieplexing 基本原理 2.Charlieplexing 注意事项 3.结论 最近发现一个非常有意思的实验:查理复用技术控制LED灯(按键). 简单来说就是:希望能够用较少的 ...

  2. IO口多路查理复用:三个单片机IO口控制六个LED

    简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...

  3. 用3个IO口控制6个LED灯,怎么做到的?查理复用!

    ▲ 本文要分析的电路 事情是这样开始的. 买了个电动牙刷,几十块钱那种: 收到的实物长这样: 牙刷手柄上有1个按键和6个LED灯: 拆开看看电路板: 可以看出,电路板上用的单片机,只有8个脚,却要控制 ...

  4. 舒工给您娓娓道来:2019-nCoV,教室布局筛查追溯系统算法解密!

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. 并查集(Union-Find)算法介绍

    本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find. 更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它 ...

  6. 【坐在马桶上看算法】啊哈算法13:零基础彻底弄懂“并查集“

    并查集 题目描述 分析 并查集模板 因为最近在学并查集,在别的博客看到关于并查集的知识点,讲解得很清晰,理解更深,所以搬运到csdn来分享一下好资源. 题目描述 快过年了,犯罪分子们也开始为年终奖&q ...

  7. AI专家一席谈:复用算法、模型、案例,AI Gallery带你快速上手应用开发

    摘要: 华为云社区邀请到了AI Gallery的负责人严博,听他谈一谈AI Gallery的设计初衷.经典案例以及未来规划. 本文分享自华为云社区<AI专家一席谈:复用算法.模型.案例,AI G ...

  8. sin cos 查表法算法解析

    sin cos 查表法算法解析 前言 三角函数 生成sin表 sin计算 cos计算 扩展 tan计算 前言 在项目开发中,有些项目对三角函数使用频繁,尤其是游戏项目,三角函数计算是很耗性能的,产品性 ...

  9. 555-大数据查重-位图算法

    大数据查重-位图算法 位:内存管理的最小单位是字节,一个字节是8个位. 有1亿个整数,最大值不超过1亿,问都有哪些元素重复了?谁是第一个重复的? 内存限制100M 1亿 = 100M 如果是放到哈希表 ...

最新文章

  1. 程序员论坛炫耀公司福利:一线互联网公司的下午茶,什么水平?
  2. 不同真菌物种注释数据库对群落组成的影响
  3. ccna第四学期final一二三套题
  4. 用WSDL定义Web服务
  5. 给大家推荐对Redis分析讲解比较详细的大牛
  6. mc服务器右上角信号格,手机右上角的网络信号标识是什么意思?
  7. react组件卸载调用的方法_React组件如何还能跑得再快一点
  8. 《Web漏洞防护》读书笔记——第6章,XXE防护
  9. oracle讲师视频教程,赵强老师:Oracle数据库系列视频课程
  10. sata接口 图解 定义_SATA数据和电源接口定义详解
  11. 信息系统项目的可行性研究报告
  12. 思维导图编辑最常用的几种Edraw Max(亿图)快捷键
  13. 什么是服务器防护,什么是硬防?什么是软防?
  14. DNS解析异常问题排查
  15. Linux下为空白SD卡建立BOOT,rootfs分区
  16. My Eighty-first Page - 打家劫舍 - By Nicolas
  17. 单片机工程师如何继续提升自己?
  18. Wannafly挑战赛4,C题割草机,(模拟)
  19. TCP/IP第三章笔记IP网际协议
  20. php 除法,php中如何除法取整

热门文章

  1. python3 爬虫之爬取安居客二手房资讯(第一版)
  2. 笔记:机器人写唐诗(tensorflow)
  3. 美签 计算机 敏感专业,美国签证敏感专业列表
  4. 身价高达2000多亿的马化腾,能一次性从银行取出2000亿吗?
  5. python播放网络音乐_Python实现在线音乐播放器
  6. eclipse 国内下载镜像地址
  7. Mesos Framework开发
  8. 【无人机】地面站QGC:软件架构
  9. 解放双手,一键自动完成2022京东618任务
  10. 欧美一些著名的高尔夫模拟器