基于eFlexPWM的多级串联载波移相脉宽调制技术实现
来源:恩智浦MCU加油站 发布时间:2023-01-19 分享至微信

参考方案简介

随着电力电子技术的发展,电力电子交直流变换装置应用日益广泛,移相载波技术可以有效的减小PWM调制过程中产生的谐波,被广泛应用到多相多电平等场合。
本文描述了使用eFlexPWM实现多级串联载波移相PWM输出的逻辑、外设配置及实现方法。
本参考设计主要向读者介绍了eFlexPWM强大功能,并给出了六路互补移相60°的PWM实例作为参考,可以指导客户快速实现想要的PWM输出模式。

eFlexPWM简介

eFlexPWM全称是:Enhanced Flex Pulse Width Modulator的缩写,直译为增强型灵活脉冲脉宽调制器。
i.MX RTxxxx系列一般具有1-4个强大的eFlexPWM(eFlexPWM1~eFlexPWM4)模块。每个eFlexPWM有4个子模块,可以产生四路互补PWM即产生8路PWM,也可以产生8路相互独立的PWM波。

每个eFlexPWM模块拥有一个向上计数的16位计数器,它仅在向上方向计数至VAL1值,然后重置为初始(INIT)值。在计数过程中,计数值与VAL2/VAL3/VAL4/VAL5寄存器中的值作比较,控制输出电平高低翻转。

PWM又有中心对齐、边沿对齐、移相和双开关模式。

每个eFlexPWM具有各自的故障检测电路,当故障发生时根据程序锁定PWM输出引脚的电平状态,这在逆变、整流及电机控制应用中能够有效的提高设备的安全性。eFlexPWM可以产生多种多样的开关模式,包括非常复杂的波形。它可以用来控制大部分已知的电机类型,用于控制开关电源也非常具有优势。

eFlexPWM主要特点

eFlexPWM脉宽调制器的主要特点如下:

  1. 16位精度,支持中央对齐、边沿对齐和非对称PWM输出;
  2. 分数PWM时钟生成器可生成高精度PWM周期和占空比;
  3. 可工作在互补输出模式或独立工作模式;
  4. 每个PWM输出双沿(上升沿/下降沿)可独立控制;
  5. 可与外部硬件或其他PWM子模块同步;
  6. 双缓冲PWM寄存器,可设置1~16的整数周期重载或半周期重载;
  7. 支持PWM输出的双切换(周期和占空比);
  8. 一个PWM周期可以产生多个输出触发事件;
  9. 故障输入可以指定连接控制多个PWM输出;
  10. 独立的可编程PWM输出极性设置;
  11. 独立的死区时间设置;
  12. 增强型双沿(上升沿/下降沿)捕获功能。

PWM子模块功能图

图1 PWM子模块功能框图

图中各个部分说明如下:

1是时钟源模块,可以选择不同的时钟源;

2是16位计数器;

3是同步寄存器,有四个同步信号供选择,可以初始化计数器,可以方便的和外部同步;

4是比较器,用于产生PWM波,每个子模块有6个比较寄存器,可以产生三路的PWM。

57是重装载选择器,可以用来选择重装载寄存器和N个PWM周期或者半周期重装载。

6是输出控制模块,比较器产生的PWM23与PWM45经过这些控制模块转变成PWM_A和PWM_B。主要包含互补控制,死区补偿,故障保护等功能。

多级串联PWM的实现

每个eFlexPWM子模块有一个外部同步信号输入,和两个触发信号输出。外部同步输入信号允许外部的信号源来初始化PWM计数器。通过这种方式,eFlexPWM子模块的行为可以与外部电路同步。

两个触发信号输出可以去控制其他模块的行为,例如在特定的时刻触发ADC采样。

本文将使用输出触发信号去触发其他eFlexPWM子模块。

