[PWM] 故障保护和强制输出功能
摘要
本文针对 PWM 的部分功能展开阐述,主要涵盖故障保护(fault)相关内容以及强制输出(force)相关内容。
强制输出
强制输出模块的作用是在对应的时间点,将初始波形强行置高或置低。这在斩波应用中具有重要作用,强制输出分为软件控制的强制输出和硬件控制的强制输出。
软件强制输出
软件控制的强制输出在使能软件控制后,根据预设的强制输出的时机完成置高置低动作,有以下几个时机可选:
- 即时生效:一旦设置,立即改变输出状态。
- 重载时生效:在计数器达到预设值并重新加载时改变输出状态。
- 同步输入触发:当检测到外部同步输入信号时改变输出状态。
- 不生效:不进行任何强制输出控制。
/* 使用软件强制输出 */
pwm_enable_pwm_sw_force_output(PWM, PWM_OUTPUT_PIN);
/* 使能软件强制输出 */
pwm_enable_sw_force(PWM);
硬件强制输出
硬件控制的强制输出由外部输入的FRCI信号控制,该信号通过triggermux
与外部模块连接,当设置好FRCI信号的生效极性后,pwm波将会按照输入信号的频率对当前生成的信号进行强行置高置低,达成斩波的效果。
/* 使用硬件强制输出 */
pwm_config_t config = {0};
pwm_get_default_pwm_config(TEST_PWM, &config);
config.force_source = pwm_force_source_force_input;
pwm_config_pwm(PWM, channel, &config, false);
/* 硬件强制输出,FRCI信号低电平有效 */
pwm_config_force_polarity(PWM, 0);
故障保护
在pwm中,故障保护为pwm波输出链的最后一个模块,用来在发生故障时阻止pwm波输出,将输出变为预设的电平,起到保护被控制设备的作用。
内部故障保护
内部故障保护是一种同步故障保护,在模块时钟驱动下对pwm输出进行故障应急动作。
外部故障保护
外部故障保护是一种异步故障保护,可以在pwm外设丢失时钟的情况下,对pwm输出进行故障应急动作,可以和内部故障保护同时设置。
debug模式
pwm模块支持在调试情况halt住内核的时候停止pwm输出,将输出电平置高或置低。可以同以上两种保护模式同时设置。
故障恢复时机
故障恢复有几下几个时机可选:
- 立即恢复:一旦故障条件解除,立刻恢复正常操作。
- 重载后恢复:在计数器重载之后恢复输出。
- 匹配后恢复:当特定的硬件事件发生时(例如比较器匹配事件)恢复输出。
- 手动恢复:通过手动操作来恢复PWM输出。
pwm_config_t pwm_config = {0};
pwm_fault_source_config_t fault_config = {0};
pwm_get_default_pwm_config(PWM, &pwm_config);
/* 故障发生输出电平0,故障恢复立即回复 */
pwm_config.fault_mode = pwm_fault_mode_force_output_0;
pwm_config.fault_recovery_trigger = pwm_fault_recovery_immediately;
/* 使能内部0,外部0,debug故障保护 */
fault_config.source_mask = pwm_fault_source_internal_0 | pwm_fault_source_external_0 | pwm_fault_source_debug;
/* 选中一个比较器作为故障恢复时刻,外部故障低电平有效 */
fault_config.fault_output_recovery_trigger = compare_index;
fault_config.fault_external_0_active_low = true;
pwm_config_fault_source(PWM, &fault_config);
pwm_config_pwm(PWM, channel, &pwm_config, false);