This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379S:降压转换器精度控制查询

Guru**** 2513185 points
Other Parts Discussed in Thread: TMS320F28379S

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1383385/tms320f28379s-buck-converter-precision-control-inquiry

器件型号:TMS320F28379S

工具与软件:

你(们)好

我正在寻求有关如何解决恒流控制中的重大误差的建议。

通过使用外部精密仪器获取偏移和增益值来测试电流校准。

H/W 配置

  • 拓扑:降压非隔离式直流/直流
  • DSP:TMS320F28379S
  • ADC:SDFM + AMC1304M05DW
  • PWM:50kHz
  • 中断:每50kHz 发生一次

EPwm11设置

EPwm11Regs.TBPRD = 1999;
EPwm11Regs.CMPC = 39;
EPwm11Regs.CMPA.bit.CMPA = 1969;

峰值

  1. 当设置为3.000A 时、该误差很大、导致电流约为2.913A。
  2. 即使对于相同的电流(例如3A)、输出电流值的误差也会在 CC 控制状态下随输出电压而变化(占空比变化)。

当分流电阻器的位置移至最终输出时、CC 控制无效。

比较

3A 电感器电流图

5A 电感器电流图

您能提供有关实现精确 CC 控制的任何方法的建议吗? 祝你度过美好的一天!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    该主题的专家目前正在度假。 请在7月9日后回复。

    谢谢你

    侯赛因·阿米尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的留言。
    我会在做其他工作时等待。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 BAe:  

    在实现 CC 降压设计时、您是否参考了我们的任何参考设计、或者是否具有您用于控制转换器的软件的参考源?

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter Luong1:
    我没有提到任何软件。
    CV PI 控制效果良好。
    CC PI 控制也运行良好。
    然而、由于负载的电压消耗(取决于占空比)、受控电流中的误差很大、因此我希望得到建议。
    我来解释一下 SDFM 设置。
    我们使用 eCAP1生成20MHz 时钟并将其提供给 AMC1304。
    SDFM1和 SDFM2均使用、分流电阻器连接到 SDFM1的模块2。
    下面是设置代码。

    void sdfm_pwm11_init(void)
    {
        EALLOW;
        SyncSocRegs.SYNCSELECT.bit.EPWM10SYNCIN = 0;
    
        EPwm11Regs.TBCTL.bit.PRDLD = 0;
        EPwm11Regs.TBCTL2.bit.PRDLDSYNC = 1;
        EPwm11Regs.TBPRD = ((Uint16)(DCDC_PWM_PERIOD) -1);	//EPwm11Regs.TBPRD = 2000
        EPwm11Regs.TBCTR = CLR;
    
        EPwm11Regs.TBCTL.bit.CTRMODE = COUNTER_UP;
        EPwm11Regs.TBCTL.bit.CLKDIV = 0;
        EPwm11Regs.TBCTL.bit.HSPCLKDIV = 0;
    
        EPwm11Regs.CMPA.bit.CMPA = 0;
        EPwm11Regs.CMPCTL.bit.LOADASYNC = 1;
        EPwm11Regs.CMPCTL.bit.LOADAMODE = 0;
        EPwm11Regs.CMPCTL.bit.SHDWAMODE = 0;
    
        EPwm11Regs.AQCTLA.bit.ZRO = TBCTR_CMP_OUTPUT_HIGH;
        EPwm11Regs.AQCTLA.bit.CAU = TBCTR_CMP_OUTPUT_LOW;
    
        EPwm11Regs.TBPHS.bit.TBPHS = 2;
        EPwm11Regs.TBCTL.bit.SYNCOSEL = 0;
        EPwm11Regs.TBCTL.bit.PHSEN = 1;
    
        EPwm11Regs.CMPC = (EPwm11Regs.TBPRD >> 1) - (DCDC_SDFM_PWM_OSR >> 1);                   //EPwm11Regs.TBPRD = 2000, DCDC_SDFM_PWM_OSR = 1920
        EPwm11Regs.CMPD = EPwm11Regs.CMPC;
        EPwm11Regs.CMPA.bit.CMPA = (EPwm11Regs.TBPRD >> 1) + ((DCDC_SDFM_PWM_OSR >> 1) + 10);
    
        EPwm11Regs.ETSEL.bit.INTSELCMP = 0;
        EPwm11Regs.ETSEL.bit.INTSEL = 4;
        EPwm11Regs.ETPS.bit.INTPSSEL = 1;
        EPwm11Regs.ETINTPS.bit.INTPRD2 = 1;
        EPwm11Regs.ETSEL.bit.INTEN = 1;
        EDIS;
    }
    
    
    void sdfm_module1_init(void)
    {
        EALLOW;
        Sdfm1Regs.SDCTLPARM1.bit.MOD = 0;
        Sdfm1Regs.SDCTLPARM2.bit.MOD = 0;
        Sdfm1Regs.SDCTLPARM3.bit.MOD = 0;
        Sdfm1Regs.SDCTLPARM4.bit.MOD = 0;
    
        Sdfm1Regs.SDDFPARM1.bit.FEN = 1;
        Sdfm1Regs.SDDFPARM2.bit.FEN = 1;
        Sdfm1Regs.SDDFPARM3.bit.FEN = 1;
        Sdfm1Regs.SDDFPARM4.bit.FEN = 1;
    
        Sdfm1Regs.SDDFPARM1.bit.SST = 3;
        Sdfm1Regs.SDDFPARM2.bit.SST = 3;
        Sdfm1Regs.SDDFPARM3.bit.SST = 3;
        Sdfm1Regs.SDDFPARM4.bit.SST = 3;
    
        Sdfm1Regs.SDIPARM1.bit.DR = 1;
        Sdfm1Regs.SDIPARM2.bit.DR = 1;
        Sdfm1Regs.SDIPARM3.bit.DR = 1;
        Sdfm1Regs.SDIPARM4.bit.DR = 1;
    
        Sdfm1Regs.SDDFPARM1.bit.DOSR = DCDC_SDFM_OSR - 1;	//DCDC_SDFM_OSR = 128
        Sdfm1Regs.SDDFPARM2.bit.DOSR = DCDC_SDFM_OSR - 1;
        Sdfm1Regs.SDDFPARM3.bit.DOSR = DCDC_SDFM_OSR - 1;
        Sdfm1Regs.SDDFPARM4.bit.DOSR = DCDC_SDFM_OSR - 1;
    
        Sdfm1Regs.SDCPARM1.bit.CS1_CS0 = 3;
        Sdfm1Regs.SDCPARM2.bit.CS1_CS0 = 3;
        Sdfm1Regs.SDCPARM3.bit.CS1_CS0 = 3;
        Sdfm1Regs.SDCPARM4.bit.CS1_CS0 = 3;
    
        Sdfm1Regs.SDCPARM1.bit.COSR = DCDC_SDFM_OVER_SAMPLING -1;	//DCDC_SDFM_OVER_SAMPLING = 32
        Sdfm1Regs.SDCPARM2.bit.COSR = DCDC_SDFM_OVER_SAMPLING -1;
        Sdfm1Regs.SDCPARM3.bit.COSR = DCDC_SDFM_OVER_SAMPLING -1;
        Sdfm1Regs.SDCPARM4.bit.COSR = DCDC_SDFM_OVER_SAMPLING -1;
    
        //-- Protection Level Config --//
        Sdfm1Regs.SDCMPH1.bit.HLT = 0x7FFF;
        Sdfm1Regs.SDCMPL1.bit.LLT = 0x0000;
        Sdfm1Regs.SDCMPH2.bit.HLT = 0x7FFF;
        Sdfm1Regs.SDCMPL2.bit.LLT = 0x0000;
        Sdfm1Regs.SDCMPH3.bit.HLT = 0x7FFF;
        Sdfm1Regs.SDCMPL3.bit.LLT = 0x0000;
        Sdfm1Regs.SDCMPH4.bit.HLT = 0x7FFF;
        Sdfm1Regs.SDCMPL4.bit.LLT = 0x0000;
    
        Sdfm1Regs.SDCMPH2.bit.HLT = DCDC_SDFM_SHUNT_HLT;
        Sdfm1Regs.SDCMPL2.bit.LLT = DCDC_SDFM_SHUNT_LLT;
        Sdfm1Regs.SDCMPH3.bit.HLT = DCDC_SDFM_SHUNTF_HLT;
        Sdfm1Regs.SDCMPL3.bit.LLT = DCDC_SDFM_SHUNTF_LLT;
    
        Sdfm1Regs.SDDFPARM1.bit.FILRESEN = 1;
        Sdfm1Regs.SDDFPARM2.bit.FILRESEN = 1;
        Sdfm1Regs.SDDFPARM3.bit.FILRESEN = 1;
        Sdfm1Regs.SDDFPARM4.bit.FILRESEN = 1;
    
        Sdfm1Regs.SDCPARM1.bit.IEH = 1;
        Sdfm1Regs.SDCPARM2.bit.IEH = 1;
        Sdfm1Regs.SDCPARM3.bit.IEH = 1;
        Sdfm1Regs.SDCPARM4.bit.IEH = 1;
    
        Sdfm1Regs.SDCPARM1.bit.IEL = 1;
        Sdfm1Regs.SDCPARM2.bit.IEL = 1;
        Sdfm1Regs.SDCPARM3.bit.IEL = 1;
        Sdfm1Regs.SDCPARM4.bit.IEL = 1;
    
        Sdfm1Regs.SDMFILEN.bit.MFE = 1;
        Sdfm1Regs.SDCTL.bit.MIE = 1;   
        Sdfm1Regs.SDIFLGCLR.all = 0x8000FFFF;   
        EDIS;
    }
    
    
    static inline void sdfm_data_read(void)
    {
    	//#define DCDC_SDFM_OSR  128
    	//#define DCDC_SDFM_SCALE_FACTOR      (float32)(1.0 / ((float32)DCDC_SDFM_OSR*(float32)DCDC_SDFM_OSR*(float32)DCDC_SDFM_OSR))   //Sinc3 ^3
    	
        sdfm_meas_shunt = (float32)((int32)Sdfm1Regs.SDDATA2.all * DCDC_SDFM_SCALE_FACTOR);         //Shunt
    }

    DSP 模型是采用100引脚封装的 TMS320F28379SPZPT。
    降压 FET 控制使用 PWM2、为了与 SDFM 的 PWM11和 PWM12同步、我们在50kHz 下运行 PWM1、无需外部引脚。
    下面是它的代码。

    void pwm_dcdc_init(void)
    {
        EALLOW;
        EPwm1Regs.TBCTL.bit.PRDLD = 0;
        EPwm1Regs.TBPRD = ((Uint16)(DCDC_PWM_PERIOD) -1);
        EPwm1Regs.TBCTR = 0;
        EPwm1Regs.TBCTL.bit.CTRMODE = COUNTER_UP;
        EPwm1Regs.TBCTL.bit.CLKDIV = 0;                  
        EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
    
        EPwm2Regs.TBCTL.bit.PRDLD = 0;                   
        EPwm2Regs.TBCTL2.bit.PRDLDSYNC = 1;              
        EPwm2Regs.TBPRD = ((Uint16)(DCDC_PWM_PERIOD) -1);
        EPwm2Regs.TBCTR = 0;
        EPwm2Regs.TBCTL.bit.CTRMODE = COUNTER_UP;
        EPwm2Regs.TBCTL.bit.CLKDIV = 0;                  
        EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
    
                                                         
        EPwm1Regs.CMPA.bit.CMPA = 0;                     
        EPwm1Regs.CMPCTL.bit.LOADASYNC = 0;              
        EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;              
        EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;              
    
        EPwm2Regs.CMPA.bit.CMPA = 1;                    
        EPwm2Regs.CMPCTL.bit.LOADASYNC = 1;             
        EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;
        EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0;
    
        EPwm1Regs.AQCTLA.all = 0;                       
        EPwm2Regs.AQCTLA.all = 0;
    
        EPwm1Regs.AQCTLA.bit.CAU = TBCTR_CMP_OUTPUT_LOW;       //if TBCTR=CMPA on Up-Count ---> Output A Low
        EPwm1Regs.AQCTLA.bit.ZRO = TBCTR_CMP_OUTPUT_HIGH;      //if TBCTR=0               ---> Output A High
    
        EPwm2Regs.AQCTLA.bit.ZRO = TBCTR_CMP_OUTPUT_HIGH;
        EPwm2Regs.AQCTLA.bit.CAU = TBCTR_CMP_OUTPUT_LOW;
    
        EPwm2Regs.AQCTLB.bit.ZRO = TBCTR_CMP_OUTPUT_LOW;
        EPwm2Regs.AQCTLB.bit.CAU = TBCTR_CMP_OUTPUT_HIGH;
        EPwm2Regs.AQCTLB.bit.CBU = TBCTR_CMP_OUTPUT_LOW;
    
        EPwm2Regs.DBCTL.bit.HALFCYCLE = 0;         
        EPwm2Regs.DBRED.bit.DBRED = DCDC_PWM_DB;   
        EPwm2Regs.DBFED.bit.DBFED = DCDC_PWM_DB;
    
        EPwm2Regs.DBCTL.bit.IN_MODE = 1;           
        EPwm2Regs.DBCTL.bit.DEDB_MODE = 3;         
        EPwm2Regs.DBCTL.bit.POLSEL = 0;          
        EPwm2Regs.DBCTL.bit.OUT_MODE = 1;        
        EPwm2Regs.DBCTL.bit.OUTSWAP = DBCTL_OUT_SWAP_NONE; 
    
        EPwm1Regs.TBCTL.bit.PHSEN = 0; 
        EPwm1Regs.TBCTL.bit.SYNCOSEL = 1;
    
        EPwm2Regs.TBCTL.bit.PHSEN = 1;
        EPwm2Regs.TBCTL.bit.SYNCOSEL = 0;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 BAe:  

    感谢您的耐心、因为自然灾害导致响应延迟。

    当您说存在较大误差时、您能否帮助说明您的意思? 我没有看到您提供的控制代码可以提供帮助。  

    您使用的是平均电流检测还是峰值电流检测? 此外、考虑到使用的是 Δ-Σ 调制器与 SAR ADC、似乎有线性损失。 这是否来自滤波器?

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    我们使用 Δ-Σ ADC 来测量电流、而不使用 SAR ADC。 中断在 PWM 频率为50kHz 时发生、并且我们已按如下方式配置 SDFM:
    ```μ A
    SDFM_meas_shunt =(float32)((Int32) Sdfm1Regs.SDDATA2.all * DCDC_SDFM_SCALE_FACTOR)
    ```μ A

    此处、DCDC_SDFM_SCALE_FACTOR 的值是使用 Sinc3滤波器计算的、OSR 值为128、计算值为1/128^3。

    我们不使用任何额外的滤波器、并且每50kHz 读取的 ADC 值会输入到 PI 控制器中:
    ```μ A
    DCDC_gi_out = DCL_runpi_c1 (&DCDC_gi、Limit_Curr、sdfm_meas_shunt)
    ```μ A

    为了将该值转换为实际电流、我们使用失调电压和增益值:
    ```μ A
    MEAS_SHUNT =-sdfm_meas_shunt * CAL_ADC_AS_SR_SLOPE + CAL_ADC_AS_SR_OFFSET
    ```μ A

    我们尚未使用 IIR 滤波器或类似滤波器、而是使用线性方程来表示实际值。 PI 控制器控制的电流会平稳输出、而不会出现振荡(如图所示)。 但是、sdfm_meas_shunt 值(范围介于0和1之间)和转换后的 meas_shunt 值与实际流动电流不匹配。

    出现这种差异是因为电流值随占空比而变化、即使消耗的电流量相同也是如此。

    如果检查上一条注释所附 SDFM EPwm11的 CMPC 值、则为1920。 即使流过相同的电流、电感器中的电流形状也随占空比而变化、我认为这会导致误差。

    此致、

    BAE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 BAe:

    我将请我们的 SDFM 专家检查提供的代码、确保其正确检测电感器电流值。 关于您对电感器电流形状的评论、我认为这是可以预料的。 您是否能够在电感器电流波形顶部显示 PWM 脉冲?

    电感电流波形应随 PWM 的占空比而变化。 在50%占空比(我假设这是转换器以5A 电流运行时的情况)下、您将看到具有相等下降和上升斜坡的真正三角波形、但在50%占空比以下、预计上升斜坡大于下降斜率(如3A 波形所示)、而对于大于50%占空比、下降斜率大于上升斜率(如下图所示)

    此致、

    Peter