导读:HUB75接口是一种常用的LED单元板驱动接口,本文就常见的HUB75接口知识点进行整理。

一、HUB75 接口介绍

上图中有 A/B/C/D 4根地址线,所以是16扫( 2 4 = 16 2^4=16 24=16)

上图所示HUB75接口,有两个RGB通道,共占用6个IO(R1/R2/G1/G2/B1/B2)。剩下的 A/B/C/D/E 为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E,如下图所示。这样就是5位,2的5次方32扫。16扫控制16行显示(16行中显示一行),共2个RGB通道所以16扫可以控制 16*2=32行 显示(32行同时显示2行,比如第1行和第16行…第15行和第31行,所以是2/32扫,即1/16扫)。

  • (1)单元板的显示为单位时间内显示一行数据,然后短时间内切换到另一行显示,16扫,即一个显示周期为切换16次
  • (2)两个RGB通道分别控制上下两部分的RGB灯。举例 32*16 的LED灯屏,需要4个地址ABCD,假设ABCD,4个IO为高电平意味着选定第15行跟第31行,R1/G1/B1通道数据被写到第15行,R2/G2/B2数据被写到第31行。
  • (3)【???】数据的写入顺序:失能LED显示,写入一行数据,选定行,锁存,使能LED显示
  • (4)全彩显示:颜色渐变。方法是同一行扫描32次,假设R1我只显示一次,那它占空比就是1/32,显示次数越多越来亮

上图中有 A/B/C/D/E 5根地址线,所以是32扫( 2 5 = 32 2^5=32 25=32)

二、一款 8x8 LED 单元板介绍(2R1G)

单元板外观:

注:LED单元板上通常没有存储,所以需要FPGA快速刷新以显示图像!

单元板HUB75接口:

单元板点亮顺序:

单个单元板,一共8行,可同时点亮2行,故为1/4扫。

控制时序:

三、一款 64x64 LED 单元板介绍(RGB)

单元板外观:

单元板HUB75接口:

它具有2个R/G/B数据输入引脚,5个地址引脚和3个控制引脚(时钟,锁存器和使能)。故仍然还是32扫,通过同时控制两行的方式实现64行控制,即2/64=1/32扫。

【???】控制时序:(以上半部分32行为例,下半部分自动匹配上半部分选中的行)

  • 1.使用5个地址字节选择要显示的行,从32行中选择1行。
  • 2.通过将Blank管脚设为高电平来关闭显示器,这可以防止故障。【或者说消隐!】
  • 3.使用Clock引脚和RGB引脚进行选中的行数据输入
  • 4.将锁存器引脚切换为高->低以将数据加载到选中的行
  • 5.通过将Blank引脚拉低来打开显示器

注:其中的Blank,代表输出使能 OE 引脚!

有2个R,G和B引脚。如果选择地址0,则R0/G0/B0将数据写入第0行,而R1/G1/B1将数据写入第32行;选择地址1,则R0/G0/B0将数据写入第1行,而R1/G1/B1将数据写入第33行。要显示图像,你需要写一行,稍等一下才能显示它,再写下一行,依此类推。为了获得图像,需要以60Hz的频率写入和显示64行,或者为了获得不错的帧速率,可以更快提高频率。但遗憾的是,以这种方式写线时,LED会熄灭或亮起。使用RGB,仅可以显示8种不同的颜色,而不完全是漂亮的图像。

全彩显示

获得更多颜色意味着对显示进行PWM。进行此显示的PWM的唯一方法是在转到下一行之前多次写一行

  • 1、将数据移至如上所述的选中行
  • 2、等待一位的时间
  • 3、在同一行中移动下一个值
  • 4、等待一位的时间
  • 5、重复此N次,对于4位PWM为16次,对于8位PWM为256次。
  • 6、移至下一行

一种简化方法是将二进制编码调制(BCM)与BCM一起使用,过程如下:

  • 1、将数据移至选中行
  • 2、等待x时间
  • 3、在同一行中移动下一个值
  • 4、等待x * 2时间
  • 3、在同一行中移动下一个值
  • 5、等待x * 4次。
  • 6、重复N次,对于4位PWM重复4次,对于8位PWM重复8次。
  • 7、移至下一行

