Other Parts Discussed in Thread: CONTROLSUITE
Hi,
I want to use the CLA resolver library with the F28069M.
I started with this example: C:\ti\controlSUITE\development_kits\TMDSRSLVR_v1.0\Resolver_f28035_CLA
The problem is that resolver_algo_CLA (); produce any output. I know for sure that is is called. So for a calculation it is very odd that there is no output. There is no write to any variables.
I see the ADC values in rslvrOut.sin_input and rslvrOut.cos_input. So the adc is sampled and the struct on the right location. I see my configure variables in rslvrIn so that is on the correct memory location.
I did ready any documentation I found. At the moment I'm out of ideas.
Please have a look to see if you can suggest a problem.
CLA code:
__interrupt void Cla1Task8 ( void )
{
CLA_COUNTER=0;
init_resolver_CLA ();
}
__interrupt void Cla1Task2 ( void )
{
CLA_ADCRESULT[8]=(unsigned short)*(adcmemory +8); // Resolver sin
CLA_ADCRESULT[9]=(unsigned short)*(adcmemory +9); // Resolver cos
rslvrOut.sin_input = ((float)(CLA_ADCRESULT[8])*(3.3/4096)) - rslvrIn.offsetS;
rslvrOut.cos_input = ((float)(CLA_ADCRESULT[9])*(3.3/4096)) - rslvrIn.offsetC;
resolver_algo_CLA ();
}
Task2 is called at 160khz when the ADC is ready. Task8 is called at CLA_init
Init CLA:
void CLA_init (HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
PIE_Obj *pie = (PIE_Obj *)obj->pieHandle;
adcmemory=(unsigned short *)(handle->adcHandle);
ENABLE_PROTECTED_REGISTER_WRITE_MODE;
// Assign CLA ISR
pie->CLA1_INT1 = &cla1_task1_isr;
pie->CLA1_INT2 = &cla1_task2_isr;
pie->CLA1_INT3 = &cla1_task3_isr;
pie->CLA1_INT4 = &cla1_task4_isr;
pie->CLA1_INT5 = &cla1_task5_isr;
pie->CLA1_INT6 = &cla1_task6_isr;
pie->CLA1_INT7 = &cla1_task7_isr;
pie->CLA1_INT8 = &cla1_task8_isr;
DISABLE_PROTECTED_REGISTER_WRITE_MODE;
#ifdef FLASH
//Copy over the CLA code(if running in standalone mode from FLASH)
memCopy((uint16_t *) &Cla1funcsRunStart, (uint16_t *) &Cla1funcsLoadStart,
(uint16_t *) &Cla1funcsLoadSize);
// Copy CLA code from flash to RAM
// Copy CLA math tabes from flash to RAM
memCopy(&Cla1mathTablesRunStart, &Cla1mathTablesLoadStart, (uint16_t *)&Cla1mathTablesLoadSize);
#endif
CLK_enableClaClock (obj->clkHandle);
/* Step 3 : Mapping CLA tasks
* Map CLA program memory to the CLA and enable software breakpoints
*/
ENABLE_PROTECTED_REGISTER_WRITE_MODE;
Cla1Regs.MVECT1 = (uint16_t)((uint32_t)&Cla1Task1 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT2 = (uint16_t)((uint32_t)&Cla1Task2 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT3 = (uint16_t)((uint32_t)&Cla1Task3 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT4 = (uint16_t)((uint32_t)&Cla1Task4 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT5 = (uint16_t)((uint32_t)&Cla1Task5 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT6 = (uint16_t)((uint32_t)&Cla1Task6 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT7 = (uint16_t)((uint32_t)&Cla1Task7 -(uint32_t)&Cla1Prog_Start);
Cla1Regs.MVECT8 = (uint16_t)((uint32_t)&Cla1Task8 -(uint32_t)&Cla1Prog_Start);
DISABLE_PROTECTED_REGISTER_WRITE_MODE;
ENABLE_PROTECTED_REGISTER_WRITE_MODE;
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_ADCINT2; // See Hal.c L840
Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT5SEL = CLA_INT5_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;
Cla1Regs.MICLROVF.all=0xFF; // Clear all Overflow bits. Task 1 - 8.
Cla1Regs.MMEMCFG.bit.PROGE = 1;
Cla1Regs.MMEMCFG.bit.RAM0E = 1;
Cla1Regs.MMEMCFG.bit.RAM1E = 1;
Cla1Regs.MMEMCFG.bit .RAM0CPUE=1;
Cla1Regs.MMEMCFG.bit .RAM1CPUE=1;
Cla1Regs.MCTL.bit.IACKE = 1;
Cla1Regs.MIER.all = M_INT8; // Enable Task 8
DISABLE_PROTECTED_REGISTER_WRITE_MODE;
Cla1ForceTask8andWait (); // Run Task 8 Init CLA resolver
ENABLE_PROTECTED_REGISTER_WRITE_MODE;
Cla1Regs.MIER.all = M_INT2; // Enable Task 2
DISABLE_PROTECTED_REGISTER_WRITE_MODE;
}
Init resolver:
void Resolver_init (void)
{
rslvrIn.SAMPLING_TIME = 1.0 / SAMPLING_FREQ;
rslvrIn.TABLE_LENGTH = DELAY_LENGTH;
rslvrIn.TUNING = TUNING_SEL;
rslvrIn.FIR32 = FIR32_SEL;
rslvrIn.testAngle = 0.0;
rslvrIn.rpsMax = 200.0; // max motor speed in freq
rslvrIn.firLag = 3; // fbk sine and cosine peaks occur when firLag = 3
float offsetFc = 500.0 / TWO_PI; // offset filter corner frequency (Hz)
float errorFc = 1000.0; // error filter corner frequency (Hz)
float piconFz = 200.0; // pi controller - ZERO frequency
float Kp = 5000.0; // pi controller - prop gain
rslvrIn.errorWfT = errorFc * TWO_PI * rslvrIn.SAMPLING_TIME;
float kiTsBy2 = Kp * (piconFz * TWO_PI) * rslvrIn.SAMPLING_TIME / 2.0;
rslvrIn.picon_K0 = Kp + kiTsBy2;
rslvrIn.picon_K1 = -Kp + kiTsBy2;
rslvrIn.offsetS = 0;
rslvrIn.offsetC = 0;
}
I didn't find any documentation on how to use the library. so no idea what resolver_algo_CLA expect as input.
Hope you can help.
