电机驱动(一)——FOC坐标变换

电机驱动(一)——FOC坐标变换


version : v1.0 「2022.7.28」 最后补充

author: Y.Z.T.

摘要: 简要介绍FOC驱动从坐标变换到SVPWM 各个部分在MATLAB仿真和硬件平台实现的学习过程


备注: ❗️面向自己的笔记 , 有的地方可能说的不是很清晰





1️⃣ 前言

六步换向控制无刷直流电机

image-20221015150424630

通过ABC三相电流方向来控制直流无刷电机选择 ,

步骤 A相电压 B相电压 C相电压 转子目标角度
1 + - 悬空 150150^{\circ}
2 + 悬空 - 210210^{\circ}
3 悬空 + - 270270^{\circ}
4 - + 悬空 330330^{\circ}
5 - 悬空 + 3030^{\circ}
6 悬空 - + 9090^{\circ}

通过不断重复这六步换向 , 就可以让BLDC转动起来



1.2 有感FOC控制流程

image-20221004205032040


1.3 无感FOC控制流程

image-20221004205036856

反park变换 : 由直流信息转变为交流信息,把θ\theta 和D轴Q轴信息进行合成 为一个交流信息

Clark变换 : 把三相的电流正弦波分解成二维的直角坐标系(α\alpha - β\beta 坐标 )

image-20221005165836664

park变换 :

  • Clark变换后的(α\alpha - β\beta 坐标 ) 旋转θ\theta 度(即 d - q 坐标系), 其中 θ\theta 是转子当前的角度 ;
  • d - q坐标系是一个始终跟随转子进行旋转的坐标系
  • 通过将一个匀速旋转向量θ\theta在这个坐标系下变成了一个定值 , 实现将两个控制量 IdI_dIqI_q 线性化.

img



FOC驱动电机的速度由 电机的转矩和负载的大小动态决定

例: 速度开环的情况下

  • 当负载不变时转矩 = 负载时 ,电机转速恒定;
  • 转矩增大, 电机转速增快 , 负载阻力增大 ,直到转矩和负载重新达到平衡
  • 转矩减小, 电机转速减小 , 负载阻力减小 ,直到转矩和负载重新达到平衡

2️⃣ 坐标变换

(👇 关于这各个变换的目的是什么 , 可以参考一下这篇文章)

深入浅出讲解FOC算法与SVPWM技术

2.1为什么要进行坐标变换

即将角度信息、磁场信息、转矩信息进行解耦,方便控制

2.1.1 目标

  1. 利用三相线圈产生旋转的磁场来控制转子的转动。
  2. 因此我们需要在三相线圈里面产生正弦的交流电流
  3. 通过在三相线圈内通入 , 互差120度的正弦的电压来产生正弦交流电流。

2.1.2 将交流信息转变成直流信息

  • 因为foc电机的速度是通过转矩来控制的 , 如果想要改变电机转矩
  • 则需要改变通入线圈的正弦交流电的幅值 ;
  • 要改变电流幅值 ,则需要改变正弦交流电压的幅值
  • 现在我们想要动态的调节, 输入电压的幅值 ,一般是使用闭环的PID进行控制;
  • 为了方便进行控制 , 所以需要将正弦的交流电压转变为直流的,所以需要进行坐标变换

2.1.3坐标变换需要做到

我们需要的控制量有 ①幅值信息 , ②角度信息

把正弦交流信息分解成角度信息幅值信息

最终分解成 角度θ\theta转矩Q磁场D


补充:

  • park变换和clark变换 , 正向变换都是对电流进行变换 ;
  • 反向变换都是对电压进行变换;


2.2反park变换

经过Park反变换将旋转坐标系(d - q 坐标系)变成了静止坐标系(α\alpha - β\beta 坐标系); 方便接下来让静止的两相坐标系向3相绕组坐标系进行变换。


2.2.1 基本公式:

