电机驱动(一)——FOC坐标变换
version : v1.0 「2022.7.28」 最后补充
author: Y.Z.T.
摘要: 简要介绍FOC驱动从坐标变换到SVPWM 各个部分在MATLAB仿真和硬件平台实现的学习过程
备注: ❗️面向自己的笔记 , 有的地方可能说的不是很清晰
⭐️ 目录
1️⃣ 前言
六步换向控制无刷直流电机
通过ABC三相电流方向来控制直流无刷电机选择 ,
步骤 | A相电压 | B相电压 | C相电压 | 转子目标角度 |
---|---|---|---|---|
1 | + | - | 悬空 | 15 0 ∘ 150^{\circ} 150∘ |
2 | + | 悬空 | - | 21 0 ∘ 210^{\circ} 210∘ |
3 | 悬空 | + | - | 27 0 ∘ 270^{\circ} 270∘ |
4 | - | + | 悬空 | 33 0 ∘ 330^{\circ} 330∘ |
5 | - | 悬空 | + | 3 0 ∘ 30^{\circ} 30∘ |
6 | 悬空 | - | + | 9 0 ∘ 90^{\circ} 90∘ |
通过不断重复这六步换向 , 就可以让BLDC转动起来
1.2 有感FOC控制流程
1.3 无感FOC控制流程
反park变换 : 由直流信息转变为交流信息,把 θ \theta θ 和D轴Q轴信息进行合成 为一个交流信息
Clark变换 : 把三相的电流正弦波分解成二维的直角坐标系( α \alpha α - β \beta β 坐标 )
park变换 :
- 把
Clark变换
后的( α \alpha α - β \beta β 坐标 ) 旋转 θ \theta θ 度(即 d - q 坐标系), 其中 θ \theta θ 是转子当前的角度 ; - d - q坐标系是一个始终跟随转子进行旋转的坐标系
- 通过将一个匀速旋转向量 θ \theta θ在这个坐标系下变成了一个定值 , 实现将两个控制量 I d I_d Id 和 I q I_q Iq 线性化.
FOC驱动电机的速度由 电机的转矩和负载的大小动态决定
例: 速度开环的情况下
- 当负载不变时转矩 = 负载时 ,电机转速恒定;
- 转矩增大, 电机转速增快 , 负载阻力增大 ,直到转矩和负载重新达到平衡
- 转矩减小, 电机转速减小 , 负载阻力减小 ,直到转矩和负载重新达到平衡
2️⃣ 坐标变换
(👇 关于这各个变换的目的是什么 , 可以参考一下这篇文章)
2.1为什么要进行坐标变换
即将角度信息、磁场信息、转矩信息进行解耦,方便控制
2.1.1 目标
- 利用三相线圈产生旋转的磁场来控制转子的转动。
- 因此我们需要在三相线圈里面产生正弦的交流电流
- 通过在三相线圈内通入 , 互差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 α = V d ⋅ cos θ − V q ⋅ sin θ V β = V d ⋅ sin θ + V q ⋅ cos θ \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} {Vα= Vd⋅cosθ − Vq⋅sinθVβ = Vd⋅sinθ + Vq⋅cosθ
2.2.2Matlab 仿真:
可以看到matlab仿真结果, $V_\alpha $ 和 V β V_\beta Vβ 相位差为 9 0 ∘ 90^{\circ} 90∘
2.2.3硬件平台实现:
- 通过上位机打印参数波形
- theta为 (0~2pi)的锯齿波
- V_d = 0.0f
- V_q = 1.0f
2.3反Clark变换
反clark变换的目的是把两个垂直的坐标系( α \alpha α - β \beta β 坐标系 )转变为三相绕组坐标系;
(在FOC的控制中, 并没有使用反Clark变换 , 因为通过后边公式的化简发现只需要Iα和Iβ即可)
2.3.1基本公式:
{ V a = V α ⋅ cos 0 ∘ + V β ⋅ cos 9 0 ∘ V b = − V α ⋅ sin 3 0 ∘ + V β ⋅ cos 3 0 ∘ V c = − V α ⋅ sin 3 0 ∘ − V β ⋅ cos 3 0 ∘ \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α⋅cos0∘ + Vβ⋅cos90∘Vb = −Vα⋅sin30∘ + Vβ⋅cos30∘Vc = −Vα⋅sin30∘ − Vβ⋅cos30∘
化简得:
{
V
a
=
V
α
V
b
=
−
1
2
⋅
V
α
+
3
2
⋅
V
β
V
c
=
−
1
2
⋅
V
α
−
3
2
⋅
V
β
\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}
⎩⎪⎨⎪⎧Va = VαVb = −21⋅Vα + 23⋅VβVc = −21⋅Vα − 23⋅Vβ
坐标图:
2.3.2Matlab 仿真
- 可以看到a, b, c三个方向互差 12 0 ∘ 120^{\circ} 120∘
2.3.3 硬件平台实现
- 通过上位机打印参数波形
- theta为 (0~2pi)的锯齿波
- V_d = 0.0f
- V_q = 1.0f
2.4 Clark变换
把三相的电流正弦波分解成二维的直角坐标系( α \alpha α - β \beta β 坐标 )
2.4.1基本公式 :
{ I a + I b + I c = 0 I α = I a ⋅ cos 0 ∘ − I b ⋅ cos π 3 − I c ⋅ cos π 3 I β = I a ⋅ cos 9 0 ∘ + I b ⋅ cos π 6 − I c ⋅ cos π 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} ⎩⎪⎨⎪⎧Ia+Ib+Ic=0Iα=Ia⋅cos0∘− Ib⋅cos3π − Ic⋅cos3πIβ = Ia⋅cos90∘+ Ib⋅cos6π − Ic⋅cos6π
化简得:
{
I
α
=
3
2
⋅
I
a
I
β
=
3
2
⋅
(
I
a
+
2
I
b
)
\begin{cases} I_\alpha\ =\ \frac{3}{2}\cdot I_a \\ I_\beta\ =\ \frac{\sqrt{3}}{2}\cdot (I_a \ +\ 2I_b) \end{cases}
{Iα = 23⋅IaIβ = 23⋅(Ia + 2Ib)
注意:
为了保证变换前后幅值不变 , 需要乘上clark变换系数
2
3
\frac{2}{3}
32
(后续在SVPWM变换部分, 会乘上 3 2 \frac{3}{2} 23 补回来 )
最终公式:
{
I
a
+
I
b
+
I
c
=
0
I
a
=
I
α
I
β
=
3
3
⋅
(
I
a
+
2
I
b
)
\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}
⎩⎪⎨⎪⎧Ia+Ib+Ic=0Ia=IαIβ = 33⋅(Ia + 2Ib)
坐标图:
2.4.2Matlab 仿真:
- 可以看到 α \alpha α - β \beta β 两相相差 9 0 ∘ 90^{\circ} 90∘
2.5Park变换
park变换的目的是把静止的 α \alpha α - β \beta β 坐标系 变成跟随转子转动的坐标系
2.5.1基础公式:
{ I d = I α ⋅ cos θ + I β ⋅ sin θ I q = − 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} {Id= Iα⋅cosθ + Iβ⋅sinθIq = −Iα⋅sinθ + Iβ⋅cosθ
写成矩阵形式:
[
I
d
I
q
]
[
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]
[IdIq][cosθ−sinθsinθcosθ][IαIβ]
坐标图:
![image-20221005203445196](https://i-blog.csdnimg.cn/blog_migrate/8d068274d636482f2682cd67fbda38fa.png)
2.5.2 Matlab 仿真:
![image-20221007170053508](https://i-blog.csdnimg.cn/blog_migrate/d111ee69c75565ea9700a00ee5e7425c.png)
- 可以看到经过反park、反clark、clark、park变换,最终输入值不变, 证明公式无误