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

永磁同步电机无差拍预测控制加延时补偿:探索高效电机控制之路

永磁同步电机无差拍预测控制加延时补偿

在电机控制领域,永磁同步电机(PMSM)凭借其高功率密度、高效率等优点,广泛应用于工业、交通等众多领域。而如何实现对PMSM的精准控制,一直是研究的热点。今天咱们就来聊聊永磁同步电机的无差拍预测控制以及其中至关重要的延时补偿。

无差拍预测控制基础

无差拍预测控制的核心思想,是基于电机的数学模型,预测下一时刻电机的状态,从而计算出合适的控制量,使得系统输出能快速跟踪给定值。

以PMSM在两相静止坐标系(α - β 坐标系)下的电压方程为例:

\[

\begin{cases}

u{\alpha}=Rsi{\alpha}+Ls\frac{di{\alpha}}{dt}-\omegae\psif\sin\thetae \\

u{\beta}=Rsi{\beta}+Ls\frac{di{\beta}}{dt}+\omegae\psif\cos\thetae

\end{cases}

\]

其中,$u{\alpha}$、$u{\beta}$是α - β 坐标系下的定子电压分量,$i{\alpha}$、$i{\beta}$是定子电流分量,$Rs$是定子电阻,$Ls$是定子电感,$\omegae$是电角速度,$\psif$是永磁体磁链,$\theta_e$是电角度。

对上述方程进行离散化处理,以便在数字控制系统中实现。采用一阶向前欧拉法离散化,即$\frac{dx}{dt} \approx \frac{x(k + 1)-x(k)}{Ts}$,$Ts$为采样周期。

离散化后的电压方程为:

\[

\begin{cases}

u{\alpha}(k)=Rsi{\alpha}(k)+Ls\frac{i{\alpha}(k + 1)-i{\alpha}(k)}{Ts}-\omegae(k)\psif\sin\thetae(k) \\

u{\beta}(k)=Rsi{\beta}(k)+Ls\frac{i{\beta}(k + 1)-i{\beta}(k)}{Ts}+\omegae(k)\psif\cos\thetae(k)

\end{cases}

\]

我们的目标是让下一时刻的电流$i{\alpha}(k + 1)$和$i{\beta}(k + 1)$跟踪给定值$i{\alpha}^(k + 1)$和$i{\beta}^(k + 1)$,对上面方程进行整理,就可以得到无差拍控制下的电压指令计算式:

\[

\begin{cases}

u{\alpha}^(k)=\frac{Ls}{Ts}(i{\alpha}^(k + 1)-i{\alpha}(k))+Rsi{\alpha}(k)-\omegae(k)\psif\sin\thetae(k) \\

u{\beta}^(k)=\frac{Ls}{Ts}(i{\beta}^(k + 1)-i{\beta}(k))+Rsi{\beta}(k)+\omegae(k)\psif\cos\thetae(k)

\end{cases}

\]

在代码实现上,大致框架如下(以Python为例,这里只是示意,实际应用会涉及硬件驱动等更多内容):

import numpy as np # 电机参数 Rs = 1.5 Ls = 0.0085 psi_f = 0.175 # 采样周期 Ts = 0.0001 def deadbeat_control(i_alpha_k, i_beta_k, omega_e_k, theta_e_k, i_alpha_star_k1, i_beta_star_k1): u_alpha_star_k = (Ls / Ts) * (i_alpha_star_k1 - i_alpha_k) + Rs * i_alpha_k - omega_e_k * psi_f * np.sin(theta_e_k) u_beta_star_k = (Ls / Ts) * (i_beta_star_k1 - i_beta_k) + Rs * i_beta_k + omega_e_k * psi_f * np.cos(theta_e_k) return u_alpha_star_k, u_beta_star_k

延时补偿的必要性

理想的无差拍预测控制很美好,但在实际数字控制系统中,存在各种延时,如采样延时、计算延时以及PWM更新延时等。这些延时会导致实际施加的电压并非是基于准确预测时刻的,从而影响控制性能,使电流跟踪出现偏差。

比如,由于采样和计算延时,我们实际得到的电流$i{\alpha}(k)$和$i{\beta}(k)$其实是过去某一时刻的电流值,并非当前时刻值,这就使得计算出的电压指令$u{\alpha}^(k)$和$u{\beta}^(k)$并不准确,导致电流跟踪误差。

延时补偿策略与实现

为了补偿这些延时,一种常见的方法是预估电流。我们可以根据电机的动态特性,提前预估延时期间电流的变化。

假设总延时为$n$个采样周期,我们可以通过对电流进行预估。以α轴电流为例,利用电机的运动方程和电流变化关系,预估$n$个采样周期后的电流$i_{\alpha}(k + n)$。

