概述

LEDC(LED 控制器)是一种高效的嵌入式解决方案,既支持智能 LED 灯具(如 WS2812B)的控制,也能兼容 DSHOT 协议以驱动无刷电机。

功能特性

  • 可配置的数据传输脉冲时间和非数据周期

  • 可配置的 RGB888 显示模式和 LED 刷新时间

  • 最大支持 8192 笔数据序列

  • 最大支持 1024 个 LED

  • 支持 DMA 传输

工作原理

逻辑 0/1 编码及配置指南

  • 逻辑“0”和“1”编码

    逻辑“0”(简称“码 0”)和逻辑“1”(简称“码 1”)由高低电平组成,如图所示。

    ../../../rst_peripherals/rtos/8_ledc/figures/ledc_code0_code1.svg

    输入码型时序

  • 逻辑电平时序

    各设备中,码 0 和码 1 的高低电平持续时间有所不同。

    以 WS2812B-2020 智能 LED 为例:

    code0_code1_timing

    描述

    时间范围

    单位

    T0H

    码0,高电平时间

    220 ~ 380

    ns

    T0L

    码0,低电平时间

    580 ~ 1000

    ns

    T1H

    码1,高电平时间

    580 ~ 1000

    ns

    T1L

    码1,低电平时间

    220 ~ 420

    ns

    RESET

    帧复位,低电平时间

    > 280

    μs

    则编码总时间:

    • 码 0:800ns ~ 1380ns

    • 码 1:800ns ~ 1420ns

  • 编码时间配置

    通过调节寄存器中的 TxH_CNTTxL_CNT 参数,可以灵活设置码 0,码 1 的高低电平持续的时钟周期数目。

    • x: 指 0 或 1

    • 计数时钟:XTAL40MHz

数据传输时序

LED 通信模式

以 WS2812B LED 为例,其使用单路非归零(NRZ)通信协议,采用级联方式进行数据传输:

  • 上电复位:LED 上电后,通过 DI 端口从控制器接收数据。首颗 LED 将采集前 24 位数据并锁存。

  • 数据传递:剩余的数据通过内部整形电路从 DO 端口传输到下一颗 LED。

  • 信号递减:每经过一颗 LED,信号中会减少 24 位数据。

LEDC 传输时序

LEDC 发送给首个 LED 的数据时序如下:

../../../rst_peripherals/rtos/8_ledc/figures/ledc_packet_timing.svg

LEDC 数据传输时序

复位信号 :可配置周期,用于刷新 LED。

间隔调整

  • 支持在相邻像素间插入低电平间隔

  • 支持在相邻帧间插入低电平间隔

LED 数量

支持的 LED 数量计算公式为:

\begin{gather*} LED\_NUM = \frac{\frac{1}{LED\,fresh\,rate(\frac{frame}{s})} - 280μs}{(logical\,0\,or\,1\,coding\,time) * 24} \end{gather*}

以表 code0_code1_timing 中码 0 和码 1 的时序为例,计算出支持的 LED 数量:

  • 当 LED 的刷新率为 30 帧/秒时,支持的 LED 数量为 681 ~ 1023 个。

  • 当 LED 的刷新率为 60 帧/秒时,支持的 LED 数量为 337 ~ 853 个。

应用示例

raw_ledc_ws2812 展示了如何使用 LEDC 模块来配置和控制多个 LED 灯珠。

备注

要了解示例支持的芯片,请查看示例路径下的 README.md 文件。

API 参考

要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_ledc.h