你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

制作LED矩阵显示控制器

[复制链接]
木木&点点 发布时间:2019-3-12 22:59
本帖最后由 点点&木木 于 2019-4-13 00:16 编辑
# }7 A! U. }7 n1 X2 U
  q5 ?9 t( {7 }
介绍
       在之前的教程中,我提到了一个名为Character LED Display 的东西,我说这是另一个故事。这是另一个故事。
该项目涉及控制LED矩阵显示器。这是关于使用微控制器进行艰苦的工作,以便最大限度地减少在Raspberry Pi上完成的工作。
' V  ]+ ]6 L% O  n" u0 \
下图表示系统体系结构。左侧的Raspberry Pi通过SPI接口将文本或图像数据发送到显示器。
中间的LED控制器转换显示数据并产生控制LED矩阵显示板所需的控制信号。然后,控制器通过HUB08或HUB75接口将数据和控制信号发送到右侧的显示器。这个项目是关于制作控制器,位于中间。
5 k: |4 _0 A/ ?* M2 u+ g" T

1 K' _& g1 c8 F: E2 C4 c
1.jpg

1 P+ d& p& z5 D9 n/ w& vRaspberry Pi 3型号B +    ×        1
# U* e! @* A5 W6 h" ~+ _$ ^
% V5 U. F/ S; G2 W* e

4 n3 C" Q; f" l' ^
2.png
LED显示控制器框图

% c1 Q6 }. d* P5 d" \+ o' m
5 F9 _  A- m% J: M" O4 p" f
       该项目的目标是为支持HUB08和HUB75接口的LED矩阵显示器制作Pi HAT,并以字符或图形模式驱动显示器。这些模式对显示进行分类。字符模式是最简单的。在这种模式下,Raspberry Pi调用带有文本字符串的printf样式函数来写入显示。在图形模式下,Raspberry Pi提供了一组RGB数据。图形模式允许您在显示屏上创建静态或动态图像。
! n# ~- w7 x% ]* k