{Vα= Vdcosθ  VqsinθVβ = Vdsinθ + Vqcosθ\begin{cases} V_\alpha =\ V_d\cdot\cos{\theta}\ -\ V_q\cdot\sin{\theta} \\ V_\beta\ =\ V_d\cdot\sin{\theta}\ +\ V_q\cdot\cos{\theta} \end{cases}

image-20221005205642809



2.2.2 Matlab 仿真:

image-20221006220536197

可以看到matlab仿真结果, VαV_\alphaVβV_\beta 相位差为9090^{\circ}



2.2.3 硬件平台实现:

  • 通过上位机打印参数波形
  • theta为 (0~2pi)的锯齿波
  • V_d = 0.0f
  • V_q = 1.0f

image-20221015000036380



2.3反Clark变换

反clark变换的目的是把两个垂直的坐标系(α\alpha - β\beta 坐标系 )转变为三相绕组坐标系;

(在FOC的控制中, 并没有使用反Clark变换 , 因为通过后边公式的化简发现只需要Iα和Iβ即可)


2.3.1 基本公式:

{Va = Vαcos0 + Vβcos90Vb = Vαsin30 + Vβcos30Vc = Vαsin30  Vβcos30\begin{cases} V_a\ =\ V_\alpha\cdot\cos{0^{\circ}}\ +\ V_\beta\cdot\cos{90^{\circ}} \\ V_b\ =\ -V_\alpha\cdot\sin{30^{\circ}}\ +\ V_\beta\cdot\cos{30^{\circ}} \\ V_c \ =\ -V_\alpha\cdot\sin{30^{\circ}}\ -\ V_\beta\cdot\cos{30^{\circ}} \end{cases}


化简得:

{Va = VαVb = 12Vα + 32VβVc = 12Vα  32Vβ\begin{cases} V_a\ =\ V_\alpha \\ V_b\ =\ -\frac{1}{2}\cdot V_\alpha\ +\ \frac{\sqrt{3}}{2}\cdot V_\beta \\ V_c \ =\ -\frac{1}{2}\cdot V_\alpha\ -\ \frac{\sqrt{3}}{2}\cdot V_\beta \end{cases}

坐标图:

image-20221005212529859



2.3.2 Matlab 仿真

image-20221006230158773

image-20221006230131147

  • 可以看到a, b, c三个方向互差120120^{\circ}



2.3.3 硬件平台实现

  • 通过上位机打印参数波形
  • theta为 (0~2pi)的锯齿波
  • V_d = 0.0f
  • V_q = 1.0f

image-20221015002613794



2.4 Clark变换

把三相的电流正弦波分解成二维的直角坐标系(α\alpha - β\beta 坐标 )

2.4.1 基本公式 :

{Ia+Ib+Ic=0Iα=Iacos0 Ibcosπ3  Iccosπ3Iβ = Iacos90+ Ibcosπ6  Iccosπ6\begin{cases} I_a + I_b + I_c = 0 \\ I_\alpha =I_a\cdot\cos{0^{\circ}} -\ I_b \cdot\cos{\frac{\pi}{3}}\ -\ I_c\cdot\cos{\frac{\pi}{3} }\\ I_\beta\ =\ I_a\cdot\cos{90^{\circ}} +\ I_b \cdot\cos{\frac{\pi}{6}}\ -\ I_c\cdot\cos{\frac{\pi}{6} } \end{cases}

化简得:

{Iα = 32IaIβ = 32(Ia + 2Ib)\begin{cases} I_\alpha\ =\ \frac{3}{2}\cdot I_a \\ I_\beta\ =\ \frac{\sqrt{3}}{2}\cdot (I_a \ +\ 2I_b) \end{cases}

注意:

为了保证变换前后幅值不变 , 需要乘上clark变换系数 23\frac{2}{3}

(后续在SVPWM变换部分, 会乘上 32\frac{3}{2} 补回来 )


最终公式:

{Ia+Ib+Ic=0Ia=IαIβ = 33(Ia + 2Ib)\begin{cases} I_a + I_b + I_c = 0 \\ I_a = I_\alpha \\ I_\beta\ =\ \frac{\sqrt{3}}{3}\cdot (I_a \ +\ 2I_b) \end{cases}


坐标图:

在这里插入图片描述

在这里插入图片描述



2.4.2 Matlab 仿真:

image-20221007164224758

image-20221007164051286

  • 可以看到α\alpha - β\beta 两相相差9090^{\circ}


2.5Park变换

park变换的目的是把静止的α\alpha - β\beta 坐标系 变成跟随转子转动的坐标系


2.5.1 基础公式:

{Id= Iαcosθ + IβsinθIq = Iαsinθ + Iβcosθ\begin{cases} I_d =\ I_\alpha\cdot\cos{\theta}\ +\ I_\beta\cdot\sin{\theta} \\ I_q\ =\ -I_\alpha\cdot\sin{\theta}\ +\ I_\beta\cdot\cos{\theta} \end{cases}


写成矩阵形式:

[IdIq]=[cosθsinθsinθcosθ][IαIβ]\left[ \begin{matrix} I_d \\ I_q \\ \end{matrix} \right] = \left[ \begin{matrix} \cos{\theta } & \sin{\theta}\\ -\sin{\theta} & \cos{\theta } \\ \end{matrix} \right] \left[ \begin{matrix} I_\alpha\\ I_\beta \end{matrix} \right]


坐标图:

image-20221005203445196

在这里插入图片描述



2.5.2 Matlab 仿真:

image-20221007201607635

image-20221007170053508
  • 可以看到经过反park、反clark、clark、park变换,最终输入值不变, 证明公式无误
-------------已经到底啦! -------------