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.

DMC library usage

Other Parts Discussed in Thread: CONTROLSUITE

I am new to ccs. Can anyone tell me how to use modules in digital motor library in my ccs project? the document does not provide clear instructions. Thanks in advance.

  • Hi Sameer,

    Which controller are you using? Also, which document did you refer previously?

    Regards,
    Gautam

  • I am using f28069 piccolo. I referred the dmclib.pdf.
  • Is this the doc: C:\ti\controlSUITE\libs\app_libs\motor_control\math_blocks\v4.3\~Docs

    DMC MATH_v13.1.pdf has in-depth description of all the math blocks.

    Regards,
    Gautam
  • Yes. But how to use them in my project?
  • I know how to use the library but i am getting an error.

    This is the code:
    #include "DSP28x_Project.h"
    #include "Solar_IQ.h"
    #include "IQmathLib.h"
    #include <math.h>
    #include "svgen.h"
    #include "f2833xpwm.h"

    __interrupt void isr(void);
    int sgn(float u);

    SVGEN svgen = SVGEN_DEFAULTS;
    PWMGEN pwm = PWMGEN_DEFAULTS;
    iPARK_IQ ip;
    MPPT_PNO_IQ mppt;
    ABC_DQ0_POS_IQ abc_dq0_pos1;
    ABC_DQ0_POS_IQ abc_dq0_pos2;
    ABC_DQ0_POS_IQ abc_dq0_pos3;
    SPLL_3ph_SRF_IQ spll1;

    float32 Vameas = 0;
    float32 Va = 0;
    float32 Vanorm = 0;
    float32 Vbmeas = 0;
    float32 Vb = 0;
    float32 Vbnorm = 0;
    int32 Vcmeas = 0;
    int32 Vc = 0;
    int32 Vcnorm = 0;
    int32 Iameas = 0;
    int32 Ia = 0;
    int32 Ianorm = 0;
    int32 Ibmeas = 0;
    int32 Ib = 0;
    int32 Ibnorm = 0;
    int32 Icmeas = 0;
    int32 Ic = 0;
    int32 Icnorm = 0;
    int32 Vdcmeas = 0;
    int32 Vdc = 0;
    int32 Vdcnorm = 0;
    int32 Ipvmeas = 0;
    int32 Ipv = 0;
    int32 Ipvnorm = 0;
    int32 Vsdnorm = 0;
    int32 Vsd = 0.001;
    int32 Idnorm = 0;
    int32 Id = 0;
    int32 Iqnorm = 0;
    int32 Iq = 0;
    int32 Iqref = 0;
    int32 Vdcrefnorm = 0;
    int32 Vdcref = 0;
    float32 Vd = 0;
    float32 Vq = 0;
    float L = 0.001;
    float C = 0.0015;
    float K1;
    float K2;
    float K3;
    float Valpha;
    float Vbeta;

    void main()
    {
    MPPT_PNO_IQ_init(&mppt);
    mppt.DeltaPmin = 0.00001;
    mppt.MaxVolt = 0.99;
    mppt.MinVolt = 0.6; // min volt might be changed
    mppt.Stepsize = 0.005;
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos1);
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos2);
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos3);
    SPLL_3ph_SRF_IQ_init(50,0.000005,&spll1); // ISR period might be changed
    pwm.PeriodMax = 7500; // PWM frequency = 10 kHz, clock = 150 MHz
    pwm.HalfPerMax = pwm.PeriodMax/2;
    PWM_INIT_MACRO(1,2,3,pwm);
    InitAdc();
    AdcOffsetSelfCal();
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
    IER |= 0x0001;
    InitSysCtrl();
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    EALLOW;
    PieVectTable.ADCINT1 = &isr;
    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;
    AdcRegs.ADCSOC3CTL.bit.CHSEL = 4;
    AdcRegs.ADCSOC4CTL.bit.CHSEL = 7;
    AdcRegs.ADCSOC5CTL.bit.CHSEL = 9;
    AdcRegs.ADCSOC6CTL.bit.CHSEL = 10;
    AdcRegs.ADCSOC7CTL.bit.CHSEL = 11;
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;
    AdcRegs.INTSEL1N2.bit.INT1E = 1;
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1;
    AdcRegs.INTSEL1N2.bit.INT1SEL = 7; // EOC 7 triggers ADCINT1
    AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 0x0001; // selecting ADCINT1 as SOC trigger
    AdcRegs.ADCINTSOCSEL1.bit.SOC1 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC2 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC4 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC5 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC6 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC7 = 0x0001;
    GpioCtrlRegs.GPAMUX1.all = 0x00000555; // configuring output pins
    AdcRegs.ADCSOCFRC1.all = 0xFFFF;
    EDIS;
    for(;;){}
    }

    __interrupt void isr(void)
    {
    /* Storing the ADC results */
    Vameas = AdcResult.ADCRESULT0;
    Vbmeas = AdcResult.ADCRESULT1;
    Vcmeas = AdcResult.ADCRESULT2;
    Iameas = AdcResult.ADCRESULT3;
    Ibmeas = AdcResult.ADCRESULT4;
    Icmeas = AdcResult.ADCRESULT5;
    Vdcmeas = AdcResult.ADCRESULT6;
    Ipvmeas = AdcResult.ADCRESULT7;

    PieCtrlRegs.PIEACK.all = 0x0001; // Acknowledging interrupt

    /* Calculating actual values of the measured variables */
    Va = (Vameas-1.5)*82;
    Vb = (Vbmeas-1.5)*82;
    Vc = (Vcmeas-1.5)*82;
    Ia = (Iameas-2.5)*10;
    Ib = (Ibmeas-2.5)*10;
    Ic = (Icmeas-2.5)*10;
    Vdc = Vdcmeas*100;
    Ipv = (Ipvmeas-2.5)*10;

    /* Calculating normalized values of the variables */
    Vanorm = Va/123;
    Vbnorm = Vb/123;
    Vcnorm = Vc/123;
    Ianorm = Ia/20;
    Ibnorm = Ib/20;
    Icnorm = Ic/20;
    Vdcnorm = Vdc/300;
    Ipvnorm = Ipv/15;

    /* PLL code */
    abc_dq0_pos1.a = Vanorm;
    abc_dq0_pos1.b = _IQmpy(Vbnorm,_IQ(0.5));
    abc_dq0_pos1.c = _IQmpy(Vcnorm,_IQ(0.5));
    abc_dq0_pos1.sin = _IQsin((spll1.theta[1])<<3);
    abc_dq0_pos1.cos = _IQcos((spll1.theta[1])<<3);
    ABC_DQ0_POS_IQ_MACRO(abc_dq0_pos1);
    spll1.v_q[0] = (int32)(_IQtoIQ21(abc_dq0_pos1.q));
    SPLL_3ph_SRF_IQ_FUNC(&spll1);

    /* Vabc to Vdq0 */
    abc_dq0_pos2.a = Vanorm;
    abc_dq0_pos2.b = Vbnorm;
    abc_dq0_pos2.c = Vcnorm;
    abc_dq0_pos2.sin = sin(spll1.theta[2]);
    abc_dq0_pos2.cos = cos(spll1.theta[2]);
    ABC_DQ0_POS_IQ_FUNC(&abc_dq0_pos2);
    Vsdnorm = abc_dq0_pos2.d;

    /* Iabc to Idq0 */
    abc_dq0_pos3.a = Ianorm;
    abc_dq0_pos3.b = Ibnorm;
    abc_dq0_pos3.c = Icnorm;
    abc_dq0_pos3.sin = sin(spll1.theta[2]);
    abc_dq0_pos3.cos = cos(spll1.theta[2]);
    ABC_DQ0_POS_IQ_FUNC(&abc_dq0_pos3);
    Idnorm = abc_dq0_pos3.d;
    Iqnorm = abc_dq0_pos3.q;

    /* MPPT PNO */
    mppt.Ipv = Ipvnorm;
    mppt.Vpv = Vdcnorm;
    MPPT_PNO_IQ_FUNC(&mppt);
    Vdcrefnorm = mppt.VmppOut;

    /* Calculating actual values of processed variables */
    Vsd = Vsdnorm*123;
    Id = Idnorm*20;
    Iq = Iqnorm*20;
    Vdcref = Vdcrefnorm*300;

    /* Sliding Mode Controller */
    Vd = (L/Vsd)*(K1*sgn(0.5*C*(Vdc*Vdc-Vdcref*Vdcref))+K2*sgn(Vdc*Ipv-1.5*Vsd*Id));
    Vq = -1*L*(K3*sgn(Iq-Iqref));

    /* V dq to V alphabeta */
    ip.d = Vd;
    ip.q = Vq;
    ip.z = 0;
    ip.sin = sin(spll1.theta[2]);
    ip.cos = cos(spll1.theta[2]);
    iPARK_IQ_FUNC(&ip);

    Valpha = ip.alpha;
    Vbeta = ip.beta;

    /* SVPWM */
    svgen.Ualpha = Valpha;
    svgen.Ubeta = Vbeta;
    SVGENDQ_MACRO(svgen);

    /* PWM Generation */
    pwm.MfuncC1 = svgen.Ta;
    pwm.MfuncC2 = svgen.Tb;
    pwm.MfuncC3 = svgen.Tc;
    PWM_MACRO(1,2,3,pwm);
    return;
    }

    int sgn(float u)
    {
    if(u > 0)
    return 1;
    else
    if(u < 0)
    return -1;
    else
    return 0;
    }


    Console output:
    **** Build of configuration Debug for project SolarIverterControl ****

    "C:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
    'Building file: ../main.c'
    'Invoking: C2000 Compiler'
    "C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_6.4.2/bin/cl2000" -v28 -ml -mt --cla_support=cla0 --float_support=fpu32 --vcu_support=vcu0 --include_path="C:/ti/controlSUITE/libs/app_libs/motor_control/drivers/f2833x_v2.0" --include_path="C:/ti/controlSUITE/development_kits/~SupportFiles/F2833x_headers" --include_path="C:/ti/controlSUITE/development_kits/~SupportFiles/F2806x_headers" --include_path="C:/ti/controlSUITE/libs/app_libs/motor_control/math_blocks/v4.2" --include_path="C:/ti/controlSUITE/device_support/f2806x/v141/F2806x_common/include" --include_path="C:/ti/controlSUITE/libs/app_libs/solar/v1.2/IQ/include" --include_path="C:/ti/controlSUITE/device_support/f2806x/v141/F2806x_headers/include" --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_6.4.2/include" --include_path="C:/ti/controlSUITE/libs/math/FPUfastRTS/V100/include" --include_path="C:/ti/controlSUITE/libs/math/IQmath/v160/include" -g --diag_warning=225 --display_error_number --diag_wrap=off --preproc_with_compile --preproc_dependency="main.pp" "../main.c"
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 31: error #20: identifier "ECap4Regs" is undefined
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 32: error #20: identifier "ECap5Regs" is undefined
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 33: error #20: identifier "ECap6Regs" is undefined
    "../main.c", line 172: warning #177-D: subscript out of range
    "../main.c", line 173: warning #177-D: subscript out of range
    "../main.c", line 181: warning #177-D: subscript out of range
    "../main.c", line 182: warning #177-D: subscript out of range
    "../main.c", line 207: warning #177-D: subscript out of range
    "../main.c", line 208: warning #177-D: subscript out of range
    3 errors detected in the compilation of "../main.c".

    >> Compilation failure
    gmake: *** [main.obj] Error 1
    gmake: Target `all' not remade because of errors.

    **** Build Finished ****
  • I am getting errors in the header file.

    Console output:

    **** Build of configuration Debug for project SolarIverterControl ****

    "C:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
    'Building file: ../main.c'
    'Invoking: C2000 Compiler'
    "C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_6.4.2/bin/cl2000" -v28 -ml -mt --cla_support=cla0 --float_support=fpu32 --vcu_support=vcu0 --include_path="C:/ti/controlSUITE/libs/app_libs/motor_control/drivers/f2833x_v2.0" --include_path="C:/ti/controlSUITE/development_kits/~SupportFiles/F2833x_headers" --include_path="C:/ti/controlSUITE/development_kits/~SupportFiles/F2806x_headers" --include_path="C:/ti/controlSUITE/libs/app_libs/motor_control/math_blocks/v4.2" --include_path="C:/ti/controlSUITE/device_support/f2806x/v141/F2806x_common/include" --include_path="C:/ti/controlSUITE/libs/app_libs/solar/v1.2/IQ/include" --include_path="C:/ti/controlSUITE/device_support/f2806x/v141/F2806x_headers/include" --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_6.4.2/include" --include_path="C:/ti/controlSUITE/libs/math/FPUfastRTS/V100/include" --include_path="C:/ti/controlSUITE/libs/math/IQmath/v160/include" -g --diag_warning=225 --display_error_number --diag_wrap=off --preproc_with_compile --preproc_dependency="main.pp" "../main.c"
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 31: error #20: identifier "ECap4Regs" is undefined
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 32: error #20: identifier "ECap5Regs" is undefined
    "C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\f2833x_v2.0\f2833xdrvlib.h", line 33: error #20: identifier "ECap6Regs" is undefined
    "../main.c", line 172: warning #177-D: subscript out of range
    "../main.c", line 173: warning #177-D: subscript out of range
    "../main.c", line 181: warning #177-D: subscript out of range
    "../main.c", line 182: warning #177-D: subscript out of range
    "../main.c", line 207: warning #177-D: subscript out of range
    "../main.c", line 208: warning #177-D: subscript out of range
    3 errors detected in the compilation of "../main.c".

    >> Compilation failure
    gmake: *** [main.obj] Error 1
    gmake: Target `all' not remade because of errors.

    **** Build Finished ****
  • Code:
    #include "DSP28x_Project.h"
    #include "Solar_IQ.h"
    #include "IQmathLib.h"
    #include <math.h>
    #include "svgen.h"
    #include "f2833xpwm.h"

    __interrupt void isr(void);
    int sgn(float u);

    SVGEN svgen = SVGEN_DEFAULTS;
    PWMGEN pwm = PWMGEN_DEFAULTS;
    iPARK_IQ ip;
    MPPT_PNO_IQ mppt;
    ABC_DQ0_POS_IQ abc_dq0_pos1;
    ABC_DQ0_POS_IQ abc_dq0_pos2;
    ABC_DQ0_POS_IQ abc_dq0_pos3;
    SPLL_3ph_SRF_IQ spll1;

    float32 Vameas = 0;
    float32 Va = 0;
    float32 Vanorm = 0;
    float32 Vbmeas = 0;
    float32 Vb = 0;
    float32 Vbnorm = 0;
    int32 Vcmeas = 0;
    int32 Vc = 0;
    int32 Vcnorm = 0;
    int32 Iameas = 0;
    int32 Ia = 0;
    int32 Ianorm = 0;
    int32 Ibmeas = 0;
    int32 Ib = 0;
    int32 Ibnorm = 0;
    int32 Icmeas = 0;
    int32 Ic = 0;
    int32 Icnorm = 0;
    int32 Vdcmeas = 0;
    int32 Vdc = 0;
    int32 Vdcnorm = 0;
    int32 Ipvmeas = 0;
    int32 Ipv = 0;
    int32 Ipvnorm = 0;
    int32 Vsdnorm = 0;
    int32 Vsd = 0.001;
    int32 Idnorm = 0;
    int32 Id = 0;
    int32 Iqnorm = 0;
    int32 Iq = 0;
    int32 Iqref = 0;
    int32 Vdcrefnorm = 0;
    int32 Vdcref = 0;
    float32 Vd = 0;
    float32 Vq = 0;
    float L = 0.001;
    float C = 0.0015;
    float K1;
    float K2;
    float K3;
    float Valpha;
    float Vbeta;

    void main()
    {
    MPPT_PNO_IQ_init(&mppt);
    mppt.DeltaPmin = 0.00001;
    mppt.MaxVolt = 0.99;
    mppt.MinVolt = 0.6; // min volt might be changed
    mppt.Stepsize = 0.005;
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos1);
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos2);
    ABC_DQ0_POS_IQ_init(&abc_dq0_pos3);
    SPLL_3ph_SRF_IQ_init(50,0.000005,&spll1); // ISR period might be changed
    pwm.PeriodMax = 7500; // PWM frequency = 10 kHz, clock = 150 MHz
    pwm.HalfPerMax = pwm.PeriodMax/2;
    PWM_INIT_MACRO(1,2,3,pwm);
    InitAdc();
    AdcOffsetSelfCal();
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
    IER |= 0x0001;
    InitSysCtrl();
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    EALLOW;
    PieVectTable.ADCINT1 = &isr;
    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;
    AdcRegs.ADCSOC3CTL.bit.CHSEL = 4;
    AdcRegs.ADCSOC4CTL.bit.CHSEL = 7;
    AdcRegs.ADCSOC5CTL.bit.CHSEL = 9;
    AdcRegs.ADCSOC6CTL.bit.CHSEL = 10;
    AdcRegs.ADCSOC7CTL.bit.CHSEL = 11;
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;
    AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;
    AdcRegs.INTSEL1N2.bit.INT1E = 1;
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1;
    AdcRegs.INTSEL1N2.bit.INT1SEL = 7; // EOC 7 triggers ADCINT1
    AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 0x0001; // selecting ADCINT1 as SOC trigger
    AdcRegs.ADCINTSOCSEL1.bit.SOC1 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC2 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC4 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC5 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC6 = 0x0001;
    AdcRegs.ADCINTSOCSEL1.bit.SOC7 = 0x0001;
    GpioCtrlRegs.GPAMUX1.all = 0x00000555; // configuring output pins
    AdcRegs.ADCSOCFRC1.all = 0xFFFF;
    EDIS;
    for(;;){}
    }

    __interrupt void isr(void)
    {
    /* Storing the ADC results */
    Vameas = AdcResult.ADCRESULT0;
    Vbmeas = AdcResult.ADCRESULT1;
    Vcmeas = AdcResult.ADCRESULT2;
    Iameas = AdcResult.ADCRESULT3;
    Ibmeas = AdcResult.ADCRESULT4;
    Icmeas = AdcResult.ADCRESULT5;
    Vdcmeas = AdcResult.ADCRESULT6;
    Ipvmeas = AdcResult.ADCRESULT7;

    PieCtrlRegs.PIEACK.all = 0x0001; // Acknowledging interrupt

    /* Calculating actual values of the measured variables */
    Va = (Vameas-1.5)*82;
    Vb = (Vbmeas-1.5)*82;
    Vc = (Vcmeas-1.5)*82;
    Ia = (Iameas-2.5)*10;
    Ib = (Ibmeas-2.5)*10;
    Ic = (Icmeas-2.5)*10;
    Vdc = Vdcmeas*100;
    Ipv = (Ipvmeas-2.5)*10;

    /* Calculating normalized values of the variables */
    Vanorm = Va/123;
    Vbnorm = Vb/123;
    Vcnorm = Vc/123;
    Ianorm = Ia/20;
    Ibnorm = Ib/20;
    Icnorm = Ic/20;
    Vdcnorm = Vdc/300;
    Ipvnorm = Ipv/15;

    /* PLL code */
    abc_dq0_pos1.a = Vanorm;
    abc_dq0_pos1.b = _IQmpy(Vbnorm,_IQ(0.5));
    abc_dq0_pos1.c = _IQmpy(Vcnorm,_IQ(0.5));
    abc_dq0_pos1.sin = _IQsin((spll1.theta[1])<<3);
    abc_dq0_pos1.cos = _IQcos((spll1.theta[1])<<3);
    ABC_DQ0_POS_IQ_MACRO(abc_dq0_pos1);
    spll1.v_q[0] = (int32)(_IQtoIQ21(abc_dq0_pos1.q));
    SPLL_3ph_SRF_IQ_FUNC(&spll1);

    /* Vabc to Vdq0 */
    abc_dq0_pos2.a = Vanorm;
    abc_dq0_pos2.b = Vbnorm;
    abc_dq0_pos2.c = Vcnorm;
    abc_dq0_pos2.sin = sin(spll1.theta[2]);
    abc_dq0_pos2.cos = cos(spll1.theta[2]);
    ABC_DQ0_POS_IQ_FUNC(&abc_dq0_pos2);
    Vsdnorm = abc_dq0_pos2.d;

    /* Iabc to Idq0 */
    abc_dq0_pos3.a = Ianorm;
    abc_dq0_pos3.b = Ibnorm;
    abc_dq0_pos3.c = Icnorm;
    abc_dq0_pos3.sin = sin(spll1.theta[2]);
    abc_dq0_pos3.cos = cos(spll1.theta[2]);
    ABC_DQ0_POS_IQ_FUNC(&abc_dq0_pos3);
    Idnorm = abc_dq0_pos3.d;
    Iqnorm = abc_dq0_pos3.q;

    /* MPPT PNO */
    mppt.Ipv = Ipvnorm;
    mppt.Vpv = Vdcnorm;
    MPPT_PNO_IQ_FUNC(&mppt);
    Vdcrefnorm = mppt.VmppOut;

    /* Calculating actual values of processed variables */
    Vsd = Vsdnorm*123;
    Id = Idnorm*20;
    Iq = Iqnorm*20;
    Vdcref = Vdcrefnorm*300;

    /* Sliding Mode Controller */
    Vd = (L/Vsd)*(K1*sgn(0.5*C*(Vdc*Vdc-Vdcref*Vdcref))+K2*sgn(Vdc*Ipv-1.5*Vsd*Id));
    Vq = -1*L*(K3*sgn(Iq-Iqref));

    /* V dq to V alphabeta */
    ip.d = Vd;
    ip.q = Vq;
    ip.z = 0;
    ip.sin = sin(spll1.theta[2]);
    ip.cos = cos(spll1.theta[2]);
    iPARK_IQ_FUNC(&ip);

    Valpha = ip.alpha;
    Vbeta = ip.beta;

    /* SVPWM */
    svgen.Ualpha = Valpha;
    svgen.Ubeta = Vbeta;
    SVGENDQ_MACRO(svgen);

    /* PWM Generation */
    pwm.MfuncC1 = svgen.Ta;
    pwm.MfuncC2 = svgen.Tb;
    pwm.MfuncC3 = svgen.Tc;
    PWM_MACRO(1,2,3,pwm);
    return;
    }

    int sgn(float u)
    {
    if(u > 0)
    return 1;
    else
    if(u < 0)
    return -1;
    else
    return 0;
    }
  • Check this: http://www.ti.com/tool/sprc215
    It includes source code with the library. Its meant for F280x but you can refer the same for similar approach.

    Regards,
    Gautam

  • Comment out the following lines (31,32 and 33)

    &ECap4Regs,
    &ECap5Regs,
    &ECap6Regs,

    from f2833xdrvlib.h