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

纯积分的磁链观测器

纯积分的磁链观测器

文章目录

  • 纯积分的磁链观测器
    • 1. 基本概念
    • 2. 计算转子角度的公式
    • 3. C语言实现
    • 4. 代码解释
    • 5. 实际应用中的注意事项
    • 6. 总结

1. 基本概念

磁链(Flux Linkage)是指磁通量和绕组匝数的乘积,在电机控制中,通常讨论的是定子磁链或转子磁链。对于永磁同步电机(PMSM),磁链的动态方程通常可以表示为:

λ s = ∫ ( V s − R s ⋅ I s ) d t \lambda_s = \int (V_s - R_s \cdot I_s) \, dt λs=(VsRsIs)dt

其中:

  • λ s \lambda_s λs 是定子磁链。
  • V s V_s Vs 是定子电压。
  • R s R_s Rs 是定子电阻。
  • I s I_s Is 是定子电流。

2. 计算转子角度的公式

假设已经得到了 α \alpha α轴和 β \beta β轴的磁链分量 λ α \lambda_{\alpha} λα λ β \lambda_{\beta} λβ,则转子角度 θ e \theta_e θe可以通过以下公式计算:

θ e = atan2 ( λ β , λ α ) \theta_e = \text{atan2}(\lambda_{\beta}, \lambda_{\alpha}) θe=atan2(λβ,λα)

其中,atan2函数用于计算 λ β \lambda_{\beta} λβ λ α \lambda_{\alpha} λα所确定的向量的极角(即磁链向量的相位角),返回值为弧度制角度。

  • λ α \lambda_{\alpha} λα:观测到的 α \alpha α轴磁链。
  • λ β \lambda_{\beta} λβ:观测到的 β \beta β轴磁链。

3. C语言实现

以下是如何在前面的磁链观测器代码基础上计算转子角度的示例:

#include <stdio.h>
#include <math.h>// 定义电机参数
#define Rs 1.0f     // 定子电阻,单位:欧姆
#define Ts 0.001f   // 采样时间,单位:秒// 磁链观测器状态变量
typedef struct {float lambda_alpha;  // Alpha轴磁链float lambda_beta;   // Beta轴磁链
} FluxObserver_State;// 电机模型输入结构
typedef struct {float v_alpha;  // Alpha轴电压float v_beta;   // Beta轴电压float i_alpha;  // Alpha轴电流float i_beta;   // Beta轴电流
} Motor_Input;// 磁链观测器的更新函数
void FluxObserver_Update(FluxObserver_State *state, Motor_Input *input) {// 更新Alpha轴磁链state->lambda_alpha += Ts * (input->v_alpha - Rs * input->i_alpha);// 更新Beta轴磁链state->lambda_beta += Ts * (input->v_beta - Rs * input->i_beta);
}// 计算转子电角度
float Calculate_Rotor_Angle(FluxObserver_State *state) {return atan2f(state->lambda_beta, state->lambda_alpha);
}// 输出磁链和转子角度
void PrintFluxAndAngle(FluxObserver_State *state) {float rotor_angle = Calculate_Rotor_Angle(state);printf("Lambda Alpha: %f, Lambda Beta: %f, Rotor Angle: %f radians\n", state->lambda_alpha, state->lambda_beta, rotor_angle);
}int main() {// 初始化磁链观测器状态FluxObserver_State flux_state = {0.0f, 0.0f};// 初始化电机输入 (假数据)Motor_Input motor_input = {1.0f, 0.5f, 0.2f, 0.1f};// 更新磁链观测器for (int i = 0; i < 1000; i++) {FluxObserver_Update(&flux_state, &motor_input);// 输出磁链和转子角度PrintFluxAndAngle(&flux_state);}return 0;
}

4. 代码解释

  1. FluxObserver_Update函数

    • 该函数更新磁链的 α \alpha α轴和 β \beta β轴分量。
  2. Calculate_Rotor_Angle函数

    • 使用atan2f函数计算转子角度(电角度),该角度为 λ β \lambda_{\beta} λβ λ α \lambda_{\alpha} λα向量的相位角。
  3. PrintFluxAndAngle函数

    • 打印磁链的 α \alpha α轴和 β \beta β轴分量以及计算得到的转子角度。

5. 实际应用中的注意事项

  1. 滤波:磁链的计算可能会受噪声影响,因此在实际系统中通常需要对计算结果进行滤波处理。
  2. 误差修正:由于定子电阻和电感的非线性,磁链观测器可能会引入误差。可以通过在线参数估计或模型修正来减小这些误差。
  3. 高频噪声:纯积分器容易受到高频噪声的影响,可以在实际系统中引入低通滤波器或使用改进的观测器设计(如带衰减因子的积分器或滑模观测器)。

6. 总结

磁链观测器估算得到的磁链分量可以通过atan2函数计算出电机的电角度,进而可以间接得到转子的机械角度。这种方法在无传感器控制中非常有效,特别是在永磁同步电机中。然而,实际应用中需要考虑滤波、误差修正等问题,以提高估算的精度和稳定性。


http://www.mrgr.cn/news/15668.html

相关文章:

  • 读取xml的内容并显示在textEdit中,导出xml文件
  • 安卓15发布日期确定,安卓15 谷歌GMS认证截止日期有重大变化!安卓版本GMS认证截止时间更新,谷歌GMS认证之MADA/EDLA设备认证截止时间介绍
  • uniapp微信小程序page-container导致滚动失效/向下偏移,返回上一页/左滑取消返回上一页
  • 高标准城市照明智能化应用,创新城市节能之光
  • 推荐11款设备管理系统,系统功能一目了然!
  • 再次进阶 舞台王者 第八季完美童模全球赛 荣耀大使【刘思瑶】赛场秀场超燃合集!
  • 坑——Redis集群key事件通知
  • java中的@注解语法是什么原理,怎么实现的?
  • 破解电商数据分析难题,优化运营策略的秘诀
  • 供应商管理概述及系统软件推荐
  • Git学习尚硅谷(002 git常用命令)
  • 使用docker部署project-exam-system(项目)
  • 羊大师:防疫不松懈:开学季儿童个人防护小贴士
  • 【vue3】详解单向数据流,大家千万不用为了某某而某某了
  • TD学习笔记————中级教程总结(下)
  • RKNPU2从入门到实践 ---- 【9】使用RKNPU2的C API接口将RKNN模型部署在RK3588开发板上
  • JavaWeb——前端工程化
  • 行得稳,跑得远,美团如何做到长期主义持续发力?
  • 已解决**Java OutOfMemoryError: GC Overhead Limit Overload - 问题分析与解决方法**
  • springboot学习(2)