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.

[参考译文] TMS320F2.8069万:Solar_Lib SPLL_1ph函数问题。

Guru**** 2595800 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/663861/tms320f28069-solar_lib-spll_1ph-function-problem

部件号:TMS320F2.8069万
主题中讨论的其他部件: controlSUITEC2000WARE

您好,

我想使用TMS320f2.8069万器件生成网格同步sin波。 我正在使用PWM引脚外的低通滤波器。  

所以我使用的是SolarLib SPLL_1ph函数。 为了测试目的,我使用了sin table。 以下代码是我的25 kHz ISR。

 我绘制了SinTable和spl1.sin (theta)。我添加了图形。spl1.sin (theta)不是一个sin波。 是正常输出还是出现错误?

void adcHwiISR()
{

静态无符号int索引=0;
spll1.ac_input =((float32)(sin_table[index]/SPLL));// 1000000000.0 调用
SPLL_1ph_F_FUNC (&spll1);
temp =((spll1.sin[1]+EPW1Regs.TBPRD)/2)*EPwm1Regs.TBPRD; 0.9999
EPwm1Regs.CMPA.Halt.CMPA =EPwm1Regs.TBPRD -_IQsat (temp,EPwm1Regs.TBPRD,0);

如果(index++>511)索引=0;

AdcRegs.ADCINTFLGCLL.bit.ADCINT1 = 1; //清除INT SEQ1位
} 

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

    您是否确保已使用更新的频率等正确初始化SPLL例程? 同时确保更新25kHz操作的回路滤波系数。 您可以 参考  C:\ti\controlSUITE\libs\app_libs\solar\v 1.2 ,spll_coeff_compute.xlsx

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

    您好,Manish,感谢您的回复。

    我把我的公司和所有的代码都给了。 当我尝试此代码时,低通滤波器频率的输出不稳定。 它会改变。 栅格频率为50 Hz。 但输出频率 < 10 Hz且不稳定。  

    /*
    ========= main.c =========
    */
    
    #include <XDC/std.h>
    
    #include <XDC/runtime/Error.h>
    #include
    
    <ti/SysBIOS/BIOS.h>
    
    #include <ti/ISR BIOS/INITL/Task.h>
    
    #include <ti/ISR BIOS/INITL/INITL.h>#include "DSP28x_Project.h"
    #include "slip_f_spinf_spanf_fulf= 1f_span=
    
    
    
    
    
    
    
    1fli_spanf_fia= fli_spanfia= 1fia_spanfia= fia_spanfai_spanfai_fabsf_span= 1fabit_fai_fai_fai_fai_fabcip_fabsfabsf_fai=#span= 50.0 2.5万.0 3.14
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    主====
    */
    int main()
    {
    
    //----------------
    
    InitSysCtrl();
    
    initADC();
    
    IER = 0x0000;
    IFR = 0x0000;
    
    
    EALLOW;
    gpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
    EDIS;
    
    EPwm1Regs.TBCTL.ALL = 0;
    EPwm1Regs.TBCTL.bit.CLKDIV = 0;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    EPwm1Regs.AQCTLA.ALL = 0x0006;
    EPwm1Regs.TBPRD = 7200;
    EPwm1Regs.CMPA.Halt.CMPA = 3600;
    EPwm1Regs.AQCTLA.ALL = 0x0060;
    EPwm1Regs.ETSEL.ALL = 0;
    EPwm1Regs.ETSEL.bit.inten = 1;
    EPwm1Regs.ETSEL.bit.INTSEL = 5;
    EPwm1Regs.etps.bit.INTPRD = 1;
    
    
    
    
    SPLL_1ph_F_INIT (GRI_FREQ,((float)(1.0 / ISR_FREQUENCY)),&spll1);
    SPLL_1ph_F_陷 波系数更新(((浮点)(1.0 / ISR_FREQUENCY)),(浮点)(2*PI*GRI_FREQ*2),(浮点) 0.0.0001万 ,(浮点) 0.1 ,&spll1);
    
    //----------------
    
    
    BIOS_START();/*不返回*/
    return(0);
    }
    
    
    void adcTimerFxn(void)
    {
    
    AdcRegs.ADCSOCFRC1.ALL = 0xFFFF
    
    ;}
    
    
    void initADC()
    {
    
    EALLOW;
    
    
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
    (*Device_cal)();
    
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; //功率ADC BG
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //电源参考
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //功率ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //启用ADC
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //选择内部BG
    AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式
    AdcRegs.ADCCTL1.bit.INTPULSEPOS =1;// ADCINT1在AdcResults锁定后跳闸
    AdcRegs.INTSEL1N2.bit.INT1E = 1;//已启用ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT =0;//禁用ADCINT1连续模式
    AdcRegs.INTSEL1N2.bit.INT1SEL = 0x0F;//设置EOC1触发ADCINT1
    
    
    
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x0;//将SOC0通道选择设置为ADCINA0
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 0x1;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 0x2;
    AdcRegs.ADCSOC3CTL.bit.CHSEL = 0x3;
    AdcRegs.ADCSOC4CTL.bit.CHSEL = 0x4;
    AdcRegs.ADCSOC5CTL.bit.CHSEL = 0x5;
    AdcRegs.ADCSOC6CTL.bit.CHSEL = 0x6;
    AdcRegs.ADCSOC7CTL.bit.CHSEL = 0x7;
    AdcRegs.ADCSOC8CTL.bit.CHSEL = 0x8;
    AdcRegs.ADCSOC9CTL.bit.CHSEL = 0x9;
    AdcRegs.ADCSOC10CTL.bit.CHSEL = 0xA;
    AdcRegs.ADCSOC11CTL.bit.CHSEL = 0xB;
    AdcRegs.ADCSOC12CTL.bit.CHSEL = 0xC;
    AdcRegs.ADCSOC13CTL.bit.CHSEL = 0xD;
    AdcRegs.ADCSOC14CTL.bit.CHSEL = 0xE;
    AdcRegs.ADCSOC15CTL.bit.CHSEL = 0xF;
    
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC1启动触发器,因为循环SOC0先转换SOC1,然后转换SOC1
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC13CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 0;//在EPWM1A上设置SOC0启动触发器,因为循环SOC0先转换,然后转换SOC
    AdcRegs.ADCSOC15CTL.bit.TRIGSEL = 0;//由于循环SOC0先转换SOC1,所以在EPWM1A上设置SOC1启动触发器
    
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC8CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC9CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC10CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSO11CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSO12CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC13CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC14CTL.bit.ACQPS = 6;//将SOC0 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    AdcRegs.ADCSOC15CTL.bit.ACQPS = 6;//将SOC1 S/H窗口设置为7 ADC时钟周期,(6 ACQPS加1)
    
    IER || M_INT1;//启用CPU中断1
    
    
    EDIS;
    
    }
    
    
    void adcHwiISR()
    {
    
    静态无符号int索引=0;
    
    spll1.ac_input =((float32)(sin_table[index]/SPLL));// 1080000000.0 调用
    SPLL_1ph_F_FUNC (&spll1);
    temp =((spll1.sin[1]+EPw1Regs.TBPRD)/2)*EPwm1Regs.TBPRD; 1.0
    EPwm1Regs.CMPA.Halt.CMPA =EPwm1Regs.TBPRD -_IQsat (temp,EPwm1Regs.TBPRD,0);
    
    如果(index++>511)索引=0;
    
    AdcRegs.ADCINTFLGCLL.bit.ADCINT1 = 1; //清除INT SEQ1位
    
    
    /*
    spl1.ac_input =((Float32) AdcResult.ADCRESULT9-1870)/(Float32) 1870;// SPLL调用
    SPLL_1ph_F_FUNC (&spll1);
    temp =((spll1.sin[1]+EPW1Regs.TBPRD)/2)*EPwm1Regs.TBPRD; 0.9999
    EPwm1Regs.CMPA.Halt.CMPA =EPwm1Regs.TBPRD -_IQsat (temp,EPwm1Regs.TBPRD,0);
    
    AdcRegs.ADCINTFLGCLL.bit.ADCINT1 = 1; //清除INT SEQ1位
    
    
    */
    
    
    }
    

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

    嗯...  不要看到代码有任何问题。  

    您是否可以尝试从我们发布的一些示例中按-is的形式运行PLL?

    C:\ti\controlSUITE\development _kits\HV_1PH_DCAC\v1_04_00_00\f2837x\gridconnectedinvlclfltr

    C:\ti\c2000Ware_DigitalPower_SDK_1_00_00_00\solutions\TIDM_1007\f28004x\pfc1ph3ilttpL\CCS</s>1007 2.8004万

    我觉得问题可能是ISR的触发速度不正确,您可能需要使用 GPIO切换等进行验证   

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

    感谢Manish的回答,

    ı 发现了问题。 问题是凹口滤波器和PWM DAC。 当我比较PWM DAC中的两个信号时,  
    我看到了同步。 但是我想 同步 SPLL OUT和Grid,我该怎么办? 输出SPLL PWM DAC和 滤线栅不同步。

    我该怎么做? 有什么想法吗?  

    感谢您的回复。