随着新能源汽车市场发展的推动,不断涌现出各种数字电源的应用需求,汽车车载无线充电应用及车载充电器OBC是近来其中两个非常典型的应用,基于Microchip的dsPIC33C系列芯片的数字电源在这两个领域的使用越来越广泛。
如下是一个单核dsPIC33CK系列(双核为dsPIC33CH系列芯片)芯片的大致资源的说明,其中高速PWM模块是实现数字电源最为重要的模块之一。以已经量产的dsPIC33CK256MP50X或者dsPIC33CK256MP20X系列为例来说,最大可以提供多达8组,共16个独立的PWM输出通道,充分满足各种开关电源拓扑的PWM通道需求。
这个PWM模块内部具有实现高精度模式的设计,当使能高精度PWM模式时,就可以让PWM模块大大提高参数的调整步长,比如电源PWM占空比,周期,相位及死区的精度,依靠高精度时最高250pS的分辨率更好的体现数字电源的优势,比如精确的进行占空比的调整。用户在使用时,可以分别使能相关PWM输出子模块的PWM高精度模式,具体通过使能PGxCONL寄存器中的HREN位来实现(x代表1-8,对应于每一个PWM产生器)。
当读规格书时,细心的朋友会发现对于PWM高精度位使能,Microchip是规定了一些限制条件的。比如如下在寄存器说明时,通过小字体注释对HREN位的一个额外要求,即一定要在500M输入频率的条件下去使用PWM高精度模式。
在这篇文章中,我们也重点分析一下PWM高分辨率的使用及在电源设计中需要注意的地方。
第一,我们总结一下产品规格书及PWM模块referencemanual中dsPIC33CK系列PWM高精度模式的使用条件说明。
作为一个数字外设,其运行需要一定的时钟,所以我们理解高速PWM模块的运行及高精度模式运行之前,首先了解一下其时钟的分配方式。
上图是PWM模块的时钟产生框图,除了给PWM模块一个整体的master时钟选择(即上图中的MCLKSEL对应的选项)之外,用户可以对每一个PWM子模块设置不同的独立的时钟源(即PGx_clk),这个时钟源可以和总的PWM时钟源一致,也可以是进行分频之后的低频,或者通过频率调整电路之后再给到PWM子模块,这为设置不同范围的PWM频率提供了方便。
在referencemanual中也对PWM高精度模式做了一些说明,如下截图中的注释Note中,我们可以看到使用PWM高精度模式时,必须要将CLKSEL设置为0b01,也就是必须要直接选择我们给PWM模块选择的总的master时钟源,而不能采用频率分频电路或者频率调整电路之后的时钟源。这是文档中对高精度PWM模式时钟源的 “定性限制“。
其次,对于PWM模块,如同其它MCU的外设模块一样,在规格书电气特性中有一些定量参数描述,如下可以参考。
这里我们重点关注PMW模块的输入频率,Microchip建议必须要在500M下实现高精度模式PWM,那么潜在意思是如果采用低于500M的输入频率时,这个高精度PWM模式就不做保证了,最多就是在±10%范围内变化(即最小450MHz),产品出厂前所有相关的PWM高精度电路的验证测试都是基于这个条件去进行。这是关于PWM高精度模式运行频率的一个 “定量限制” 的信息。
严格按照这个限制,我们对PWM主时钟频率进行一定的简单分析,首先使能高精度模式,即HREN设置为1.
再通过MCLKSEL的设置选择11,即APLL辅助锁相环的后分频输出,而我们将APLL的后分频输出事先设置为500MHz的频率(关于dsPIC33CK芯片的时钟PLL及APLL的设置,由于篇幅关系我们不在本篇文章中做说明)。
对应PWM模块(如PG1)的时钟源选择寄存器CLKSEL设置为01,意味着PG1的时钟源直接选择PWM主时钟源。
这样设置后对应PG1的输入频率就是500MHz,结合PG1内部的高精度8倍频PLL电路的作用,我们就得到了4G的PWM时钟频率,对应时钟周期为1/4GHz=250pS,由于我们的PWM周期PG1PER或者占空比PG1DC为16bit寄存器,在这种条件下可以实现的PWM周期和占空比的最大数字就是65535,即对应的最大周期为65535*0.25nS=16.384uS.大约为61kHz左右,这也就是我们在按照严格限制的高精度模式下实现的最大周期(最小频率)。
第二,我们对规格书“定量限制”的之外的情况进行尝试,对PWM模块输入频率进行调整,观察测试的结果。此时我们对PWM输入频率做一个极限的变化,将之设为8MHz,也就是说选择系统时钟FOSC作为PWM模块的输入频率,即如下MCLKSEL选择为00, 同时在时钟链路上直接将内部FRC振荡器8M时钟设置为FOSC.
对系统主时钟进行如下简单设置即可。
按照如下周期和占空比的设置,
我们就得到了如下PWM输出波形,PG1H的实测频率为306k,由于此时PWM输入频率为8MHz,因此叠加PWM内部的PLL的8倍频关系,得知PWM的内部时钟频率为64MHz,即分辨率约为15.6nS,计算出来的PWM频率对应这个PWM的实测频率,由此得知在常温demo测试下,PWM内部高精度电路运行还是正常的。
第三.我们对规格书“定性限制”的之外的情况进行尝试,启用PWM主时钟的分频电路,如下的寄存器位,DIVSEL,此处设置为2分频,选择00,同时如第一步骤中一样,将PWM模块master时钟设置为500MHz(这里采用MCLKSEL=0b11,且将APLL的后分频输出设置为500MHz).
实测结果我们得到了如下波形,通道1为PG1H,通道2为PG1L,代码中我们设置二者为互补输出模式。
此时PWM开关频率为250kHz。对此频率进行分析,输入时钟频率500MHz,进行分频后输入给PWM模块PG1的输入频率为250MHz,假定PWM内部的PLL在工作的话,实际PWM的时钟频率为2GHz,则对应分辨率为500pS,根据周期PG1PER和占空比PG1DC的设置,其计算周期为4uS,对应实测的250kHz,以上说明PWM模块内部的8倍频PLL在启用PWM主时钟分频时在常温demo下还是正常工作。
以上第二和第三部分内容分析了在PWM模块主时钟输入频率大幅降低时,及不降低PWM主时钟输入频率而启用PWM模块输入频率分频器后的PWM模块内部8倍频PLL的实际表现。可以看出来microchip在设计这个高精度电路时的设计裕量还是比较大的,其对应的规格书和外设参考手册说明也非常的严谨和保守。
由于dsPIC33C芯片在测试及验证高精度模式时仅仅只对PWM在500MHz下的性能进行了保证,所以真正在应用产品设计电源时并不推荐PWM模块输入频率低于500MHz这个频率,否则在各种复杂的工况下,比如高低温等条件时会有一定的风险。当然如果采用的是非HREN=1的模式,那么将另当别论。
第四,对于PWM高精度模式电路在电源产品闭环设计中的考虑。
首先介绍一下我们所常用的Q15格式,因为我们的dsPIC33C系列芯片是基于定点运算的处理器,所以要处理电源环路涉及到的线性差分方程系数等小数时要将小数转化为与之对应的定点整数。
我们简要说明一下Q15格式(或者Q1.15)的数据,因为有一个最高位符号位,所以它可以表示正数(符号位为0),也可以表示负数(符号位为1),其余位数按照如下图所示含义表示,那么就可以知道它表示的最大整数数字范围就是0x7FFF,即0.999969482422,对应的最大负数为,0x8000,即-1,计算时按照二进制补码去计算相应表示的小数值,一定要注意小数点在对应bit14和bit15之间。
在我们的dsPIC33系列产品的编译器中包含了非常丰富的定点数学函数库,只要去调用libq-omf.a中,或者libq-dsp-omf.a,同时在程序中包含相应的头文件libq.h即可使用。
通过如下一个示例,可以很方便的理解小数和Q15整数之间的相互转换关系,如下表格中 24576转对应的小数就是0.75,实际上二者之间是32768这个系数。
在数字电源设计中,为了尽可能的利用处理器的最大字长,即16位的Q15整数对应 32767为最大字长,除了采用Q15格式表示线性差分方程系数之外,还需对它进行一系列的缩放操作(这一部分内容我们放在后面的话题中进行讨论)。如果采用Q15进行线性差分方程系数的定义,那么通过调用环路计算函数2P2Z或者3P3Z产生的结果(周期或者占空比)也将以Q15的范围进行限制,即最大限制为0x7FFF,即32767,如果考虑到电源设计中对最大占空比的限制,这个值将被设置的更小。所以在500M频率下使能PWM的高精度HREN=1的模式时,最大分辨率为250pS时,对应最大周期为8.191uS,即122kHz,如果最大周期高于8.191uS,或者开关频率低于122k,在闭环设计中就不能采用Q15格式进行计算,用户需要对环路补偿器的运算及线性差分方程系数定义做适当变化。
当然,如果环路设计不采用Q15的格式计算,那么在HREN=1的高精度PWM模式下可以获得61kHz的最低频率。如果需要采用更低的开关频率,建议将PWM设置为非高精度PWM模式,即HREN=0.
以上是dsPIC33CK系列高速PWM模块的一些基础分析,对dsPIC33C系列芯片有兴趣的朋友可以作为简单了解。