当前位置: 首页 > 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 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...