NB3000 的 DMX512 照明控制 – 第 2 部分

在上一期《展望》中,我们介绍了 DMX-512 照明控制协议并讨论了其在新兴的照明技术和生活与工作场所管理方面的重要性。 我们还介绍了NB3000 RS-485 接口和 WB_UART8 串行外设接口,其可用于执行来自 NB3000 的 DMX-512 通信。您可以在这里查看我们的第一部分介绍。

在这一部分中,我们将了解一下 Altium Designer FPGA 项目,其使用  DMX-512 和 WB_UART8 组件来控制照明灯具。 我们将从设计一个基本的 DMX-512 发射机开始,然后扩展其功能,使用 TFT 触摸屏来控制一个 RGB 液晶照墙灯。 接着我们继续利用 NB3000 的 TFT 触摸屏来为液晶摇头灯具设计一个简单而有效的控制界面。

NB3000 RS-485 接口使用 RJ-45 插孔,标准 5 类双绞线布线使用 EIA/TIA-568 定义的引脚。 依据 USITT DMX-512 标准,这在固定布线装置中也是允许的。 不幸的是大多数亚洲生产的照明灯具使用的是非标准的 XLR 3 脚连接器,因为这样可极大地降低 BOM 成本(与 USITT 指定的 5 脚 XLR 不一样)。将 DMX 信号发送到灯具的适配器线需要按图 1 中进行布置。在我们这个案例中,我们只是将 CAT-5 表 1:主源代码循环和数字 IO 读取程序 连接线尾端切掉并在裸端接了一个 XLR 插头。

[missing FMS file]
图 1:将 RS-485 插孔连接到 3 脚 DMX-512 接口的电缆

设计 1:基本的 RGB DMX 控制器

这里演示的三个照明控制设计的核心是一个基于 TSK3000 处理器的 OpenBus 系统和 WB_UART8 串行控制器。 该系统(图 2 所示)将 NB3000 SRAM 用于程序和数据存储器,还使用了 LED (NB_LEDS) 控制器核心和自定义数字 IO(CTRL_DESK)。LED 控制器仅用于模拟 Nanoboard 本地 DMX 输出的颜色,CTRL_DESK 数字 IO 将与 Nanoboard 接口仪器一起通过 USB 为主机提供一个图形用户界面。下图 WB_UART8 被指定为 DMX_UART。

[missing FMS file]
图 2:用于基本 DMX 控制器的 OpenBus 系统.

CTRL_DESK 数字 IO 配置如图 3 所示。三个“输出”概念性地控制界面输出 TSK3000,这样我们就可以从 TSK3000 嵌入的代码内读取其状态。

[missing FMS file]
图 3:OpenBUS 数字 IO 配置

顶层原理图(见图 4)显示了 FPGA 到外设的布线 - 注意 RS-485 连接的布线方式;传输和接收使能 (enables) 上拉,CTS 至 UART 下调,这是由于 DMX-512 并不使用硬件握手。此处 Nanoboard 界面仪用于将 OpenBus 系统中的自定义数字 IO 链接到主机上运行的图形用户界面脚本项目上,通过 USB 控制 DMX 通道。


图 4:用于 RGB DMX 台的顶层原理图(点击查看大图)

Nanoboard 界面仪被配置链接到了一个新的脚本项目,并且有一个新的外观,含三个滑块控件、标签(红、绿和蓝)以及三个十六进制值显示器。外观设计如图 5 所示。其同时也显示了信号链路管理器的配置 - 一个新添的不可见表格控件,用以将 OpenBus 自定义数字 IO 输出链接到滑块控件。每个滑块都使用相应的虚拟信号链路链接到各自的设计信号。例如,图 6 显示了红色滑块控件的 SignalLink 属性,而滑块值(可配置的最小值为 0,最大值为 255)可从设计上运行的嵌入代码中的自定义数字 IO 读取。

[missing FMS file]
图 5:Nanoboard 仪脚本表格和信号链路管理器

液晶十六进制显示器的更新由脚本项目中滑块脚本表中的 OnChange 事件控制,其反映了滑块的值(十六进制形式),并且当用户使用主机鼠标更改滑块位置时,该值也会自动改变。

