
本帖最后由 点点&木木 于 2019-4-13 00:16 编辑 介绍 在之前的教程中,我提到了一个名为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 ![]() Raspberry Pi 3型号B + × 1 % V5 U. F/ S; G2 W* e ![]() LED显示控制器框图 该项目的目标是为支持HUB08和HUB75接口的LED矩阵显示器制作Pi HAT,并以字符或图形模式驱动显示器。这些模式对显示进行分类。字符模式是最简单的。在这种模式下,Raspberry Pi调用带有文本字符串的printf样式函数来写入显示。在图形模式下,Raspberry Pi提供了一组RGB数据。图形模式允许您在显示屏上创建静态或动态图像。 ! n# ~- w7 x% ]* k8 |. 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,我想学习如何使用它们。 有一大堆新东西需要学习,有什么好的学习方法,而不是直接跳出数字。当我需要在愤怒中使用某些东西时,我学得最好,即,我必须产生一些实际结果,而不仅仅是闪烁的LED或Hello World! ! W3 y7 ^0 a* X: x' `1 ^5 [" `( v" ^. J( \2 I T" W/ ?' T 这个概念 这个概念是制作一个用于控制LED矩阵显示器的Pi Hat,它可以完成所有繁重的操作.Pi上运行的软件应尽可能简单,例如printf或通过SPI发送位图。 这些是我对该项目的高级目标: 做一个Pi帽子。在可行的情况下,请遵循Pi基金会,因此我可以选择将其证明为“Pi Hat” 它必须以'字符模式'驱动显示(第一次迭代) 它应该以'图形模式'驱动显示器(第二次迭代) 它必须支持HUB08和HUB75接口 原型 我开始使用STM32 Blue Pill,一种简单,便宜的微控制器板。 这是概念证明的图表。显示屏由右侧的16针标题表示。这种显示器是单色HUB08型。 % d. S9 z. w: M+ T l8 e# ~![]() 原型接线,3.3V运行显示IO 1 o$ _7 Y! D' c9 H( e3 H+ y* O$ L: K7 X) L/ A9 J ' @; l* }% N+ l2 K% h: ] 这个概念证明会将显示引脚驱动到3.3V,我认为这可能会起作用,尽管5V可能更好。这是它的样子。 9 h6 q9 r6 N) Tfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png
![]() 原型显示'它可行' + 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
![]() 运营巴士站牌 ( x3 _/ a: X1 @原型固件 我的原型固件基于这个库。我添加了一个简单的命令解释器,并设计了一个协议来控制SPI上的显示。这里的主要概念是一个字符显示,这意味着您将文本字符串发送到显示。显示器固件根据收到的文本字符串中的字符计算出要点亮的LED。显示器有自己的字体,可将字符转换为照明和非照明LED的图案。 我从原型中学到了什么 从原型中我了解到它是可行的。我还学会了如何控制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, _第一板 - 原理图 在证明“它可行”之后,下一步是设计PCB。这就是我提出的设计要求: 做个帽子 使用stm32 支持HUB08和HUB75连接 以5V驱动LED显示信号 支持正确和错误的SPI引脚排列 我决定制作电路板并自己填充。经过一番研究后,我选择了0805尺寸的元件,并带有手焊垫脚印。我开始使用蓝色药丸的原理图和stm32和电平转换器的数据表。我在KiCAD中创建了一个项目。 我观看了Contextual Electronics 的Chris Gammell的“ 走向Blinky4.0”系列,然后我再次观看了它。我回到选定的剧集来帮助设置库和创建我自己的零件库。该系列涵盖了我开始所需的一切。 第一板 - 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个无源器件,电阻器和电容器等。 建立电路板 我曾经以焊接为工作,但已经有一段时间了,因为我做了大量工作,而且无法使用专业工具。我在YouTube上观看了一些教程,看看有什么新东西和我忘记了什么。设计电路板并不困难,有一些细间距表面贴装元件,但是有足够的焊剂和一点技术,电路板就能很好地组合在一起。我焊了一块板。我订购了足够的部件来制作三个,但知道第一块板可能存在问题,因此在下一次迭代中保存了部件。 : j% j+ k- H( z9 j设计一块板子总是一种有趣的体验。你不确定它是否会起作用,或者是否会出现烟雾,或者更糟。我采取了一种保守的方法,首先用万用表进行良好的探测。我一直在寻找5V,3.3V和GND之间的高电阻。然后我将3.3V导轨连接到电源并接通电源,没有烟雾,但也没有LED。然后我尝试了数字探针。 数字探针是您将手指放在东西上以查看它是否很热的地方。不推荐用于高压电路,但对于低压电路,通常都可以。(我对丢失的指纹不承担任何责任,即使在低电压下,某些东西也会变得很热)。 % 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
![]() Modded board - 1.0版 4 d& ?2 w# B3 M7 ]2 E# e 我让显示器正在使用第一个版本的电路板。我学到了足够的知识来开始第二个版本。 我学到的是 我在第一板上犯了一些错误。首先,我错过了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
![]() 版本1.1 - 从1.0版学习 . p' {& |" D# y8 M; t 在第二块板上,我做了以下更改: 去掉了保护二极管 增加了测试点 添加了显示连接的标签 删除了SPI线路交换机 使安装孔更大 我也可以手动焊接表面贴装元件。我认为它看起来比第一块板更整洁。我填充了第二块板中的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进行一些更改以支持自动化生产。 第三板 我为第三块板(V1.2)做了一些更改。我移除了跳线以设置连接SPI线路的方向。我添加了一个跳线,以便我可以从Raspberry Pi连接器中选择CS0或CS1作为显示器的芯片选择。最大的变化是改变处理器。我想组装电路板,所以我使用了Seeed Studio的开放式零件库(OPL)中的组件。OPL中唯一可用的STM32是STM32F401。我改变了新微控制器的原理图和PCB。 我使用ST发现套件中的原理图作为参考,我需要为这个新控制器做一些额外的事情,还需要一些额外的引脚来连接。 我也切换到较小的电阻器和电容器,因为这些将是机器组装的,我不需要它们那么大。另一个变化是添加一个5V连接器为电路板和Pi提供与显示器相同的电源。为此,我添加了推荐的保护电路,另一个二极管。这次是一个理想的二极管,其电压比我之前使用的实际二极管电压低得多。 对于第三块板,我做了以下更改: . B+ K6 y+ \& X7 ~) ?; ~& r- f 将处理器更改为STM32F401 扩展了编程头以包含SWD 为SPI芯片使能CE0-CE1增加了一个跳线 为5V输入添加理想二极管和连接器 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png
![]() 第三板(V1.2) 4 Q7 \" J, \0 R4 K, T 当前项目状态 0 A7 z6 q, ^: ` 这是一个WIP项目,即它还没有完成。我有第三块电路板运行,代码移植到STM32F401,这意味着将使用Mbed平台。 我正在研究HUB075显示器的固件,但最近并没有投入太多时间。当我找到工作时间时,我会更新这个项目。 7 r% Z; l* ~/ ~6 ?% q 相关文件 davemckelvie / pihat-led-display----
![]() |
不错的想法 |
厉害 |