用dsPIC33E系列dsp做的一个半无桥PFC电路,将会涉及到以下几个问题:
1)半无桥电路的基本原理
2)Microchip官方提供的smps_control_library算法函数的使用
3)dsp内部40位累加器的小数表示方法
4)dsp中断时,context寄存器切换
5)C代码中,一些重要函数的分析
最近,在Microchip官网上找到了一个AC-DC电源资料,输入90Vac--264Vac,输出12V62.5A(750W)。电源前端PFC用了一个半无桥的PFC电路,DC部分用了一个全桥软开关电路。
Microchip官网上提供了该电源完整的电路原理图和PCB板图,并且附有原代码,供对数字电源感兴趣的工程师研究学习。下图就是该电源的实机图。
虽然,这样一台样机从硬件到软件的设计都能代表官方的最高水准,但对想进一步学习数字电源的工程师来说却有一些问题:
1)做数字电源要动手实践,要弄一台样机,没有渠道,成本也高。
2)原代码中有一些目前还用不到的功能,如:在线刷新DSP等。这些功能多少会分散对数字电源主要功能的关注。
3)虽然提供原代码,但并没有详细的讲解,读起来非常吃力。
4)代码不是用MCC生成的,代码编写的工作量较大。
因此,笔者在学习该代码的过程中,以半无桥PFC为模板,自己重新绘制了PCB板图,以MCC为基础,重新编写了代码,dsp用的是dsp33ep128gs806。下面把笔者在此过程中的一些经验与大家分享,如有不对之处,还望指正。
上面两图就是笔者根据官方的版本重新设计的原理图和PCB板图。
首先来讲讲半无桥PFC的工作原理:
图1
当交流电源Vac处于正半周,Q1导通时,电流按照蓝线所示流动,Q1关断后,电流如红线所示流动。
图2
当交流电源处于负半周时,电流的方向如图所示。
通过上面的工作原理,可以知道,半无桥PFC比传统的带整流桥的PFC少了一个整流二极管压降,因此能提高效率。当交流电源处于正半周时,如果让Q2始终处于导通状态时,电流会经过Q2和L2返回到交流电源。当交流电源处于负半周时,Q1始终导通,与正半周时同理。由于Q2(Q1)导通时的压降小于D4(D3)导通时的压降,因此还能进一步提升PFC的工作效率。
dsp的资源分配:
AN0(Pin13):与CMP1A共用。mosfet电流采样(即电感电流),电感电流过流保护。
AN1(Pin14):PFC输出电压采样。
AN2(Pin15):交流相电压(火线)对地电压采样。
AN3(Pin16):交流相电压(零线)对地电压采样。
CMP2C(Pin17):PFC输出电压,过压保护比较器。
AN8(Pin27):辅助电源电压监控。
DACOUT1(Pin32):dsp内部变量监控引脚。
RD0,RB5(Pin46、47):Led灯。
PWM2H、PWM2L(Pin62、63):mos管栅极PWM控制。
官方的原代码并不是用MCC生成的。笔者比较喜欢用MCC,因为用MCC生成的代码错误少,编写工作量小,修改容易。下面开始MCC配置。
ADC1、CMP1、CMP2和PWM,还有TMR2加入。其它外设都是非必要的,可以先不加,用的时候再添加。
在“Pin Module”中,可以自己命名引脚的名称,一般笔者都会根据引脚的功能重新命名,这样编写代码时,能“一目了然”的明白引脚的用途。
用一个定时器定时点亮LED灯,标示程序是否在正常运行。
注意要用PWM2,选“独立时基,主控占空比”。并分别设置PWM工作周期:10us,占空比:50%(设50%用于调试,环路闭环后可修改)。“Special Event Trigger Control”用于控制电压环路的采样频率,电压环路的采样频率设为50KHz,所以“Output Postscalar”设为2。
PWM I/O设为冗余输出,Fault Control的信号源设为CMP2,用于输出电压过压后的快速保护。
“Trigger Control”用于控制电流环路的采样频率,电流环路的采样频率设为100KHz,所以“Output Divider”设为1。
PFC的控制模式是平均电流型控制。
ADC的设置:mos管的电流采样用PWM2的主触发。交流输入电压和PFC直流输出电压采样要用PWM模块的特殊事件触发。
CMP1用于电感电流的过流保护。但要注意,要把DAC Output打开。因为在调试过程中,我们无法像模拟电源中那样测试电路中每一个点的波形,有些点的波形根本就是在dsp内部的,因此,可以通过将dsp内部的数据通过DAC输出,让调试者观察dsp内部的工作状态。
CMP2用于输出过压保护。
MCC配置完成。生成代码。
在生成的代码“tmr2.c”中添加:
让LED灯闪亮。将该程序编译后,烧录进DSP中,电路板上的LED就应该闪,表明程序已经正常工作了。
在下一节,笔者试着分析一下dsp内部40位累加器的小数表示方式和小数的乘法运算。