[missing FMS file]
图 6:红色滑块控件信号链路

此设计的嵌入项目相对简单些,包括 LED 控制器的驱动程序、UART 和自定义数字 IO。因此,此处仅描述了主循环和数字 IO 读取程序,如表 1 中显示。

[missing FMS file]
表 1:主源代码循环和数字 IO 读取程序

Initialize() 用于设置驱动程序并配置 WB_UART8 使其传输字符延迟两位间隔,从而有效地提供 2 个额外停止位(即使 WB_UART8 的硬件固定为一个停止位)。这就照顾了 DMX-512 协议要求的最低 2 个停止位,如上一篇文章中所讨论。其次,在主程序循环的开始,将在每个 DMX 帧的开始调用 uart8_putbreak (DMX512, 22) 以发送所需的最低 22 位 BREAK(低级)。紧随 BREAK 之后,将使用 uart8_putchar (DMX512, 0) 传输一个 NULL(零)字符, 这是保留的“零槽”,表示以下 512 个槽含有调光通道 0 到 511 的值。

在主循环中,将使用 desk_get_value(i) 读取控件脚本表上的三个滑块值并将其放到 512 字节的数组变量的前三个字节部分,DMX_Table [i] 用于 DMX - 512 的缓冲器。这三个值还将被放到 LED 控制器的前三个 LED 通道中,作为 NB3000 (LED 0) 上的首个 LED 中的红绿蓝芯片。

主循环的最后一部分只是将变量 DMX_Table[i] 的所有 512 个字节按顺序地从 RS-485 端口输出,连接到灯具菊花链的 DMX - 512 输入。此代码只使用了前三个通道,您可以根据需要扩展该项目,最多可使用 511 个通道。

图 7 显示了 Altium Designer 中的项目层次结构,脚本和嵌入的项目都被链接到了 FPGA 项目,带滑块的脚本控件表也在工作中。同时,拍摄了 RGB LED 照墙灯具的照片,如图 8 所示。灯具的基址设置为 000,这样红绿蓝 LED 将分别是通道 0、1 和 2。

[missing FMS file]
图 7:RGB DMX 控制器项目和主机上运行的脚本


[missing FMS file]
图 8:受 RGB DMX 项目控制的 LED 照墙灯。

计 2:使用 TFT 触摸板的 RGB 取色器

此设计是 Nanoboard 3000 探索系列练习 13(“LED 触摸屏控制”)的一个变本。只是稍微进行了一些修改和扩展以包含 WB_UART8 硬件和驱动程序,以及一些额外嵌入的代码,用以将 RGB 颜色值从 TFT 取色器传输到 DMX-512 RGB 照墙灯。有关 DS0013 教程文档的详细信息,请参阅 Nanoboard 3000 信息站点 http://nb3000.altium.com/intro.html 并点击“培训教室”链接。

[missing FMS file]
图 9:从 TFT LED 控制器 (DS0013) 更新的 OpenBus 文档。

图 9 显示了更新的 OpenBus 文档。您可以在这里查看  WB_Multimaster,用以在 TFT 控制器 (WB_ILI9320_1) 和 CPU 之间共享屏幕缓存 RAM。还包括了可选的 WB_BOOTLOADER,用以在启动时从 SPI 闪存启动应用程序,另外还有 SPI 总线和辅助 TFT 触摸传感器的触摸屏控制器核心。现有的项目使用了所有这些元素及 NB3000 LED,但是这里我们又添加了 WB_UART8 (DMX_UART),并在顶层原理图上将其连接到了 RS-485 接口,与之前的设计一样。

剩余的修改只是添加了一些用于 WB_UART8 的其他软件平台驱动程序(进行了配置以禁用和使用外围 IP 核心中包含的硬件缓存器,如图 10 中所示),还有在嵌入的 C 代码(用以更新和传输 DMX 输出的三色 (RGB) 值)中也添加了一些功能。

[missing FMS file]
图 10:用于设计 2 的软件平台 WB_UART8 驱动程序配置。

