FOC电流环控制电流环控制:ADC1_2_IRQHandler(stm32f10x_MC_it.c)-TSK_HighFrequencyTask(MCTasks.c)-FOC_CurrController-|_____SPD_GetElAngle得到电角度(hElAngledpp)|_____PWMC_GetPhaseCurrents,得到相电流Ia和Ib(Iab)|_____MCM_Clarke,clark变换得到Ialpha和Ibeta(Ialphabeta)|_____MCM_Park,park变换得到Iq和Id(Iqd)|_____PI_Controller执行两次,分别处理Iq和Id,得到Vq和Vd(Vqd)|_____FF_VqdConditioning前馈条件|_____MCM_Rev_Park反Park变换,根据Vqd和电角度hElAngledpp计算出Valpha和Vbeta(Valphabeta)|_____PWMC_SetPhaseVoltage(PWMnCurrFdbkClass.c)根据Valphabeta设置相电压Clark变换:MC_Math.cCurr_Input.qI_Component1为Ias,Curr_Input.qI_Component2为IbsIalpha=Curr_Output.qI_Component1=IasIbeta=Curr_Output.qI_Component2=-(Ias+2Ibs)*divSQRT_315=-(Ias+2Ibs)/sqrt(3)右移15位叫做q1.15格式,这是为了方便运算,避免用浮点运算,以降低运算时间。1/sqrt(3)=0.57735026918962576450914878050196(115)/sqrt(3)=32768*0.57735026918962576450914878050196=18918.61362去掉小数点就是18918=ox49E6Park变换变换:Curr_Input.qI_Component1为Ialpha,Curr_Input.qI_Component2为Ibeta,Theta为电角度Iq=Curr_Output.qI_Component1=Ialpha*cos(Theta)-Ibeta*sin(Theta)Id=Curr_Output.qI_Component2=Ialpha*sin(theta)+Ibeta*cos(Theta)反反Park变换变换:Volt_Input.qV_Component1为Vq,Volt_Input.qV_Componen2为Vd,Theta为电角度Valfa=Volt_Output.qV_Component1=Vq*Cos(Theta)+Vd*Sin(Theta)Vbeta=Volt_Output.qV_Component2=-Vq*Sin(Theta)+Vd*Cos(Theta)PWMC_SetPhaseVoltage:根据Valpha和Vbeta判断在哪个扇区先将Valfa_beta转成X,Y,Z电压备注:#defineSQRT3FACTOR(uint16_t)0xDDB4/*=(16384*根号3*2)=(16384*1.732051*2)*/pVars-hT_Sqrt3=(pParams-hPWMperiod*SQRT3FACTOR)/16384u=(PWM周期*16384*根号3*2)/16384=PWM周期*根号3*2);(2^15)*4=32768*4=131072#defineT(PWM_PERIOD*4),这里有一个4倍的放大。然后电流采用了Q15表示(左对齐),2^15=32768。所以最后计算需要除以131072。#definedivSQRT_3(int32_t)0x49E6/*1/sqrt(3)inq1.15format=0.5773315*/Q15,也就是0.5773315*32768=18918再根据wX,wY,wZ来决定当前是在什么扇区参考文档:以及:STM32F103_永磁同步电机_PMSM_FOC软件库_用户手册_中文版.pdfVα和Vβ定子电压SVPWM相电压波形阐明每同步六相空间矢量区域对应的PWM。定义如下:空间矢量区域:通过下式关系分别计算PWM应用于A、B、C三相的正相脉冲宽度持续的时间:现在考虑PWM波形是中心对称,因此相电压必须集中到周期的50%,根据PWM输出带负载的值,各自的参考电阻如下:PWMC_SetPhaseVoltage|_____SVPWM变换得到hCntPhA/B/C,也就是三相的占空比|_____pSetADCSamplingPoint|_____R3HD2_SetADCSampPointSect1~6设置ADC采样位置,然后设置占空比