%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Motore elettrico in Corrente continua
% 
% Definizione del modello nello spazio degli stati
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%
clear all
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Prima di tutto si cancellano tutte le variabili nell'ambiente  
% di lavoro e si chiudono tutte le figure eventalmente aperte
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all
close all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Si procede poi alla definizione delle unità di misura del SI
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

m=1; Km=1000*m; cm=0.01*m; mm=0.001*m;
s=1; msec=0.001*s; minuti=60*s; ora=60*minuti;
Kg=1; gr=0.001*Kg; mg=0.001*gr;
N=1; Nm=N*m; mNm=Nm/1000;
rad=1; gradi=pi*rad/180;
g = 9.81*m/s^2;                  % Accelerazione di gravità
Kgf=g*N;                         % Kilogrammi forza
rpm=2*pi/60;
Amp=1; mAmp=0.001*Amp; V=1;
Ohm=V/Amp;
Henry=V*s/Amp; mHenry=0.001*Henry;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Si definiscono poi i parametri del motore 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   Vn=12*V;               % tensione di alim. nominale
   Cmax=610.24*mNm;       % coppia massima in stallo
   Imax=93.6*Amp;         % corrente massima in stallo
   Wmax=16313*rpm;        % velocità massima ridotta senza carico
   Ic0=2.15*Amp;          % corrente senza carico
   Jme=9.2775e-006;       % inerzia albero motore
   Lme=60*10^-6;          % induttanza avvolgimenti
   
   KI=Cmax/Imax;          % Costante di coppia del motore
   Rme0=Vn/Imax;          % Resistenza di armatura
   bme=Ic0*KI/Wmax;       % Coefficiente di attrito lineare
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% La definizione del modello dinamico del sistema può essere fatto 
% utilizzando la funzione di trasferimento del sistema:
%
%  G(s)= KI/[(Rme0+Lme*s)*(bme+Jme*s)+KI^2]
%
% Il comando 'zpk' fornisce il sistema in forma "fattorizzata"
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

s=tf('s');        % Definisce s come variabile di Laplace 

Gs_w_v=zpk(KI/((Rme0+Lme*s)*(bme+Jme*s)+KI^2))

% Ora la variabile Gs_w_v descrive completamente il sistema dinamico 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% La risposta al gradimo unitrario del sistema si può ottenere 
% utilizzando il comando "step" 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(1) 
step(Gs_w_v)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Si noti che il tempo di assetsamneto del sistema è congruente con 
% la posizione dei poli del sistema 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(2) 
pole(Gs_w_v)                % Fornisce la posizione dei poli
pzmap(Gs_w_v)               % Grafica la posizione di poli e zeri

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Lo stesso sistema può anche essere definito utilizzando una 
% descrizione nello spazio degli stati 
%
% Utilizzando il comando 'zpk' è possibile ottenere la funzione 
% di trasferimento del sistema in forma fattorizzata
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A=[-Rme0/Lme, -KI/Lme; KI/Jme, -bme/Jme];
B=[ 1/Lme; 0];
C=[ 0,  1];

SYS_w_v=ss(A,B,C,0);  % Definizione di un sistema nello spazio degli stati

Gs_w_v_2=zpk(SYS_w_v) 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Si noti che il sistema che si è ottenuto (Gs_w_v_2) coincide con 
% quello ottenuto in precedenza (Gs_w_v)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Gs_w_v_2

Gs_w_v

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Si ottiene lo stesso sistema anche utilizzando uno schema a blocchi 
% in ambiente Simulink e chiedendo al sistema (Linear Analisys) di 
% calcolare la funzione di trasferimento tra i 2 punti di interesse
%
% Tools -> Linear Analysis -> Get Linearized model -> Export
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

motoreDC0mdl

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pause; % Premi un tasto per continuare
%
clc
echo on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% L'analisi temporale e frequenziale del sistema può essere fatta, 
% in ambito Matlab, utilizzando il comando ""
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(3)
ltiview('step', Gs_w_v)

return

