关于STM32F4停止PWM输出后对应IO电平不定的问题

关于STM32F4停止PWM输出后对应IO电平不定的问题

问题

最近在使用STM32F4作主控芯片控制焊接过程过程中发现,IGBT驱动电路本因在输出报警之后停止输出(比较值设定为零,定时器关闭),却偶尔出现报警之后持续输出的问题。后经检查发现,在报警之后定时器是可以关闭,但是复用的IO口电平却不可控,偶尔为无效电平(低电平),偶尔又持续输出有效电平(高电平)。
下图为通过示波器显示的报警之后IO电平状态。
此时输出为无效电平
定时关断后持续输出高电平(有效电平)

解决

通过查询F4的数据手册可知,在定时器TIM捕获/比较模式寄存器1(TIMx_CCMR1)的4:6位 OC1M中可用于选择PWM的输出极性,(我这里用的是PWM的输出通道)详情如下图在这里插入图片描述
在这里插入图片描述
为了解决PWM输出关断之后对应IO输出电平不定的问题,根据上面文档的说明,在PWM关断前将PWM强制设置为无效电平,再下次开启的时候,重新设置为PWM模式进行正常的驱动输出。
标准库中提供了函数TIM_ForcedOC1Config()用来控制输出的有效性,不过也仅限于设定为有效输出和无效输出两个模式。可通过直接调用这个函数设置PWM输出无效。
重设PWM模式则需要参考数据手册将(IMx_CCMR1)的4:6位 OC1M设置为110或者111,具体更加你你所配置的PWM模式设定。程序参考如下

				/*--------------------lan: 定时器恢复pwm1模式--------------------*/
				uint16_t tmpccmr1 = 0;
				tmpccmr1 = TIM1->CCMR1;
				/* Reset the OC1M Bits */
				tmpccmr1 &= (uint16_t)~TIM_CCMR1_OC1M;
				/* Configure The Forced output Mode */
				tmpccmr1 |= ((uint16_t)0x0060);
				/* Write to TIMx CCMR1 register */
				TIM1->CCMR1 = tmpccmr1;
				/*-----------------------------end---------------------------*/

通过关断PWM前设置为PWM输出无效,之后重新配置PWM输出模式,可有效解决笔者的问题。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值