atz2000 发表于 2017-5-3 09:58:08

STM32全桥PWM问题

STM32单片机会产生6路PWM信号,全桥电路一般采用上半桥PWM调制,下半桥ON/OFF的半调制方式;

问题:6路PWM信号是如何实现半调制方式的?

atz2000 发表于 2017-5-3 10:49:00

没有人知道吗?高级定时器的6路输出都是互补输出的,如何变成一个PWM输出,一个off或者一个off,一个ON?

无薪税绵 发表于 2017-5-15 08:14:43

这个真不懂,等待大神解答。

dzzwoaizi 发表于 2017-5-15 09:01:00

略知一二,先给你说说原理吧,你在PWM模式下端口处于复用模式,也就是GPIO_Mode_AF,你要是下桥为P普通的IO模式呢,那就要改成GPIO模式,也就是GPIO_Mode_OUT模式。明白了吧!再看code!
//打开下桥,An_Port,An_Pin这是宏定义的,对应你自己的IO就行了
//其实就是将此端口改为GPIO_Mode_OUT模式
void open_An(void)
{
      set_pin(An_Port, An_Pin);
      temp = (An_Port->MODER & (~(GPIO_MODER_MODER0 << (An_Pin_Source * 2))));
      An_Port->MODER= ( temp | (GPIO_Mode_OUT << (An_Pin_Source * 2)));

}


//关闭下桥
voidclose_An(void)
{
      clr_pin(An_Port, An_Pin);
      temp = (An_Port->MODER & (~(GPIO_MODER_MODER0 << (An_Pin_Source * 2))));
      An_Port->MODER= ( temp | (GPIO_Mode_OUT << (An_Pin_Source * 2)));

}
//打开下桥PWM这里将IO设置为GPIO_Mode_AF模式
void pwm_An(void)
{
      temp = (An_Port->MODER & (~(GPIO_MODER_MODER0 << (An_Pin_Source * 2))));
      An_Port->MODER= ( temp | (GPIO_Mode_AF << (An_Pin_Source * 2)));

}


仔细一看,很简单吧!不值是不是你要的答案

加上我的宏定义吧,
#define An_Port GPIO_Port(B)
#define An_PinGPIO_Pin(13)
#define An_Pin_Source 13

dapan100 发表于 2017-5-15 10:02:32

大概可是这种功能

chen00000009 发表于 2017-5-15 12:30:23

不懂,看看

cldym 发表于 2017-5-15 15:16:42

这个真不懂,等待大神解答

dzzwoaizi 发表于 2017-5-15 16:06:57

dapan100 发表于 2017-5-15 10:02
大概可是这种功能

正解。

zhjb1 发表于 2017-5-16 06:26:34

现在STM系列的都是采用官方已给的宏来编程,是不好懂。但可以对应着宏的运行实测接过来慢慢理解。最好有示波器对应着来看。就像 底板 和 5楼 的几乎是详解了。改变里面的代码,测试输出信号看看有什么不同,慢慢就明白了。OK
页: [1]
查看完整版本: STM32全桥PWM问题