驱动矩阵

FPGA代码可能非常简单,从帧缓冲区读取数据并传输到RGB矩阵。

为了简化显示,以发送格式来组织帧缓冲存储器。我没有将数据存储为RGB值,而是将它们拆分为64位行数据。这样,数据发送器块只需要读取数据,将其移出时钟并等待所需的时间即可。


这是用于4位的BCM,但是用于8位的图像会有点大。这样,FPGA代码的传输就是一个简单的状态机。首先,它获取数据。其次,它发送它并等待正确的时间,然后才能发送下一行。


LED单元板驱动原理

LED 单元板就是大量单色或三色 LED 的点阵,扫描式驱动,一般是行线共阴、单列单色 LED 共阳,采用专用芯片进行恒流驱动。所谓扫描式驱动,就是每一列的数据线共享、单元板的同一时刻只有一行被选中并点亮,通过快速的扫描加上人眼视觉暂留来实现整屏显示。有些做的比较好的单元板提供内置的余晖、消隐功能,在扫描其他行时之前点亮的行仍会继续点亮、重新扫描当前行时会强制熄灭不应点亮的像素,以降低屏幕的闪烁、提升画面的显示效果。

所以不难理解,单元板的驱动过程就基本是两个阶段:

  • 1、选择当前扫描的行
  • 2、点亮当前行的数据

什么是 “32 扫”?行选择阶段

如果你学过计算机组成原理之类的课程,你应该听说过存储器的地址线。HUB75 的行选择信号与存储器的地址线运作方式相同,使用多条地址线,用高低电平组合出二进制的各位数字,然后通过译码器将 n 条地址线的组合信号变为 2^n 选 1 的行选择信号。HUB75 接口的多种变体基本上就是从这里派生。一般情况 HUB75 的插座使用 16P 简易牛角座,下面是接口示意图:

注意 9、10、11 三个引脚,名称分别为 A、B、C,这三根线就是 3 位地址线的 A0、A1、A2 三位,单元板的内部实现中,会使用一个 3-8 译码器将这 3 根输入地址线高低电平的二进制组合转化为 8 根输出片选线中其中一根的选中状态。例如当这四位的电平值分别为 H、L、L 时,代表了当前行地址为 001b,所以 1 号地址线(即代表第二行)为选中状态,其他为非选中状态。由于厂商具体内部设计的差异,行选择激活状态可能为高电平,也可能为低电平,所以这里不能确定具体电平的高低,只能确定哪条线处于激活状态。由于同一时刻 8 条行选择中只有一条被激活,即同一时刻有 1/8 的行正在被点亮,所以这种扫描方式被称作 1/8 扫描,行业简称“8 扫”。

变体由此产生。有些单元板的行数不足 8 行,不需要如此多的地址线,所以会把不需要的地址线空置或接地,比如 1/4 扫描的单元板会将 11 号 C 引脚空置,仅使用 2 条地址线。1/32 扫描的单元板会将 12 号、6 号引脚作为 D、E 信号即行地址二进制的第四、五位,使用 5-32 译码器来提供 32 条行地址线来进行更大范围的扫描,此时形成了 HUB75 最常用的变体——HUB75E

那为什么 32 扫的接口可以驱动 64 行的单元板?

这里会有同学疑惑,市场上也有很大一部分单元有 64 行,但却使用的 HUB75E 接口,怎样实现使用 5 条地址线完成 64 行(地址二进制有 6 位)的扫描呢?如果单元板提供了说明,你会发现此时单元板仍然是 1/32 扫描,上面说 32 行同时点亮 1 行,那么如果是 64 行,就是同时点亮 2 行。没错,这就是几乎所有使用 HUB75 接口的单元板,有 n 行像素、使用 n/2 扫方式驱动的原因——单元板被分成了上下两部分行选择信号会同时选择上下两部分中的各一行,通过两路信号同时点亮两行,这样就实现了更少的地址线以及更高的扫描频率减少地址线、增加数据线,学过计算机组成原理的同学们想起来了没?

