STM32F051 - 不同的空闲状态取决于过流输入
STM32F051 - Different idle state depending on overcurrent input
我有一个 STM32F051 驱动一个 H 桥(具有适当的栅极驱动器和发送回 MCU 的过流脉冲),它使用 TIM1 和互补信号(以及死区时间生成)为变压器供电。
我正在尝试根据收到的过流脉冲配置不同的“安全”状态:
- 在高侧过流时,关闭低侧 FET,打开高侧 FET。
- 在低侧过流时,关闭高侧 FET,打开低侧 FET。
想法是提高逆变器的过流性能。
是否可以在 GPIO 上接收到脉冲时立即将定时器的输出手动设置为定义的状态?我尝试使用中断功能,但您只能设置一个预定义的“安全”状态。对于我的应用程序,我需要两个(现在,还会有更多)。
最后我找到了结果,分享给大家
libopencm3的source code and examples帮我找到了答案
#define TIM_CCMR1_OC1M_INACTIVE (0x2 << 4)
#define TIM_CCMR1_OC1M_FORCE_LOW (0x4 << 4)
#define TIM_CCMR1_OC1M_FORCE_HIGH (0x5 << 4)
#define TIM_CCMR1_OC1M_PWM2 (0x7 << 4)
#define TIM_CCMR1_OC2M_INACTIVE (0x2 << 12)
#define TIM_CCMR1_OC2M_FORCE_LOW (0x4 << 12)
#define TIM_CCMR1_OC2M_FORCE_HIGH (0x5 << 12)
#define TIM_CCMR1_OC2M_PWM2 (0x7 << 12)
用于禁用和启用输出的实用函数。
void disable_pwm(){
TIM1->CCER &= ~(TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC2E | TIM_CCER_CC2NE);
}
void enable_pwm(){
TIM1->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC2E | TIM_CCER_CC2NE);
}
这里以强制H桥将负载短路到地为例
TIM1->CCMR1 &= ~TIM_CCMR1_OC1M_Msk;
TIM1->CCMR1 |= TIM_CCMR1_OC1M_FORCE_LOW;
TIM1->CCMR1 &= ~TIM_CCMR1_OC2M_Msk;
TIM1->CCMR1 |= TIM_CCMR1_OC2M_FORCE_LOW;
希望这对其他人有用!
我有一个 STM32F051 驱动一个 H 桥(具有适当的栅极驱动器和发送回 MCU 的过流脉冲),它使用 TIM1 和互补信号(以及死区时间生成)为变压器供电。
我正在尝试根据收到的过流脉冲配置不同的“安全”状态:
- 在高侧过流时,关闭低侧 FET,打开高侧 FET。
- 在低侧过流时,关闭高侧 FET,打开低侧 FET。
想法是提高逆变器的过流性能。
是否可以在 GPIO 上接收到脉冲时立即将定时器的输出手动设置为定义的状态?我尝试使用中断功能,但您只能设置一个预定义的“安全”状态。对于我的应用程序,我需要两个(现在,还会有更多)。
最后我找到了结果,分享给大家
libopencm3的source code and examples帮我找到了答案
#define TIM_CCMR1_OC1M_INACTIVE (0x2 << 4)
#define TIM_CCMR1_OC1M_FORCE_LOW (0x4 << 4)
#define TIM_CCMR1_OC1M_FORCE_HIGH (0x5 << 4)
#define TIM_CCMR1_OC1M_PWM2 (0x7 << 4)
#define TIM_CCMR1_OC2M_INACTIVE (0x2 << 12)
#define TIM_CCMR1_OC2M_FORCE_LOW (0x4 << 12)
#define TIM_CCMR1_OC2M_FORCE_HIGH (0x5 << 12)
#define TIM_CCMR1_OC2M_PWM2 (0x7 << 12)
用于禁用和启用输出的实用函数。
void disable_pwm(){
TIM1->CCER &= ~(TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC2E | TIM_CCER_CC2NE);
}
void enable_pwm(){
TIM1->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC2E | TIM_CCER_CC2NE);
}
这里以强制H桥将负载短路到地为例
TIM1->CCMR1 &= ~TIM_CCMR1_OC1M_Msk;
TIM1->CCMR1 |= TIM_CCMR1_OC1M_FORCE_LOW;
TIM1->CCMR1 &= ~TIM_CCMR1_OC2M_Msk;
TIM1->CCMR1 |= TIM_CCMR1_OC2M_FORCE_LOW;
希望这对其他人有用!