当前位置: 首页 > article >正文

FOC 控制笔记【二】无感控制、滑膜观测器和PLL

一、无感控制基础

1.1 反电动势引入,电动机是不符合欧姆定律的电器

因为电机的定子由永磁铁构成,所以转子通电后受到会受到安培力的作用旋转。但是电机并不能简单的等效为一个电阻器。

假设电机内绕组铜丝是 1Ω,我们供给 10V 的电压,我们通常会发现电机仅消耗了 1A 左右的电流。这样看起来并不符合欧姆定律。

这是因为电动机转动时,线圈因切割磁感线,所以会产生感应电动势。线圈中产生的感应电动势跟加在线圈上的电压方向相反。

产生方式如下图所示,其中 R 和 L 被等效看作为电机的电气性质。

我们把这个跟外加电压方向相反的感应电动势叫做反电动势

1.1.1 反电动势电路中的电压公式

U = E+U_{R}

  • U = 供给电机的电压
  • E = 反电动势的电压
  • U_{R} = 电机自身的内阻所消耗的电压

1.1.2 电机线圈电流公式

线圈内电流为:

I=\frac{U-E}{R}

  • E = 反电动势
  • U = 外加电压
  • R = 表示电动机回路总电阻

1.1.3 具有反电动势电路的功率关系

IU-IE=I^2R

  • IU = 电源供给给电动机的功率(输入功率)
  • IE = 电动机输出的机械功率
  • I^2R = 热功损(铜损、铁损、机械损等)

1.1.4 根据安培力公式推算电机最大转速

安培力公式:

E=BIv

  • B = 表示磁感应强度
  • L = 表导体棒的长度
  • v = 导体棒切割的速度

常理可知,电机反电动势不会大于供给的电压,加入我们给电机输入10V 电压,反电动势将不会超过 10V。

对于一个电机参数来说,B 和 L 是已知的,E 也不会超过输入电压,我们就可以根据这个公式推算出 v,进而得到电机空转的理论最大值。

二、推算转子角度与获得测量反向电动势

无感控制就是是从电机的反电动势中,获得当前电机转子的电角度。

2.1 电机的反电动势公式

根据电机反电动势公式:

V_{BEMF} = -N\frac{\Delta (B\times A)}{\Delta t}

  • V_{BEMF} = 反电动势
  • N = 线圈匝数
  • B = 磁场的变化率 (T)
  • A = 线圈截面积 (m^2)
  • \Delta t = 产生磁场变化所经历的时间 (s)

通过这条公式,我们就能计算出电机再转动过程中,转子磁铁磁感线与线圈上的导线相互切割所产生的电压大小,这个电压的大小称之为反电动势。

无感控制的核心思路就是根据这个反电动势,来求出转子切割磁场的角度,也就是电角度。

2.2 反电动势和转子电角度的关系

这张图是反电动势和转子电角度的关系,我们可知,反电动势其实是包含可转子的电角度信息的。

电机的反电动势公式也可以写成另一种和转子有关的写法:

V_{BEMF} = \omega \times k_{e}\times sin(\theta + \varphi )

  • V_{BEMF} = 反电动势
  • k_{e} = 被称为反电动势常数,单位 (mV/Hz)
  • \theta = 无刷电机转子角度 (rad)
  • \omega = 电机转速,单位 (Hz)
  • \varphi = 相位差

在这个公式中的  k_{e} 是由 V_{BEMF} = -N\frac{\Delta (B\times A)}{\Delta t} 中的,A = 线圈截面积 (m^2) 和

N = 线圈匝数得到的。

2.2.1 相位问题

由于电机三相角度相差为 120° ,A 相的反电动势,相位差为0°;B 相则是120°;C 相是240°。

也就是三项反电动势公式为:

V_{BEMF_A} = \omega \times k_{e}\times sin(\theta + 0 )

V_{BEMF_B} = \omega \times k_{e}\times sin(\theta + 120 )

V_{BEMF_C} = \omega \times k_{e}\times sin(\theta + 240 )

其中相位偏移图如下所示:

在得到任意两项的数据后,联立方程即可推算出电角度: 

 \left\{\begin{matrix} V_{BEMF_A} = \omega \times k_{e}\times sin(\theta + 0 ) \\ V_{BEMF_B} = \omega \times k_{e}\times sin(\theta + 120 ) \end{matrix}\right.

2.3 如何测量反电动势

  

2.3.1 电压平衡方程

 如果我们将上图中 A 相位的反电动势看作为一个电池,其和电源电压是正极对正极,负级对负级的,也就是如下图:

根据基尔霍夫电压定律,电路中电压的合为 0 ,我们可以得到这个公式:

0 = U_{a} - I_{m} \times R_{m} - L_{m} \times \frac{di_{a}}{dt} - V_{BEMF_{a}}

  • U_{a} = A 相的电压
  • I_{m} = 当前相位的电流
  • R_{m} = 电机内阻
  • L_{m} = 电感的的值
  • \frac{di_{a}}{dt} = 电流变化趋势微分
  • I_{m} \times R_{m} = 电流乘电阻等于电压
  • L_{m} \times \frac{di}{dt} = 电感所产生的电压,根据电感公式得到

其中电机的电压、内阻和电感的值都是已知的,电流可以通过电阻测量而出。

将计算得到的反电动势数据带入这个公式即可计算出电机的电角度。

V_{BEMF} = \omega \times k_{e}\times sin(\theta + \varphi )

三、反正切法求电机角度

2.1 单相反电动势方程

0 = U_{a} - I_{m} \times R_{m} - L_{m} \times \frac{di_{a}}{dt} - V_{BEMF_{a}}

  • U_{a} = A 相的电压
  • I_{m} = 当前相位的电流
  • R_{m} = 电机内阻
  • L_{m} = 电感的的值
  • \frac{di_{a}}{dt} = 电流变化趋势微分
  • I_{m} \times R_{m} = 电流乘电阻等于电压
  • L_{m} \times \frac{di}{dt} = 电感所产生的电压,根据电感公式得到

继续取 A 相观察,再上一章中,根据基尔霍夫电压定律,电路中电压的合为 0 ,我们可以得到这个公式:

U_{a} - I_{m} \times R_{m} - L_{m} \times \frac{di_a}{dt}-V_{BEMF_a} = 0

通过移项可得:

V_{BEMF_a} = U_{a} - I_{m} \times R_{m} - L_{m} \times \frac{di_{a}}{dt}

提公因数可得:

\frac{di_{a}}{dt} =-\frac{R}{L}i_{a}+\frac{1}{L_{m}}(U_{a}-V_{BEMF_a})

至此,我们就得到了三项相反电动势方程:

\frac{di_{a}}{dt} =-\frac{R}{L}i_{a}+\frac{1}{L_{m}}(U_{a}-V_{BEMF_a})

\frac{di_{b}}{dt} =-\frac{R}{L}i_{b}+\frac{1}{L_{m}}(U_{b}-V_{BEMF_b})

\frac{di_{c}}{dt} =-\frac{R}{L}i_{c}+\frac{1}{L_{m}}(U_{c}-V_{BEMF_c})

其中,在左面的是都是电流的一阶导数。

2.2 电机电压方程的散点积分式

对电流变化趋势做积分,需要乘采样时间间隔 T_{s},可以得到当前的电流:

i_{a_{now}} = i_{a_{prev}}+\frac{di_{a}}{dt} T_{s}

  • i_{a_{prev}} = 上次计算的 i_{a_{now}}
  • \frac{di_{a}}{dt} = 电流变化趋势微分

再结合电机电压方程可得散点积分式:

i_{a_{now}} = i_{a_{prev}}+\frac{di_{a}}{dt}[-\frac{R}{L}i_{a}+\frac{1}{L_{m}}(U_{a}-V_{BEMF_a})]

如果把经过 Clark 变换后的 α、β 也看成回路,可以类比为:

i_{\alpha_{now} } = i_{\alpha_{prev} }+\frac{di_{\alpha }}{dt}[-\frac{R}{L}i_{\alpha }+\frac{1}{L_{m}}(U_{\alpha }-V_{BEMF_\alpha })]

i_{\beta_{now} } = i_{\beta_{prev} }+\frac{di_{\beta }}{dt}[-\frac{R}{L}i_{\beta }+\frac{1}{L_{m}}(U_{\beta }-V_{BEMF_\beta })]

2.3 反正切求电角度

在散点积分式后,其中对于 U_{\alpha }U_{\beta }i_{\alpha }i_{\beta } 都是已知值。

通过这些即可推算  V_{BEMF_\alpha } 和 V_{BEMF_\beta }

因为 α 轴和 β 轴呈 90°,所以使用反正切角度即可推算出电角度。

\theta = -arctan(\frac{V_{BEMF_\alpha }}{V_{BEMF_\beta }})

四、滑模观测器

根据相的反电动势公式计算并不是准确的:

V_{BEMF_{a}} = U_{a} - I_{m} \times R_{m} - L_{m} \times \frac{di_{a}}{dt}

其中,相电阻和相电感值依赖于电机运行的状态,如果稍有偏差,式子就不能正确的求出电机的反电动势。因为电机常是处于拖动、载荷运行等状态,所以电机发热会影响这些常数变化。这就导致最终通过反电动势计算的转子角度不准。

滑模观测器在做的是,把正确的反电动势看作一个滑模面:

先预估一个反电动势,然后根据公式反推出预估电流。将反推出的预估电流与真实电流差值做调整,最后加到反电动势上形成闭环。最后根据反正切函数计算出角度。

这种闭环允许电机内阻,电感等出现运动的动态的偏差。在上图中,滑模面是真实的反电动势,红色曲线则是预估的反电动势。

3.1 滑膜观测器的思路

以 A 相举例,滑膜观测器的思路是根据电压方程的散点积分式,先预测一个假定的 A 相反电动势,然后基于这个反电动势预测电流:

i_{a_{now}} = i_{a_{prev}}+\frac{di_{a}}{dt}[-\frac{R}{L}i_{a}+\frac{1}{L_{m}}(U_{a}-V_{BEMF_a})]

如果预测的电流等于真实测量的电流,那么反电动势也就是正确的:

i_{a_{now}}(预测) - i_{a_{now}}(真实) = 0

如果预测的电流不等于真实测量的电流,那么就是不对的:

i_{a_{now}}(预测) - i_{a_{now}}(真实) ≠ 0

到目前位置,滑膜观测器流程如下:

最后输出新的反电动势,应该根据预测结果正向调整反电动势:

V_{BEMF_A} = h\times sign(i_{a_{-now}}(预测)-i_{a_{-now}}(真实))

  • h = 比例系数
  • sat() = 限幅函数,将差值限定在某个范围内

如果只使用比较函数 sign 处理,会导致观测的滑模面跳动严重。

 此时可以考虑使用 set 饱和函数:

V_{BEMF_A} = h\times set(i_{a_{-now}}(预测)-i_{a_{-now}}(真实))

  • h = 比例系数
  • sat() = 饱和函数,在输出时采用一段带有斜率的函数

3.2 滑膜观测器代码实现

待补充。。。

五、PLL 锁相环

通过对电机物理运动原理的理解,先把 error 类推为角加速度,对其求积分得到 \theta

5.1 反电动势的帕克变换

这是帕克变换的变换公式:

\begin{bmatrix} i_{d} \\ i_{q} \end{bmatrix} = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta &\cos\theta \end{bmatrix}\begin{bmatrix}i_{\alpha } \\ i_{\beta } \end{bmatrix}

同样的,对于 d、q 轴的反电动势来说,可以进行帕克变换:

\begin{bmatrix} E_{d} \\ E_{q} \end{bmatrix} = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta &\cos\theta \end{bmatrix}\begin{bmatrix}E_{\alpha } \\ E_{\beta } \end{bmatrix}

只提出 d 轴,可得:

E_{d} = E_{a}\cos\theta+E_{\beta }\sin\theta

在 d 轴电流为 0 的情况,此时 d 轴的反电动势也应为 0:

E_{d} = E_{a}\cos\theta+E_{\beta }\sin\theta = 0

那么,预估的反电动势 E_{d_{est}} 也应该等于 0:

E_{d_{est}} = E_{a}\cos\theta_{est}+E_{\beta }\sin\theta_{est} = 0

果 \theta_{est} 角度不准确,也就是预估的 E_{d_{est}} 不等于 0:

E_{d_{est}} = E_{a}\cos\theta_{est}+E_{\beta }\sin\theta_{est} \neq 0

此时可以先计算出电角度误差值。

在电机加速度时,由于传感器通常是测得电流值后,再计算观测的电角度  \theta_{est} 的,当计算加速度时,总会滞后真实的 \theta当电机加速或减速时,这个 error 的偏差值就会一直存在。  

电机反电动势的大小与电机的电磁力直接相关,电机的电磁力又与电机的转子加速度相关联。因此,电机的反电动势,其实是和转子的加速度存在等效关系。

所以根据以上推理,error 和 加速度呈正向关系:

error=E_{d} - E_{d_{est}}

由于实际物理系统中被设定为 E_{d} 等于 0,就可以合并式子:

error=E_{d} - E_{d_{est}}=0-(E_{a} \cos\theta_{est} + E_{\beta }\sin\theta_{est}) 

此时,error 可以看作为电机转子加速度,Ki 则是加速度系数(根据实际情况调节),对他求积分得转子速度:

i_{err} = \sum T_{s}\times K_{i}\times error

在下列式子中,K_{p}\times error 的目的是提升 \theta 点的输出响应,因为mcu的计算累加积分需要时间,这样可以加重瞬时加速度输出的权重,最终,得到一个高质量的转子速度值:

\theta = K_{p}\times error+i_{err}

5.2 PLL代码演示

待补充。。。


http://www.kler.cn/a/578152.html

相关文章:

  • WebView2网页封装桌面软件
  • RBAC 权限系统管理模型 学习笔记
  • [排序算法]直接插入排序
  • MPPT与PWM充电原理及区别详解
  • 【每日八股】Golang篇(二):关键字(上)
  • 锂电池组的串数设计研究
  • 手写一个Tomcat
  • 【HarmonyOS Next】鸿蒙应用故障处理思路详解
  • 微服务面试题:服务网关和链路追踪
  • 运行OpenManus项目(使用Conda)
  • 高效运行 QwQ-32B + 错误修复
  • java项目springboot 项目启动不了解决方案
  • 服务器配置完成后如何启动或者终止java后端,相关运行文件如下:
  • 大白话react第十八章
  • openharmory-鸿蒙生态设备之间文件互传发现、接入认证和文件传输
  • 用java如何利用jieba进行分词
  • STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步
  • 算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
  • 自执行函数(Self-Invoking Function)
  • Vue2使用jsts,将wkt转为geojson