\[

i{\alpha}(k + n)=i{\alpha}(k)+\frac{Ts}{Ls}\sum{j = 0}^{n - 1}(u{\alpha}(k + j)-Rsi{\alpha}(k + j)+\omegae(k + j)\psif\sin\theta_e(k + j))

\]

在代码中实现延时补偿,我们需要在计算电压指令前,先进行电流预估:

def delay_compensation(i_alpha_k, i_beta_k, omega_e_k, theta_e_k, u_alpha_k_list, u_beta_k_list, n): # 假设u_alpha_k_list和u_beta_k_list是之前n个时刻的电压值 i_alpha_pre = i_alpha_k i_beta_pre = i_beta_k for j in range(n): i_alpha_pre = i_alpha_pre + (Ts / Ls) * (u_alpha_k_list[j] - Rs * i_alpha_pre + omega_e_k * psi_f * np.sin(theta_e_k)) i_beta_pre = i_beta_pre + (Ts / Ls) * (u_beta_k_list[j] - Rs * i_beta_pre + omega_e_k * psi_f * np.cos(theta_e_k)) return i_alpha_pre, i_beta_pre

然后在无差拍控制函数中,使用预估后的电流来计算电压指令:

def deadbeat_control_with_delay_comp(i_alpha_k, i_beta_k, omega_e_k, theta_e_k, i_alpha_star_k1, i_beta_star_k1, u_alpha_k_list, u_beta_k_list, n): i_alpha_pre, i_beta_pre = delay_compensation(i_alpha_k, i_beta_k, omega_e_k, theta_e_k, u_alpha_k_list, u_beta_k_list, n) u_alpha_star_k = (Ls / Ts) * (i_alpha_star_k1 - i_alpha_pre) + Rs * i_alpha_pre - omega_e_k * psi_f * np.sin(theta_e_k) u_beta_star_k = (Ls / Ts) * (i_beta_star_k1 - i_beta_pre) + Rs * i_beta_pre + omega_e_k * psi_f * np.cos(theta_e_k) return u_alpha_star_k, u_beta_star_k

通过这样的延时补偿,能够有效减少因延时带来的电流跟踪误差,提升永磁同步电机无差拍预测控制的性能,使其在实际应用中更加稳定和高效。

永磁同步电机的无差拍预测控制结合延时补偿,为我们在追求电机高性能控制的道路上提供了一个有力的手段。当然,实际应用中还需要根据具体的硬件平台和电机特性进行进一步的优化和调整。希望今天的分享能让大家对这一技术有更深入的了解。

http://www.jsqmd.com/news/226892/

相关文章:

  • [内网流媒体] 零信任理念在内网工具中的落地
  • vh6501测试busoff:硬件工程师实战案例解析
  • Kafka Connect详解:大数据ETL的得力助手
  • 模拟电子技术驱动的振荡器设计:从零实现教程
  • Keil下载与串口烧录模式对比图解说明
  • 手把手解析74194四位移位寄存器引脚定义
  • [内网流媒体] 从审计视角看内网服务设计
  • 七段数码管显示数字:基于STM32的硬件连接说明
  • openmv与stm32通信入门必看:手把手教程(从零实现)
  • 操作指定目录下的文件,对特定参数赋值,接口函数
  • MATLAB仿真bp神经网络预测电力负荷 商品形式:程序 实现功能:使用前几日负荷数据预测未来...
  • [内网流媒体] 能长期使用的内网工具具备哪些特征
  • Keil5开发环境搭建:手把手教程(从零配置)
  • STM32串口通信DMA传输实战案例解析
  • ADC+DMA采集入门:避免CPU频繁干预的方法
  • 松下PLC与SCARA机械手通讯程序设计与应用
  • 当储能系统遇上代码:聊聊那些藏在电池里的“平衡术
  • STM32CubeMX新手教程:时钟树配置通俗解释
  • PS 场景美术革命:3 分钟量产 4K 无缝贴图,从此告别“Offset”去缝加班
  • led阵列汉字显示实验数据编码入门解析
  • L298N模块在STM32最小系统中的集成方法:小白指南
  • Keil编译器下载v5.06配置STM32开发环境操作指南
  • 超详细版rs485modbus协议源代码调试技巧分享
  • 士兵过河问题
  • CSS id 和 class
  • 零基础学习Proteus元器件库大全与原理图绘制流程
  • FreeModbus在STM32CubeIDE环境下的构建教程
  • sbit在51单片机中的应用:手把手教程(从零实现)
  • pytorch深度学习笔记13
  • emwin抗锯齿功能底层驱动支持