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

[复制链接]
6041|9
 楼主| coderdd 发表于 2021-7-9 13:05 | 显示全部楼层 |阅读模式
F1系列,高级定时器1,无论如何设置,都无法改变空闲状态的电平,输出一直都是低。就是以下两句。测试过很多可能,都是无效的!
  1. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  2.   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时,两个通道是一个高一个低电平。但是无论怎么配置,输出都是低电平
  1.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
  3.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  4.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  5.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;




 楼主| coderdd 发表于 2021-7-9 20:27 | 显示全部楼层
在此记录下解决方案,这两天搞的毫无头绪,因为看到很多这个问题,都是没有最终解决方法,有的帖子的解决方法居然是最终改电路板加反相器。

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

7954360e840aa414bf.png
触觉的爱 发表于 2021-7-26 18:56 | 显示全部楼层
PWM输出时,端口应该是设置为推挽吧,输出只有高电平和低电平。这种模式,内部的上下拉应该拉不动才对
renzheshengui 发表于 2021-8-6 15:33 | 显示全部楼层
跟外部的硬件连接有关系吗
paotangsan 发表于 2021-8-6 15:39 | 显示全部楼层
也就是极性选择有问题了是吗
木木guainv 发表于 2021-8-6 16:06 | 显示全部楼层
互补输出的同步性好不好呀
xiaoqizi 发表于 2021-8-6 16:08 | 显示全部楼层
也就是说不需要上拉下拉的电阻啦
wowu 发表于 2021-8-6 16:15 | 显示全部楼层
这个管脚是什么输出的呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

385

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部