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

基于模型预测控制的PMSM系统速度环控制理论推导及仿真搭建

模型预测控制(Model Predictive Control, MPC)是一种先进的控制策略,广泛应用于工业控制中。它可以看作是一种最优控制方法,利用对象的动态模型来预测其状态的未来行为,并根据每个采样时间点特定性能目标函数的优化来确定未来的控制动作。MPC方法具有鲁棒性、建模简单、处理多变量系统、显示约束、预测未来行为和优化性能的能力等优势。它的不足在于预测控制行为的计算需要繁琐的计算量,因为它需要在每个采样时刻求解优化问题,在线优化的耗时时间在一定程度上限制了MPC方法在高实时性工业级的应用。然而,随着计算机硬件和凸优化技术的进行,对于具有高实时性要求的快速变化动态系统,实现这些较复杂控制器已成为可能。而将MPC方法应用于PMSM伺服系统的一个重要原因是其线性模型可以通过解析方法和辨识技术获得。

基本概念

MPC的主要步骤包括:

  1. 模型预测:使用系统的数学模型预测未来的输出。
  2. 滚动优化:在每个控制周期内,求解一个优化问题,找到最佳的控制序列。
  3. 反馈修正:每个周期只实施第一个控制输入,然后重新测量系统状态并重复这个过程。

优化问题的形式

在每个控制周期,MPC通过解决如下优化问题来计算控制

\min _u\sum_{k=0}^{N-1}{\left( y\left( k \right) -r\left( k \right) \right) ^TQ\left( y\left( k \right) -r\left( k \right) \right) +u\left( k \right) ^TPu\left( k \right)}

  • u是系统输入
  • y是系统输出
  • r是参考轨迹(指令)
  • QP是权重矩阵,用于平衡系统性能和控制输入的大小
  • N是预测时域的长度

以PMSM系统为例讲解MPC在其速度环的应用

A 电机速度环一阶模型

这里我们考虑一个典型的伺服系统,以表贴式永磁同步电机为例:

\dot{\omega}_m=\frac{1}{J_m}\left( k_fi_q-B_m\omega _m-T_L \right)

  • \omega _m是电机的角速度,可以理解为系统的输出,\dot{\omega}_m是电机速度的一阶导数,即加速度
  • J_m是电机的转动惯量
  • k_f是电机的力矩系数
  • i_q是电机的q轴电流,可以理解为系统的输入
  • B_m为电机的粘滞摩擦系数
  • T_L为负载力矩

B 状态空间模型

首先,我们将方程转换为状态空间形式。定义状态变量x=\omega _m和输入u=i_q,则状态空间方程可以写成:

\dot{x}=\frac{k_f}{J_m}u-\frac{B_m}{J_m}x

离散化后(采样时间为T_s):

x\left[ k+1 \right] =A_dx\left[ k \right] +B_du\left[ k \right]

其中:A_d=1-\frac{B_mT_s}{J_m}B_d=\frac{k_fT_s}{J_m}

C 预测模型

构建预测模型,用于MPC控制,预测模型为:

\left\{ \begin{array}{l} x_{k+1}=A_dx_k+B_du_k\\ y_{k+1}=C_dx_{k+1}\\ \end{array} \right.

下一时刻预测输出,即第二步预测:

\left\{ \begin{array}{l} x_{k+2}=A_d^2x_k+A_dB_du_k+B_du_k\\ y_{k+2}=C_dx_{k+2}\\ \end{array} \right.

第三步预测:

\left\{ \begin{array}{l} x_{k+3}=A_d^3x_k+A_d^2B_du_k+A_dB_du_{k+1}+B_du_{k+2}\\ y_{k+3}=C_dx_{k+3}\\ \end{array} \right.

......

N_p步预测

\left\{ \begin{array}{l} x_{k+N_p}=A_d^{N_p}x_k+A_d^{N_p-1}B_du_k+\cdots +\sum_{i=0}^{N_p-N_c}{A_d^iB_du_{k+N_c-1}}\\ y_{k+N_p}=C_dx_{k+N_p}\\ \end{array} \right.

其中N_p是预测步长,N_c是控制步长

        定义预测输出序列Y、控制输入序列U如下:

Y=\varPhi x_k+\varGamma U

其中,\varPhi =\left[ \begin{matrix} C_dA_d& C_dA_d^2& \cdots& C_dA_d^{N_p}\\ \end{matrix} \right]\varGamma =\left[ \begin{matrix} C_dB_d& 0& \cdots& 0\\ C_dA_dB_d& C_dB_d& \cdots& 0\\ \vdots& \vdots& \vdots& \vdots\\ C_dA_d^{N_p-1}& C_dA_d^{N_p-2}B_d& \cdots& C_dB_d\\ \end{matrix} \right]

参考信号序列:

R=\left[ \begin{matrix} r_k& r_{k+1}& \cdots& r_{k+N_{p-1}}\\ \end{matrix} \right]

因此代价函数被设计如下:

J=\left( \varPhi x_k+\varGamma U-R \right) ^TQ\left( \varPhi x_k+\varGamma U-R \right) +U^TPU

简化后可以得到标准的二次型优化问题:

J=U^T\left( \varGamma ^TQ\varGamma +R \right) U+2\left( \varPhi x_k-R \right) ^TQ\varGamma U+\left( \varPhi x_k-R \right) ^TQ\left( \varPhi x_k-R \right)

为了最小化该二次型代价函数,我们需要解以下优化问题:

J_{\min}=\frac{1}{2}U^THU+F^TU

其中,H=\varGamma ^TQ\varGamma +R,F=\varGamma ^TQ\left( \varPhi x_k-R \right)

求解这个二次型优化问题,我们可以通过求解以下线性方程组来得到最优解:

HU=-F

因此,控制输入向量U的数学表达式为:

U=-H^{-1}F

最终得到最优的虚拟控制序列:

U^*=\left[ \begin{matrix} u^*_k& u^*_{k+1}& \cdots& u^*_{k+N_p-1}\\ \end{matrix} \right]

取第一个值作为系统的输入。

仿真搭建

电机参数设置

  • J_m------7.06e-4
  • B_m------3.5e-4
  • 极对数n_p------4
  • 力矩系数k_f------0.0064*4
  • 电感L------0.4e-3
  • 电阻R------0.72
  • 采样时间T_s------0.001
  • 预测步数N_p------7,控制步数N_c------5

仿真结果

为了方便迭代,速度控制器采用MATLAB Function模块编写。

响应速度为:0.024s且几乎无超调

在0.5s时刻加载,T_L=2.4

由上图可看出,MPC控制器的抗干扰性能强,

与PI控制器对比:

MPC的表现明显优于传统PI控制器,且无需漫长的参数试凑调参,就能达到一个比较好的控制效果。

相关文章:

基于模型预测控制的PMSM系统速度环控制理论推导及仿真搭建

模型预测控制(Model Predictive Control, MPC)是一种先进的控制策略,广泛应用于工业控制中。它可以看作是一种最优控制方法,利用对象的动态模型来预测其状态的未来行为,并根据每个采样时间点特定性能目标函数的优化来确…...

【PYG】GNN和全连接层(FC)分别在不同的类中,使用反向传播联合训练,实现端到端的训练过程

文章目录 基本步骤GNN和全连接层(FC)联合训练1. 定义GNN模型类2. 定义FC模型类3. 训练循环中的联合优化解释完整代码 GNN和全连接层(FC)分别使用不同的优化器和学习率分别进行参数更新解释 基本步骤 要从GNN(图神经网…...

vue3使用方式汇总

1、引入iconfont阿里图库图标: 1.1 进入阿里图标网站: iconfont阿里:https://www.iconfont.cn/ 1.2 添加图标: 1.3 下载代码: 1.4 在vue3中配置代码: 将其代码复制到src/assets/fonts/目录下&#xff1…...

Turborepo简易教程

参考官网:https://turbo.build/repo/docs 开始 安装全新的项目 pnpm dlx create-turbolatest测试应用包含: 两个可部署的应用三个共享库 运行: pnpm install pnpm dev会启动两个应用web(http://localhost:3000/)、docs(http://localhost…...

初中物理知识点总结(人教版)

初中物理知识点大全 声现象知识归纳 1 .声音的发生:由物体的振动而产生。振动停止,发声也停止。 2.声音的传播:声音靠介质传播。真空不能传声。通常我们听到的声音是靠空气传来的。 3.声速:在空气中传播速度是:340…...

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建等高级进阶

目录 第一章 ChatGPT-4o使用进阶 第二章 大语言模型原理详解 第三章 大语言模型优化 第四章 开源大语言模型及本地部署 第五章 从0到1搭建第一个大语言模型 第六章 智能体(Agent)构建 第七章 大语言模型发展趋势 第八章 总结与答疑讨论 更多应用…...

【开源项目】LocalSend 局域网文件传输工具

【开源项目】LocalSend 局域网文件传输工具 一个免费、开源、跨平台的局域网传输工具 LocalSend 简介 LocalSend 是一个免费的开源跨平台的应用程序,允许用户在不需要互联网连接的情况下,通过本地网络安全地与附近设备共享文件和消息。 项目地址&…...

ARM/Linux嵌入式面经(十一):地平线嵌入式实习

地平线嵌入式实习面经 1.自我介绍 等着,在给大哥们准备了。 2.spi与iic协议可以连接多个设备吗?最多多少个?通讯时序。 这是几个问题,在回答的时候。不要一问就开口,花几秒钟沉吟思考整理一下自己的思路。 这个问题问了几个点?每个点的回答步骤。 是我的话,我会采用以…...

基于Redis的分布式锁

分布式场景下并发安全问题的引发 前面通过加锁解决了单机状态下一人一单的问题,但是当出现了分布式,前面的加锁形式不再适用 ,每个jvm有一个自己的锁监视器,只能被内部线程获取,其他jvm无法使用,那么多台j…...

如何将 Apifox 的自动化测试与 Jenkins 集成?

CI/CD (持续集成/持续交付) 在 API 测试 中的主要目的是为了自动化 API 的验证流程,确保 API 发布到生产环境前的可用性。通过持续集成,我们可以在 API 定义变更时自动执行功能测试,以及时发现潜在问题。 Apifox 支持…...

【FFmpeg】av_write_frame函数

目录 1.av_write_frame1.1 写入pkt(write_packets_common)1.1.1 检查pkt的信息(check_packet)1.1.2 准备输入的pkt(prepare_input_packet)1.1.3 检查码流(check_bitstream)1.1.4 写入…...

【算法专题】双指针算法

1. 移动零 题目分析 对于这类数组分块的问题,我们应该首先想到用双指针的思路来进行处理,因为数组可以通过下标进行访问,所以说我们不用真的定义指针,用下标即可。比如本题就要求将数组划分为零区域和非零区域,我们不…...

Lock与ReentrantLock

在 Java 中,Lock 接口和 ReentrantLock 类提供了比使用 synchronized 方法和代码块更广泛的锁定机制。 简单示例: import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockExample {pr…...

ARM/Linux嵌入式面经(十三):紫光同芯嵌入式

static关键字 static关键字一文搞懂这个知识点,真的是喜欢考!!! stm32启动时如何配置栈的地址 在STM32启动时配置栈的地址是一个关键步骤,这通常是在启动文件(如startup_stm32fxxx.s,其中xxx代表具体的STM32型号)中完成的。 面试者回答: STM32启动时配置栈的地址主…...

名企面试必问30题(二十四)—— 说说你空窗期做了什么?

回答示例一 在空窗期这段时间,我主要进行了两方面的活动。 一方面,我持续提升自己的专业技能。我系统地学习了最新的软件测试理论和方法,深入研究了自动化测试工具和框架,例如 Selenium、Appium 等,并通过在线课程和实…...

基础权限储存

一、要求: 1、建立用户组shengcan,其id为2000工 2、建立用户组 caiwu,其id为2001 3、建立用户组 jishu,其id 为 2002 4、建立目录/sc,此目录是 shengchan 部门的存储目录,只能被 shengchan 组的成员操作,其他用户没有…...

Could not find a package configuration file provided by “roscpp“ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 ROS-Noetic 一、问题描述 编译程序时出现如下报错: -- Could NOT find roscpp (missing: roscpp_DIR) -- Could not find the required component roscpp.…...

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…...

Virtualbox和ubuntu之间的关系

1、什么是ubuntu Ubuntu 是一个类似于 Windows 的操作系统,但它是基于 Linux 内核开发的开源操作系统 2、什么是Virtualbox VirtualBox 是一款虚拟机软件,使我们可以物理机上创建和运行虚拟机 也就是说,VirtualBox 提供了一个可以安装和运行其他操作系…...

【在Linux世界中追寻伟大的One Piece】HTTPS协议原理

目录 1 -> HTTPS是什么? 2 -> 相关概念 2.1 -> 什么是"加密" 2.2 -> 为什么要加密 2.3 -> 常见的加密方式 2.4 -> 数据摘要 && 数据指纹 2.5 -> 数字签名 3 -> HTTPS的工作过程 3.1 -> 只使用对称加密 3.2 …...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...