首页 > 其他分享 >m基于强化学习的永磁同步电机位置控制器simulink仿真,对比传统的PI控制器和模糊PI控制器

m基于强化学习的永磁同步电机位置控制器simulink仿真,对比传统的PI控制器和模糊PI控制器

时间:2023-07-11 23:56:38浏览次数:39  
标签:... 控制器 end PMSM tl1 simulink 学习 400 PI

1.算法仿真效果

MATLAB2017b仿真结果如下:

 

 

 

 

 

 

2.算法涉及理论知识概要

       永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)是一种高效、精度高、响应速度快的电机,广泛应用于现代工业和民用领域。PMSM的位置控制是PMSM控制的核心问题之一,其优化控制算法的研究一直是热门的研究方向之一。近年来,随着强化学习技术的发展,基于强化学习的PMSM位置控制器逐渐成为研究的热点。本文将从数学公式和原理、算法优缺点、实现过程以及与其他类似算法的对比等方面详细介绍基于强化学习的PMSM位置控制器。

 

 

2.1 PMSM位置控制模型

PMSM的位置控制可以通过控制其转子位置和角速度实现。PMSM的数学模型可以表示为:

 

\begin{cases}L\frac{di_s}{dt}+Ri_s+K_e\omega_r=V_s\J\frac{d\omega_r}{dt}+B\omega_r+K_ti_s=0\end{cases}

 

       其中,L和 R分别是电感和电阻,i_s是电机的电流,K_e是电机的反电动势常数,\omega_r 是转子角速度,V_s是电机的电压,J和B分别是转子的转动惯量和阻尼系数,K_t是电机的转矩常数。

 

2.2 强化学习模型

       强化学习是机器学习的一种方法,其基本思想是通过试错来学习和优化行为策略。在强化学习中,智能体通过与环境进行交互来获取奖励,并根据奖励来调整其行为策略。强化学习的基本模型包括状态、动作、奖励和策略四个要素。

 

2.3 基于强化学习的PMSM位置控制模型

       基于强化学习的PMSM位置控制器的目标是最小化系统的位置误差,其状态可以表示为当前位置误差 e_k和当前速度误差v_k,动作可以表示为电机的电流i_s。强化学习的奖励函数可以表示为控制器的位置误差和速度误差的加权和,即:

 

r_k=-\alpha e_k^2-\beta v_k^2

 

其中,\alpha和\beta分别是位置误差和速度误差的权重因子。

 

 

2.4优点

(1)基于强化学习的PMSM位置控制器具有较好的鲁棒性和自适应性,能够适应不同负载和不同工作条件下的控制要求。

 

(2)能够实现高精度的位置控制和速度控制,提高电机的控制精度和响应速度。

 

(3)与传统的控制算法相比,基于强化学习的PMSM位置控制器具有较好的实时性和抗干扰性。

 

2.5 缺点

(1)由于强化学习算法需要进行大量的试错,因此训练时间较长,对计算资源要求较高。

 

(2)强化学习算法需要大量的样本数据进行训练,因此在实际应用中需要考虑数据采集和存储等问题。

 

(3)强化学习算法的结果受到初始状态和环境的影响,因此在实际应用中需要进行调试和优化。

 

 

2.6 状态和动作设计

        在基于强化学习的PMSM位置控制器中,状态可以表示为当前位置误差 e_k和当前速度误差 v_k。动作可以表示为电机的电流 i_s。具体地,状态可以通过测量电机的位置和速度来获取,动作可以通过输出电机的电流来实现。

 

2.7 强化学习算法选择

       常见的强化学习算法包括Q学习、策略梯度、深度强化学习等。在基于强化学习的PMSM位置控制器中,由于状态和动作空间较小,因此可以选择简单的强化学习算法,如Q学习。

 

2.8 奖励函数设计

       奖励函数是基于强化学习的PMSM位置控制器的关键之一。奖励函数需要考虑位置误差和速度误差的权重因子,以及控制器的稳定性等因素。

 

2.9训练过程

训练过程包括初始化环境、初始化智能体、与环境交互、更新智能体策略等步骤。具体地,可以通过设置不同的控制参数来模拟不同的工作条件,获取训练数据并进行训练。

 

2.10 测试过程

       测试过程包括载入已训练好的模型、与环境交互、输出控制信号等步骤。在测试过程中,可以通过对控制信号进行实时监测和调节来优化控制效果。

 

3.MATLAB核心程序

 

 

load kp1.mat
tk1  = ans.Time;
kp1_= ans.Data;
kp1 = [];
for i = 1:length(tk1)
    kp1(i) = kp1_(:,:,i);
end
load ki1.mat
tk1  = ans.Time;
ki1_= ans.Data;
ki1 = [];
for i = 1:length(tk1)
    ki1(i) = ki1_(:,:,i);
end
 
load Ip1.mat
tl1 = ans.Time;
lp1_= ans.Data;
lp1 = [];
for i = 1:length(tl1)
    lp1(i) = lp1_(i);
end
load Ii1.mat
tl1 = ans.Time;
li1_= ans.Data;
li1 = [];
for i = 1:length(tl1)
    li1(i) = li1_(i);
