clc, clear all, close all

Teq=90; Tm=9; K=0.1;
% Regolatore tipo P:
Kp_p=Teq/(K*Tm); Cp=Kp_p
% Regolatore tipo PI:
I=tf(1,[1 0]); % Termine integrale 1/s
Kp_pi=0.9*Teq/(K*Tm);
Ti_pi=3*Tm;
Cpi=Kp_pi*(1+I/Ti_pi);
% Regolatore tipo PID:
D=tf([1 0],1); % Termine derivativo s
Kp_pid=1.2*Teq/(K*Tm);
Ti_pid=2*Tm;
Td_pid=0.5*Tm;
Cpid=Kp_pid*(1+I/Ti_pid+D*Td_pid);
Cpid=zpk(Cpid);
Cpid.DisplayFormat='frequency' % Stampa FdT in forma di Bode

% Regolatore tipo PID con filtro derivativo:
N=10;
Cpid_real=Kp_pid*(1+I/Ti_pid+tf([Td_pid,0],[Td_pid/N 1]));
Cpid_real=zpk(Cpid_real);
Cpid_real.DisplayFormat='frequency' % Stampa FdT in forma di Bode

% Implementazione PID digitale con il comando c2d
Tc=1 % Tempo di campionamento prescelto
PID_real_tustin = c2d(Cpid_real, Tc, 'tustin' ) % Discretizzazzione 
[NumCpid_real_tustin, DenCpid_real_tustin]=tfdata(PID_real_tustin,'v') 
% Salva num e den in due vettori
% Implementazione PI+D digitale con il comando c2d
s=tf('s')
PI_c=Kp_pid*(1+1/(s*Ti_pid)) % componente PI
D_c=Kp_pid*Td_pid*s          % componente D

PI_d_tustin = c2d(PI_c, Tc, 'tustin' ) % Discretizzazzione componente PI
[NumPI_tustin, DenPI_tustin]=tfdata(PI_d_tustin,'v') % Salva num e den in due vettori

D_d_tustin = c2d(D_c, Tc, 'tustin' ) % Discretizzazzione componente plus-D
[NumD_tustin, DenD_tustin]=tfdata(D_d_tustin,'v') % Salva num e den in due vettori
% Si fa inoltre notare che il comando c2d non supporta invece il metodo dei rettangoli
