基于模型预测控制的直流电机控制系统(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

​📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

​本文为基于模型预测控制的直流电机控制系统研究。模型预测控制( MPC) 又称为滚动时域控制(RHC) ,产生于20 世纪70 年代末,是一种从工业过程控中产生的新型控制算法,实用性较强,并在实际应用中得到不断的发展和完善,广泛应用于电力、汽车、化工、航天、能源等领域。

一般工业过程中存在多变量耦合、非线性及不确定性等问题,很难建立准确的模型。因此,采用经典PID 控制器或者是一些传统的控制算法所得到的效果并不理想,存在一定的局限性。MPC 最突出的特点是“边走边优化”,且对模型的精确性要求较低,因此能够有效地用于复杂对象的控制。

模型预测控制应用于电气传动系统中时,可分为连续控制集模型预测控制(CCS-MPC)和有限控制集模型预测控制 ( FCS-MPC) 。两者的主要区别: ( 1) 优化方式不同。CCS-MPC利用数学工具对价值函数求最优解得到最优控制量; 而FCS-MPC 利用变换器的离散性和有限性,遍历电压矢量,价值函数最小的电压矢量即最优控制量。

( 2) 作用方式不同。CCS-MPC中控制量是通过脉冲宽度调制(PWM) 方式作用于系统; 而FCS-MPC中控制量直接作用于系统。与CCS-MPC相比,FCS-MPC 将目标优化和开关状态决策过程优化成一步,且具有概念简单、适用范围广、约束和非线性易纳入价值函数等优点,因此成为了近年来的研究热点之一。

📚2 运行结果

主函数部分代码:

% dc motor system% J \ddot{\theta} + b \dot{\theta} = K_t i% L di/dt + R i = V - K_e \dot{\theta}% system parameters% J: modent of inertia of the rotor% b: viscous friction constant% K_e: force constant% K_t: torque constant% R: resistant% L: inductanceJ = 0.01;b = 0.1;K = 0.01;R = 1;L = 0.5;% choose state variables x = [x_1(t) x_2 (t)]^T% x_1 = \dot{\theta}% x_2 = i% which can rewrite as % \dot{x} = A_c x + b_c u% y = C xA_c = [-b/J K/J; -K/L -R/L];B_c = [0; 1/L];C_c = [1 0];D_c = zeros(1,1);% samping intervalTs = 0.01;% continuous-time plant model is discretized[Ap, Bp, Cp, Dp] = c2dm(A_c, B_c, C_c, D_c, Ts);% prediction horizon% control horizonNp = 100;Nc = 100;% agumented state-space of plant model[Phi_Phi, Phi_F, Phi_R, A_e, B_e, C_e] = mpcgain(Ap, Bp, Cp, Nc, Np); % n:the number of state in agument state-space% n_in:the number of input in agument state-space[n, n_in] = size(B_e);% state value of plant model % state value of agumented state-space of plant modelxm = [0;0];Xf = zeros(n,1);% simulation time:1000 samping intervalN_sim = 1000;% r:set-point Speed% u:input in plant model% y:output in plant modelr = ones(N_sim, 1);u = 0; % u(k-1) = 0y = 0;for kk = 1:N_sim    DeltaU = inv(Phi_Phi + 0.3*eye(Nc, Nc))*(Phi_R*r(kk) - Phi_F*Xf);    deltau = DeltaU(1,1);    u = u + deltau;    % store next input added to plant model    u1(kk) = u;    % store current output of plant model    y1(kk) = y;        % store current state of plant model    xm_old = xm;            % calculate next state of plant model    xm = Ap*xm + Bp*u;     y = Cp*xm;    % calculate next state of agumented state-space of plant model    Xf = [xm-xm_old; y];    endk = 0 : (N_sim-1);figure(1)plot(k, r, '--k', k, y1', 'b','linewidth',2);set(gca,'FontName','Times New Roman','FontSize',14);xlabel('Sampling Instant');ylabel('Speed (rad/s)');% set(gca,'FontName','Times New Roman','FontSize',14);set(gcf, 'unit', 'centimeters', 'position', [10 5 16 6])set(gca,'GridLineStyle',':','GridColor','k','GridAlpha',1);axis([0 N_sim-1  0 1.2]);set(gca, 'YTick', [0:0.6:1.2]);h=legend('$\theta_r$','$\theta$');set(h,'Interpreter','latex'); grid;figure(2)plot(k, u1, 'b','linewidth',2);set(gca,'FontName','Times New Roman','FontSize',14);xlabel('Sampling Instant');ylabel('Voltage (v)');% set(gca,'FontName','Times New Roman','FontSize',14);set(gcf, 'unit', 'centimeters', 'position', [10 5 16 6])set(gca,'GridLineStyle',':','GridColor','k','GridAlpha',1);h=legend('$u$');set(h,'Interpreter','latex'); grid;

🎉3 参考文献

[1]孙锐. 基于模型预测的无刷直流电机控制系统的研究[D].哈尔滨理工大学,2020.

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值