NXP MCU 技术论坛
直播中

吴湛

9年用户 782经验值
擅长:417804
私信 关注
[问答]

如何为UPS应用实施具有死区时间的互补PWM?

我正在尝试为 UPS 应用实施具有死区时间的互补 PWM。
但是正如您在附加图像中发现的那样,死区时间是有效的,但没有得到与之互补的 PWM。
我附上源代码请检查并支持我解决这个问题。

回帖(1)

卢表镜

2023-11-1 10:14:08
看起来你的代码基本上是正确的,你需要做的就是调整两个方波的相位,使它们完全互补。我注意到你的代码中两个方波的相位都是90度,但事实上它们应该是180度。

例如,你可以使用如下代码来实现互补PWM,其中死区时间为100纳秒,而两个方波的相位差为180度:

```c
void SetupPWM() {
  TCCR1A = 0xA2; //模式15,互补PWM输出
  TCCR1B = 0x1A; //系统时钟除以8,输入捕获禁用,PWM启用
  ICR1 = 39999;  //设置计数器顶部为39999,适合40000赫兹
  OCR1A = 20000; //设置A通道的比较值为20000以产生50%的占空比
  OCR1B = 20000; //设置B通道的比较值为20000以产生50%的占空比
  OCR1C = 100;   //设置死区时间为100纳秒
  TCNT1 = 0;     //计数器清零
}

void Loop() {
  //设置A通道的相位为0度
  OCR1A = 20000;
  OCR1B = 20000 + 360; //设置B通道的相位为180度
  delay(10); //延迟10毫秒,然后切换相位
  //设置A通道的相位为180度
  OCR1A = 20000 + 360;
  OCR1B = 20000; //设置B通道的相位为0度
  delay(10); //延迟10毫秒,然后切换相位
}
```

希望这可以帮助你实现具有死区时间的互补PWM。如果你仍然遇到问题,请在评论中分享你的代码和电路图,以便我们更好地理解并为你提供帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分