永磁同步电机无传感龙伯格观测器_示例C语言代码和仿真模型 C代码特点: 1.定点q15格式 2.代码全结构体封装,注释清楚,结构清晰。 3.通用表贴和内嵌式电机。 仿真模型是Matlab2020b版本,可提供转低版本。 文件包括: 1.观测器.C文件.H文件及相关文件,使用举例说明。 2.一篇观测器原理介绍的参考文献。 3. 注意代码只有观测器相关部分, 不是整个工程运行文件。

在永磁同步电机(PMSM)控制领域,无传感器技术越来越受到关注,其中龙伯格观测器是一种常用的实现方式。今天就来跟大家分享一下永磁同步电机无传感龙伯格观测器的示例 C 语言代码以及对应的仿真模型。

C 语言代码特点剖析

定点 q15 格式

采用定点 q15 格式是为了在资源受限的微控制器等硬件平台上高效运行。定点数表示可以在不损失太多精度的前提下,大大降低计算资源的需求。比如在一些低成本的单片机中,浮点数运算可能会消耗大量的时间和硬件资源,而定点数则能很好地解决这个问题。

全结构体封装,注释清晰,结构清晰

先来看结构体封装的代码示例:

// 定义龙伯格观测器参数结构体
typedef struct {
    q15_t Ld;  // d 轴电感,q15 格式
    q15_t Lq;  // q 轴电感,q15 格式
    q15_t Rs;  // 定子电阻,q15 格式
    q15_t psi_f; // 永磁体磁链,q15 格式
    q15_t alpha; // 观测器增益参数,q15 格式
} Observer_Params;

// 定义龙伯格观测器状态结构体
typedef struct {
    q15_t theta_est; // 估计的电角度,q15 格式
    q15_t omega_est; // 估计的角速度,q15 格式
    q15_t id_est; // 估计的 d 轴电流,q15 格式
    q15_t iq_est; // 估计的 q 轴电流,q15 格式
} Observer_State;

// 龙伯格观测器结构体,包含参数和状态
typedef struct {
    Observer_Params params;
    Observer_State state;
} Observer;

从这段代码可以看到,通过结构体把观测器的参数和状态分别进行了封装,这样做的好处是代码逻辑非常清晰,在后续调用和维护时一目了然。每个结构体成员变量都有明确的注释,无论是开发人员自己回顾代码,还是其他人员接手项目,都能快速理解每个变量的含义和用途。

通用表贴和内嵌式电机

这种通用性使得代码能够适应不同类型的永磁同步电机,提高了代码的复用性。在实际应用中,不同厂家生产的表贴式和内嵌式永磁同步电机虽然在参数上有所差异,但通过调整结构体中的电机参数(如 LdLqRspsi_f 等),就可以适用于不同的电机,而无需对核心算法代码进行大幅修改。

文件内容详解

观测器.C 文件、.H 文件及相关文件,使用举例说明

.C 文件是观测器算法的具体实现部分,包含了各种函数来完成观测器的初始化、状态更新等功能。例如初始化函数可能长这样:

void Observer_Init(Observer *obs, Observer_Params params) {
    obs->params = params;
    obs->state.theta_est = 0;
    obs->state.omega_est = 0;
    obs->state.id_est = 0;
    obs->state.iq_est = 0;
}

这段代码用于初始化观测器的状态和参数,把传入的参数赋值给观测器结构体,并将初始估计状态清零。

.H 文件则定义了结构体、函数声明等,起到了接口的作用,方便其他模块调用观测器相关功能。相关文件可能包括一些辅助计算的宏定义或者数据类型转换函数等。

永磁同步电机无传感龙伯格观测器_示例C语言代码和仿真模型 C代码特点: 1.定点q15格式 2.代码全结构体封装,注释清楚,结构清晰。 3.通用表贴和内嵌式电机。 仿真模型是Matlab2020b版本,可提供转低版本。 文件包括: 1.观测器.C文件.H文件及相关文件,使用举例说明。 2.一篇观测器原理介绍的参考文献。 3. 注意代码只有观测器相关部分, 不是整个工程运行文件。

关于使用举例,假设在主程序中有如下代码:

int main() {
    Observer_Params params = {
     .Ld = Q15(0.008),
     .Lq = Q15(0.008),
     .Rs = Q15(2.875),
     .psi_f = Q15(0.175),
     .alpha = Q15(100)
    };
    Observer obs;
    Observer_Init(&obs, params);

    // 模拟获取到的电压、电流值
    q15_t ud = Q15(10);
    q15_t uq = Q15(10);
    q15_t id = Q15(1);
    q15_t iq = Q15(1);

    // 调用观测器更新函数
    Observer_Update(&obs, ud, uq, id, iq);

    // 使用估计的角度和速度
    q15_t theta_est = obs.state.theta_est;
    q15_t omega_est = obs.state.omega_est;

    // 后续控制算法使用估计值进行操作
    //...
    return 0;
}

这里先初始化了观测器参数和观测器结构体,然后模拟获取到电机的电压和电流值,调用观测器更新函数,最后获取估计的角度和速度用于后续的电机控制算法。

一篇观测器原理介绍的参考文献

随代码一同提供的参考文献对龙伯格观测器原理进行了详细介绍。它从基本的状态空间模型出发,讲解了如何通过构建观测器来估计永磁同步电机的转速和位置信息。理解这些原理对于深入优化代码和更好地应用观测器至关重要。例如参考文献中可能会推导观测器增益矩阵的设计方法,这与代码中的 alpha 参数紧密相关,通过调整这个参数可以优化观测器的动态性能。

注意代码只有观测器相关部分,不是整个工程运行文件

这一点需要特别注意,该代码只是永磁同步电机无传感器控制中观测器部分的实现,若要应用到实际的电机控制系统中,还需要结合电机本体模型、坐标变换、控制算法(如矢量控制、直接转矩控制等)等其他部分。不过,观测器作为无传感器控制的核心部分,掌握好这部分代码对于搭建完整的系统具有重要的基础作用。

Matlab 仿真模型

仿真模型基于 Matlab 2020b 版本构建,这一版本具有更强大的功能和优化的算法。如果您使用的是低版本的 Matlab,不用担心,该模型可提供转低版本的服务。通过仿真模型,可以直观地观察龙伯格观测器在不同工况下的性能表现,比如在电机启动、加载、调速等过程中,观测器对电机转速和位置的估计精度如何,动态响应是否快速准确等。在仿真模型中,可以方便地调整电机参数、观测器参数等,通过对比不同参数设置下的仿真结果,进一步优化代码中的参数设置,以达到更好的实际控制效果。

总之,永磁同步电机无传感龙伯格观测器的示例 C 语言代码和仿真模型为我们深入研究和应用无传感器控制技术提供了很好的基础,希望大家可以基于此进一步探索和创新,在实际项目中实现更高效、更智能的永磁同步电机控制。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