MSPM0 DALI 用户指南

1.引言

数字可寻址照明接口 (DALI) 是一种数字照明控制串行协议,支持各种照明应用设备与控制器之间进行简单、高效的通信。

注意:“主”和“从”术语已过时,已分别替换为“控制器”和“设备”。

MSPM0 SDK 提供了一种使用 MSPM0 的通用异步接收器发送器 (UART)模块启动开发 DALI 应用程序的简单方法,并包含以下部分:

  • 对 DALI 2 的支持

  • DALI 库的完整源代码

  • 使用 SysConfig 的 UART 模块图形配置

2.MSPM0 SDK 中的 DALI

MSPM0 SDK 中的 DALI 源代码原本应在 MSPM0 器件上运行。 此处的源代码实现侧重 DALI 的基本能力和功能,用于展示 MSPM0 器件通过 UART 处理 DALI 通信的能力。 此示例对常规类控制设备和 LED 模块类控制设备分别实施了 DALI 标准 IEC 62386-102 和 IEC 62386-207。 dali_target_commands.h/c 和 dali_target_led_commands.h/c 文件中包含对 IEC 62386-102/207 要求的大多数特性的支持,例外情况标记在已知问题部分以及源代码中。 此实现中排除了面向 IEC 62386-102/207 的可选特性。 源代码也可供修改和编辑,因此客户可以根据需要修改或自定义任何特性。

注意:虽然源代码原本应在所有 MSPM0 器件上使用,但示例代码仅在 MSPM0L1306 上进行了测试和验证。

包含的特性

  • 分别接收和发送 DALI 命令和响应的函数

  • 使用 EEPROM 在闪存中存储特定 DALI 信息并在启动时重新加载此类信息的模板函数

  • 淡出时间/淡出速率例程

  • 支持 Direct Arc Power Control (DAPC)、Up、Down、Step Up、Step Down、Recall Max 和 Recall Min 执行命令

    • 其他执行命令可以利用为 DAPC 实现的淡出时间例程来实现

  • 支持配置命令

    • 在客户实现中省略了延长淡出时间和识别器件

    • 包含设置快速淡出时间的模板,但省略了转换为计时器加载值的实现

    • 参阅已知问题,了解可以实现延长淡出时间和快速淡出时间的情形

    • 源代码中包含重置存储器组的模板

  • 支持 IEC 62386-102 的所有查询命令 -部分支持 IEC 62386-207 中的查询命令,省略了对负载偏差和热特性的查询,因为它们是可选特性

  • 支持对数和线性淡出曲线

    • IEC 62386-207 支持线性淡出曲线(如果选择)

    • 如果为连接的器件启用了 LED 模块,则可以使用配置命令来选择调光曲线

3.使用 SysConfig 为 DALI 配置 UART

此示例中提供的源代码主要使用 PWM 控制 MSPM0 上的 LED。 但是,让 MSPM0 能够理解 DALI 命令的主要特性是 UART DALI 接口。 DALI 模式允许使用地址和地址掩码接收前向帧,并将命令存储在 RX FIFO 中,直到命令执行。 MSPM0 上的 UART 模块支持通过软件和硬件实现执行地址匹配,此示例中使用了软件实现版本。 请参阅以下各部分,了解通过 UART 成功启用 DALI 模式所需的所有特定配置。

启用 DALI 模式

在 SysConfig 中,导航到“Communications”选项卡下的“UART”模块

在标记为“Basic Configuration”的部分中,将“Target Baud Rate”更改为 1200,将“Stop Bits”数更改为 2。

在标记为“Advanced Configuration”的部分中,选择“UART Mode”的下拉菜单,发现“DALI Mode”已禁用/不可选择。 导航到下面的“Extend Configuration”部分以及“Enable Extend Features”和“Enable Manchester Encoding”。 由于 DALI 模式是作为一种 UART 扩展特性提供的,而且 DALI 消息是按照 DALI 标准进行曼彻斯特编码的,所以需要选择以上两项。 选择这两个选项后,返回到“Advanced Configuration”部分,在“UART Mode”中选择“DALI Mode”。 对于“Address”和“Address Mask”,如果使用软件实现地址匹配,设置为 0。 启用两个 FIFO,将“RX FIFO Threshold”设置为“>= 2 Entries”,而将“TX FIFO Threshold”设置为“<= 1 entry”。 在“Advanced Configuration”部分中,最后一步是“Enable MSB first”。

DALI UART 配置