两个输出触发信号分别由不同的寄存器值比较产生。当PWM计数器匹配val0、val2或val4时,TRIG0被置位。当PWM计数器匹配val1、val3或val5时,TRIG1被置位。计数器发生匹配事件后延迟两个clock的后输出触发信号。

图2 PWM子模块外部同步输入和Trig输出

在一些电源应用中,需要多路PWM输出,并且需要彼此之间有固定相移,此时就能充分凸显i.MX RT系列eFlexPWM强大的性能。

下面我们通过输出六路互补且彼此之间相差60°相移的PWM为实例,详述eFlexPWM使用方法和配置。

实例要求

下面以一个具体实例来介绍,方便读者理解和运用eFlexPWM模块。

具体的实例要求如下:

  1. PWM频率为10KHz

  2. 六路互补PWM输出

  3. 两路之间移相60°

6路PWM输出的逻辑如下图所示:

图3 6路PWM相移图

eFlexPWM子模块组合

用6个eFlexPWM子模块级联,每个子模块输出一路互补的PWM,因为每个eFlexPWM子模块都有一个独立的计数器,因此实现起来比较方便。

图4 eFlexPWM子模块串联

通过每个前级子模块的TRIG0去触发后级子模块,我们通过设置前级子模块Val4的值来灵活的设定触发后级子模块的时刻。

经过这样的组合,可以进行0-360°任意相位的相移,读者可以很方便的调节成自己想要的相移。不需要复杂的软件操作,通过寄存器可以方便实现,减小了CPU的开销。

时序逻辑

图5给出了载波移相的逻辑,从图中我们可以看到六路PWM载波信号依次移相60°,后级子模块由前级子模块在特定时刻触发。通过载波的移动,载波和比较器比较后产生的PWM也就产生了相应的相移。
图5 时序逻辑

从图5中可以看出每个后级子模块都由前级的TRIG0触发产生的,只要设定好触发时刻,就可以得到所预想的相移。

后级子模块检测到前级子模块的TRIG0触发信号后,会用两个clock时钟去同步。再加上TRIG0输出前有两个clock的延迟,所以总共会有4个clock的延迟,后面实验结果可以验证。

测试结果

考虑到前级触发后级的延迟,本文进行了实际测量和分析,如图6所示测量两相之间的时间间隔。

图6 PWM 相移间隔图

测量三次P1-P6的相位偏移时间,结果如下:

表1 P1-P6的相位偏移时间

因为本实例中PWM频率是10Hz,所以P1-P6的理论间隔时间是16.667us(60°)。下表给出了实测和理论值的误差。

表2 P1-P6的相位误差

从测试结果我们可以看出,实测结果后级子模块比理论有了30ns的延迟。这样从初级子模块,到最后级子模块,误差不断积累,最后会导致最后级子模块有150ns的延迟。如果级数更多,则误差会更大。

因此我们需要一些方法进行补偿。

延迟补偿方案

因为每个后级子模块的延迟都是固定的,所以我们可以通过把触发时刻前移固定时长的方法补偿此延迟。

根据PWM clock频率和延迟时间我们可以计算出需要补偿的计数值。

counter=delay_Time*PWM_Clock

本实例中PWM clock的频率是132M,延迟是30ns,从而计算出需要补偿的数值约等于4。

在程序中补偿后,测量两相波形相移如下图所示:

图6 补偿后的PWM移相图

从图中可以看出两相移相时间是16.664和理论值非常接近,考虑到测量误差,已经基本达到设置的目标。这样就完美的解决了延迟的问题。从而就实现了多级串联载波移相的PWM输出。


恩智浦MCU加油站


这是由恩智浦官方运营的公众号,着重为您推荐恩智浦MCU的产品信息、开发技巧、教程文档、培训课程等内容。


长按二维码,关注我们



END



更多恩智浦AI-IoT市场和产品信息,邀您同时关注“NXP客栈”微信公众号




NXP客栈


恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。





长按二维码,关注我们


[ 新闻来源:恩智浦MCU加油站,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!