电机驱动(一)——FOC坐标变换
version : v1.0 「2022.7.28」 最后补充
author: Y.Z.T.
摘要: 简要介绍FOC驱动从坐标变换到SVPWM 各个部分在MATLAB仿真和硬件平台实现的学习过程
备注: ❗️面向自己的笔记 , 有的地方可能说的不是很清晰
1️⃣ 前言
六步换向控制无刷直流电机

通过ABC三相电流方向来控制直流无刷电机选择 ,
步骤 |
A相电压 |
B相电压 |
C相电压 |
转子目标角度 |
1 |
+ |
- |
悬空 |
150∘ |
2 |
+ |
悬空 |
- |
210∘ |
3 |
悬空 |
+ |
- |
270∘ |
4 |
- |
+ |
悬空 |
330∘ |
5 |
- |
悬空 |
+ |
30∘ |
6 |
悬空 |
- |
+ |
90∘ |
通过不断重复这六步换向 , 就可以让BLDC转动起来
1.2 有感FOC控制流程

1.3 无感FOC控制流程

反park变换 : 由直流信息转变为交流信息,把θ 和D轴Q轴信息进行合成 为一个交流信息
Clark变换 : 把三相的电流正弦波分解成二维的直角坐标系(α - β 坐标 )

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

FOC驱动电机的速度由 电机的转矩和负载的大小动态决定
例: 速度开环的情况下
- 当负载不变时转矩 = 负载时 ,电机转速恒定;
- 转矩增大, 电机转速增快 , 负载阻力增大 ,直到转矩和负载重新达到平衡
- 转矩减小, 电机转速减小 , 负载阻力减小 ,直到转矩和负载重新达到平衡
2️⃣ 坐标变换
(👇 关于这各个变换的目的是什么 , 可以参考一下这篇文章)
深入浅出讲解FOC算法与SVPWM技术
2.1为什么要进行坐标变换
即将角度信息、磁场信息、转矩信息进行解耦,方便控制
2.1.1 目标
- 利用三相线圈产生旋转的磁场来控制转子的转动。
- 因此我们需要在三相线圈里面产生正弦的交流电流
- 通过在三相线圈内通入 , 互差120度的正弦的电压来产生正弦交流电流。
2.1.2 将交流信息转变成直流信息
- 因为foc电机的速度是通过转矩来控制的 , 如果想要改变电机转矩 ;
- 则需要改变通入线圈的正弦交流电的幅值 ;
- 要改变电流幅值 ,则需要改变正弦交流电压的幅值
- 现在我们想要动态的调节, 输入电压的幅值 ,一般是使用闭环的PID进行控制;
- 为了方便进行控制 , 所以需要将正弦的交流电压转变为直流的,所以需要进行坐标变换
2.1.3坐标变换需要做到
我们需要的控制量有 ①幅值信息 , ②角度信息
把正弦交流信息分解成角度信息和幅值信息
最终分解成 角度θ 、转矩Q、磁场D
补充:
- park变换和clark变换 , 正向变换都是对电流进行变换 ;
- 反向变换都是对电压进行变换;
2.2反park变换
经过Park反变换将旋转坐标系(d - q 坐标系)变成了静止坐标系(α - β 坐标系); 方便接下来让静止的两相坐标系向3相绕组坐标系进行变换。
2.2.1 基本公式:
{Vα= Vd⋅cosθ − Vq⋅sinθVβ = Vd⋅sinθ + Vq⋅cosθ

2.2.2 Matlab 仿真:

可以看到matlab仿真结果, Vα 和 Vβ 相位差为90∘
2.2.3 硬件平台实现:
- 通过上位机打印参数波形
- theta为 (0~2pi)的锯齿波
- V_d = 0.0f
- V_q = 1.0f

2.3反Clark变换
反clark变换的目的是把两个垂直的坐标系(α - β 坐标系 )转变为三相绕组坐标系;
(在FOC的控制中, 并没有使用反Clark变换 , 因为通过后边公式的化简发现只需要Iα和Iβ即可)
2.3.1 基本公式:
⎩⎪⎨⎪⎧Va = Vα⋅cos0∘ + Vβ⋅cos90∘Vb = −Vα⋅sin30∘ + Vβ⋅cos30∘Vc = −Vα⋅sin30∘ − Vβ⋅cos30∘
化简得:
⎩⎪⎨⎪⎧Va = VαVb = −21⋅Vα + 23⋅VβVc = −21⋅Vα − 23⋅Vβ
坐标图:

2.3.2 Matlab 仿真


- 可以看到a, b, c三个方向互差120∘
2.3.3 硬件平台实现
- 通过上位机打印参数波形
- theta为 (0~2pi)的锯齿波
- V_d = 0.0f
- V_q = 1.0f

2.4 Clark变换
把三相的电流正弦波分解成二维的直角坐标系(α - β 坐标 )
2.4.1 基本公式 :
⎩⎪⎨⎪⎧Ia+Ib+Ic=0Iα=Ia⋅cos0∘− Ib⋅cos3π − Ic⋅cos3πIβ = Ia⋅cos90∘+ Ib⋅cos6π − Ic⋅cos6π
化简得:
{Iα = 23⋅IaIβ = 23⋅(Ia + 2Ib)
注意:
为了保证变换前后幅值不变 , 需要乘上clark变换系数
32
(后续在SVPWM变换部分, 会乘上 23 补回来 )
最终公式:
⎩⎪⎨⎪⎧Ia+Ib+Ic=0Ia=IαIβ = 33⋅(Ia + 2Ib)
坐标图:


2.4.2 Matlab 仿真:


- 可以看到α - β 两相相差90∘
2.5Park变换
park变换的目的是把静止的α - β 坐标系 变成跟随转子转动的坐标系
2.5.1 基础公式:
{Id= Iα⋅cosθ + Iβ⋅sinθIq = −Iα⋅sinθ + Iβ⋅cosθ
写成矩阵形式:
[IdIq]=[cosθ−sinθsinθcosθ][IαIβ]
坐标图:

2.5.2 Matlab 仿真:

- 可以看到经过反park、反clark、clark、park变换,最终输入值不变, 证明公式无误