* h7 [+ C7 r% G& p4 W
0 r$ A& v1 B& [- {6 o8 |. I3 G3 q7 ?8 m) {$ h# G% w% T; H
背影故事
       我一直在项目中使用字符LCD显示器很长一段时间。它们易于使用,易于查找,非常适合简单的小UI。当你需要大而明亮的东西时,字符液晶显示器不是一个好选择。对于具有真实影响的显示器,大LED矩阵显示器是更好的选择。
LED矩阵显示器很难控制。关于如何驱动它们的文档并不多。它们需要不断刷新,这需要很多处理能力,你可能需要其他东西,如ping服务器和检索一些数据来显示。
       我想要的是一个显示控制器,我可以设置和忘记或绘制'图像',而不必担心实时信号生成或时钟或闪光灯或地址或PWM或BCM或任何其他需要处理的事情控制其中一个显示器。
* H  z7 `! U" c
我知道有LED矩阵显示控制器这样的东西。显示器的制造商通常建议或提供一个控制器。控制器的文档很难找到显示器的文档。这引入了一个我无法接受的风险:在向客户发送巨额订单之前的那个晚上,我发现控制器没有按照我的意愿行事,而且我无法解决它。
这就是我所说的我决定制作自己的LED矩阵控制器的原因。在真正的故事是,我不知道这些LED矩阵显示器是如何工作的,我想弄明白。我从未做过Pi帽子,我想知道如何做。我设计一个硬件已经有几年了,我想学习如何使用KiCAD。我之前没有使用STM32,我想学习如何使用它们。

% P1 X/ l9 y; e1 L9 ?7 D/ u6 z
有一大堆新东西需要学习,有什么好的学习方法,而不是直接跳出数字。当我需要在愤怒中使用某些东西时,我学得最好,即,我必须产生一些实际结果,而不仅仅是闪烁的LED或Hello World!
! W3 y7 ^0 a* X: x' `1 ^5 [" `
( v" ^. J( \2 I  T" W/ ?' T
这个概念
       这个概念是制作一个用于控制LED矩阵显示器的Pi Hat,它可以完成所有繁重的操作.Pi上运行的软件应尽可能简单,例如printf或通过SPI发送位图。

5 f9 y8 b2 p. C1 G( S6 w2 r
这些是我对该项目的高级目标:
做一个Pi帽子。在可行的情况下,请遵循Pi基金会,因此我可以选择将其证明为“Pi Hat”
它必须以'字符模式'驱动显示(第一次迭代)
它应该以'图形模式'驱动显示器(第二次迭代)
它必须支持HUB08和HUB75接口

8 m0 q5 r3 M% p4 U

/ O3 o6 S- A5 A/ H& @: b* r1 H0 a
原型
       我开始使用STM32 Blue Pill,一种简单,便宜的微控制器板。
这是概念证明的图表。显示屏由右侧的16针标题表示。这种显示器是单色HUB08型。
% d. S9 z. w: M+ T  l8 e# ~
3.png
原型接线,3.3V运行显示IO
1 o$ _7 Y! D' c9 H( e
3 H+ y* O$ L: K7 X) L/ A9 J

7 Y# n* r  V6 ?6 Q& q6 J6 C9 n' @; l* }% N+ l2 K% h: ]
这个概念证明会将显示引脚驱动到3.3V,我认为这可能会起作用,尽管5V可能更好。这是它的样子。
9 h6 q9 r6 N) T
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 4.jpg
原型显示'它可行'

1 z/ c) E# P3 q+ f. b: E' ?* C: h! H4 E% q
2 S* ?( u* m7 d: `  u$ u
这个实验的结果与概念证明是一个工作LED矩阵显示。我为公共汽车站标志项目开发了它。这就是它的样子。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 5.jpg
运营巴士站牌
( x3 _/ a: X1 @

- `  y- P0 e5 J+ a. A: o5 `% b
. i; c0 P' t8 X. ]) {  S% Z
原型固件
       我的原型固件基于这个库。我添加了一个简单的命令解释器,并设计了一个协议来控制SPI上的显示。这里的主要概念是一个字符显示,这意味着您将文本字符串发送到显示。显示器固件根据收到的文本字符串中的字符计算出要点亮的LED。显示器有自己的字体,可将字符转换为照明和非照明LED的图案。

9 f- ~: y: p- B$ z" B) L( A
我从原型中学到了什么
从原型中我了解到它是可行的。我还学会了如何控制HUB08类型的显示器。我使用的库并没有完全符合我的需要,所以通过修改库我学到了很多东西。我决定将LED控制信号驱动到5V,这需要电平转换器将Blue Pill的3.3V IO电平转换为5V。我想过尝试将它全部塞进Raspberry Pi原型帽,但我认为基于Blue Pill设计我自己的板可能更容易。
& Y  U# h1 e2 s- X+ K
我还了解到,我使用的开发系统的引脚排列不符合Raspberry Pi的引脚排列。SPI引脚MOSI和MISO被交换。当我制作一块电路板时,我需要同时支持“正确”和“不正确”的引脚。
8 w7 ]& H+ |: k& k, _

& O+ P5 g+ ~5 S% O" B; M
第一板 - 原理图
     在证明“它可行”之后,下一步是设计PCB。这就是我提出的设计要求:

& u$ G+ Q( U+ \+ X7 r/ x6 V6 V6 K
做个帽子
使用stm32
支持HUB08和HUB75连接
以5V驱动LED显示信号
支持正确和错误的SPI引脚排列
我决定制作电路板并自己填充。经过一番研究后,我选择了0805尺寸的元件,并带有手焊垫脚印。我开始使用蓝色药丸的原理图和stm32和电平转换器的数据表。我在KiCAD中创建了一个项目。

8 Q. l) S! A% n0 `  w& k
我观看了Contextual Electronics 的Chris Gammell的“ 走向Blinky4.0”系列,然后我再次观看了它。我回到选定的剧集来帮助设置库和创建我自己的零件库。该系列涵盖了我开始所需的一切。

; ^/ {0 v5 |7 U5 w7 R3 q. C
第一板 - PCB
我确信这对于专业人士来说主要是科学,但对我而言,这都是艺术和无知。我把东西移动到它看起来正确然后开始铺设轨道。对于原理图,更改了引脚映射几次,这样我就可以得到电平移位器,stm32和连接器以最少量的过孔布置。
一个棘手的部分是让Pi帽的尺寸正确。我不得不重做几次以使其足够接近规范。
: ?. C# y- `$ A+ o) o
订购电路板
我从Seeed Studio订购了电路板。他们以4.90美元制造了10块板。我打算只制作这个版本的1或2个版本。我采用了制定红色开发板的惯例。我们的想法是让开发板变红,生产板变绿。这样一来,如果有人不小心弄错了一个开发板,就很容易发现。
低成本电路板工厂的缺点是,与使用高级本地服务相比,获得电路板通常需要更长的时间。权衡是成本。我并不着急,没有预算,所以我可以证明等待。
8 c& S$ W( H4 ~: q
订购部件
完成原理图并完成大部分电路板后,我可以着手寻找和订购制作电路板所需的部件。为此,您需要一个零件清单,这是物料清单(BOM)。KiCAD为您生成BOM。您需要做的是以可接受的价格和适合的交货时间从BOM中查找所有零件。
我订购了足够的昂贵组件来制作三块板。我买了100个无源器件,电阻器和电容器等。

6 t, N) ?3 [1 A, y7 I; T
建立电路板
我曾经以焊接为工作,但已经有一段时间了,因为我做了大量工作,而且无法使用专业工具。我在YouTube上观看了一些教程,看看有什么新东西和我忘记了什么。设计电路板并不困难,有一些细间距表面贴装元件,但是有足够的焊剂和一点技术,电路板就能很好地组合在一起。我焊了一块板。我订购了足够的部件来制作三个,但知道第一块板可能存在问题,因此在下一次迭代中保存了部件。
: j% j+ k- H( z9 j
设计一块板子总是一种有趣的体验。你不确定它是否会起作用,或者是否会出现烟雾,或者更糟。我采取了一种保守的方法,首先用万用表进行良好的探测。我一直在寻找5V,3.3V和GND之间的高电阻。然后我将3.3V导轨连接到电源并接通电源,没有烟雾,但也没有LED。然后我尝试了数字探针。

. u% L/ i6 U8 f* b
数字探针是您将手指放在东西上以查看它是否很热的地方。不推荐用于高压电路,但对于低压电路,通常都可以。(我对丢失的指纹不承担任何责任,即使在低电压下,某些东西也会变得很热)。
% R0 J; P0 L4 O' S6 V& ~# Q
经过一些探测和测量后,我发现了一个没有连接网的错误。我错过了GND网络上的连接,因此部分电路板GND上没有连接到GND。我还意识到我在5V和3.3V线路上作为保护二极管放置的二极管,以保护Pi不受过压影响,电压下降太多。我使用了大约0.3V的射击二极管,但这太过分了。
, V) y  O" I5 R$ n" a% X' m0 O+ _
我使用了一根短导线连接,并用0R电阻代替了二极管。然后我从原型中加载了固件。在我确信Pi连接器没有错误之后,没有任何连接在一起,或者电压或GND,我不应该将它连接到开发板。
显示器没有工作,经过一些逻辑探测器的探测之后,我可以看到我在SPI线路中放置的开关来纠正开发板的错误,这就是推迟信号,使MISO和MOSI不同步时钟。我决定删除开关,我需要找到一种替换方法来交换线路。对于下一次迭代,我决定使用跳线。不是自动的,但可以接受。这是在mod之后电路板的样子。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 6.jpg
Modded board - 1.0版

- z9 m. ~# Y9 g! L. S0 k4 d& ?2 w# B3 M7 ]2 E# e
我让显示器正在使用第一个版本的电路板。我学到了足够的知识来开始第二个版本。

6 f0 u$ W8 j+ g. v
我学到的是
我在第一板上犯了一些错误。首先,我错过了GND网络上的连接,因此部分板GND没有连接到GND。
我的第二个错误是使用二极管来“保护”电路板上的5V和3.3V电压。二极管的电压下降太多。
第三个错误是在MISO和MOSI线路中使用开关。我曾计划检测电路板连接到哪个开发套件,并自动为正确和错误的电路板设置正确的MISO,MOSI映射。这没用。该开关在SPI线路中引入了延迟,因此时钟最终与MISO和MOSI异相。
. }; B+ l/ A7 i- n3 c3 u6 a  v# t
可以为下一次迭代进行其他几项的改进。我决定抛弃SPI开关并使用0R电阻。没有花哨的电路板检测,只需安装正确的电阻即可使SPI线路正确。这次我将运行设计规则检查器(DRC),然后将文件运送到晶圆厂。这将确保我已正确连接所有网络。我放弃了5V和3.3V电压轨的保护二极管。
我还会在电路板上添加一些测试点,以便下一步更容易实现。我改变的最后一件事是向显示器连接器添加标签。
/ c2 D8 M' Q. B  Y+ L' p* A
第二套电路板
我有足够的零件制作三块板。我决定做出改变并制作一套新的电路板。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 7.jpg
版本1.1 - 从1.0版学习

) q, T! q( e' J: S  t
5 }3 K0 n. g( A8 A. p' {& |" D# y8 M; t

4 F% _$ {; T$ U8 L
在第二块板上,我做了以下更改:
去掉了保护二极管
增加了测试点
添加了显示连接的标签
删除了SPI线路交换机
使安装孔更大

% ^2 I/ v3 [% L+ v1 O1 w2 R
我也可以手动焊接表面贴装元件。我认为它看起来比第一块板更整洁。我填充了第二块板中的2块。我为Technexion 6UL picopi开发套件制作了一个,为Raspberry Pi制作了一个。
$ r* m; z3 }9 H( m$ E
大约在这个时候,Google宣布Android Things将不再支持6UL开发套件。这意味着我不再需要担心纠正我的主板上的SPI线路交换,但这也意味着我需要购买另一个开发套件,即imx7D pico pi。谷歌还宣布将不会有基于RaspberryPi格式的可交付产品。您可以使用imx7D和Raspberry Pi进行开发,但不能用于生产。
第二块板很好地让我考虑制作最终版本。这将是第三板。我决定专业组装第三块板,这意味着我需要对BOM进行一些更改以支持自动化生产。

/ u6 E' d2 a1 M1 N
第三板
我为第三块板(V1.2)做了一些更改。我移除了跳线以设置连接SPI线路的方向。我添加了一个跳线,以便我可以从Raspberry Pi连接器中选择CS0或CS1作为显示器的芯片选择。最大的变化是改变处理器。我想组装电路板,所以我使用了Seeed Studio的开放式零件库(OPL)中的组件。OPL中唯一可用的STM32是STM32F401。我改变了新微控制器的原理图和PCB。
我使用ST发现套件中的原理图作为参考,我需要为这个新控制器做一些额外的事情,还需要一些额外的引脚来连接。

  e  h" r1 q! W- j
我也切换到较小的电阻器和电容器,因为这些将是机器组装的,我不需要它们那么大。另一个变化是添加一个5V连接器为电路板和Pi提供与显示器相同的电源。为此,我添加了推荐的保护电路,另一个二极管。这次是一个理想的二极管,其电压比我之前使用的实际二极管电压低得多。

7 z; w6 V; q6 u2 ?
对于第三块板,我做了以下更改:
. B+ K6 y+ \& X7 ~) ?; ~& r- f
将处理器更改为STM32F401
扩展了编程头以包含SWD
为SPI芯片使能CE0-CE1增加了一个跳线
为5V输入添加理想二极管和连接器

! x9 j: W: Y8 y
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 8.jpg
第三板(V1.2)

" k; P/ Y2 Z! U; r# V3 Q, v# O
$ Q0 b+ c% h) k4 Q7 \" J, \0 R4 K, T
当前项目状态
0 A7 z6 q, ^: `
这是一个WIP项目,即它还没有完成。我有第三块电路板运行,代码移植到STM32F401,这意味着将使用Mbed平台。
我正在研究HUB075显示器的固件,但最近并没有投入太多时间。当我找到工作时间时,我会更新这个项目。
7 r% Z; l* ~/ ~6 ?% q
相关文件
davemckelvie / pihat-led-display---- pihat-led-display-master.zip (818.42 KB, 下载次数: 12)
收藏 2 评论2 发布时间:2019-3-12 22:59

举报

2个回答
wudianjun2001 回答时间:2019-3-13 10:33:02
不错的想法
w13580445117 回答时间:2020-1-17 15:09:21
厉害

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版