Simulink 自动代码生成电机控制:非线性磁链观测器

目录

电机方程

电压方程

磁链方程

定义状态变量和输出变量

非线性观测器方程

电角度的计算--锁相环

锁相环调参

电机方程

电压方程

磁链方程

定义状态变量和输出变量

非线性观测器方程

在对反电势进行积分获得磁链的过程中,最担心的就是直流偏置或积分漂移,常用高通滤波器、自适应补偿等方式来抑制这种负面因素。非线性模块的思路就是把估算的磁链的幅值与实际磁链幅值的差,作为估算的磁链分量的补偿项。

为了构造非线性观测器,定义:

取估计状态变量的式子为矢量函数:

 根据以上公式,搭建观测器模型

电角度的计算--锁相环

前面给出了通过非线性观测器对磁链的观测求出\alpha \beta轴磁链并通过反正切计算出当前的电机角度。在实际工程中,观测器估算的磁链中存在噪声和高频抖振,基于反正切函数的转子位置估计方法将这种抖振直接引入到反正切函数的除法运算中,导致这种高频抖振误差被放大,进而造成较大的角度估计误差。这里采用锁相环来提取转子位置信息。

这里引入和差公式:

 

                                                                图4.1.1 PLL控制框图 

如上图,把角度差作为PI控制器的误差输入,当角度估算趋近真实角度误差就不断趋近0,最终锁定实际电角度,为减小MCU的计算量没有在输入端除以\varphi f,而是通过调节PI控制的参数。PI控制闭环锁相得到角速度进而积分得到角度。需要注意的是此时的角度是一直累加的,需要mod 2pi把它限制在(0-2pi)范围。 

锁相环调参

 

前半部分加了开环启动过程,磁链观测器如果参数调好的话不需要单独加开环过程可以直接闭环启动,收敛速度快。 

 不加开环直接启动和低速运行(simulink代码生成):

id="upokUklL-1666964428988" src="https://live.youkuaiyun.com/v/embed/249172" allowfullscreen="true" data-mediaembed="csdn">

磁链观测器运行

 总结

磁链观测器有很好的低速效果,工程实践比较有意义。这里介绍了非线性磁链观测器的实现原理和方法,锁相环调参的方法。涉及了自动控制中的观测器和控制器相关的知识点。

### 观测器实现原理 观测器是一种用于估计永同步电机(PMSM)内部状态的关键技术,其核心目标是实时计算转子的位置和速度。通过引入非线性观测器,可以在无需外部传感器的情况下完成这些任务,从而降低硬件成本并提升系统的鲁棒性和可靠性。 #### 非线性观测器的工作机制 非线性观测器基于有效的概念构建[^1],能够适应表贴式(SPM)和内嵌式(IPM)两种类型的永同步电机。它利用定子电流和电压信号作为输入变量,结合电机的电特性方程来估算转子位置和速度。具体而言: - **估算**:通过对定子绕组中的电压和电流采样数据进行处理,得到瞬时值。 - **误差反馈修正**:将实际测量值与预测值之间的差异作为误差项,经过调节后反馈至控制器中调整输出。 - **快速收敛**:采用优化后的算法设计使得角度和速度能够在短时间内达到稳定状态,即使是在零速条件下也能顺利完成闭环启动过程。 以下是简化版的非线性观测器的核心代码示例: ```python import numpy as np def flux_observer(i_d, i_q, v_d, v_q, R_s, L_d, L_q, psi_f, T_s): """ 参数说明: i_d (float): d轴电流[A] i_q (float): q轴电流[A] v_d (float): d轴电压[V] v_q (float): q轴电压[V] R_s (float): 定子电阻[Ω] L_d (float): d轴电感[H] L_q (float): q轴电感[H] psi_f (float): 永久铁产生的[Wb] T_s (float): 采样时间[s] 返回值: theta_e (float): 电气角位置[rad] omega_e (float): 电气角速度[rad/s] """ # 初始化变量 lambda_d = 0.0 # 初始d轴 lambda_q = 0.0 # 初始q轴 # 计算变化率 delta_lambda_d = T_s * (-R_s * i_d + v_d - omega_e * lambda_q) delta_lambda_q = T_s * (-R_s * i_q + v_q + omega_e * lambda_d) # 更新 lambda_d += delta_lambda_d lambda_q += delta_lambda_q # 使用反正切函数求解转子位置 theta_e = np.arctan2(lambda_q, lambda_d + psi_f) # 计算角速度 omega_e_new = (theta_e - theta_prev) / T_s omega_e = alpha * omega_e_new + (1 - alpha) * omega_e # 低通滤波系数alpha=0.95 return theta_e, omega_e ``` 此代码片段展示了如何根据定子电流、电压以及电机参数逐步更新分量,并最终得出转子的角度和速度信息。值得注意的是,在实际应用过程中还需要考虑噪声抑制等问题以进一步提高精度[^1]。 --- ###
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值