表 2 中显示了更新的嵌入代码。为了清楚起见,这里忽略了每项功能的实现详情。它们的基本功能如下:

  • initialize() 初始化所有的外设驱动程序并把用户带进 TFT 触笔校准程序,然后会在 TFT 面板上显示取色器位图。
  • pointer_update() 检查触摸面板的状态,如果用户触摸屏幕,则它将会使用当前压力施加位置的 X 和 Y 坐标更新 pointer_state 结构。在这种情况下,pointer_update() 将返回 True。
  • graphics_get_pixel() 调用以返回上面所提到的 X,Y 位置的像素颜色,然后传递给 set_all_leds()
  • set_all_leds() 用以将 NB3000 LED 设置成用户所选择的颜色,并还将返回一个数据结构 RGB 数组,其中含有红绿蓝通道值的三字节数组。
  • send_dmx() 然后使用 UART 将 RGB 数组数据传输到照明灯具。

[missing FMS file]
表 2:更新的用于设计 2 的嵌入式项目中的主代码循环

设计 3:LED 摇头 DMX 控制器

此设计是对前面设计的进一步扩展,添加了触摸屏功能和一些附加通道映射,用以控制 13 个通道的“智能”照明灯具。此设计使用的灯具是一个微型的 LED 摇头设备,其拥有大型 HID(高强度气体放电灯)设备中的许多功能,后者常见于剧院和音乐会中。您可以轻松将此设计(或加以扩展)用于控制任何 DMX 驱动的智能灯具。

关于 FPGA 硬件,此设计与上一个一样,使用相同的嵌入式系统、TSK3000 处理器、TFT 面板和触摸屏、NB3000 LED,当然还有 RS-485 接口。只添加了一个小设置 - 将位于 TFT 面板下方的用户按钮通过 WB_PRTIO (a.k.a. GPIO) 组件连接到了 TSK3000 处理器。

[missing FMS file]
图 11:摇头 DMX 控制器用户界面配置

这使得 TFT 面板可以用作平移/倾斜 (X/Y) 控制面板和 RGB 颜色选取器。SW3/4/5 按钮则用于控制“开关”(打开、频闪或关闭),SW1/2 控制图案盘(使用户可以循环选择各种可用的图案投射模式并控制其移动)。TFT 面板显示配置如图 11 所示,小圈标向用户反馈当前的平移和倾斜位置。坐标也显示在 RGB 颜色选区(用户可以点按以设置红绿蓝强度级别)的上方。

对于大多数智能照明灯具,设备的 DMX 基址必须根据控制的灯具数目和控制方式来设置,本例假设其起始地址为 0x00。因为默认这些投射中的所有灯具都有一个 0x00 基址,意思是灯具的第一个通道由 DMX 零槽后传输的第一个值控制,依此类推。此 LED 摇头设备使用表 3 中显示的 DMX 通道分配。

通道 功能
1 平移
2 平移(精微)
3 倾斜
4 倾斜(精微)
5 平移/倾斜速度
6 调光/开关/频闪
7 红色强度
8 绿色强度
9 蓝色强度
10 颜色宏命令
11 颜色变更速度
12 显示宏命令
13 图案盘(打开、模式、静止、握手、滚动)

表 3:用于 LED 摇头灯具的 DXM 通道分配

此设计的最后一个变本添加了 Nanoboard Instrument 脚本功能 - 通过 USB JTAG 连接到 NB3000 FPGA 设计,提供了一个基于个人电脑的控制界面。图 12 显示了脚本对话框,其中含有用于控制图案盘和开关的鼠标按钮控件。还能提供来自 TFT 面板位移/倾斜控制和颜色选择的反馈。

[missing FMS file]
图 12:用于摇头 DMX 控制器的脚本界面

要查看这些设计的视频,请点击下面的视频缩略图(视频 1)。下载这些设计并用于自己的照明系统!

[missing FMS file]
视频 1:点击查看 NB3000 DMX 控制器操作视频

项目的下载链接(Zip 文档):

DMX 控制器设计 1(使用脚本的 RGB 照墙灯控制器

DMX 控制器设计 2 (使用 TFT 触摸的照墙灯控制器

DMX 控制器设计 3(使用 TFT 的 LED 摇头控制器

DMX 控制器设计 3(使用 TFT 和脚本用户界面

► 2010 年 2 月展望首页