行内数据如何传入?行数据传输阶段

简单点说就是,串入并出加锁存。同学们一定听说过赫赫有名的移位寄存器——74595,没错,这东西塞满了整块单元板。观察 HUB75 接口的 13、14、15 三个引脚,分别为串行数据时钟、锁存时钟、输出使能三个引脚,功能上完全对应 74595 的三个对应引脚。而它的串行数据输入有 6 根,即 1、2、3、5、6、7 这 6 个,分别代表上下两半部分的 R、G、B 像素信号。这 6 根数据线共用相同的时钟线,并行传输行内的像素数据。

【???】任意行被选择后,当 14(锁存)引脚拉高,数据开始进行传输,13(数据时钟线)为低电平时 6 根数据线并行输入数据,数据就绪后数据时钟拉高触发寄存器移位,然后数据时钟拉低触发寄存器完成历史数据的输出,同时数据线准备下一位的数据。所有数据移位输入完成后拉高锁存时钟,完成整行数据传输。对于有些提供余晖、消隐功能的单元板,需要根据要求给15(低电平输出使能)一个适当宽度的高电平信号来触发消隐和余晖。这样快速反复的行选择、数据传输过程,就完成了每一行的扫描与显示。

多块单元板如何连接?

每块单元板都提供了两个接口,一个输入一个输出。多块单元板之间就是串联关系,上一块板子的输出对应连接在下一块板的输入即可。这样一连串单元板的时钟信号共用、数据信号串接,调整每行传输的数据长度,即可实现对不同数量单元板的驱动过程。

如何实现全彩?

每个像素的每个单色子像素只有两种状态——点亮和熄灭,那么可以通过 PWM 或 BCM 调制来实现子像素的灰阶。可以通过把一行重复扫描 n 次、点亮 m 次实现 m/n 亮度的灰阶,也可以把每一帧图像重复扫描 n 场,m/n 灰阶的子像素选择其中 m 场点亮来实现。两种方式各有优劣,需要根据单元板的实现原理、程序编写难度等来选择不同的全彩实现方式。

能否简化连线?

我们注意到 HUB75 实际是由一组组合逻辑的并行传输行信号和一组 6 路时序逻辑的像素数据信号(可认为是并行 SPI)组成的。通过将 6 路 SPI 数据线输入输出首尾串接,可以将 6 路并行 SPI 变为 1 路串行 SPI,同时再通过一片 74595 可以实现行信号的并行输出。使用一个非门制作一个 1-2 译码器,实现行选择串行数据、行数据串行数据的选择,配合适当的数据信号,就可以实现仅通过 3 根数据线(功能选择、数据、时钟)实现整组单元板的数据传输,节省引脚有利于使用更小型的单片机进行显示。当然这样会大大受制于 SPI 频率而降低单元板的刷新频率,孰轻孰重视具体情况具体选择。

开头提到的大坑是什么?

因为 HUB75 接口标准缺乏明确规范,导致一些厂商并没有完全按照上面的格式传输数据。就拿我买到的第一块单元板为例,虽然号称 1/32 扫的 HUB75,但它的行选择信号并不是标准的5位地址线,而是将每半场的 32 条行选择线接入了一个串入并出移位寄存器,使用 ABC 三条信号线作为移位寄存器的数据、时钟、锁存信号,相当于直接把上面的简化版行选择直接集成进了单元板,这直接导致了我找到的所有关于 HUB75 的资料全都跑不通。最后我根据芯片型号找到手册、用万用表一个一个焊点试验摸出走线才把这块单元板的驱动原理摸通。询问卖家有没有资料,卖家只说不兼容市面上的控制器(所有卖家都这么说,不知道是不是为了让你买他们家的控制器),完全不提供任何技术支持,这个就是最大的坑——单元板拿到手之前,你永远不知道它到底该怎么用。


参考

  • Driving a 64*64 RGB LED panel with an FPGA.
  • LED dimming using Binary Code Modulation
  • 关于LED点阵屏单元板的通信接口——HUB75
  • LED单元板驱动(HUB75接口)
  • rpi-rgb-led-matrix
  • 64x128 LED Matrix with HUB75 (not HUB75E) interface not working
  • Everything You Didn’t Want to Know About RGB Matrix Panels

