sir
in my progrming i want to use decimal values .but the float data type is showing error .
so how can i avoid this error
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.
sir
in my progrming i want to use decimal values .but the float data type is showing error .
so how can i avoid this error
This controller very well supports float datatypes. Can you paste the screenshot of the error?
float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;
Description Resource Path Location Type
#148 declaration is incompatible with "float Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem
Description Resource Path Location Type
#148 declaration is incompatible with "float Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem
Try using float32 datatype instead.
sir
again same error
Description Resource Path Location Type
#148 declaration is incompatible with "float32 Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem
Lokks like you declared variable "Fmax" twice: in line 27 and in the line "float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;"
sir this is program i am getting errors
#include "DSP28x_Project.h" // Device Headerfile
#include "f2802x_common/include/adc.h"
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/flash.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pie.h"
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/pwm.h"
#include "f2802x_common/include/wdog.h"
#include "f2802x_common/include/IQmathLib.h"
#include<math.h>
// Prototype statements for functions found within this file.
interrupt void adc_isr(void);
void Adc_Config(void);
// Global variables used in this example:
uint32_t EPwm1TimerIntCount;
uint16_t j;
uint16_t a;
uint16_t x,x1,tbprd,n,i,j;
float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;
Fmax=20000;
Fmin=3600;
Imax=5;
Imin=1;
Iold=2;
Fold=10000;
ADC_Handle myAdc;
CLK_Handle myClk;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
PWM_Handle myPwm1;
void main(void)
{
CPU_Handle myCpu;
PLL_Handle myPll;
WDOG_Handle myWDog;
// Initialize all the handles needed for this application
myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
myPwm1 = PWM_init((void *)PWM_ePWM1_BASE_ADDR, sizeof(PWM_Obj));
myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));
// Perform basic system initialization
WDOG_disable(myWDog);
CLK_enableAdcClock(myClk);
(*Device_cal)();
//Select the internal oscillator 1 as the clock source
CLK_setOscSrc(myClk, CLK_OscSrc_Internal);
// Setup the PLL for x12 /2 which will yield 60Mhz = 10Mhz * 12 / 2
PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);
PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1);
// Disable the PIE and all interrupts
PIE_disable(myPie);
PIE_disableAllInts(myPie);
CPU_disableGlobalInts(myCpu);
CPU_clearIntFlags(myCpu);
// If running from flash copy RAM only functions to RAM
#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif
// Initalize GPIO
GPIO_setPullUp(myGpio, GPIO_Number_0, GPIO_PullUp_Disable);
GPIO_setPullUp(myGpio, GPIO_Number_1, GPIO_PullUp_Disable);
GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_EPWM1A);
GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_EPWM1B);
// Setup a debug vector table and enable the PIE
// PIE_setDebugIntVectorTable(myPie);
PIE_enable(myPie);
// Register interrupt handlers in the PIE vector table
PIE_registerPieIntHandler(myPie, PIE_GroupNumber_10, PIE_SubGroupNumber_1, (intVec_t)&adc_isr);
// Initialize the ADC
ADC_enableBandGap(myAdc);
ADC_enableRefBuffers(myAdc);
ADC_powerUp(myAdc);
ADC_enable(myAdc);
ADC_setVoltRefSrc(myAdc, ADC_VoltageRefSrc_Int);
x=0;
for(n=0;n<5000;n++)
{
// Enable ADCINT1 in PIE
PIE_enableAdcInt(myPie, ADC_IntNumber_1);
// Enable CPU Interrupt 1
CPU_enableInt(myCpu, CPU_IntNumber_10);
// Enable Global interrupt INTM
CPU_enableGlobalInts(myCpu);
// Enable Global realtime interrupt DBGM
CPU_enableDebugInt(myCpu);
j=0;
ADC_setIntPulseGenMode(myAdc, ADC_IntPulseGenMode_Prior); //ADCINT1 trips after AdcResults latch
ADC_enableInt(myAdc, ADC_IntNumber_1); //Enabled ADCINT1
ADC_setIntMode(myAdc, ADC_IntNumber_1, ADC_IntMode_ClearFlag); //Disable ADCINT1 Continuous mode
ADC_setIntSrc(myAdc, ADC_IntNumber_1, ADC_IntSrc_EOC2); //setup EOC2 to trigger ADCINT1 to fire
ADC_setSocChanNumber (myAdc, ADC_SocNumber_0, ADC_SocChanNumber_A4); //set SOC0 channel select to ADCINA4
ADC_setSocChanNumber (myAdc, ADC_SocNumber_1, ADC_SocChanNumber_A4); //set SOC1 channel select to ADCINA4
ADC_setSocTrigSrc(myAdc, ADC_SocNumber_0, ADC_SocTrigSrc_EPWM1_ADCSOCA); //set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
ADC_setSocTrigSrc(myAdc, ADC_SocNumber_1, ADC_SocTrigSrc_EPWM1_ADCSOCA); //set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
ADC_setSocSampleWindow(myAdc, ADC_SocNumber_0, ADC_SocSampleWindow_7_cycles); //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
ADC_setSocSampleWindow(myAdc, ADC_SocNumber_1, ADC_SocSampleWindow_7_cycles); //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
x=x+a;
}
x1=x/n;
PWM_setCmpA(myPwm1,x1);
// Stop all the TB clocks
CLK_disableTbClockSync(myClk);
CLK_enablePwmClock(myClk, PWM_Number_1);
// Setup Sync
PWM_setSyncMode(myPwm1, PWM_SyncMode_EPWMxSYNC);
// Allow each timer to be sync'ed
PWM_enableCounterLoad(myPwm1);
// Setup PWM
PWM_enableSocAPulse(myPwm1); // Enable SOC on A group
PWM_setSocAPulseSrc(myPwm1, PWM_SocPulseSrc_CounterEqualZero); // Select SOC from from CPMA on upcount
PWM_setSocAPeriod(myPwm1, PWM_SocPeriod_FirstEvent); // Generate pulse on 1st event
I=(x1*3.3/4096-1.65)/0.255;
for(i=0;I>Iold && I<Imax;i++)
{
Fd=19394*(pow((Iold+0.1),(-1.045))-pow((Iold),(-1.045)));
I1=Iold+0.1;
F1=Fold+Fd;
tbprd=30*10^6/F1;
PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
PWM_enableInt(myPwm1); // Enable INT
PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start
PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count
Iold=I1;
Fold=F1;
}
for(i=0;I<Iold&&I>Imin;i++)
{
Fd=19394*(pow((Iold-0.1),(-1.045))-pow((Iold),(-1.045)));
I1=Iold-0.1;
F1=Fold+Fd;
tbprd=30*10^6/F1;
PWM_setPeriod(myPwm1, tbprd) ; // Set period for ePWM1
PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
PWM_enableInt(myPwm1); // Enable INT
PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start
PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
PWM_setCmpA(myPwm1,x1);
PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count
Iold=I1;
Fold=F1;
}
if(I==Imax)
{
F1=Fmin;
tbprd=30*10^6/F1;
PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
PWM_enableInt(myPwm1); // Enable INT
PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start
PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
PWM_setCmpA(myPwm1,x1);
PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count
Iold=I;
Fold=F1;
}
if(I==Imin)
{
F1=Fmax;
tbprd=30*10^6/F1;
PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
PWM_enableInt(myPwm1); // Enable INT
PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start
PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
PWM_setCmpA(myPwm1,x1);
PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count
Iold=I;
Fold=F1;
}
// Start all the timers synced
CLK_enableTbClockSync(myClk);
for(;;)
{
}
}
interrupt void adc_isr(void)
{
a= ADC_readResult(myAdc, ADC_ResultNumber_1);
x=a;
// Clear ADCINT1 flag reinitialize for next SOC
ADC_clearIntFlag(myAdc, ADC_IntNumber_1);
// Acknowledge interrupt to PIE
PIE_clearInt(myPie, PIE_GroupNumber_10);
return;
}
float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;
Fmax=20000;
Fmin=3600;
Imax=5;
Imin=1;
Iold=2;
Fold=10000;
Try initializing them all at once like this:
float32 Fmax=20000; float32 Imax=5; //.... //.... //.... //etc
Regards,
Gautam