[PWM] PWM同步方法
概述
在诸多电子系统中,多路 PWM 输出同步至关重要。当涉及多电机协同运转、复杂灯光特效控制等场景时,若各路 PWM 输出不同步,电机运转将出现速度不一致、抖动甚至失步等问题,灯光效果也会出现闪烁、错序等状况。同步的多路 PWM 输出能确保各执行机构精确配合,维持系统的稳定运行与预期功能实现,极大提升设备性能与可靠性,避免因不同步带来的混乱与故障。
功能实现
要达成多通道的同步输出,本质上是要统一每一路输出所对应的基准计数器数值。依据先楫PWM
的生成原理,在每一路 PWM 输出的生成周期相同,并且计数起始值也相同的前提条件下,使用同一的基准计数器能够确保输出的 PWM 波之间的相位差始终保持固定。如此一来,便能实现多通道的精准同步输出,为各类对同步性要求较高的应用场景提供稳定且可靠的信号支持。
PWM内通道同步
每个 PWM 拥有多路输出通道,他们使用同一个基准计数器,使用同样的起始值和周期值设定。因此对于同一个 PWM 的多个通道,开启pwm输出后,生成的初始波形(不考虑后续的强制输出等)始终是同步的。
不同PWM同步
不同 PWM 的输出通道使用不同的基准定时器,需要使用 PWM 外部输入信号进行同步,该信号可来自片内其他外设也可来自芯片外输入信号。
PWM 提供接收外部输入信号重置基准计数器的功能,当接收到外部信号,将基准计数器数值重置到预设的起始值。
/* 开启synci信号触发重载 */
pwm_enable_reload_at_synci(PWM);
外部的输入信号通过片内的triggermux
连接到 PWM 的synci
引脚,先楫电机系统为用户提供了标准的时间同步定时器synt
,可实现周期性同步。
使用
作为同步信号的输入源,进行不同 PWM 同步synt
trgm_output_t trgm0_io_config0 = {0};
trgm0_io_config0.invert = 0;
trgm0_io_config0.type = trgm_output_pulse_at_input_rising_edge;
trgm0_io_config0.input = HPM_TRGM0_INPUT_SRC_SYNT_CH0;
trgm_output_config(HPM_TRGM0, HPM_TRGM0_OUTPUT_SRC_PWM0_SYNCI, &trgm0_io_config0);
trgm_output_t trgm0_io_config1 = {0};
trgm0_io_config1.invert = 0;
trgm0_io_config1.type = trgm_output_pulse_at_input_rising_edge;
trgm0_io_config1.input = HPM_TRGM0_INPUT_SRC_SYNT_CH0;
trgm_output_config(HPM_TRGM0, HPM_TRGM0_OUTPUT_SRC_PWM1_SYNCI, &trgm0_io_config1);
同步效果
-
pwm0、pwm1开始输出
-
pwm0、pwm1同步