在“Interrupt Configuration”部分中,启用“9 bit mode address match”和“Receive interrupt”。 如果使用硬件实现 DALI 的地址匹配,启用“9 bit mode address match”。 否则,仅使用“Receive interrupt”。

最后需要的 UART 配置是“Pin Configuration”部分。 对于 TX 引脚,选择“Enable pin configuration”,在“Digital IOMUX Features”中,仅启用“Invert”特性。 对 RX 引脚执行相同的操作, 反转引脚是为了正确解释控制器发出的 DALI 命令;如不反转引脚,器件会将广播命令读取为单独的命令,反之亦然。 它也可以影响命令解释为 DAPC 命令还是常规 DALI 命令。

4.示例应用程序 - LED 演示

要求的物料

要导入 DALI 示例,请在 Code Composer Studio (CCS)中选择“Import Project”,导航到 SDK 中的“Examples”文件夹,选择“DALI”,选择“MSPM0L”文件夹,导航到 ticlang 目录。 导入后,可以将代码闪存到器件上。

要测试此示例,请将 DALI 2 Click 连接到 MSPM0,方法是将 RX 和 TX 引脚连接到 MSPM0L 器件上的相应引脚,同时将 Click 板上的 3.3V、5V 和 GND 引脚连接到 MSPM0L1306 LP 上的 3.3V、5V 和 GND 引脚。 把两根导线拧进 DALI 2 Click 上的螺纹接线端子中,再将这两根导线连接到 Hasseb DALI 2 控制器上的对应接线端子。 将电源连接到控制器,并将控制器上的 USB 连接到笔记本电脑。 将 MSPM0L1306 LP 连接到笔记本电脑,并通过 CCS 闪存示例。 示例闪存后,器件运行示例,启动 DALI 2 控制器 GUI 并按下“Initialize”。 一旦显示短地址、随机地址和器件类型,就可以开始向器件发送支持/实现的命令。 将看到器件上的 LED 响应支持的执行命令。

修改示例应用程序

MSPM0L 的 DALI 实现源代码是可以编辑的。 因此,客户和用户可以重新实现或修改现有特性,以符合个人的规格。 某些特性可能因实现而异,例如器件识别和更新闪存中的变量。 这里列出了需要用户修改以实现的特性。 这些特性要么是特定于用户的,要么是已知问题。

  • 更新闪存 - 控制设备结构中的变量,控制闪存何时获得更新的值。 在任何所需的函数中将此标志设置为 true,以触发主执行循环中的更新闪存程序。

  • 识别器件 - 此程序因用户而异,可利用 recall min 和 recall max 函数触发要切换的 LED

  • 重置存储器组/读写存储器位置 - 将需要随着更多的存储器组实现而更新,因为当前实现仅支持存储器组 0

  • 负载偏差和热保护特性 - 是可选特性,提供命令支持(如果收到命令,器件会调用函数),但实现取决于用户

  • 失败/状态位 - 可用的模板函数,但实现取决于客户

  • 延长淡出时间/快速淡出时间 - 参阅已知问题

5.已知问题

  • 仅支持 IEC62386-102:2014 的淡出时间

    • 不支持延长淡出时间和快速淡出时间

    • 可设置快速淡出时间,延长淡出时间的计算必须由客户加入

    • 必须修改 timeToPeriodConversion 才支持在 DAPC 中使用

  • 随机地址将始终生成 1

    • 这不会影响功能,因为器件仍然能够初始化,但每次初始化时都会生成相同的随机地址

    • L 器件没有 TRNG,如果工程成功移植到 G, 可利用该模块生成一个更随机的地址

  • 初始化多个器件

    • GUI 工具在尝试初始化多个器件时崩溃,但单独连接到控制器时会成功初始化器件

    • 在应用程序代码函数上未发现问题,可能需要不同的 DALI 总线设置,而非直接连接到 DALI 控制器螺纹接线端子

  • 识别器件命令的计时

    • 由于 MSPM0L 上可启用的计时器数量有限,并且需要为 PWM 保留一个计时器用来控制 LED,因此没有可用于单独控制识别器件过程的计时器

    • 但是,初始化计时器的运行时间设计为 15 分钟,所以也可将其用于识别器件过程

  • Hasseb DALI 2 控制器 GUI 不支持 LED 命令

    • 因此,LED 函数尚未验证

    • 但是,如果用户想要修改 GUI 以添加对 LED 命令的支持,GitHub 上已经公布了 Hasseb GUI 代码