xk008

1.zg通道定义

7-8:0-400Ω-4-20mA

1-6:4-20mA-4-20mA

2. 0-400Ω 1.5mA 5V

         截图1293339714

%% 使用增广模型[X(k+1);u(k)]=[Ad Bd;o I]*[X(K);u(k-1)]+[Bd;I]*Delata_u(k); %% Yk=[Cd 0]*[X(K);u(k-1)]%% function [uk,p_pred] = fcn(r,p,omega) % 定义系统参数 Tms = 0.01; %定采样时间最适合的时间,超调小,响应快 B = 0.008; %电机粘性阻尼,N*m/(rad/s); J = 0.020; %电机转动惯量,kg*m2; Pn = 4; flux =0.186; iq_max = 40; Kt = 1; %电机力矩常数,Nm/A_peak; Np = 20; Nc = 10; Q = 4000; R = 0.001; % 定义离散状态空间矩阵 Am = [0 1; 0 -B]; %连续状态矩阵 Bm = [0; Kt/J]; %连续输入矩阵 Cm = [1 0]; Dm = [0]; M = expm([Am Bm; zeros(1,3)]*Tms); %使用矩阵指数精确离散化 Ad = M(1:2, 1:2); %定义离散状态矩阵 Bd = M(1:2,3:end); %定义离散输入矩阵 Cd = [1 0]; %定义增广状态矩阵 A = [Ad,Bd;zeros(size(Bd,2),size(Ad,1)),eye(size(Bd,2))]; B = [Bd;eye(size(Bd,2))]; C = [Cd,zeros(1,size(Bd,2))]; % X(k+1)=Az*X(K)+Bz*u(k) X(K)状态向量(n*1),u(k)输入向量(p*1) % A系统状态矩阵(n+1*n+1), B系统输入矩阵(n+1*p) % 参考【DR_CAN-MPC学习笔记】3&4.详细的MPC建模例子和matlab代码 % Xk = phi*xk + F*Uk Xk-(N+1)n*1 phi-(N+1)n*n xk-n*1 F-(N+1)n*Np Uk-Np*1 nx = size(A,1); %状态维度 nu = size(B,2); %输入维度 ny = size(C,1); %输出维度 % 构建预测矩阵 phi = zeros(Np*ny,nx); %状态预测矩阵Y=M*x(ki)+C*U(ki) F = zeros(Np*ny, Nc*nu); for i = 1:Np phi((i-1)*ny + 1:i*ny,:) = C*A^i; for j = 1:min(i,Nc) F((i-1)*ny+1:i*ny, (j-1)*nu+1:j*nu) = C*A^(i-j)*B; end end % 构建权重矩阵 Q_bar = kron(eye(Np), Q); R_bar = kron(eye(Nc), R); %Nc*Nc矩阵 xk = [p; omega;0]; %Nx+1*1矩阵 rk = [repmat(r, Np-1, 1); r]; %Np*1矩阵 % 计算G,E,H % 参考【DR_CAN-MPC学习笔记】3&4.详细的MPC建模例子和matlab代码 E = F'*Q_bar*(phi*xk-rk); %Nc*1矩阵 H = F'*Q_bar*F + R_bar; %Nc*Nc矩阵 % 计算最优控制序列 options = optimoptions('quadprog','Algorithm','active-set'); x0 = zeros(size(H,2),1); U_k = zeros(Nc,1); U_k = quadprog(H,E,[],[],[],[],[],[],x0,options); % 提取第一个控制量 Delta_uk = U_k(1:nu,1); x_pred = A*xk + B*U_k(1:nu,1); uk = x_pred(3,:); uk = max(min(uk,iq_max),-iq_max); % 预测输出 p_pred = phi(1:ny, :) * xk + F(1:ny, 1:nu) * Delta_uk; end 模仿这个写一个速度模型预测代码
10-27
%% 使用增广模型[X(k+1);u(k)] = [Ad Bd; 0 I] * [X(k);u(k-1)] + [Bd;I] * Delta_u(k); %% Yk = [Cd 0] * [X(k);u(k-1)] %% function [uk,p_pred] = fcn(r,p,omega) % 定义系统参数 Tms = 0.01; % 设定采样时间(最适合的时间,超调小,响应快) B = 0.008; % 电机粘性阻尼,单位:N·m/(rad/s) J = 0.020; % 电机转动惯量,单位:kg·m² Pn = 4; % 极对数 flux = 0.186; % 磁链,单位:Wb iq_max = 40; % q轴电流最大值,单位:A Kt = 1; % 电机力矩常数,单位:Nm/A_peak Np = 20; % 预测时域长度 Nc = 10; % 控制时域长度 Q = 4000; % 输出跟踪权重 R = 0.001; % 控制量权重 % 定义离散状态空间矩阵 Am = [0 1; 0 -B]; % 连续状态矩阵 Bm = [0; Kt/J]; % 连续输入矩阵 Cm = [1 0]; % 连续输出矩阵 Dm = [0]; % 直接传输矩阵(此处为0) % 使用矩阵指数法进行精确离散化 M = expm([Am Bm; zeros(1,3)] * Tms); Ad = M(1:2, 1:2); % 离散状态矩阵 Bd = M(1:2, 3:end); % 离散输入矩阵 Cd = [1 0]; % 离散输出矩阵 % 定义增广状态矩阵(含控制增量) A = [Ad, Bd; zeros(size(Bd,2), size(Ad,1)), eye(size(Bd,2))]; % 增广状态矩阵 B = [Bd; eye(size(Bd,2))]; % 增广输入矩阵 C = [Cd, zeros(1, size(Bd,2))]; % 增广输出矩阵 % X(k+1) = A*X(k) + B*u(k),其中: % X(k)为状态向量(n×1),u(k)为输入向量(p×1) % A为系统状态矩阵((n+p)×(n+p)),B为系统输入矩阵((n+p)×p) % 参考【DR_CAN-MPC学习笔记】3&4.详细的MPC建模例子和matlab代码 % Xk = phi*xk + F*Uk,其中: % Xk为((Np+1)n×1),phi为((Np+1)n×n),xk为(n×1) % F为((Np+1)n×Nc*p),Uk为(Nc*p×1) nx = size(A,1); % 状态向量维度 nu = size(B,2); % 输入向量维度 ny = size(C,1); % 输出向量维度 % 构建预测矩阵 phi = zeros(Np*ny, nx); % 状态预测矩阵(Y = phi*xk + F*Uk) F = zeros(Np*ny, Nc*nu); % 输入预测矩阵 for i = 1:Np % 填充状态预测部分 phi((i-1)*ny + 1:i*ny, :) = C * A^i; % 填充输入预测部分(控制时域内的输入影响) for j = 1:min(i, Nc) F((i-1)*ny+1:i*ny, (j-1)*nu+1:j*nu) = C * A^(i-j) * B; end end % 构建权重矩阵 Q_bar = kron(eye(Np), Q); % 输出权重矩阵(Np×Np,对角元素为Q) R_bar = kron(eye(Nc), R); % 控制量权重矩阵(Nc×Nc,对角元素为R) xk = [p; omega; 0]; % 当前增广状态向量(位置p、角速度omega、上一时刻输入0) rk = [repmat(r, Np-1, 1); r]; % 参考轨迹(Np步,保持参考值r不变) % 计算优化问题矩阵(参考DR_CAN的MPC笔记) E = F' * Q_bar * (phi * xk - rk); % 二次规划一次项向量(Nc×1) H = F' * Q_bar * F + R_bar; % 二次规划二次项矩阵(Nc×Nc) % 求解最优控制序列 options = optimoptions('quadprog', 'Algorithm', 'active-set'); % 配置二次规划求解器 x0 = zeros(size(H,2), 1); % 初始解(全0) U_k = zeros(Nc, 1); % 初始化控制序列 U_k = quadprog(H, E, [], [], [], [], [], [], x0, options); % 求解二次规划 % 提取第一个控制量(滚动优化:只取当前步) Delta_uk = U_k(1:nu, 1); % 当前控制增量 x_pred = A * xk + B * U_k(1:nu, 1); % 预测下一时刻增广状态 uk = x_pred(3, :); % 从增广状态中提取当前控制量 uk = max(min(uk, iq_max), -iq_max); % 控制量限幅(不超过iq_max) % 预测输出(第一个时刻的位置预测) p_pred = phi(1:ny, :) * xk + F(1:ny, 1:nu) * Delta_uk; end模仿这个修改 单电流环mpc代码
最新发布
11-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值