第一步:根据AD采样得到 i a , i b i_a,i_b ia,ib两相电流值;
通过ADC采样得到电机的 i a , i b i_a,i_b ia,ib 两项电流信息,由于基尔霍夫电流定律,同一个节点流入电流值与流出电流相等,我们可以计算出 i c i_c ic。三个电流的相位差为120°。
i a + i b + i c = 0 i_a+i_b+i_c=0 ia+ib+ic=0
第二步:通过Clark变换,将三相定子坐标系(三个轴互为120°, i a , i b , i c i_a,i_b,i_c ia,ib,ic)转化为两相的定子直角坐标系( i α , i β i_{\alpha},i_{\beta} iα,iβ)
第三步:通过Park变换将两相定子坐标系变换到两相转子坐标系
因为我们主要控制的是转子的旋转,所以需要通过Park变换将两相定子坐标系变换到两相转子坐标系( i q , i d i_q,i_d iq,id),本质上就是矩阵的旋转变换,在这里,我们用到的转子的位置信息。

{ I q = I β c o s ( θ ) − I α s i n ( θ ) I d = I α c o s ( θ ) + I β s i n ( θ ) \begin{cases} I_q=I_{\beta}cos({\theta})-I_{\alpha}sin({\theta})\\ I_d=I_{\alpha}cos({\theta})+I_{\beta}sin({\theta}) \end{cases} {
Iq=Iβcos(θ)−Iαsin(θ)Id=Iαcos(θ)+Iβsin(θ)
该位置信息便是由磁编码器返回的绝对角度信息,(其实也可以用增量式编码器,我感觉应该只是在电机位置校准的时候需要定义零点,其他的应该一样,我暂时还没有做过,属于猜想的,当然有的还可以通过无位置的控制方式,通过三相采样电流值计算转子位置信息,还有需要注意的是得到的是角度信息,我们需要将其转化为电角度信息, 电 角 度 = 角 度 ∗ 磁 极 对 数 电角度=角度*磁极对数 电角度=角度∗磁极对数),其中 i d i_d id 为励磁电流分量, i q i_q iq为转矩电流分量,可以建立两个PI调节器分别对两个电流分量进行调节。
当励磁电流分量为0时,磁通完全由永磁体提供。电机所有的电流全部用来产生电磁转矩,只用控制 i q i_q iq就可以控制电机转矩,就实现了电机的静态解耦。(其实这里很好理解,根据左手定则,F=BIL,这个公式中L是电机的固有参数,B磁通由两部分组成,一是由永磁体提供,二是由电流变化产生磁场;所以如果我们要实现给定的力距,需要控制单一变量:电流,则需要让B保持恒定,也就是使 i d i_d id =0)
第四步:根据PI调节器输出电压 V q , V d V_q,V_d Vq,Vd
这里需要注意有一个前提调节,那就是你已经基本调通了SVPWM波,电机可以正在旋转了,FOC控制算法主要是电机的稳定性控制,而不是电机本体的驱动。 V q , V d V_q,V_d Vq,Vd本身的参考值已定, i q , i d i_q,i_d iq,id只是根据给定值与实际返回值得差值调节电机的稳定性。
在调参的时候,人为给定 i q r e f = 0 , i d r e f = X X X ( 参 考 电 流 值 ) i_qref=0,i_dref=XXX(参考电流值) iqref=0,idref=XXX(参考电流值),通过与实时采样电流比较,调节电流环PID,调节的目标是启动响应速度足够快,平稳运动波动足够小,通过DAC输出实时采样电流来进行调试;
第五步通过反Park变换将 V q , V d V_q,V_d Vq,Vd(两相转子坐标系)转换为 U α , U β U_{\alpha},U_{\beta} Uα,Uβ两相定子坐标系

{ U α = V d c o s ( θ ) − V q s i n ( θ ) U β = V d s i n ( θ ) + V q c o s ( θ ) \begin{cases} U_{\alpha}=V_dcos({\theta})-V_qsin({\theta})\\ U_{\beta}=V_dsin({\theta})+V_qcos({\theta}) \end{cases} {
Uα=Vdcos(θ)−Vqsin(θ)Uβ=Vdsin(θ)+Vqcos(θ)
第六步:得到 U α , U β U_{\alpha},U_{\beta} Uα,Uβ之后,通过SVPWM算法计算 U A , U B , U C U_A,U_B,U_C UA,UB,UC
另外一篇经典FOC与SVPWM波详述(稚晖君):https://zhuanlan.zhihu.com/p/147659820
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220678.html原文链接:https://javaforall.net
