非托管外设系统(UPS)
支持的 IC[ RTL8721Dx ][ RTL8720E ][ RTL8710E ][ RTL8726E ][ RTL8713E ][ RTL8721F ][ RTL8720F ]
简介
UPS 是面向 AC 调光与同步控制场景的专用外设,核心实现多路触发源信号调理与精准触发脉冲生成。通过源选择、数字滤波及逻辑合成,输出可配置的触发信号,驱动调光器工作,全程无需 CPU 干预,保障驱动信号的稳定性与实时性。
特性
可配置的信号源
可配置的输入反向
上升沿检测
多种调光输入信号类型
框图
多路触发源调理
模块支持多类型触发源输入,包括外部 GPIO 过零检测信号、片内比较器输出信号、音频通道过零检测信号及定时器溢出信号,通过源选择接口灵活切换触发来源。输入信号经极性反向配置、数字去抖滤波处理后,滤除外部信号噪声与毛刺,生成稳定的有效触发信号,为调光同步提供可靠触发基础。
双路触发输出与调光同步逻辑
稳定后的触发信号分两路输出,直接支撑 AC 调光核心原理: 一路经边沿检测生成触发脉冲,驱动后端定时器启动计数,实现外部过零事件首次触发,对应 AC 市电周期的过零同步节点,为调光脉冲输出锚定基准;
另一路将稳定触发信号与定时器溢出反馈信号进行或逻辑合成,输出综合触发信号驱动 PWM 模块。既响应外部过零首次触发生成调光脉冲,又在定时器定时到期后二次触发 PWM,生成第二路调光脉冲,精准匹配 AC 调光 “过零同步 + 延时调光” 的双脉冲控制需求。
核心调光原理
AC 调光的核心是通过控制脉冲输出相位,调节市电半周期内的导通时间,从而改变负载端的平均电压,实现亮度调节。UPS 模块作为触发核心,以 AC 市电过零信号为基准,通过定时器精准控制延时,配合 PWM 生成两路调光脉冲,精准锁定调光相位区间,确保在市电同步周期内完成亮度调节,同时避免过零干扰导致的灯光闪烁,保障调光效果的平滑与稳定。
UPS 的模块框图如下所示。
功能描述
定时器
定时器主要用于在接收到外界激励之后,延迟一个固定的时间,重新产生一次激励事件给到 PWM。在实际电路中,定时器的激励不止给到 PWM,还会作为定时器停止的输入信号,以控制定时器每次计时溢出后可以自动停止。 实际调光应用中,定时器经常被配置在电网周期的 1/2, 例如 50 Hz 的电网下,调光定时器的溢出时间往往是 10 ms。
下图是定时器的框图和定时器的时序图。
定时器工作方式如下:
如果定时器在输入端检测到高电平,定时器内部的计数器从 0 开始向上计数。检测到低电平,定时器停止工作。
edg_dtc 电路检测到前级激励信号,会触发定时器开始计数。
如果计数器溢出,of_out 溢出信号会输出一个时钟周期的高电平信号。一个周期结束会拉低。
edg_dtc 电路检测到 of_out 的脉冲信号会触发定时器停止计数。
定时器框图
定时器时序图
在 UPS 的实际应用中,TIM10 用作固定的定时器。
在 UPS 的实际应用中,TIM10 用作固定的定时器。
在 UPS 的实际应用中,TIM10 用作固定的定时器。
在 UPS 的实际应用中,TIM10 用作固定的定时器。
在 UPS 的实际应用中,TIM10 用作固定的定时器。
在 UPS 的实际应用中,Basic timer (TIM0~TIM3) 分别被 PWM timer (TIM4~TIM7) 用作固定的定时器。
在 UPS 的实际应用中,Basic timer (TIM0~TIM1) 分别被 PWM timer (TIM4~TIM5) 用作固定的定时器。
去毛刺滤波与信号反向
为了减少信号毛刺对数字电路的影响,去毛刺滤波器用于使用 XTAL_40MHz 采样时钟对信号进行去抖动。dbc_cnt 越大,可以滤除的毛刺越宽,延迟也会越长。对于不同的 UPS 信号源,适当调整 dbc_cnt 的值可以滤除毛刺,同时最大限度地减少数字滤波引起的延迟。 外部 ZCD 信号和 CMP 输出可以是正脉冲或负脉冲。当为正脉冲信号时,系统正常工作;当为负脉冲信号时,将 rvs_en 配置为 1 以反向负脉冲信号,确保系统正常工作。
边沿检测
下图是边沿检测的框图。edg_dtc 模块的输入信号包括 clk、start_in 和 stop_in,输出是 dtc_out。
edg_dtc 模块工作方式如下:
edg_dtc 检测 start_in 和 stop_in 的上升沿。
当在 start_in 检测到上升沿时,edg_dtc 在一个时钟周期后拉高 dtc_out 信号。
当在 stop_in 检测到上升沿时,edg_dtc 在一个时钟周期后拉低 dtc_out 信号;否则,dtc_out 信号保持高电平。
边沿检测的时序图如下图所示。
调光信号类型
为配合 UPS 电路工作,PWM 需要配置工作在 One Pulse Mode。为了满足各种需求,针对不同的控制需求,可以在配置 PWM 的时候灵活调节 PWM 输出的默认电平等配置。
OPM_DefaultLevelx = low, CCxPolarity = active_low: 在第二个过零点之前拉低控制信号。
OPM_DefaultLevelx = high, CCxPolarity = active_low: 在第二个过零点处拉低控制信号。
OPM_DefaultLevelx = high, CCxPolarity = active_high: 在第二个过零点之后拉低控制信号。
寄存器
REG_UPS_CTRL
Size: 32
Address: 0x410082C4
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
21 |
UPS_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
REG_PRS_CTRL
Size: 32
Address: 0x4100C2C4
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
PRS_SRC_SEL |
R/W |
0 |
PRS trigger source select:
|
21 |
PRS_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
PRS_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
PRS_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
PRS_RVS_EN |
R/W |
0 |
Invert polarity for PRS input,
|
17:2 |
PRS_DBC_CNT |
R/W |
0 |
Debounce count for PRS funciton |
REGISTER_CONTENTS=RTL8720E
REGISTER_CONTENTS=RTL8720E
REGISTER_CONTENTS=RTL8720E
Not supported.
Base Address: 0x41000A00
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
||
004h |
R/W |
||
008h |
R/W |
||
00Ch |
R/W |
||
010h |
R/W |
Dummy register |
REG_UPS_CTRL0
Size: 32
Address offset: 000h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS0_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS0_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS0_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS0_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS0_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS0_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_UPS_CTRL1
Size: 32
Address offset: 004h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS1_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS1_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS1_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS1_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS1_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS1_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_UPS_CTRL2
Size: 32
Address offset: 008h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS2_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS2_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS2_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS2_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS2_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS2_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_UPS_CTRL3
Size: 32
Address offset: 00Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS3_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS3_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS3_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS3_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS3_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS3_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_PRS_DUMMY
Name: PRS Dummy Register
Size: 32
Address offset: 010h
Read/write access: R/W
Dummy register
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
DUMMY |
R/W |
ffffh |
Dummy register |
Base Address: 0x401C7A00
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
||
004h |
R/W |
||
010h |
R/W |
Dummy register |
REG_UPS_CTRL0
Size: 32
Address offset: 000h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS0_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS0_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS0_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS0_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS0_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS0_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_UPS_CTRL1
Size: 32
Address offset: 004h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:28 |
UPS1_SRC_SEL |
R/W |
0 |
UPS trigger source select:
|
27:22 |
RSVD |
R |
- |
Reserved |
21 |
UPS1_OUT_PWM_TRIG |
R/W |
0 |
Enable for output trigger to pwm |
20 |
UPS1_OUT_TIM_EN |
R/W |
0 |
Enable for output en signal to basic timer |
19 |
UPS1_IN_TIM_OF |
R/W |
0 |
Enable for basic timer overflow input |
18 |
UPS1_RVS_EN |
R/W |
0 |
Invert polarity for UPS input
|
17:2 |
UPS1_DBC_CNT |
R/W |
0 |
Debounce count for UPS funciton |
1:0 |
RSVD |
R |
- |
Reserved |
REG_PRS_DUMMY
Name: PRS Dummy Register
Size: 32
Address offset: 010h
Read/write access: R/W
Dummy register
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
DUMMY |
R/W |
ffffh |
Dummy register |