【 PMSM FOC、Clarke、Park、PI整定、前馈、弱磁、SVPWM、过调制、标幺化知识汇总】

本文介绍了FOC框架在永磁同步电机控制中的应用,涉及磁场定向控制的优点、Clarke-Park变换用于简化电流计算、电流PI控制器的设计与整定,以及前馈控制的调整策略。作者通过实例和Matlab仿真实现了这些技术并分享了参数选择方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


`提示:本文为作者第一次发布博客,如有错误欢迎一起探讨!
本文为FOC框架的搭建,包括前馈、弱磁、PI参数、SVPWM、过调制以及系统标幺化。

# 前言

在写本文前,我一直在搭建FOC的模型,期间发现网上一些内容十分有帮助,我将其应用到模型中进行验证,最终分享给大家

---

# 一、FOC


在控制永磁同步电机时一般采用磁场定向控制,目的是控制电流电压产生旋转磁场带动转子进行转动,以下是我收集到的一些FOC的优点:
FOCField Oriented Control,磁场定向控制)控制方式具有以下优点:

转矩波动小
    FOC控制能够减少电机的转矩波动,从而提高电机的运行稳定性。
效率高
    通过精确控制磁场的大小和方向,FOC能够提高电机的效率,减少电能损耗。
噪声小
    由于电流波形的正弦化,FOC控制可以大幅减少电流谐波引起的噪声,从而使得电机运行更加安静。
动态响应快
    FOC控制能够快速响应负载变化,保持电机的平稳运行和快速加减速。
高精度控制
    FOC控制支持对电机转矩、速度、功率的精确控制,适用于多种应用场合。
可靠性和稳定性
    由于其高精度和快速响应的特性,FOC控制能够提供更稳定的电机运行和更长的使用寿命。
节能。通过精确控制磁场,FOC能够提高电机运行效率,节约电能。
无级调速
    FOC支持电机转速在一定范围内的无级调节,提供更灵活的控制选项。
保护机制健全
    FOC控制器包含多种保护功能,如过压、欠压、过流、过温等,以防止电机故障和安全事故。
寿命长
    由于采用电子换向技术,无电刷老化问题,同时减少轴承磨损,延长电机寿命。
尽管FOC控制具有众多优点,但其对控制器性能和电机参数的较高要求以及相对较高的硬件成本是其推广应用的挑战。

以下是网上抄的FOC的框图,先大概了解一下:

FOC框图


# 二、Clarke-Park 变换

在控制电机时,电机三相旋转电流计算起来总是太麻烦了,我们可以将之转化为直流电流,这就用到了clarke变换与Park变换
## 1.ClarkeTF

三相电流
上图可以直观的看到三相电流的波形

经过公式

\left\{\begin{matrix} I\alpha = Ia \\ I\beta =\frac{Ib - Ic}{\sqrt3}\end{matrix}\right.

电流变为两相交流

闭路电路中,电流之和为0,也就是 Ia + Ib + Ic = 0,此为基尔霍夫电流定律

因此变换式可简化为:

\left\{\begin{matrix} I\alpha = Ia \\ I\beta =\frac{Ia+2 \times Ib}{\sqrt3}\end{matrix}\right.

Clarke变换公式

因为采电流时我采的是UW两相,因此这一步需要变换一下得到CurB

Matlab仿真

## 2.ParkTF

clark变换后经过下述公式将交流变为直流

\left\{\begin{matrix} Id = I\alpha \times cos\theta + I\beta \times sin\theta \\ Iq = I\beta \times cos\theta - I\alpha \times sin\theta \end{matrix}\right.

Park变换交流变直流

Matlab仿真

#三、电流PI

2024.03.21更新

park变换出直流电后就可以进行电流环PI操作了,

#1、PID的模型搭建

我是用matlab搭建的PI,用的是位置式PID,还有增量式PID,增量式PID在写代码是可以省去一些资源,所以大多采样增量式。

u\left ( k \right ) = k_{p} \times e\left(k\right) + k_{i} \times \sum _{i =0}^{k}e\left(i\right)+ k_{d}\times\left ([e\left(k\right) - e\left(k-1\right) \right ]

位置式PID

u\left ( k \right )-u\left ( k-1\right ) = k_{p} \times \left [e\left(k\right) - e\left(k-1\right) \right ]+ k_{i} \times e(k)+ k_{d}\times\left [e\left(k\right) - 2\times e\left(k-1\right) +e(k-2) \right ]

增量式PID

位置式PID的Matlab仿真

# 2、Kp,Ki的整定

数学推导我就不讲的,网上一大堆,原理就是为了将电机的二阶系统降到一阶,最终对让

\left\{\begin{matrix} K_{p} = \omega _{cc}Ls \\ K_{i}=\omega _{cc}T_{s}R_{s} \end{matrix}\right.

其中wcc是PID截至频率,Ts是载波控制周期,Ls是电枢电感,Rs是电枢绕组电阻,

例如,我选的电机参数如下

%电机部分参数:
Rs = 0.05;
Ls = 0.000635;
Ts = 1e-4;
F = 1/Ts/20;
%Kp、Ki计算
Kp = 2*pi*F*Ls;
Ki = 2*pi*F*Ts*Rs;

其中截至频率F一般选择控制周期的1/20,也有选择1/10的,可以都试试效果,选择这个截至频率一般是看电机模型的频谱图得到的

例如如果系统为

则其Bode图为

可以根据图中的截至频率得到大概是wcc = 1000rad/s多点,因此F大概是300多,定一个附近的即可,也就是控制频率的1/20到1/10,

以上为我个人理解,具体细节不太清楚,我就是定了一个经验值1/20。

#四、前馈

电机的电压方程中可以了解到,DQ相有耦合的部分:

U_{d} =I_{d}R_{s}+L_{d}\frac{dI_{d}}{dt}-\omega_{e}L_{q}I_{q}\\ U_{q} =I_{q}R_{s}+L_{q}\frac{dI_{q}}{dt}+\omega_{e}(\varphi _f+L_{d}I_{d})

忽略动态项

\left\{\begin{matrix} L_{d}\frac{dI_{d}}{dt} \\ L_{q}\frac{dI_{q}}{dt} \end{matrix}\right.

可以看出其中

\left\{\begin{matrix}\omega_{e}L_{q}I_{q} \\ \omega_{e}(\varphi _f+L_{d}I_{d}) \end{matrix}\right.

为 Id Iq 耦合状态,将其解耦可以使PID相应更加迅速:

上图为Matlab的仿真模型。

在控制时,有时会发现其PI的结果不太理想,因此其中的Ld,Lq,Flux可以适当调整一番,

整定方法为,拖动电机至额定转速,开启电流环,给参考值均为0,此时会发现,只有Flux产生电压,Id Iq均为0,此时调节Flux参数,使PI输出在0附近。

调整好Flux后发现,稳态时前馈可完全代替PI输出,而PI基本不用起作用。


调整完Flux后,再调节Ld与Lq,调节方法为,给一个比较大的Q轴电流,此时D项为0,调整Lq,使D项PI为0左右,这时Lq就调整完毕。

同理,最后调Ld,给D轴电流,让Q项PI输出为0,至此前馈调节完毕。

2024.03.21,待续未完!

<think>好的,我现在要解决用户关于FOC中PLL幺化实现方法和IQ12数据格式处理的问题。首先,我需要理解用户的具体需求。用户提到了幺化(per-unit system)和IQ12格式,这两者在电机控制中确实常见,尤其是在点数处理器如DSP或某些微控制器中应用广泛。用户可能是在进行实际工程实现时遇到了数据处理或参数调的问题,需要具体的实现方法和误差处理技巧。 首先,我需要回顾幺化系统的基本概念。幺化通常用于简化计算,使不同物理量的数值范围归一化,便于在点数系统中处理。例如,电压、电流等物理量会被基准值(如额电压、最大电流)除,得到无量纲的值,这样在运算时可以减少溢出或精度不足的问题。 接下来是PLL在FOC中的作用。根据引用[1],PLL用于同步逆变器输出的相位与电机转子的位置。在FOC中,准确的转子位置和速度估计至关重要,而PLL就是实现这一目的关键模块。幺化后的PLL实现需要考虑如何将实际物理量转换为幺值,并在算法中进行处理。 然后是IQ12数据格式。IQ格式是点数表示法,常用于没有浮点单元的处理器。IQ12表示有符号数,其中低12位表示小数部分。例如,IQ12的数值范围是-32768到32767,对应-8.0到接近8.0的实际值(因为2^12=4096,所以每个LSB是1/4096)。处理IQ12数据时,需要注意乘法和加法的溢出问题,以及移位操作来保持小数点的位置。 角误差处理方面,用户可能指的是PLL在跟踪转子位置时的误差,如何用幺化和IQ12格式来处理这些误差,避免累积误差或计算溢出。需要结合幺化的参数转换和点数运算的调。 现在,我需要将幺化应用到PLL的实现中。根据引用[2]中的代码示例,PLL部分涉及速度跟踪和角度更新。幺化意味着将速度、角度误差等参数转换为相对于基准值的幺值。例如,基准速度可以选择电机的额转速,基准角度为2&pi;。这样,实际速度除以基准速度得到幺速度,实际角度误差除以基准角度得到幺误差。 在IQ12处理中,所有的参数都需要转换为点数。例如,基准速度对应的幺值1.0在IQ12中就是0x1000(因为1.0 = 4096/4096)。运算时,乘法需要考虑点数的缩放,比如两个IQ12数相乘会得到IQ24的结果,需要右移12位来保持IQ12格式。此外,积分项如PLL中的积分部分(如KI增益的累积)需要特别注意溢出问题,可能需要使用更大的临时变量来存储中间结果,再截断到IQ12。 在代码实现方面,参考引用[2]中的PLL更新函数,可以将幺化的参数代入。例如,将emf_alpha和emf_beta转换为幺值,然后计算误差,再乘以幺化的KP和KI增益。在IQ12格式下,所有的变量都需要用数类型存储,并且运算过程中进行适当的移位操作。 另外,角误差的处理可能需要滤波或限幅。例如,当误差超过一范围时,可能需要进行限幅避免积分饱和,或者使用低通滤波来平滑误差信号,避免高频噪声影响PLL的稳性。 可能遇到的问题包括参数范围的选择是否合适,幺化基准值是否合理,以及点数运算中的精度损失如何处理。例如,如果基准速度设置不当,可能导致幺值超出IQ12的表示范围,或者在运算中累积的误差过大,影响角度估计的准确性。 最后,用户可能需要具体的代码示例或步骤说明,如何将现有的浮点PLL实现转换为幺化和IQ12格式的点实现。这包括参数的转换、运算的调、以及调试技巧,比如如何通过观察变量值来调基准值和增益参数,确保系统稳运行。</think>### FOC中PLL幺化实现与IQ12数据处理方法 #### 一、PLL幺化实现原理 1. **幺化基准值选择** - 速度基准值:$ω_{base} = ω_{rated}$(额机械角速度) - 角度基准值:$θ_{base} = 2&pi;$(电角度周期) - 电压基准值:$V_{base} = V_{dc}/2$(直流母线电压半值) 2. **PLL误差计算幺化** 根据引用[2]的PLL误差计算公式: $$error_{pu} = \frac{emf_α \cosθ + emf_β \sinθ}{V_{base}}$$ 其中$emf_α/β$需预先幺化处理,如$emf_{pu} = emf_{actual}/V_{base}$[^2] 3. **幺化控制方程** $$Δω_{pu} = K_p \cdot error_{pu} + K_i \cdot \int error_{pu} dt$$ $$θ_{el\_pu} = \int (ω_{pu} + Δω_{pu}) dt$$ #### 二、IQ12数据格式处理技巧 1. **数值转换规则** - 幺值→IQ12:$IQ12 = round(value_{pu} \times 4096)$ - 示例:0.5幺值 → 0x0800(二进制0000100000000000) 2. **关键运算处理** - **乘法运算**:需保留中间结果的24位精度 ```c int32_t mult = (int32_t)a_iq12 * b_iq12; // 结果存储在24位空间 int16_t result = (mult + 0x800) >> 12; // 四舍五入处理 ``` - **积分防溢出**:采用饱和累加策略 ```c int32_t integral_temp = integral + error_iq12; integral = (integral_temp > 32767) ? 32767 : ((integral_temp < -32768) ? -32768 : integral_temp); ``` 3. **角度误差特殊处理** - **周期截断**:对超过$2&pi;$的角度进行模运算 ```c #define IQ12_2PI 0x6488 // 2&pi;对应的IQ12值(6.283185307≈0x6488/0x1000) theta_iq12 = theta_iq12 % IQ12_2PI; // 硬件加速指令更佳 ``` - **角度差值计算**:使用带符号减法 ```c int16_t delta_theta = (theta_target - theta_actual + 0x2000) & 0x3FFF) - 0x2000; ``` #### 三、实现示例代码 ```c // 幺化PLL结构体 typedef struct { int16_t speed_pu; // IQ12格式幺速度 int16_t theta_pu; // IQ12格式电角度 int32_t integral; // 积分项存储 int16_t Kp; // IQ12格式比例增益 int16_t Ki; // IQ12格式积分增益 } PLL_IQ12; void PLL_Update_IQ12(PLL_IQ12 *pll, int16_t emf_alpha, int16_t emf_beta) { // 角度误差计算(IQ12运算) int32_t cos_t = IQ12_Cos(pll->theta_pu); // 查表法实现 int32_t sin_t = IQ12_Sin(pll->theta_pu); int32_t error = (emf_alpha * cos_t + emf_beta * sin_t) >> 12; // 比例积分运算 int32_t prop_term = (pll->Kp * error) >> 12; pll->integral += (pll->Ki * error) >> 6; // 积分项保留更高精度 // 速度更新(限幅±1.0幺) int32_t speed_update = prop_term + (pll->integral >> 12); pll->speed_pu = SATURATE(speed_update, 0x1000, -0x1000); // 角度更新(自动处理周期溢出) pll->theta_pu += (pll->speed_pu * CONTROL_PERIOD) >> 12; pll->theta_pu &= 0x3FFF; // 等效模2&pi;操作 } ``` #### 四、调试要点 1. **参数顺序** - 先设置$V_{base}$为实际母线电压的50% - 调$K_p$使系统稳(典型值0.1-0.3幺) - 最后加入$K_i$消除稳态误差(约为$K_p$值的1/10) 2. **异常情况处理** - **角度失锁检测**:连续10个周期误差超过$&pi;/4$时触发复位 - **数据溢出诊断**:监控Q志位或使用溢出中断
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值