UCD3138闭环控制输出也就3~4V就会保护,而程序上屏蔽了protection.c文件后可以进一步提高输出电压
(1)如题,应用的是之前 Neil Li 给的闭环PSFB程序,外围采样电路参考EVM-027,芯片的输出电压电流采样引脚也就0.5V之内,只是开关噪声比较大(2V左右),然后在输出3~4V时就会保护,无DPWM波输出,查了voltage_loop.c和current_loop.c两个文件后,发现里面部分语句被屏蔽了,还有程序显示参考的是flash data中的CPU SAMPLE,和这些有原因吗?
(2)我需要的是移相全桥,而输出默认是普通全桥,怎么改比较规范(我现在是在Dpwm3Regs.DPWMEV1.all一类中加一恒值比如4000移相,总觉得无法实时修改移相角会有问题)
(3)还有是不是应该更改采样周期或增加采样数来提高采样精度,这个也会导致保护失误的对吗?在哪里更改
(1)如题,应用的是之前 Neil Li 给的闭环PSFB程序,外围采样电路参考EVM-027,芯片的输出电压电流采样引脚也就0.5V之内,只是开关噪声比较大(2V左右),然后在输出3~4V时就会保护,无DPWM波输出,查了voltage_loop.c和current_loop.c两个文件后,发现里面部分语句被屏蔽了,还有程序显示参考的是flash data中的CPU SAMPLE,和这些有原因吗?
===========
如果是CPU SAMPLE肯定是不能正常输出的。
请通过FAE找BU要一下最新的PSFB代码。
E2E上面的程序和Neil Li的差不多,都是2013年初版本。
目前是基本参考EVM027外围电路,输出也改为12V、30A做实验,输入是60V,我把uvp函数屏蔽并对UVIN FAULT等变量进行修改是可以在低压工作的。
可是在输入10V,输出2V,电流基本为0时,芯片会突然保护,没有DPWM波输出。
现在硬件电路只加了输出电压和电流采样,CBC输入电流未采样,而且将protection.c中的 FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 1;改为 FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 0;即是关模拟比较器后,输入电压可以进一步提高,而不会保护掉(我目前没有输入加压到额定60V左右,毕竟没有保护怕有问题)
还有输出采用的是二极管而非mos管整流,尝试改过闭环采样点和外围硬件电路还有屏蔽FaultMUX中的一些函数都不起作用。
用memory debuger监测FAULTMUXINTSTAT和FAULTMUXRAWSTAT,没有异常和报错。
问那是因为什么保护的呢,FAULTMUX没有检测出错误的情况下,还有之前有TI工程师认为可能因为PWM波占空比受到限制,这个在哪里看得到并可以进行修改的?
可是在输入10V,输出2V,电流基本为0时,芯片会突然保护,没有DPWM波输出。
》》》》》》》》》》》需要保证UCD3138芯片供电是正常的哦。请测试下。
输入是10V时,需要看下功率器件,如驱动器等是否可以正常工作。
这个是必须的,因为是单独用可调开关电源对芯片供电的,前级输入10V是另一个开关电源或是老是可调交流电源经PFC转换进行供电,两者不会有很大影响,而且输出毕竟可以上到2V了,如果供电不稳应该一上来芯片就无DPWM波输出
驱动器也是OK的,因为开环和不加保护用示波器监测mos管和驱动器输出波形是正常的,还是说有什么我忽略的地方?对了,输出二极管波形我没有检测
你用memory debug 看下状态机是停在哪个状态了?
然后再查故障
关键是用memory debuger监测不到异常, 可禁止ACOMP_EN模拟比较器的使能芯片就能正常输出DPWM,说明还是有错误就是检测不到
还有我没用的AD口都经10K电阻接地了,EAP0接输出电压,EAP1输出电流,EAP2原边电流检测暂时没焊器件,用到的AD口参考EVM027并对程序中的adc12.c中的AD口寄存器分配进行了对照,没问题
用memory debuger看下supply_state对应的是哪个值,就知道是停在哪个状态机了。
还有Fault会触发保护
那是不是这个原因啊?我的UCD3138芯片的4个Fault pin都是空置的,会有误触发对吗?
应该都进行接地处理的吧。
Fault不使能就可以的。
看下状态机停在什么位置了,可以帮助问题定位
supply_state在memory debuger中的哪里?
下载程序后,打开memory debuger,用里面的搜索没找到,而且菜单栏就一个file菜单,倒是程序中可以搜到supply_state
之前的问题已经解决了,是interrupts.c中的 if(FaultMuxRegs.FAULTMUXRAWSTAT.bit.ACOMP_C==1) //under voltage 这个问题
现在有个新问题:在输入初始加电压比较小时,全桥没有移相角,如何定义一个初始的移相角?
在deadtime_adjust.c中的 Dpwm2Regs.DPWMEV1.all = pwm2_ev1; 类似的改为 Dpwm2Regs.DPWMEV1.all = pwm2_ev1+4500; 这样做好吗?会有什么不良影响吗?
因为以前做实验时输出10V左右,PWM波形会变化,应该是程序判断加入了一个移相角,两个移相角叠加导致波形畸变。
还有这句程序 Dpwm2Regs.DPWMPHASETRIG.all = pwm_slavesync; 如何理解,因为它没有产生初始移相角
SLoan Kong
supply_state在memory debuger中的哪里?
下载程序后,打开memory debuger,用里面的搜索没找到,而且菜单栏就一个file菜单,倒是程序中可以搜到supply_state
可以参考附件文档。
想请教下UCD3138的移相全桥程序,微信:657529626
PSFB程序采用的原边互感器电流采样的PCM模式,原边电流采样不能忽略!请着重理解以下语句的含义,利用原边电流和电压环Filter的输出来砍占空比。
// Setup currlimit input to DPWM on Fault-AB
FaultMuxRegs.DPWM0CLIM.bit.ANALOG_PCM_EN = 1;
FaultMuxRegs.DPWM1CLIM.bit.ANALOG_PCM_EN = 1;
FaultMuxRegs.DPWM2CLIM.bit.ANALOG_PCM_EN = 1;
FaultMuxRegs.DPWM3CLIM.bit.ANALOG_PCM_EN = 1;
//**********************
//with ramp enabled
FeCtrl2Regs.RAMPCYCLE.bit.SWITCH_CYC_PER_STEP = 0; //32ns/cycle
FeCtrl2Regs.DACSTEP.bit.DAC_STEP = 52100; //58000; // 500mV/half switching period //39321; //120000; //0x8000; //0x10000; //maximum step - should go all the way to zero in a half period.
FeCtrl2Regs.RAMPCTRL.bit.PCM_START_SEL = 1; // 1 - Use DAC value from filter
FeCtrl2Regs.RAMPDACEND.bit.RAMP_DAC_VALUE = 500; //may not be perfect, keep above 0 to avoid potential problems
LoopMuxRegs.PCMCTRL.bit.PCM_FILTER_SEL =0; //select filter0
// Set AFE Gain
FeCtrl2Regs.EADCDAC.bit.DAC_VALUE = 11000; //0x1fff; //max DAC value
FeCtrl2Regs.EADCCTRL.bit.AFE_GAIN = 3;
FeCtrl2Regs.EADCCTRL.bit.EADC_MODE = 5; // Peak current mode
FeCtrl2Regs.RAMPCTRL.bit.RAMP_EN = 1; //use internal slope--1182012
FeCtrl2Regs.EADCCTRL.bit.D2S_COMP_EN = 1; //vital to enable comparator - this enables APCM comparator.
// Configure Loop Mux Module for Analog PCM
LoopMuxRegs.FECTRL2MUX.bit.DPWM2_A_TRIG_EN = 1; // Set the trigger for the Analog PCM
LoopMuxRegs.FECTRL2MUX.bit.DPWM3_A_TRIG_EN = 1; // Set the trigger for the Analog PCM
LoopMuxRegs.FECTRL2MUX.bit.DPWM2_FRAME_SYNC_EN = 1; //also need a second trigger to make it work better.
LoopMuxRegs.FECTRL2MUX.bit.DPWM3_FRAME_SYNC_EN = 1; //also need a second trigger to make it work better.
LoopMuxRegs.FECTRL0MUX.bit.DPWM0_FRAME_SYNC_EN = 1;
LoopMuxRegs.FECTRL1MUX.bit.DPWM1_FRAME_SYNC_EN = 1;
LoopMuxRegs.APCMCTRL.bit.PCM_FE_SEL = 2; // use FE2 for PCM */
LoopMuxRegs.APCMCTRL.bit.PCM_EN = 1; // Enable PCM