微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > UCD3138闭环控制输出也就3~4V就会保护,而程序上屏蔽了protection.c文件后可以进一步提高输出电压

UCD3138闭环控制输出也就3~4V就会保护,而程序上屏蔽了protection.c文件后可以进一步提高输出电压

时间:10-02 整理:3721RD 点击:

(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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top