磁链观测器(仿真+闭环代码+参考文档) 1.仿真采用simulink搭建,2018b版本 2.代码采用Keil软件编译,思路参考vesc中使用的方法,自己编写的代码能够实现0速闭环启动,并且标注有大量注释,方便学习。 芯片采用STM32F4系列。 3.参考文档有一篇英文文献,自己翻译了该文献成一份中文文档 代码、文档、仿真是一一对应的,方便学习!!!
最近在研究磁链观测器,不得不说这个过程真的很有意思,也收获满满。今天就来和大家分享一下我在磁链观测器方面的研究成果,包括仿真、闭环代码以及参考文档。
一、仿真部分
我采用 Simulink 搭建磁链观测器的仿真模型,使用的是 2018b 版本。Simulink 是一个强大的工具,它可以直观地构建系统模型,进行仿真分析。
搭建过程
首先打开 MATLAB 2018b,进入 Simulink 环境。在 Simulink 库中选择所需的模块,比如各种信号源、传递函数模块等,将它们连接起来构建磁链观测器的模型。以下是一个简单的 Simulink 模型搭建示例代码(这里只是模拟代码,并非实际的 Simulink 代码语法):
% 假设我们需要添加一个正弦信号源 添加正弦信号源到模型中 设置正弦信号的频率和幅值 % 添加传递函数模块 添加传递函数模块到模型中 设置传递函数的参数 % 连接模块 将正弦信号源的输出连接到传递函数模块的输入代码分析
这里的代码虽然简单,但它模拟了 Simulink 模型搭建的基本步骤。首先添加信号源,信号源就像是系统的输入,它提供了各种类型的信号,比如正弦信号可以模拟交流输入。然后添加传递函数模块,传递函数描述了系统的输入输出关系。最后将它们连接起来,这样就形成了一个简单的系统模型。在实际的磁链观测器仿真中,我们需要根据具体的原理和要求选择合适的模块,并进行合理的连接。
二、闭环代码部分
代码采用 Keil 软件编译,芯片使用的是 STM32F4 系列。我的代码思路参考了 vesc 中使用的方法,并且自己编写的代码能够实现 0 速闭环启动,同时代码中还标注了大量注释,方便学习。
代码示例
以下是一段简单的磁链观测器闭环控制代码示例(使用 C 语言):
#include "stm32f4xx.h" // 定义一些常量 #define PI 3.1415926 // 磁链观测器相关变量 float flux_estimate; float current_measurement; // 闭环控制函数 void closed_loop_control() { // 读取当前电流测量值 current_measurement = read_current(); // 磁链观测器算法 flux_estimate = current_measurement * 0.5; // 简单示例算法 // 根据磁链估计值进行控制 if (flux_estimate > 1.0) { // 进行相应的控制操作,比如调整电压 adjust_voltage(0.8); } } // 读取电流函数 float read_current() { // 模拟读取电流值 return 1.2; } // 调整电压函数 void adjust_voltage(float voltage) { // 模拟调整电压操作 // 这里可以添加实际的硬件控制代码 } int main() { while (1) { closed_loop_control(); } }代码分析
在这段代码中,我们首先包含了 STM32F4 系列的头文件。然后定义了一些常量,比如圆周率 PI。接着定义了磁链估计值和电流测量值这两个变量。closedloopcontrol函数是闭环控制的核心,它首先读取当前的电流测量值,然后使用一个简单的磁链观测器算法来估计磁链值。根据磁链估计值,我们可以进行相应的控制操作,比如调整电压。readcurrent函数模拟了读取电流值的操作,adjustvoltage函数模拟了调整电压的操作。在main函数中,我们使用一个无限循环不断调用closedloopcontrol函数,实现闭环控制。
三、参考文档部分
参考文档有一篇英文文献,我把它翻译成了中文文档。这样做的好处是方便大家学习,不用再去费劲地看英文文献。而且代码、文档、仿真是一一对应的,这样在学习过程中就可以相互对照,更好地理解磁链观测器的原理和实现方法。
总之,磁链观测器的研究是一个很有挑战性但也很有趣的过程。通过仿真、代码实现和参考文档的结合,我们可以更深入地理解磁链观测器的工作原理,并且能够将其应用到实际的项目中。希望我的分享对大家有所帮助!