这是迷你系列的 第 1 部分 。 Manya 挑战自己,将 Adafruit NeoPixels (WS2812B RBG LED)与 Freescale FRDM-K64F 开发板和 Kinetis SDK 结合使用(参见“ 让我们一起玩转 Freescale FRDM-K64F ”)。不久前,我使用 FRDM-KL25Z 板(参见“ NeoShield:WS2812 RGB LED Shield with DMA and nRF24L01+ ”)。我在我的项目中使用了 Processor Expert(没有 Kinetis SDK),使用这个设置非常简单。但是,Manya 想要在没有 Processor Expert 的情况下使用 Kinetis SDK 来做到这一点。毫不奇怪,她发现使用 Kinetis SDK 而不使用 Processor Expert 的设置更具挑战性(参见“ 尚未完成!! ”)。我答应过 Manya 帮她一把,所以我们开始吧! :-)
Adafruit 8×8 NeoPixel Shield 与 Freescale FRDM-K64F 板
大纲
我从这里开始一个迷你系列文章,如何使用飞思卡尔的 FRDM-K64F 板和 Adafruit WS2812B LED(( Adafruit 将它们命名为“ NeoPixels ”)。我使用的是 飞思卡尔 Kinetis Design Studio V3.0.0 (基于 Eclipse IDE with GNU ARM Embedded (launchpad)) 和 Freescale Kinetis SDK 。第一部分介绍了如何设置硬件。
硬件挑战
WS2812B LED 是 RGB LED,它有一个带移位寄存器的内置电流驱动器:我可以将 LED 链接成长条并将数据转移到它们。
WS2812B 在电气方面和 WS2812 所需的特殊协议方面存在一些挑战:
- NeoPixels 需要 5V 电源。 每个 LED 需要高达 60 mA 的全(白色)亮度(每种颜色(红色、绿色和蓝色)20 mA)。驱动许多 LED 将需要*大量*电流。对于我的大型项目,我使用多个 5V 40A(! !!!!!) 我的大型项目的电源 :-)。 5V 40A电源
- 像素的 + 和 – 端子之间 需要有 大电容 (1000 µF、6.3V 或更高)。 这可以防止电流的初始涌入损坏 像素。少数(例如 1-3)个像素不需要该电容器,但绝对推荐用于任何其他像素,否则您有损坏像素的风险!
- WS2812B 逻辑电平为 5V 。由于 FRDM-K64F 板使用 3.3V,我需要一个非常精确和快速(!)的逻辑电平转换器,将 3.3V 转换为 5.0V,例如 74AHCT125 或 74HCT245 。
- LED 需要 非常精确的计时 。对于每个 LED,我需要移动 24 位:前 8 位用于绿色,然后 8 位用于红色,最后 8 位用于蓝色。 “1”被编码为 0.8 µs 高,0.45 µs 低。 “0”表示高 0.85 µs ,然后低 0.85 µs 。除非您使用经过良好调整的汇编代码,否则不可能(!!!)从普通 C 代码切换引脚以达到该精度和时序。
为了更容易连接 WS2812 条带,在大学里我们开发了一个用于 FRDM 或 Arduino 板的扩展板。原理图和 CAD 文件是开源的,可以在 https://github.com/ErichStyger/mcuoneclipse/tree/master/Altium/NeoPixel%20Shield 上找到。因为您很可能没有那个板:-(,我将描述如何用面包板做类似的事情:-)。
另一个注意事项:使用高速逻辑分析仪或示波器对于此类项目“至关重要”。如果您没有,现在是时候买一个了。严重地!在没有合适工具的情况下进行此类项目或发现问题将非常非常令人沮丧,每个工程师或爱好者都应该在他的工作台上拥有合适的工具:-)
用于 FRDM 板的 NeoPixel Shield
另一个注意事项:使用高速逻辑分析仪或示波器对于此类项目“至关重要”。如果您没有,现在是时候买一个了。严重地!在没有合适工具的情况下进行此类项目或发现问题将非常非常令人沮丧,每个工程师或爱好者都应该在他的工作台上拥有合适的工具 :-)。
:idea: 我正在使用 Saleae ( http://www.saleae.com ) 的 Logic16(不再可用)和 Logic Pro8)。它们价格实惠,为我节省了无数小时的绝望调试时间。 Logic4 的价格约为 100 美元,对于这个项目来说已经足够了。顺便说一句:Salea Logic16 是我几年前的圣诞礼物(我给自己买的):-)。
使用逻辑分析仪探测 FRDM-K64F
硬件设置
您需要以下硬件:
- 飞思卡尔自由板。我在本文中使用 FRDM-K64F。您可以使用任何其他板,但是您可能需要使用不同的引脚来与 LED 通信。
- 来自 Adafruit ( http://www.adafruit.com/category/168 ) 的任意数量的 WS2812B/NeoPixels。
- 一个好的 5V 电源,取决于您使用的像素/WS28122 的数量。例如 Adafruit 的 5V 10A ( http://www.adafruit.com/products/658 )。还要考虑一个电源插孔到螺丝端子适配器 ( http://www.adafruit.com/products/368 )
- 一个好的 3.3V 至 5.0V 电平转换器。我推荐 74AHCT125 或 74HCT245 ,它们采用面包板友好型封装。
- 一个 300-500 欧姆的电阻器,它被放入到 LED 的 DIN 线路中
- 一个 1000 µF 的电容器,额定电压至少为 6.3V,放在 5V 和 GND 之间。
- 面包板、必要的面包板电线和 USB 数据线。
该图显示了 FRDM 板、电平转换器和 NeoPixel LED 之间的接线。
确保使用正确的电容器极性!
硬件接线
在图片中,我使用 USB 分线板 ( http://www.adafruit.com/products/1833 ) 连接器作为电源:这样我就可以从我的笔记本电脑 USB 端口(高达 500 毫安)为几个 LED 供电,而无需需要外部电源,或使用壁式 USB 电源(我有一个电源高达 2 A :-))。
此外,您可能会考虑使用来自 FRDM 板的 5V。但是*仅*对数量非常有限的 LED 执行此操作,因为 5V 电压非常有限(检查电路板的原理图!)。我*不*推荐 5V,除非您确定不会损坏您的电路板。
带有 NeoPixel 接线的 FRDM-K64F
带 LED 的 NeoPixel 接线的 FRDM-K64F
FRDM-K64F 带 NeoPixel 接线顶视图
每个 Adafruit NeoPixel 板都使用 GND、5V 和 DIN(数据输入)。将这些线连接到上述电路。在适用的情况下焊接电线或使用接头。图片左边是一个8×8的NeoPixel Matrix,右边是一个8像素的板条:
NeoPixel 输入连接器点
我可以通过将 DOUT(数据输出)连接到下一个模块的 DIN(数据输入)来链接多个模块/条带。
连接的 8×8 NeoPixel 矩阵
概括
这样就完成了硬件设置和接线。使用良好的电平转换器、限制电流冲击的电容器以及 LED 输入端的电阻器非常重要。确保您有一个良好的电源,能够为每个 LED/像素驱动高达 60 mA 的电流。可以组合多个条纹和板。
有了这个,下一篇文章将介绍如何准备好软件工具。所以敬请期待……
迷你系列教程列表
- 教程:Adafruit WS2812B NeoPixels 与 Freescale FRDM-K64F 板 – 第 1 部分: 硬件
- 教程:Adafruit WS2812B NeoPixels 与 Freescale FRDM-K64F 板——第 2 部分: 软件工具
- 教程:Adafruit WS2812B NeoPixels 与 Freescale FRDM-K64F 板——第 3 部分: 概念
- 教程:Adafruit WS2812B NeoPixels 与 Freescale FRDM-K64F 板 – 第 4 部分: 定时器
- 教程:Adafruit WS2812B NeoPixels 与 Freescale FRDM-K64F 板 – 第 5 部分: DMA