一文搞懂HUB75接口(附带LED单元板驱动介绍)相关推荐

  1. LED单元板驱动(HUB75接口)

    开始之前先吐槽一下,搜这个的资料.要么都是Arduino,要么单片机的收费.小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指 ...

  2. 一文搞懂 Cocos Creator 3.0 坐标转换原理

    一文搞懂 Cocos Creator 3.0 坐标转换原理 屏幕坐标 UI 触点坐标 UI 多分辨率适配方案 UI 触点获取 不同坐标之间的转换 屏幕坐标与 3D 节点世界坐标互转 3D 节点之间的坐 ...

  3. 一文搞懂指标采集利器 Telegraf

    作者| 姜闻名 来源|尔达 Erda 公众号 ​ 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...

  4. 【通信协议】一文搞懂SPI

    SPI总线简介 SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线. 接口定义 SPI接口共有4 ...

  5. 一文搞懂设计模式--模板模式

    Hi,大家好.今年的天气实在是太热了,七月份的厦门晒得我觉得身上冒出了烤肉香,不知道各位是否安好,但是在再热的天气也不能阻止我们学习的热情(doge).今天的主题是模板(Template Method ...

  6. 一文搞懂UART通信协议

    目录 1.UART简介 2.UART特性 3.UART协议帧 3.1.起始位 3.2.数据位 3.3.奇偶校验位 3.4.停止位 4.UART通信步骤 1.UART简介 UART(Universal ...

  7. 一文搞懂如何使用ArcGIS API for Python训练深度学习模型

    一文搞懂如何使用ArcGIS API for Python训练深度学习模型 文章目录 一文搞懂如何使用ArcGIS API for Python训练深度学习模型 写在前面 一.ArcGIS API f ...

  8. 【显卡】一文搞懂显卡

    [显卡]一文搞懂显卡 文章目录 [显卡]一文搞懂显卡 1. 前言介绍 1.1 CPU和显卡的区别 1.1.1 作用不同 1.1.2 结构不同 1.1.3 应用场景不同 1.2 三个著名的显卡公司 2. ...

  9. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

最新文章

  1. (C++)1031 查验身份证 3难点+3注意点
  2. HomeZZ注册推介码
  3. yum使用时 could not resolve host 报错的解决方法
  4. c51单片机时钟c语言程序,89c51 C语言单片机 时钟程序
  5. 神经网络- receptive field
  6. NOIP2000提高组复赛C 单词接龙
  7. 媒体服务器协议,媒体服务器介绍(mediactrl架构)
  8. server xcode 云服务器_SRT推流测试及服务器搭建
  9. VB 泛型 T 应用
  10. 30种应该知道的sql调优方法
  11. BusyBox 中添加新命令
  12. python同名函数相互冲突_两个函数同名python
  13. t450加固态硬盘教程_Thinkpad T450 超级笔记本 开箱更换SSD和内存
  14. 【嵌入式模块】再探ESP8266,保姆级教程
  15. Go (Golang) 工具之单元测试 go-junit-report | go的单元测试
  16. 【STM32H7的DSP教程】第7章 ARM DSP源码和库移植方法(IAR8)
  17. H3C交换机对接思科交换机
  18. html图片做成菱形,CSS秘密花园:菱形图片
  19. 神经元树突、早期、突触及神经元标志物
  20. 基于C++MFC的学生成绩管理系统

热门文章

  1. When Does Label Smoothing Help?
  2. linux中关机和重启命令:shutdown
  3. 51单片机-震动传感器
  4. 关键路径例题图表_关键路径,前导图,箭线图
  5. Linux开发心得总结10 - MIPS TLB 的结构(translated)
  6. ““ is not translated in “zh“ (Chinese) ……
  7. 用Cadence Virtuoso IC617结合gm/id方法设计有源负载差动对(五管OTA)运放
  8. 「ArXiv2020」【Efficient Transformers: A Survey】论文笔记(更新中)
  9. 七、文件和数据格式化
  10. leetcode:589. N叉树的前序遍历