测试目的:
评估在200M主频下的执行FOC电流环的算力
测试结果:
如下图所示,ADC完成采样中断时,置IO为高电平,读ADC,计算FOC电流环,设置PWM输出,置IO为低电平。测试得到单次FOC电流环时间为1.72uS。
说明:
由于我开发环境,暂无法DEBUG,无法单次调试抓内存数据,只能通过GPIO测定FOC电流环执行时间;
开发板是只有IO的最小系统,没有BLDC电控需要的MOS驱动以及ADC配合PGA的真实采样环路,所以测试的仅为算力测试。一般在100M的M4F上测试,最快常规是5us,本次在ET6001上测到1.72比预期好很多,但由于没有真实的硬件回路,一些过调制case无法执行到。
入口代码
void AdcIrq(void)
{
System_Obj *pS = &SystemObj;
pS->Ia = ADC1->SARC_RESULT[0].RESULT&0xFFFF;//u
pS->Ib = ADC1->SARC_RESULT[1].RESULT&0xFFFF;//v
pS->UdcAdc = ADC1->SARC_RESULT[2].RESULT&0xFFFF;//vbus
pS->SpeedR = ADC1->SARC_RESULT[3].RESULT&0xFFFF;//spped r
//电流环计算
MotorCurrentLoop(&SystemObj);
}
#define POLS (2)
#define LD (0.000925f)
#define LQ (LD)
#define RS (0.358000f)
#define FI (0.01374f)
void VarInit(System_Obj *pSysObj)
{
extern uint32_t SystemCoreClockFrequency;
pSysObj->MainFreq = SystemCoreClockFrequency;
pSysObj->PwmFreq = 10000;
pSysObj->CtrlFreq = 2000;
pSysObj->HalfDuty = MyDiv16(SystemObj.MainFreq , SystemObj.PwmFreq,0,0)>>2;
pSysObj->VolSampBase = 105;
pSysObj->CurSampBase = 10;
MotorSetParam(RS,LD,LQ,FI);
MotorContrlPamIni();
}