towards pole placement

This commit is contained in:
2019-03-01 14:48:44 +01:00
parent 6ac4915925
commit 842dc87860
9 changed files with 300 additions and 28 deletions

View File

@@ -9,7 +9,9 @@ function [pb]=DeltaTauParam(mot,mdl,param)
pb=struct(...
'Ts', 2E-4, ... % 0.2ms=5kHz
'MaxDac' ,2011.968, ...
'MaxPosErr', 10000);
'MaxPosErr', 10000, ...
'A',1,'B',1,'C',1,'D',1,'E',1,'F',1, ...
'Kafb',0);
desc=sprintf('mot:%d mdl:',mot.id);
switch mdl
case 1
@@ -30,9 +32,9 @@ function [pb]=DeltaTauParam(mot,mdl,param)
pb.ss_plt=mot.ss_cq;desc=desc+"cq"; pb.sel={3,[3]};
case 9
pb.ss_plt=mot.ss_cqr;desc=desc+"cqr"; pb.sel={3,[3]};
case 10
pb.ss_plt=mot.ss_dq;desc=desc+"dq"; pb.sel={3,[3]};
end
pb.A=[1];pb.B=[1];pb.C=[1];pb.D=[1];pb.E=[1];pb.F=[1];
desc=desc+" param:";
if mot.id==1
%!motor_servo(mot=1,ctrl='ServoCtrl',Kp=25,Kvfb=400,Ki=0.02,Kvff=350,Kaff=5000,MaxInt=1000)
@@ -40,12 +42,52 @@ function [pb]=DeltaTauParam(mot,mdl,param)
switch param
case 0 %scratch
desc=desc+"scratch";
pl=[-300+550i -300-550i -2513];
[Am,Bm,Cm,Dm]=ssdata(mot.ss_dq);
K = place(Am,Bm,pl);
V=-1./(Cm*(Am-Bm*K)^-1*Bm); %(from Lineare Regelsysteme2 (Glattfelder) page:173 )
V=V(end);
Kfb=K*(Cm^-1);
pb.V=V;
pb.Kfb=Kfb;
pb.Kp=V;
pb.B=Kfb(3)/V;
pb.Kvfb=Kfb(2)/pb.Ts;
fprintf('Kp:%f B:%f Kvfb:%f Kafb:%f\n',pb.Kp,pb.B,pb.Kvfb,pb.Kafb);
pb.Kvff=1*pb.Kvfb;
pb.Kafb=0;%Kfb(1)/(pb.Ts^2);
pb.Kaff=1*1/(1.548e04*(pb.Ts^2));
pb.Ki=0.02;
pb.MaxInt=1000;
case 1 %origin parameters
desc=desc+"orig";
pb.Kp=25;pb.Kvfb=400;pb.Ki=0.02;pb.Kvff=350;pb.Kaff=5000;pb.MaxInt=1000;
case 2%enhances first step
desc=desc+"2";
pb.Kp=25;pb.Kvfb=350;pb.Ki=0.02;pb.Kvff=350;pb.Kaff=1/(1.548e04*(pb.Ts^2));pb.MaxInt=1000;
case 3%pole placement on simplified motion tf
pl=[-1400 -1440];
pl=[-300+350i -300-350i];
[Am,Bm,Cm,Dm]=ssdata(mot.ss_q);
K = place(Am,Bm,pl);
V=-1./(Cm*(Am-Bm*K)^-1*Bm); %(from Lineare Regelsysteme2 (Glattfelder) page:173 )
V=V(end);
Kfb=K*(Cm^-1);
pb.V=V;
pb.Kfb=Kfb;
pb.Kp=V;
pb.B=Kfb(2)/V;
pb.Kvfb=Kfb(1)/pb.Ts;
fprintf('Kp:%f B:%f Kvfb:%f\n',pb.Kp,pb.B,pb.Kvfb);
pb.Kvff=pb.Kvfb;
pb.Kafb=0;
pb.Kaff=1/(1.548e04*(pb.Ts^2));
pb.Ki=0.01; % lower
pb.MaxInt=1000;
end
%pb.Kp=0.1;pb.Kvfb=0;pb.Ki=0.00;pb.Kvff=0;pb.Kaff=1/(1.548e04*(pb.Ts^2));pb.MaxInt=1000;
%filter [z^0 z^-1 ... z^-n];