end
 
 
 
 
figure;
subplot(211);
plot(tl1(1:400:end),lp1(1:400:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
xlabel('time/s');
ylabel('K_p学习过程');
 
 
subplot(212);
plot(tl1(1:400:end),li1(1:400:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
xlabel('time/s');
ylabel('K_i学习过程');
 
 
figure;
subplot(211);
plot(tl1(1:400:end),0.8+lp1(1:400:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
xlabel('time/s');
ylabel('K_p调整过程');
 
subplot(212);
plot(tl1(1:400:end),0.15+li1(1:400:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
xlabel('time/s');
ylabel('K_i调整过程');
 
 
 
 
 
 
 
 
 
 
load Ip2.mat
tl1 = ans.Time;
lp1_= ans.Data;
lp1 = [];
for i = 1:length(tl1)
    lp1(i) = lp1_(i);
end
load Ii2.mat
tl1 = ans.Time;
li1_= ans.Data;
li1 = [];
for i = 1:length(tl1)
    li1(i) = li1_(i);
end
figure;
subplot(211);
plot(tl1(1:400:end),lp1(1:400:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
xlabel('time/s');
ylabel('K_p学习过程');
subplot(212);
plot(tl1(1:400:end),li1(1:400:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
xlabel('time/s');
ylabel('K_i学习过程');
 
figure;
subplot(211);
plot(tl1(1:400:end),50+lp1(1:400:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
xlabel('time/s');
ylabel('K_p调整过程');
 
subplot(212);
plot(tl1(1:400:end),40+li1(1:400:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
xlabel('time/s');
ylabel('K_i调整过程');

 

  

 

标签:...,控制器,end,PMSM,tl1,simulink,学习,400,PI
From: https://www.cnblogs.com/51matlab/p/17546311.html

相关文章

  • m基于RBF和模糊控制的smith控制器simulink仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要        Smith控制器是一种广泛应用于工业控制和自动化领域的经典控制算法。它通过引入一个延迟时间来补偿系统的时间滞后效应,从而提高系统的稳定性和控制性能。然而,传统的Smith控制器往往依赖于系统......
  • .NET API 001 Convert 类
    Convert类publicstaticclassConvertConvert类是一个静态类,作用是将基本数据类型转换为另一个基本数据类型。继承关系:Object->Convert基本数据类型之间的特定转换存在五种结果,这取决于运行时要转换的基本类型与目标基本类型,具体如下:未转换。试图将一个基本类型转换......
  • 确定性上下无关文法(DCFL)的 Pumping Lemma
    ......
  • Pika Labs:文生视频AI
    最近又一个文生视频AI火了。话不多说,直接上效果!若不说是AI生成的,或许很多朋友都会误以为是《小黄人》又出预告片了吧~而且这一次,文生视频不再是短短的几秒钟,是直接可以出广告片的那种了。例如一段有关Pizza的广告是这样的:画面充斥着警笛、救护等素,结果主人公却是个Pizza,这......
  • Springboot远程调用Prometheus Api获取指标数据
    0、写在前面1>使用RestTemplate作为远程调用工具调用prometheus原生api获取数据2>prometheus原生api文档地址如下:https://prometheus.io/docs/prometheus/latest/querying/api/3>通过访问prometheus原生api,查看原生api返回的数据格式,定义对应的实体类格式4>下面所列功能代......
  • 【开机10】解决出现问题,你的PIN不可用,单击以重新设置PIN 无法打开相机 设置我的PIN 登
    \(弄了1.5个小时,找到这个视频,终于弄好了!!!!!!\)\(如果各位基友出现这种问题,可以参考。\)【开机10】解决出现问题,你的PIN不可用,单击以重新设置PIN无法打开相机设置我的PIN登录选项诊断启动禁用服务后问题解决......
  • [ESP] 使用Ayla API Reference配网和连Ayla云
    示例用的文档及链接USDevDashboard(查看oem-id和oem-key)https://dashboard-dev.aylanetworks.com/AylaAPIReference(绑定用户,设备和Ayla云)https://docs.aylanetworks.com/referenceAyla_demo的官方文档(构建,运行步骤)https://docs.aylanetworks.com/docs/integr......
  • nf_conntrack: table full, dropping packet
    参考:linux路由跟踪表满错误nf_conntrack:tablefull,droppingpacket原理解决方法说明ping,dmesg或者/var/log/messages日志中这个报错,说明服务器网络方面遇到了瓶颈。此时查看cat/proc/sys/net/netfilter/nf_conntrack_max和cat/proc/sys/net/netfilter/nf_conntra......
  • kubernetes之 Pod控制器
    第五部分Pod控制器1、pod回顾apiVersion,kind,metadata,spec,status(只读)spec:containersnodeSelectornodeNamerestartPolicy:Always,Never,OnFailurecontainers:nameimageimagePullPolicy:Always、Never、IfNotPresentports:......
  • E. Two Chess Pieces -- (codeforces) 树形DP
    原题链接:https://codeforces.com/contest/1774/problem/E题意:两颗棋子,给出两颗棋子必须要去的顶点,且给出两颗棋子的相隔距离不能大于d,算出两颗棋子完成目标后走的距离。最后两颗棋子都要回到顶点1上。思路:刚开始没想出来,顺着官方题解写的,大意就是我用数组s1和s2代表两颗棋子......