打印
[STM32F1]

STM32互补PWM无法固定空闲时的电平

[复制链接]
4865|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
F1系列,高级定时器1,无论如何设置,都无法改变空闲状态的电平,输出一直都是低。就是以下两句。测试过很多可能,都是无效的!
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCIDLESTATE_SET;


使用特权

评论回复
沙发
香水城| | 2021-7-9 15:19 | 只看该作者
所谓空闲状态就是指 MOE =0 的情形,具体输出 除了跟你上面两行代码有关外,还跟你的极性选择位、OISx位有关。

使用特权

评论回复
板凳
coderdd|  楼主 | 2021-7-9 15:47 | 只看该作者
本帖最后由 coderdd 于 2021-7-9 15:52 编辑
香水城 发表于 2021-7-9 15:19
所谓空闲状态就是指 MOE =0 的情形,具体输出 除了跟你上面两行代码有关外,还跟你的极性选择位、OISx位有 ...

测试的情景是关闭PWM输出测试的,这个时候应该是MOE=0了。
                        HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);//E9
                        HAL_TIMEx_PWMN_Stop(&htim1,TIM_CHANNEL_1);//E8
也尝试过直接HAL_GPIO_WritePin拉高,不过无效。可能是因为已经配置为PWM模式了。
极性选择位的话,目前为看到的下面四个选项都调换过,还是无法固定输出空闲电平,配置的是同向互补输出,想让关闭pwm时,两个通道是一个高一个低电平。但是无论怎么配置,输出都是低电平
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;




使用特权

评论回复
地板
coderdd|  楼主 | 2021-7-9 20:27 | 只看该作者
在此记录下解决方案,这两天搞的毫无头绪,因为看到很多这个问题,都是没有最终解决方法,有的帖子的解决方法居然是最终改电路板加反相器。

目前测试OCNIdleState还是无效,无论怎么设置。反而可以设置上下拉倒是直接解决了,如图所示。因为用了SLM2003S驱动无刷电机,这个芯片的输出必须是输入高低才能让上下桥臂都不导通,开启的时候是同向互补PWM。总之,目前解决了。不太清楚OCNIdleState是不是有其它设置没深入到。


使用特权

评论回复
5
触觉的爱| | 2021-7-26 18:56 | 只看该作者
PWM输出时,端口应该是设置为推挽吧,输出只有高电平和低电平。这种模式,内部的上下拉应该拉不动才对

使用特权

评论回复
6
renzheshengui| | 2021-8-6 15:33 | 只看该作者
跟外部的硬件连接有关系吗

使用特权

评论回复
7
paotangsan| | 2021-8-6 15:39 | 只看该作者
也就是极性选择有问题了是吗

使用特权

评论回复
8
木木guainv| | 2021-8-6 16:06 | 只看该作者
互补输出的同步性好不好呀

使用特权

评论回复
9
xiaoqizi| | 2021-8-6 16:08 | 只看该作者
也就是说不需要上拉下拉的电阻啦

使用特权

评论回复
10
wowu| | 2021-8-6 16:15 | 只看该作者
这个管脚是什么输出的呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

384

帖子

11

粉丝