Other Parts Discussed in Thread: C2000WARE
Tool/software: Code Composer Studio
Hi,
I have found the below code in the TI forum for PI control , which i am trying to run in code composer v6, but am getting a error " #include "DCLF32.h" in this part . Kindly help me as am new to code composer
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "DCL.h"
#include "DCLF32.h"
#include "DCL_fdlog.h"
#include "DCLC28.h"
float32_t rk = 20.0f;
float32_t yk;
float32_t lk;
float32_t uk;
float
Duty;
DCL_PI pi1 = PI_DEFAULTS;
//
// Function Prototypes
//
Uint16 LoopCount;
Uint16 ConversionCount;
void
adc_isr(
void
);
void
gpio_select(
void
);
void
InitEPwm1(
void
);
void
control_Isr(
void
);
float
voltage1;
float
cmpa;
//
// Main
//
void
main(
void
)
{
InitSysCtrl();
DINT;
InitPieCtrl();
EALLOW;
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
//
#define ADC_MODCLK 0x3
#endif
#if (CPU_FRQ_100MHZ)
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
//
#define ADC_MODCLK 0x2
#endif
EDIS;
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK;
EDIS;
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
// This is needed to write to EALLOW protected registers
PieVectTable.ADCINT = &adc_isr;
EDIS;
// This is needed to disable write to EALLOW protected registers
InitAdc();
// For this example, init the ADC
gpio_select();
InitEPwm1();
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1;
AdcRegs.ADCMAXCONV.all = 0x0001;
// Setup 2 conv's on SEQ1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;
// Setup ADCINA3 as 1st SEQ1 conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2;
// Setup ADCINA2 as 2nd SEQ1 conv.
/* initialise controller variables */
pi1.Kp=2.0f;
pi1.Ki=1.0f;
pi1.Umax=0.8f;
pi1.Umin=0.2f;
rk = 20.0f;
// initial value for control reference
lk = 1.0f;
// control loop not saturated
//
// Enable SOCA from ePWM to start SEQ1
//
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
// Enable SEQ1 interrupt (every EOS)
// control loop not saturated
EINT;
// Enable Global interrupt INTM
ERTM;
// Enable Global realtime interrupt DBGM
for
(;;);
}
//
// cpu_timer0_isr -
//
void
gpio_select(){
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
// Enable pullup on GPIO0
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;
// Enable pullup on GPIO0
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
// GPIO0 = PWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
// GPIO0 = PWM1A
EDIS;
}
void
InitEPwm1(){
EPwm1Regs.TBCTL.bit.CTRMODE = 0;
// Count up down
EPwm1Regs.TBPRD = 3750;
// Set timer period
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
// Disable phase loading
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;
// Phase is 0
EPwm1Regs.TBCTR = 0x0000;
// Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x001;
// Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 000;
EPwm1Regs.TBCTL.bit.SYNCOSEL=1;
EPwm1Regs.CMPA.half.CMPA =1875;
// Set compare A value
EPwm1Regs.CMPB = 1875;
// Set Compare B value
EPwm1Regs.CMPCTL.bit.LOADAMODE=1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE=0;
/* EPwm1Regs.DBCTL.bit.OUT_MODE=3;
EPwm1Regs.DBCTL.bit.POLSEL=2;
EPwm1Regs.DBCTL.bit.IN_MODE=0;
EPwm1Regs.DBRED=100;
EPwm1Regs.DBFED=100;*/
EPwm1Regs.AQCTLA.bit.ZRO=2;
// Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU=1;
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
// Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 1;
// Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1;
// Generate pulse on 1st event
}
__interrupt
void
adc_isr(
void
)
{
yk=(AdcRegs.ADCRESULT0 >>4)*300.0f/4095.0f;
//Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;
//DCL_runClamp_C1(float *data, float Umax, float Umin);
//
lk=0.0f;
uk = DCL_runPI_C1(&pi1, rk, yk);
if
(uk>0.8f){
uk=0.8f;
}
else
if
(uk<0.1f){
uk=0.1f;
}
//uk=0.5f;
EPwm1Regs.CMPA.half.CMPA =(EPwm1Regs.TBPRD)*uk;
// Set compare A value
EPwm1Regs.CMPB = EPwm1Regs.TBPRD*uk;
// Set Compare B value
// If 40 conversions have been logged, start over
//
//
// Reinitialize for next ADC sequence
//
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
// Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
// Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
// Acknowledge interrupt to PIE
return
;
}