无刷电机FOC控制笔记

序:

矢量控制的核心思想是为了简化无刷电机的控制模型,将一个需要换相的无刷电机通过各种算法变换,抽象为一个直流电机的控制模型,只需要控制简单的两个直流分量来控制无刷电机,其中Vq抽象为直流电机的两端电压,Vd可调节电机力矩,但这个模型需要一个实时的电机轴角度θ参与计算。

为了实现这个直流电机的控制模型,需要用到两个数学变换,即clarke变换和park变换。需要用到最原始的PID控制器等内容。

一、clarke变换:

初衷是将三相的磁路模型变换成正交的两相磁路模型,即将三相abc,变换为两相α,β

波形如下图

clarke逆变换则是反过来变换,已知α,β,求abc

二、park变换:

通过clarke变换,变量已经由三个变少到两个,但是依然是一个交流分量,对于控制来说依然不够友好,所以引入了park变换,将两相的坐标轴看做转子沿着圆形旋转起来,便可以得出两个直流量q、和d。

这样变换后周期变化的波形变化成了两个直流的信号,对于控制来说非常友好,即将α,β,θ转换为q,d

park逆变换则是反过来变换,已知q,d和电角度θ,转换成α,β

三、了解了上面的两个变换,我们将它变现,对,先让电机转起来吧

使用park逆变换,和clarke逆变换,很容易就能将无刷当做一个直流电机转起来

输入参数有三个:Vq,Vd,和实时电角度θ(theta),其中Vq,Vd是两个直流分量,可控制无刷电机的转速和力矩。θ则是通过间接或者直接测量得到的输出轴的实际角度,关于电角度和机械角度的文章很多,可以百度查清楚。

通过这两个逆变换后得到了abc的电压,Va,Vb,Vc,将这三个值输出到pwm的三个通道的比较输出寄存器中,即可将无刷电机驱动起来,笔者使用Vq = 3000,Vd = 0做的测试,一个单磁极的内转子电机无声的转到4000多rpm。

通过变换后,Vα,Vβ的波形和pwm的duty的波形,到此电机可以通过Vq直接控制无刷电机转动,反转则给Vq一个负数即可。

四、无刷电机能通过一个直流分量转起来了,但是是开环控制,矢量控制其中有个优点就是功率因数可以做的很好,原因就是电流和电压的波形很一致,那如果是开环控制,这个优点就不一定有保证,而且增加电流环后力矩也可以得到控制。

废话不多说,对于算法而言,需要采集到电机三相的线上电流,可以通过三电阻采样法,单电阻采样法,相电流直接采样法等等方法获得,具体可以百度一下。

通过电流采集业务观测到的三相电流Ia,Ib,Ic波形如下,与控制输出给电机的Va,Vb,Vc波形相位相同。由于在任意时刻满足Ia+Ib+Ic = 0,所以只用采集a相和b相的电流

通过clarke变换和park变换后可以得到Iq,Id,如下图

为何要大费周章变换那么多次呢?就是为了得到Iq,Id呀,这可是一个直流量啊,符号代表了转动方向,发现没,Vq,Vd也是直流量,所以目的很简单,就是为了用最经典的PID做闭环控制呀!

使用最经典的PI控制,将电压跟随电流的变化,从而实现电流闭环控制

五、一般来讲,电流坏是高速环,也一般作为无刷电机的内环,如果要实现速度闭环控制,那电流环就是内环,速度环就是外环,下面上一个总图

foc速度环+电流环总框图

### Clarke变换的概念及其在电机控制中的应用 #### 1. Clarke变换的基本定义 Clarke变换是一种将三相交流信号从三相静止坐标系(ABC)转换到两相静止坐标系(αβ)以及一个零序分量(γ)的技术[^2]。该变换的核心在于通过线性代数的方式,减少系统的维度并简化后续的计算过程。 其基本公式如下所示: 假设输入的三相电流分别为 \(i_a\)、\(i_b\) 和 \(i_c\),则可以通过以下矩阵运算完成Clarke变换: \[ \begin{bmatrix} i_\alpha \\ i_\beta \\ i_0 \end{bmatrix} = \frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \\ \frac{1}{2} & \frac{1}{2} & \frac{1}{2} \end{bmatrix} \cdot \begin{bmatrix} i_a \\ i_b \\ i_c \end{bmatrix} \] 其中,\(i_\alpha\) 和 \(i_\beta\) 是两相静止坐标系下的分量,而 \(i_0\) 则代表零序分量[^4]。 --- #### 2. Clarke变换的应用场景 Clarke变换广泛应用于电力电子和电机控制系统中,尤其是在永磁同步电机(PMSM)的矢量控制(Field-Oriented Control, FOC)中。以下是具体应用场景: - **降低系统复杂度**:通过将三相系统降维至两相系统,减少了控制器的设计难度,并提高了实时处理效率。 - **便于后续Park变换**:Clarke变换的结果通常作为Park变换的前置步骤,用于将两相静止坐标系的数据映射到旋转坐标系下,从而实现更精确的电机控制[^1]。 - **支持无刷直流电机(BLDC)和异步电机控制**:对于这些类型的电机,Clarke变换同样可以提供有效的中间数据表示形式。 --- #### 3. 实现方式 以下是基于TI和ST电机控制库的Clarke变换实现方法[^3]。代码示例如下: ```c void ClarkeTransform(float ia, float ib, float ic, float *ialpha, float *ibeta, float *izero) { const float two_thirds = 2.0f / 3.0f; const float sqrt_three_half = sqrt(3.0f) / 2.0f; // 计算 α 轴分量 *ialpha = two_thirds * (ia - 0.5f * ib - 0.5f * ic); // 计算 β 轴分量 *ibeta = two_thirds * (sqrt_three_half * ib - sqrt_three_half * ic); // 计算零序分量 *izero = two_thirds * (ia + ib + ic); } ``` 上述函数实现了从三相静止坐标系到两相静止坐标系的转换操作。注意,实际工程中可以根据需求忽略零序分量(当系统完全对称时),以进一步优化性能。 --- #### 4. 注意事项 - 如果目标系统是对称三相系统,则零序分量理论上应为零,因此可以在某些情况下省略对其的计算。 - 在硬件实现过程中需要注意浮点数精度的影响,尤其是嵌入式平台上的定点数运算可能引入误差。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值