View
213
Download
0
Category
Preview:
Citation preview
UNIVERSITÀ DEGLI STUDI DI ROMATOR VERGATA
FACOLTÀ DI INGEGNERIA
CORSO DI LAUREA IN INGEGNERIA
DELL'AUTOMAZIONE
A.A. 2009/2010
Tesi di Laurea
SISTEMA DI CONTROLLO AD
INVERSIONE D'ISTERESI PER
ATTUATORI IN LEGA A
MEMORIA DI FORMA
RELATORE CANDIDATO
Ing. Daniele Carnevale Alessandra Rech
Sognare ciò che si vorrebbe essere,sognare ciò che si vorrebbe fare,
sognare ciò che si vorrebbe diventaree scoprire che, con i loro insegnamenti,
ti hanno dato le capacitàdi realizzare tutti questi sogni.
A Daniela e Mario, i miei genitori,è merito loro che sono diventata ciò che sono,
ogni mio successo è un loro successo.
Indice
Ringraziamenti 1
Introduzione 3
1 Materiali a memoria di forma 7
1.1 Storia: una casuale scoperta . . . . . . . . . . . . . . . . . . . . 7
1.2 Caratteristiche del materiale . . . . . . . . . . . . . . . . . . . . 10
1.3 Motivazioni microscopiche e comportamento macroscopico . . . 12
1.3.1 E�etto pseudo-elastico . . . . . . . . . . . . . . . . . . . 15
1.3.2 E�etto di memoria di forma (S.M.E.) . . . . . . . . . . . 15
2 Hardware a disposizione e modi�che e�ettuate 19
2.1 Attuatore di�erenziale . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Circuiti elettrici originari . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Modi�che Hardware . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.1 La scelta: innovazione e portabilità . . . . . . . . . . . . 22
2.3.2 Arduino Duemilanove . . . . . . . . . . . . . . . . . . . . 23
2.3.3 Modi�che dei circuiti . . . . . . . . . . . . . . . . . . . . 25
2.4 Modi�che Software . . . . . . . . . . . . . . . . . . . . . . . . . 28
A. Rech I
INDICE
2.4.1 Modi�che del controllore di corrente conseguenti alle mo-
di�che dei circuiti . . . . . . . . . . . . . . . . . . . . . . 28
2.4.2 Lettura dell'angolo . . . . . . . . . . . . . . . . . . . . . 29
3 Modello d'isteresi 31
3.1 Isteresi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Storia e precedenti del modello . . . . . . . . . . . . . . . . . . 32
3.3 Introduzione al modello . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 Modello Costruttivo . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1 Derivazione formule dalle proprietà . . . . . . . . . . . . 37
3.4.2 Algoritmo derivante dalla discretizzazione del modello . . 38
3.5 Modello Costruttivo Generalizzato . . . . . . . . . . . . . . . . . 42
3.5.1 Analisi del caso (p,m) = (2, 1) . . . . . . . . . . . . . . . 45
4 Implementazione del modello 49
4.1 Funzionamento dell'attuatore . . . . . . . . . . . . . . . . . . . 49
4.2 Disegno del ciclo d'isteresi esterno . . . . . . . . . . . . . . . . . 50
4.3 Individuazione della mappa d'isteresi . . . . . . . . . . . . . . . 53
4.3.1 Ingressi Rilevanti . . . . . . . . . . . . . . . . . . . . . . 53
4.3.2 Generazione sequenze relative ai sottocicli . . . . . . . . 54
4.3.3 Generazione funzioni w . . . . . . . . . . . . . . . . . . . 55
4.3.4 Salvataggio dei dati in memoria EEPROM . . . . . . . . 57
4.4 Previsione dell'uscita secondo il modello . . . . . . . . . . . . . 59
5 Controllo tramite inversione del modello 63
5.1 Obiettivo preposto ed ipotesi di progetto . . . . . . . . . . . . . 63
II A. Rech
INDICE
5.2 Il sistema di controllo . . . . . . . . . . . . . . . . . . . . . . . . 64
5.2.1 Controllo in Feed Forward: inversione del modello . . . . 64
5.2.2 A�namento del controllo: controllore PI agente sull'errore 67
5.2.3 Aumento delle prestazioni: cancellazione della dinamica
del �lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Note di implementazione e risultati sperimentali . . . . . . . . . 70
6 Veri�ca teorica dei risultati ottenuti 71
6.1 Possibili ipotesi teoriche . . . . . . . . . . . . . . . . . . . . . . 71
6.2 Il Criterio del Cerchio . . . . . . . . . . . . . . . . . . . . . . . 72
6.3 Applicazione del Criterio del Cerchio per la veri�ca dei risultati 73
7 Conclusioni e sviluppi futuri 75
Appendice 1 - Dati Sperimentali 77
Appendice 2- Codice Arduino 83
Elenco delle �gure 107
Bibliogra�a 109
A. Rech III
Ringraziamenti
Un grazie particolare al mio relatore Daniele Carnevale, che con tanta pazienza
e dedizione mi ha seguito in questo lavoro. Grazie, non solo per avermi assi-
stito a livello teorico, ma anche per avermi, per primo, dato la possibilità di
sperimentare, sostenuta dai suoi insegnamenti, il lavoro reale di laboratorio,
cosa che non era accaduta in tanti anni di studio.
Un ringraziamento sentito va, inoltre, al mio collega Andrea Capozzi, che prima
di me ha costruito lo strumento su cui ho lavorato ed ha avuto cura di avviarmi
in questo studio mettendomi a conoscenza di quanto da lui sperimentato.
Grazie, inoltre, a tutti gli altri tesisti che si stanno laureando insieme a me,
soprattutto a Stefano e Giordano: lo scambio di idee e il reciproco coinvolgi-
mento nei lavori che abbiamo svolto è stato momento costruttivo e formativo
di questa strada percorsa insieme.
Grazie, in�ne, ai miei genitori e al mio ragazzo Riccardo che mi hanno sempre
sostenuto ed incoraggiato.
A. Rech 1
Introduzione
La presente tesi si colloca nell'ambito dello studio delle possibili applicazioni
degli innovativi materiali a memoria di forma, leghe metalliche scoperte abba-
stanza recentemente che hanno la capacità di ritornare ad una ben determinata
forma quando vengono riscaldate, le cui caratteristiche saranno descritte in det-
taglio nei capitoli seguenti.
Nonostante la loro recente scoperta, le applicazioni delle leghe a memoria di
forma sono ormai presenti nei campi più diversi�cati: dalle connessioni nei cir-
cuiti idraulici degli aerei, ai dispositivi di �ssaggio dei circuiti stampati, agli
interruttori elettrici in dispositivi di sicurezza, ai sensori e/o attuatori. Non
ultime si citano tutte le applicazioni in campo biomedicale, dagli impianti den-
tali e ortopedici alla strumentazione biomedicale.
Il mercato potenzialmente più interessante per l'impiego delle leghe a memoria
di forma è quello degli attuatori, il cui elemento cardine di funzionamento è il
cambiamento di temperatura.
A seconda del metodo con cui avviene questo cambiamento, essi si possono
suddividere in due categorie: attuatori termici ed attuatori elettrici. Nei primi
la variazione di temperatura avviene in maniera diretta attraverso trasmissione
del calore con metodi classici (conduzione, irraggiamento, ecc.), nei secondi av-
viene elettricamente attraverso passaggio di corrente (riscaldamento per e�etto
A. Rech 3
Introduzione
Joule).
Gli attuatori termici hanno sinora avuto molto più successo degli attuatori elet-
trici: una delle prime applicazioni è stata quella dell'apertura automatica delle
�nestre delle serre, ottenuta da attuatori dotati di molle in leghe a memoria
di forma, che aprivano le �nestre quando la temperatura interna alla serra era
troppo elevata e la chiudevano quando essa diminuiva.
Un altro esempio di successo è costituito da un dispositivo molla-contromolla,
dove la prima è una molla in NiTi (lega a memoria di forma) che sfrutta la
transizione di fase e la seconda una molla tradizionale: la molla in materiale a
memoria di forma aziona l'apertura o la chiusura di de�ettori d'aria nei condi-
zionatori in dipendenza dalla temperatura dell'aria stessa. Ciò ha consentito
di sostituire un complesso e più costoso dispositivo costituito da un sensore
di temperatura, da un'unità elettronica di controllo e da un servomotore per
l'azionamento meccanico, con il sistema molla-contromolla, sempli�cando l'as-
semblaggio e limitando i costi.
Gli attuatori elettrici sono invece la nuova frontiera in questo campo, seppur
ancora non commercializzati, è noto che abbiano un grande potenziale nelle
applicazioni di robotica e micro-robotica, ed è proprio in questo ambito, infat-
ti, che si colloca la presente trattazione.
L'uso di materiali a memoria di forma può talvolta sempli�care un meccanismo
o un dispositivo, riducendo il numero di pezzi complessivo e il peso, aumen-
tando l'a�dabilità e quindi riducendo i costi associati.
In questo ambito il presente studio ha l'obiettivo di progettare e sviluppare un
prototipo di un sistema di controllo per un attuatore elettrico, rea-
lizzato con materiale a memoria di forma NiTiNol, basato sulla teoria dell'in-
4 A. Rech
Introduzione
versione del modello di isteresi (Generalized Constructive Model of Hysteresis
[1]), di studiarne il comportamento reale, contestualizzandolo nell'ambito del
modello teorico, di veri�carne sperimentalmente il comportamento e di a�nar-
ne le logiche e le tecniche di controllo. Lo studio si articola nei seguenti passi,
riportati nei capitoli che seguono:
1. Introduzione e focalizzazione sulle caratteristiche �siche e meccaniche
salienti della lega a memoria di forma NiTiNol impiegata nell'attuatore
in esame;
2. Analisi e modi�ca dello strumento, già presente presso il Laboratorio
di Robotica Pesante dell'Università degli Studi di Roma �Tor Vergata�,
costruito da uno studente nell'A.A. 2008/2009, in sede di tesi di Laurea
Triennale [2], di cui ci si è avvalsi come base di partenza;
3. Trattazione del concetto di isteresi e della teoria di modellazione per essa
sviluppata e posta alla base del modello di controllo realizzato;
4. Descrizione dell'implementazione del modello teorico di controllo sul pro-
totipo e sua veri�ca con la realtà sperimentale tramite comparazione dei
dati teorici previsionali con quelli e�ettivamente misurati;
5. Descrizione del sistema di controllo prototipale realizzato;
6. Contestualizzazione dei risultati ottenuti nell'ambito della teoria appli-
cata;
7. Conclusioni
A. Rech 5
Introduzione
Questo lavoro si propone di essere punto di partenza per lo studio della pos-
sibilità di applicazione di questa tecnologia nell'ambito della realizzazione di
motori per dispositivi robotici industriali.
6 A. Rech
Capitolo 1
Materiali a memoria di forma
Si ritiene opportuno iniziare la presente trattazione con una brevepanoramica della storia e delle caratteristiche salienti del materialeche ne è il fulcro: il NiTiNol.
1.1 Storia: una casuale scoperta
Le leghe a memoria di forma (S.M.A. Shape Memory Alloy) possiedono una in-
teressante proprietà per la quale il metallo �ricorda� la sua forma o dimensione
originale, e ritorna ad essa a determinate temperature caratteristiche: questa
proprietà è nota con il nome di e�etto di memoria di forma (S.M.E. Shape
Memory E�ect).
La prima osservazione documentata delle trasformazioni a memoria di forma
fu di Chang & Read nel 1932: essi notarono la reversibilità della trasformazio-
ne della lega Cadmio-Oro (Cd-Au), sulla base di osservazioni metallurgiche e
di cambiamenti di resistività, ed, in seguito, notarono l'e�etto di memoria di
forma. Nel 1938 simili trasformazioni furono osservate nell'ottone (Cu-Zn).
Solo nel 1962, però, si ebbe un forte impulso nella ricerca applicata alle leghe
a memoria di forma, dopo che William J. Buehler & al. scoprirono che le leghe
Nickel-Titanio (Ni-Ti) equi-atomiche esibivano la memoria di forma. Come
A. Rech 7
Cap. 1 Materiali a memoria di forma
molte importanti scoperte, anche questa fu dovuta al caso e alle capacità de-
duttive dei ricercatori.
Buehler infatti eseguiva delle attività di ricerca presso il Naval Ordnance Labo-
ratory (NOL) di White Oak (Maryland) della US Navy su composti interme-
tallici: lo scopo era quello di trovare un metallo, con una elevata temperatura
di fusione e proprietà di elevata resistenza all'impatto, per l'ogiva del missile
SUBROC. Tra sessanta composti, Buehler ne scelse dodici da testare: tra que-
sti, la lega Nickel-Titanio esibiva le proprietà ricercate; fu così che decise di
chiamarla NiTiNOL, includendo l'acronimo del laboratorio in cui lavorava.
Un giorno, nel 1959, mentre proseguiva i suoi studi sul comportamento del-
la lega NiTi al variare delle percentuali dei due componenti per veri�carne le
proprietà, Buehler fece un'osservazione che fu alla base della scoperta di una
interessante proprietà: le barrette di lega NiTi utilizzate per le prove speri-
mentali, se lasciate cadere, producevano suoni di�erenti a seconda della loro
temperatura, il che era indicativo di di�erenti proprietà di smorzamento e, a
livello microscopico, di di�erenti arrangiamenti atomici; inoltre, era possibile
variare tale comportamento semplicemente riscaldando o ra�reddando le bar-
rette.
Ma fu solo nel 1960, quando Buehler fu a�ancato da Raymond Wiley per ese-
guire le prove di resistenza a fatica, che venne scoperto l'e�etto di memoria
di forma: infatti durante un meeting di Wiley con il management, al �ne di
mostrare i risultati ottenuti circa la resistenza a fatica, uno dei direttori tecnici,
David Muzzey, decise di valutare il comportamento di uno dei �li di NiTiNOL,
portati come provino, a successive �essioni e quindi a riscaldamento; con gran-
de stupore dei presenti, quando Muzzey riscaldò il �lo deformato con la sua
8 A. Rech
�1.1 Storia: una casuale scoperta
pipa, esso ritornò al suo stato indeformato.
Immediatamente si compresero le potenzialità di simili leghe ed il loro studio è
proseguito con passo spedito, richiamando sempre più ricercatori e produttori
tra le �la di coloro che si sono dedicati alla sperimentazione, alla modellazione
del comportamento di tali materiali e all'investigazione di altre leghe.
Le più interessanti ed utili dal punto di vista applicativo si sono rivelate quelle
del gruppo Nickel-Titanio e qualche lega a base di Rame (Cu). Oggi le leghe a
memoria di forma più studiate sono quelle di Rame-Alluminio-Nickel, Rame-
Zinco-Alluminio e Ferro-Manganese-Silicio.
La notevole complessità del sistema metallurgico delle leghe S.M.A. ha costitui-
to un freno alla loro di�usione nel settore industriale per molti anni. A partire
dalla metà degli anni `80 ed in particolare dal 1991, si è cominciata ad osserva-
re una progressiva penetrazione di questi materiali in settori ad elevato valore
aggiunto (aerospaziale, biomedicale) tradizionalmente più pronti ad accettare
materiali innovativi, potendone assorbire più facilmente i costi relativamente
alti.
Soprattutto negli ultimi anni, la disponibilità di materiali con caratteristiche
di qualità in costante miglioramento e costi di produzione sempre più ridotti,
ha reso possibile lo sviluppo di numerosi prodotti, determinando così le condi-
zioni preliminari per la di�usione del materiale in settori tecnologici di�erenti;
l'esistenza di sempre nuovi e numerosi sbocchi commerciali ha, a sua volta,
stimolato la ricerca, innescando un processo sinergico che rende il settore in
forte evoluzione.
A. Rech 9
Cap. 1 Materiali a memoria di forma
1.2 Caratteristiche del materiale
Le leghe a memoria di forma si possono oggi ritrovare in un sempre crescente
numero di applicazioni nei settori aerospaziale, civile, meccanico, medico ed
altri ancora. Esse rappresentano una classe di materiali metallici dalle inusuali
proprietà meccaniche: in particolare la loro caratteristica principale è quella di
essere in grado di recuperare (da cui la speciale caratteristica di �memorizzare�)
una forma macroscopica preimpostata (stirata o piegata) per e�etto del sem-
plice cambiamento della temperatura o dello stato di sollecitazione applicato.
Un esempio di e�etto memoria di forma è illustrato nella successione di imma-
gini di Fig. 1.1. Ad un �lo di Ni-Ti è stata impressa, mediante un adeguato
trattamento termico, la forma di un alberello di natale con la scritta CNR.
Una volta ra�reddato, il piccolo gadget è stato deformato in modo che la for-
ma di partenza non sia più riconoscibile. Malgrado ciò, poiché non si è avuto il
danneggiamento delle disposizioni atomiche di partenza, semplicemente riscal-
dando il �lo (in questo caso con un comunissimo asciugacapelli ad aria calda),
si ha il progressivo recupero della forma iniziale �preimpostata�.
Come già detto, Buehler & al. scoprirono nel 1962 una lega in Nickel-Titanio,
chiamata NiTiNOL, che mostrava una maggiore capacità, rispetto ad altre le-
ghe precedentemente individuate, di memorizzare la forma.
Questa lega, infatti, dimostra una capacità di recupero dello stiramento del
100%, purchè la deformazione imposta non ecceda l'8% della pre-deformazione
estensionale: ciò la rende attraente per l'uso come attuatore a bassa frequenza
(meno di 1 Hz). Questa capacità di recupero della forma è associata alla possi-
bilità della lega di esistere in due fasi di�erenti (ad alta e a bassa temperatura):
10 A. Rech
�1.2 Caratteristiche del materiale
Figura 1.1: Esempio di e�etto memoria di forma. In un �lo di NiTi è statamemorizzata la forma di un piccolo gadget natalizio. Una volta deformatoa temperatura ambiente, esso recupera la forma memorizzata per sempliceriscaldamento a circa 60°C
la temperatura a cui la lega �ricorda� la forma quando riscaldata, può essere
modi�cata per mezzo di piccoli cambiamenti nella composizione del materiale e
attraverso trattamenti termici; per la lega equi-atomica Ni-Ti, la temperatura
di transizione di fase è di circa 100°C, ma l'aggiunta di una quantità extra di
Nickel permette di far avvenire la transizione di fase a circa 0°C. É possibile,
quindi, modi�care il comportamento della lega in funzione delle applicazioni
richieste.
Un'altra interessante caratteristica è l'aumento del modulo di Young (modulo
di elasticità longitudinale) da 2 a 4 volte quando la lega subisce il cambiamen-
to di fase. A questa caratteristica è anche associata una grande variazione di
resistività e liberazione (o assorbimento) di calore latente, argomento che tor-
nerà nel seguito in quanto basilare per la comprensione di alcune delle scelte
e�ettuate.
Ciò che rende estremamente interessanti le leghe a memoria di forma come
attuatori è anche la capacità, in fase di recupero della pre-deformazione, di
espletare una grande tensione di recupero (molte volte maggiore della tensione
A. Rech 11
Cap. 1 Materiali a memoria di forma
iniziale richiesta per il prestiramento o il pre-tensionamento a bassa tempera-
tura).
La forma che una lega S.M.A. memorizza, può essere assegnata o ri-assegnata
attraverso una ricottura a temperature elevate. Ad esempio, per la lega Ni-Ti,
si deve ricorrere a temperature maggiori di 500°C.
Ci sono molteplici modi per produrre una lega a memoria di forma: in genere
questi coinvolgono tecniche di fusione (mediante arco elettrico, fascio di elet-
troni, etc.) in condizioni di vuoto. La lega fusa (a temperature comprese tra
700°C e 900°C) è forgiata per rotazione e/o presso-fusione a barrette e quindi
a �li. Esiste anche un processo di produzione di tali leghe a freddo: in tal caso
il procedimento è simile a quello di produzione dei �li di titanio. Il processo di
produzione a freddo, però, conduce a proprietà �siche e meccaniche di�erenti
da quelle ottenute con la produzione a caldo.
1.3 Motivazioni microscopiche e comportamentomacroscopico
Le leghe a memoria di forma si caratterizzano per una trasformazione di fase a
stato solido, cioè in cui sia la fase di partenza (o fase genitrice, detta austenite,
dal nome dello scienziato inglese William C. Austen) sia quella di arrivo (o fase
prodotto, detta martensite, dal nome dello scienziato tedesco Adolf Martens
che per primo la osservò) sono strutture solide, anche se con arrangiamenti
cristallogra�ci di�erenti (vedi Fig. 1.2): tale trasformazione prende il nome di
trasformazione martensitica termoplastica.
La diversa struttura cristallina fa si che l'austenite (alta temperatura) si com-
porti come molti metalli, mentre la martensite (bassa temperatura) si comporti
12 A. Rech
�1.3 Motivazioni microscopiche e comportamento macroscopico
Figura 1.2: Trasformazione martensitica termoplastica
più come un elastomero, cioè una sostanza che ha la capacità di subire grosse
deformazioni elastiche riassumendo la propria dimensione una volta ricreata
una situazione di riposo.
La struttura cristallina della martensite è ottenuta a partire dall'austenite in
seguito all'applicazione di un carico meccanico o una diminuzione di tempera-
tura; con il riscaldamento o la riduzione del carico applicato, la fase di austenite
è recuperata.
In assenza di carichi applicati, le temperature di inizio e �ne trasformazio-
ne del materiale da una fase all'altra sono indicate come Ms, Mf, As, Af
(M=martensite, A=austenite, s=inizio, f=�ne) e, per molti materiali, del tipo
Mf < Ms < As < Af.
La Fig. 1.3 mostra la variazione della composizione del materiale con la tem-
peratura.
Al variare quindi della temperatura, in assenza di carichi applicati, cambierà lo
stato del materiale S.M.A., la cui composizione è in genere de�nita in funzione
della frazione volumetrica (ξ) di martensite presente: in particolare, si avrà
il passaggio da una fase 100% austenite (temperatura pari o superiore a Af e
A. Rech 13
Cap. 1 Materiali a memoria di forma
Figura 1.3: Trasformazione di fase nei materiali S.M.A.
ξ=0) ad una fase in cui saranno compresenti sia martensite che austenite in
percentuali di�erenti, ed in�ne, una fase 100% martensite (temperatura pari o
inferiore a Mf e ξ=1); il tutto sarà valido anche all'inverso se, anziché ra�red-
dare la lega, la si riscalda.
Queste temperature di transizione, dette anche temperature critiche, sono va-
riabili con il carico applicato, in particolare aumentano all'aumentare del carico
perché è necessaria maggiore energia per deformare la struttura cristallina.
In base agli e�etti risultanti da questa trasformazione, si può suddividere il
comportamento meccanico osservabile macroscopicamente dei materiali S.M.A.
in 2 categorie (Fig. 1.4):
Figura 1.4: Comportamento Tensione-Deformazione di materiali S.M.A.
1. e�etto pseudo-elastico, in cui un provino di S.M.A. esibisce una defor-
mazione molto grande (apparentemente plastica) dopo essere stato sot-
14 A. Rech
�1.3 Motivazioni microscopiche e comportamento macroscopico
toposto ad un carico, che può quindi essere completamente recuperata,
per mezzo di un ciclo di isteresi, dopo essere stato scaricato;
2. e�etto di memoria di forma (S.M.E.), in cui un provino di S.M.A.
esibisce una deformazione residua grande (apparentemente plastica) dopo
essere stato sottoposto ad un carico e quindi scaricato, deformazione
che può essere completamente recuperata innalzando la temperatura del
materiale.
1.3.1 E�etto pseudo-elastico
La prima proprietà di pseudoelasticità delle trasformazioni martensitiche ter-
moelastiche è legata alla possibilità di far avvenire la trasformazione non solo
variando la temperatura, ma anche mediante l'applicazione di un opportuno
stato tensionale in condizioni adeguate di temperatura (T > Af, cioè si parte
dalla fase austenite). É, cioè possibile, con l'applicazione di una forza esterna,
passare direttamente dalla fase austenite a quella di martensite deformata. Pe-
rò, poiché tale procedura viene condotta in un intervallo di temperature in cui la
martensite formatasi esiste solo per e�etto dell'applicazione della forza esterna,
essa si trova in una condizione di instabilità termodinamica e tende a ritrasfor-
marsi istantaneamente non appena tale forza viene rimossa, promuovendo un
immediato recupero di forma.
1.3.2 E�etto di memoria di forma (S.M.E.)
Dedichiamo, in questo paragrafo, invece, più spazio a questa seconda proprietà.
Essa è infatti il fulcro del presente lavoro ed è quindi necessario comprenderne
a fondo le motivazioni microscopiche, per fare luce sui comportamenti che mo-
A. Rech 15
Cap. 1 Materiali a memoria di forma
strerà il sistema in esame.
La proprietà memoria di forma è particolarmente utile, ed è legata alla spe-
ci�ca struttura cristallina della fase di martensite, a cui generalmente si trova
la lega S.M.A. a temperatura ambiente (o comunque a bassa temperatura).
Tale struttura è caratterizzata da una �tta disposizione di piani cristallini spe-
cularmene disposti l'uno rispetto all'altro e dotati di un'elevatissima mobilità
relativa. Il ruolo di questi piani è il seguente: quando il materiale viene de-
formato (in fase martensite) da una tensione esterna (ad esempio estensiva)
superiore a quella di snervamento, invece di rompere legami cristallogra�ci e
danneggiare la propria struttura più intima, esso dispiega progressivamente i
piani reticolari (tale fenomeno prende il nome di detwinning), accomodando
la deformazione complessiva senza realizzare spostamenti atomici signi�cativi.
La Fig. 1.5 riassume quanto �nora detto so�ermandosi sul piano microscopico.
Figura 1.5: Spiegazione microscopica dello Shape Memory E�ect
Per una migliore comprensione, si immagini il mantice di una �sarmonica: si
pensi all'atto di allungare una �sarmonica, dove malgrado la singola piega del
16 A. Rech
�1.3 Motivazioni microscopiche e comportamento macroscopico
mantice si muova di poco, l'intera struttura si dispiega per una lunghezza mol-
to maggiore.
Poiché nel corso di questo meccanismo i singoli atomi si sono spostati solo
di poco dalle loro posizioni originali, quando essi, per e�etto di un riscalda-
mento imposto, si muovono per ripristinare la struttura cristallina di partenza
(austenite, fase presente ad elevata temperatura), possono recuperare molto
facilmente la loro con�gurazione iniziale e promuovere, quindi, il recupero del-
la forma macroscopica di partenza, che per sua natura invece è caratterizzata
da una struttura cristallogra�ca poco mobile, propria appunto della fase au-
stenitica.
Figura 1.6: Spiegazione macroscopica dello Shape Memory E�ect
Se la lega S.M.A., all'atto dell'attivazione per riscaldamento, non può ritor-
nare alla forma originale (ad esempio perché limitata nella deformazione dalla
presenza di vincoli), allora in essa insorge una grande tensione di recupero;
viceversa, se la lega non è in alcun modo limitata, non insorge alcuna tensione
di recupero, e si parla di recupero libero.
A. Rech 17
Capitolo 2
Hardware a disposizione e
modi�che e�ettuate
Nel presente capitolo si descrive la struttura dell'attuatore di�eren-ziale con lo scopo di sottolineare le modi�che che è stato necessarioapportare per renderlo trasportabile.
2.1 Attuatore di�erenziale
Lo strumento messo a disposizione dall'Università degli Studi di Roma �Tor
Vergata� per il presente studio è un attuatore di�erenziale in lega NiTiNol a
memoria di forma. Tale attuatore è stato realizzato in sede di tesi di laurea da
Andrea Capozzi nell'A.A. 2008-2009 e, quindi, i dettagli della sua realizzazione
sono ampiamente spiegati in [2].
L'attuatore è costituito da due �li di NiTiNol di eguale lunghezza che funzio-
nano in analogia ad una coppia agonista-antagonista di muscoli.
Facendo, infatti, aumentare la corrente che scorre su un �lo di NiTiNol, pre-
cedentemente allungato (deformato), si ha come e�etto l'aumento della sua
temperatura e quindi la contrazione dello stesso che tende a recuperare la for-
ma iniziale. Di conseguenza, l'altro �lo, su cui necessariamente (per preservare
A. Rech 19
Cap. 2 Hardware a disposizione e modi�che e�ettuate
l'integrità del sistema) non scorre corrente e si trova quindi in fase martensi-
tica, �cede� alla forza traente esercitata dal primo �lo e modi�ca la sua forma
allungandosi. Grazie alle caratteristiche della lega NiTiNol, invertendo i ruoli
nella coppia di �li, risulta evidente il funzionamento di agonista-antagonista dei
due �li. Infatti facendo scorrere corrente sul secondo �lo ed azzerando quella
sul primo, il secondo �lo, passando in fase austenitica recupera la condizione
iniziale contraendosi, ed il primo, ora in fase martensitica, cede alla trazione
allungandosi.
Per studiare, e quindi quanti�care, questo susseguirsi di contrazioni ed al-
lungamenti dovuti alle variazioni di corrente i due �li sono stati ancorati ad
un'estremità ad un perno, mentre le altre due estremità sono state �ssate in
due punti diametralmente opposti di un encoder magnetico (l'AS5045 prodotto
dall'AustriaMicrosystem). Questa disposizione �sica fu studiata per associare
ad ogni coppia contrazione-allungamento dei �li, un rispettivo valore di rota-
zione dell'encoder.
Per realizzare elettricamente il comportamento appena descritto, ciascuno dei
due �li di NiTiNol è stato collegato ad un capo all'alimentazione esterna e
l'altro capo è stato portato a massa tramite un circuito elettrico. Dato che i
due circuiti risultano uguali tra loro, nel seguito se ne descriverà uno solo, ma
si tenga presente della necessità del secondo circuito per il funzionamento del
sistema.
Date le proprietà microscopiche della lega NiTiNol illustrate nel capitolo pre-
cedente, risulta necessario interpretare le scelte costruttive dei circuiti alla luce
del fatto che un �lo in tale lega può essere considerato, elettricamente, alla
stregua di una resistenza variabile.
20 A. Rech
�2.2 Circuiti elettrici originari
2.2 Circuiti elettrici originari
Nel momento in cui è stato iniziato il presente lavoro, il circuito elettrico del
singolo �lo era costituito da un transistor BJT npn (BC441) pilotato in Ba-
se da un segnale proveniente da una scheda Sensoray modello 626, il �lo a
memoria di forma era collegato tra l'alimentazione esterna e il Collettore ed
in�ne l'Emettitore era portato a massa da una resistenza R2 di resistività nota
(Fig. 2.1).
Figura 2.1: Circuito elettrico del singolo �lo nel momento dell'inizio delpresente lavoro.
Tale circuito risultava essere un regolatore di corrente controllato in corren-
te, infatti la corrente in Base era regolata controllando, attraverso il PC, il
segnale emesso dalla scheda di I/O Sensoray. In questo modo, facendo varia-
re la corrente in Base ed a�dandosi alle relazioni caratteristiche del compo-
nente (2.2.1) e (2.2.2), si aveva come risultato la variazione della corrente di
A. Rech 21
Cap. 2 Hardware a disposizione e modi�che e�ettuate
Collettore, proporzionale ad essa secondo un fattore β � 1.
IC = βIB (2.2.1)
Poiché la caratteristica del �lo a memoria di forma è quella di avere resistenza
non costante al variare della sua temperatura, la resistenza nota, attraverso cui
l'Emettitore era portato a massa, serviva per calcolare la corrente che scorreva
sul �lo. Infatti grazie alla relazione (2.2.2), caratteristica dei transistor, tra
corrente che scorre sul Collettore e corrente che scorre sull'Emettitore, misu-
rando la tensione ai capi della resistenza R1 nota e quindi calcolando la corrente
sull'Emettitore, risultava automaticamente nota anche la corrente che scorreva
sul �lo di NiTiNol.
IC ∼= IE (2.2.2)
2.3 Modi�che Hardware
2.3.1 La scelta: innovazione e portabilità
L'obiettivo che si è voluto raggiungere è stato di svincolare il sistema dalla ne-
cessità della presenza di un PC con la scheda Sensoray installata al suo interno,
rendendolo portabile e funzionante in modo autonomo.
Per raggiungere questo obiettivo, si è scelto di integrare nel sistema un mi-
crocontrollore realizzandolo sulla piattaforma hardware Arduino Duemilanove
ATmega328, nel seguito indicata, per semplicità, solo come Arduino.
Tale scelta è stata motivata dal fatto che l'Arduino è di dimensioni contenute
e ne risulta facile la programmazione (linguaggio simil-C) ed il collegamento
con i circuiti dell'attuatore.
Per la programmazione del microcontrollore viene utilizzato un sistema di svi-
22 A. Rech
�2.3 Modi�che Hardware
luppo, eseguibile su un qualsiasi PC, ed Arduino è collegabile a quest'ultimo
per il download, tramite cavo USB.
Sono quindi stati a�rontati e risolti i problemi causati dal cambiamento di
hardware, legati principalmente al cambiamento della frequenza di emissione
del segnale di output della scheda Arduino rispetto alla scheda Sensoray ed alla
notevole diminuzione della potenza di calcolo a disposizione.
Le caratteristiche tecniche della scheda Arduino sono mostrate nella seguente
Tabella 2.1.
Microcontroller ATmega328Operating Voltage 5VInput Voltage (recommended) 7-12VInput Voltage (limits) 6-20VDigital I/O Pins 14 (of which 6 provide PWM output)Analog Input Pins 6DC Current per I/O Pin 40 mADC Current for 3.3V Pin 50 mAFlash Memory 32 KB of which 2 KB used by bootloaderSRAM 2 KBEEPROM 1 KBClock Speed 16 MHz
Tabella 2.1: Caratteristiche tecniche della piattaforma Hardware.
Come si può osservare, la limitatezza della memoria disponibile ha generato
una serie di vincoli che è stato necessario risolvere in fase di progettazione e
programmazione del software.
2.3.2 Arduino Duemilanove
Arduino è una piattaforma hardware per il physical computing sviluppata al-
l'Interaction Design Institute di Ivrea. Essa è basata su una semplicissima
scheda che, oltre al microcontrollore, dispone di alcune porte di I/O e su un
A. Rech 23
Cap. 2 Hardware a disposizione e modi�che e�ettuate
ambiente di sviluppo, operante su un PC standard, che usa una libreria Wiring
per sempli�care la scrittura di programmi in C e C++ e generare codice ese-
guibile per il microcontrollore. É, inoltre, disponibile un editor di testo dotato
di alcune particolarità, come il syntax highlighting, il controllo delle parentesi
e l'indentazione automatica.
Il progetto ha preso avvio in Italia a Ivrea, nel 2005, con lo scopo di rendere di-
sponibile, per progetti dell'Interaction Design Institute, un device di controllo
che fosse più economico rispetto ad altri sistemi di prototipazione in commer-
cio.
Figura 2.2: Arduino Duemilanove ATmega328.
La scheda Arduino consta di un microcontroller a 8-bit AVR prodotto dalla At-
mel basato sulla ATmega328, con l'aggiunta di componenti complementari che
ne facilitino l'incorporazione in altri circuiti. Sono infatti presenti 14 piedini
inputs/outputs digitali (di cui 6 utilizzati come outs PWM, pulse-width modu-
lation, con frequenza 490 Hz), 6 inputs analogici, un oscillatore a 16 MHz, una
connessione USB, un ingresso per l'alimentazione, un ICSP header (In-Circuit
Serial Programming) ed un bottone di reset. Tutto ciò che è necessario per
supportare il microprocessore è contenuto nella scheda. Infatti, per utilizzarla,
è su�ciente connetterla ad un computer con un cavo USB oppure tramite un
24 A. Rech
�2.3 Modi�che Hardware
alimentatore AC-DC o una batteria; ciò risulta vantaggioso dal punto di vista
della portabilità, perché, scrivendo programmi autosu�cienti, decade la neces-
sità di connetterla ad un PC.
É inoltre presente un piedino che è una sorgente a 3.3 Volts generata dal chip
FTDI della scheda.
A valle della descrizione delle caratteristiche dell'Arduino Duemilanove, risulta
quindi evidente che la scelta di tale scheda, nonostante comportasse il lavoro
aggiuntivo di modi�ca del circuito già presente e funzionante, è stata ritenuta
vantaggiosa per le sue caratteristiche di portabilità, semplicità di connessione
e programmazione.
2.3.3 Modi�che dei circuiti
La caratteristica della scheda scelta che ha reso necessaria la modi�ca del cir-
cuito pre-esistente, è la frequenza di emissione dei segnali PWM (490Hz) per
il pilotaggio del transistor. Essa risulta essere, infatti, molto inferiore a quella
della scheda Sensoray originaria, con l'e�etto negativo di non essere �ltrata
all'uscita del transistor.
Un segnale PWM, sigla per pulse-width modulation, è un tipo di modulazione
analogica in cui l'informazione è codi�cata sotto forma di durata nel tempo
di ciascun impulso di un segnale. É, infatti, un'onda quadra che varia tra un
valore di tensione minima OFF, nel caso in esame vmin = 0V , ed una tensione
massima ON, nel caso in esame vmax = 5V . Questo schema ON-OFF (Fig. 2.3)
può simulare valori di tensione che variano tra vmin e vmax calcolando il tempo
che, lungo la durata di un ciclo, il segnale trascorre in stato di ON rispetto al
tempo che trascorre in stato di OFF (Duty Cicle).
A. Rech 25
Cap. 2 Hardware a disposizione e modi�che e�ettuate
Figura 2.3: PWM
La riduzione della frequenza del segnale PWM ha richiesto una modi�ca del
circuito originario in quanto il transistor usato, per le sue caratteristiche intrin-
seche, riusciva a �seguire� l'onda quadra del PWM anziché integrare sul valor
medio del Duty Cicle. Pertanto, la variabilità del segnale in Base si tramutava
in una corrente variabile su Collettore ed Emettitore, a fronte di un valore
desiderato costante.
Per ovviare a questo problema è stato inserito nel circuito di Base un �ltro
passa basso, realizzato ponendo un condensatore tra l'uscita della resistenza
R2 e la massa �stabilizzando� il segnale in base al transistor.
Questo modo di operare è piuttosto comune quando si desidera ottenere un
convertitore digitale-analogico economico per segnali digitali di tipo PWM.
A seguito di questa modi�ca, si è deciso di inserire nel circuito una ulteriore
26 A. Rech
�2.3 Modi�che Hardware
resistenza R3, in serie all'originaria resistenza R1. Questa scelta è stata ef-
fettuata con lo scopo di limitare la corrente massima che potesse scorrere sul
circuito, in modo da preservare l'integrità dei �li di NiTiNol che non soppor-
tano elevati valori di corrente.
Misurando, quindi, la di�erenza di tensione ai capi di tale nuova resistenza e
conoscendone il valore, tramite l'applicazione della Legge di Ohm si può così
calcolare la corrente che scorre sull'Emettitore. Grazie alla relazione (2.2.2),
risulta automaticamente nota con soddisfacente precisione anche la corrente
che scorre sul Collettore e quindi sul �lo di NiTiNol.
Attuate le necessarie modi�che �n qui descritte, è stato quindi ottenuto il
circuito schematizzato in Fig. 2.4.
Figura 2.4: Circuito elettrico del singolo �lo modi�cato secondo le esigenze delpresente studio.
A. Rech 27
Cap. 2 Hardware a disposizione e modi�che e�ettuate
2.4 Modi�che Software
2.4.1 Modi�che del controllore di corrente conseguentialle modi�che dei circuiti
L'inserimento del �ltro passa basso sul segnale entrante in Base al transistor,
fa sì che il sistema non possa più essere considerato istantaneo come in [2].
Esso, infatti, inserisce nel sistema una componente dinamica lineare di cui è
necessario tenere conto nell'azione di controllo (vedi Fig. 2.5).
Figura 2.5: Schema a blocchi del sistema modi�cato
Attraverso il software SisoTool di Matlab, è stato quindi progettato un com-
pensatore PI (Proporzionale Integrale) che tenesse conto della linearità:
C(s) = KP +KI
s=KP s+KI
s(2.4.1)
In tal modo viene prodotta in uscita, a valle della discretizzazione ottenuta
tramite �Corrispondenza Zero-Poli�, una funzione della variabile w = z−1Ts
ove
Ts = 1000µs è il tempo di campionamento scelto:
C(w) = a · 1 + bw
w(a e b parametri forniti da SisoTool) (2.4.2)
Riportando l'espressione ottenuta in funzione della variabile z e considerando
KP = ab e KI = a, si ottiene:
C(z) =KP z + (KITs −KP )
z − 1(2.4.3)
28 A. Rech
�2.4 Modi�che Software
La C(z) così ottenuta è stata antitrasformata mediante �metodo computazio-
nale�, così da ricavarne la forma algoritmica 2.4.4 da portare nel software
sviluppato per Arduino.
y(k) = y(k − 1) +KP e(k) + (KITs −KP )e(k − 1) (2.4.4)
2.4.2 Lettura dell'angolo
Usando la piattaforma hardware Arduino, è stato possibile sempli�care no-
tevolmente la rilevazione della misura dell'angolo. Infatti, l'encoder AS5045
montato nel sistema, mette a disposizione un' uscita che codi�ca il valore del-
l'angolo tramite un segnale PWM il cui Duty Cicle è proporzionale all'angolo
rilevato nell'intervallo 0°-360°. Considerando quindi che il tempo tra due fron-
ti di salita dell'onda modulata è costante, si è calcolato l'angolo secondo la
proporzione:
Angolo Rilevato : 360° = TON : Intervallo tra due salite (2.4.5)
Ove TON è il tempo che il segnale PWM resta alto e si rileva tramite una fun-
zione attivata dall'ISR (interrupt service routine) sul piedino su cui arriva il
PWM.
Per tarare l'equazione 2.4.5 si è preferito rilevare il valore della costante �In-
tervallo tra due salite� sperimentalmente, benché questo fosse un parametro
presente nel �Data Sheet� dell'encoder. Questa operazione è stata e�ettuata,
una tantum, attivando la funzione appena citata solo sul fronte di salita del
segnale.
A. Rech 29
Capitolo 3
Modello d'isteresi
Nel presente capitolo si introduce il concetto di isteresi per poi spie-gare ampiamente il modello dinamico del sistema d'isteresi che siprende in considerazione per questo studio.
3.1 Isteresi
L'isteresi è un fenomeno altamente non lineare che caratterizza sistemi la cui
funzione energetica ha molti punti di equilibrio. Per questo motivo, ogni con-
�gurazione di un sistema isteretico può essere raggiunta potenzialmente in un
numero in�nito di modi e ciò signi�ca che la relazione di ingresso-uscita, in un
tale sistema, non è unica.
I sistemi con isteresi si de�niscono dotati di memoria, cioè l'uscita del siste-
ma dipende dalla storia dell'ingresso ed, in alcuni casi, essi ammettono una
rappresentazione in spazio di stato in�nito-dimensionale. Se per un sistema
deterministico, senza dinamica, è possibile predire l'uscita istante per istante
conoscendo semplicemente il valore dell'ingresso, ciò non è possibile per i si-
stemi con isteresi. In essi, infatti, è necessario conoscere, non solo la coppia
ingresso-uscita del sistema, ma anche la storia di ingressi passati che lo ha
condotto in tale situazione.
A. Rech 31
Cap. 3 Modello d'isteresi
3.2 Storia e precedenti del modello
Nel 1935, il �sico tedesco F. Preisach, introdusse il primo modello matematico
ad in�nite dimensioni. Tale modello, noto come �Modello Classico di Preisach�,
benché valido per descrivere il comportamento di molti materiali ferromagne-
tici, si basa su un' ipotesi di partenza molto forte. Esso richiede infatti che il
sistema possegga la proprietà di congruenza:
Proprietà 3.2.1. Secondo la proprietà di congruenza, nota la curva d'i-
steresi tra due ingressi h1 ed h2 (∆h = h2 − h1), se il sistema viene sollecitato
da una sequenza di ingressi tra hi ed hj = hi + ∆h, esso segue esattamente la
stessa curva d'isteresi purché il ∆h sia lo stesso. ♣
Successivamente, nel 1988, I. D. Mayergoytz modi�cò il modello classico di
Preisach, generando un modello noto come �Modello di Preisach Generalizzato�.
In tale modello la proprietà di congruenza è riformulata nella, meno restrittiva,
proprietà di uguaglianza delle corde verticali:
Proprietà 3.2.2. Una funzione d'isteresi soddisfa la proprietà di ugua-
glianza delle corde verticali se tutti i sottocicli interni risultanti da una
variazione dell'ingresso di andata e ritorno tra gli stessi due valori consecutivi,
hanno corde verticali uguali. ♣
Nel modello preso in considerazione per questo lavoro, anche questa proprietà
sarà riformulata attraverso l'introduzione di proprietà ancora meno restrittive
che saranno introdotte ed ampiamente descritte nel seguito e che conducono
ad una più ampia applicabilità.
32 A. Rech
�3.3 Introduzione al modello
3.3 Introduzione al modello
Si considera lo schema a blocchi del sistema dinamico in esame come un tra-
sduttore isteretico statico con segnali scalari di input e di output, denominati
rispettivamente h(t) e x(t).
Figura 3.1: Schema a blocchi del sistema d'isteresi
Si introduce la seguente assunzione:
Assunzione 3.1. L'input h(t) e l'output x(t) possono assumere valori in un
intervallo limitato (3.3.1 e 3.3.2).
h(t) ∈ Dh := [hmin, hmax] (3.3.1)
x(t) ∈ Dx := [xmin, xmax] (3.3.2)
Inoltre, il sistema è inizializzato nel punto di saturazione negativa:
(x(0), h(0)) = (xmin, hmin) (3.3.3)
Si de�nisce tk come l'istante di tempo in cui la derivata della funzione di ingres-
so cambia di segno (cioè l'istante in cui l'ingresso crescente inizia a decrescere
o l'ingresso decrescente inizia a crescere). Si introduce quindi la notazione
hk = h(tk) e si nota che esso è o un massimo o un minimo locale della funzione
di ingresso.
La storia della funzione d'ingresso può, quindi, univocamente essere descritta
A. Rech 33
Cap. 3 Modello d'isteresi
dalla sequenza degli estremi di input: {h0, h1, h2, . . . , hk}. Dato che h0 è neces-
sariamente un minimo, essendo il punto di saturazione negativa (vedi 3.3.3),
hi risulta essere un minimo o un massimo locale qualora i sia rispettivamente
pari o dispari.
Si de�nisce ora l'intervallo di tempo εk := [tk, tk+1) come k-esima epoca. Per
quanto puntualizzato in precedenza risulta evidente che l'input h(t) è non de-
crescente per t ∈ tk con k pari (epoca positiva) ed è non crescente per t ∈ tk
con k dispari (epoca negativa).
3.4 Modello Costruttivo
Figura 3.2: Esempi di curve di transizione del primo (FOTC) e del secondo(SOTC) ordine
Si consideri il ramo ascendente x+0 (Fig. 3.2) del loop esterno della mappa
d'isteresi ove l'ingresso cresce monotonicamente da h(0) = hmin ad h(T ) = hmax
(nel seguito la dipendenza dal tempo verrà omessa).
De�niamo la funzione w0 (3.4.1) che rappresenta il ramo crescente del loop
34 A. Rech
�3.4 Modello Costruttivo
esterno misurata sperimentalmente.
w0 : Dh → Dx, w0 = x+0 (3.4.1)
Durante l'epoca zero (ε0), quindi, il valore dell'uscita corrispondente ad un
ingresso h(t) per qualunque t ∈ [t0, t1) può essere valutato secondo la relazione:
x(h) = w0(h) (3.4.2)
De�niamo ora la funzione corda w(hi, hi+1;h) : D3h → Dx (3.4.3) come la
lunghezza delle corde verticali del sottociclo generato da un ingresso che varia
monotonicamente dal valore iniziale hi ad hi+1, e torna monotonicamente al
valore iniziale hi.
Si noti che w non dipende dalla velocità di variazione dell'ingresso, ma solo
dai valori estremi assunti (questo perché il modello è rate-independent ovvero
istantaneo).
Ad esempio, la funzione w(hmin, h1;h) in Fig. 3.2 è generata da una sequenza di
andata e ritorno di variazione dell'ingresso tra i valori hmin e h1. Tale funzione
è cioè calcolata sottraendo il valore dell'uscita sul ramo ascendente del loop
esterno al valore dell'uscita sulla curva di transizione del primo ordine (FOTC)
che si diparte dal ramo ascendente quando il valore dell'ingresso decresce da
h1 a hmin (vedi Ia in Fig. 3.2).
w(hmin, h1;h) = xh1h − x+h = xh1h − w0(h) (3.4.3)
Quindi la curva d'isteresi del primo ordine xh1h può essere calcolata come:
x(h) = w0(h) + w(hmin, h1;h) = x+h + (xh1h − x+h ) = xh1h (3.4.4)
In questo modo, usando le relazioni (3.4.1) e (3.4.3), si possono ricostruire con
esattezza, rispettivamente, il ramo ascendente del loop esterno e la FOTC. Si
A. Rech 35
Cap. 3 Modello d'isteresi
può quindi dedurre che è possibile ricostruire la curva di transizione del secondo
ordine (SOTC), se si de�nisce la funzione w(h1, h2;h) come la lunghezza della
corda verticale del loop interno generato da una sequenza di andata e ritorno
di variazione dell'ingresso tra i valori h1 e h2. Tale funzione è cioè calcolata
sottraendo al valore dell'uscita sulla FOTC, quello sulla SOTC che si diparte
dalla FOTC dell'ingresso cresce da h2 a h1 (vedi IIa in Fig. 3.2).
w(h1, h2;h) = xh2h1h − xh1h (3.4.5)
Quindi la curva d'isteresi del secondo ordine xh2h1h può essere calcolata come:
x(h) = w0(h) + w(hmin, h1;h) + w(h1, h2;h) = xh2h1h (3.4.6)
Dato che h1 ed h2 sono arbitrari, de�niamo tutte le funzioni corda w misurando
le corde verticali dei loop minori con almeno un vertice sul loop esterno, cioè,
tutte le curve di transizione di primo e secondo ordine. Si noti che, nel presente
modello, anche i rami Ib, di Fig. 3.2, che si dipartono dal ramo discendente del
loop esterno possono essere considerati curve di primo ordine, ossia FOTC
inverse, come se l'input iniziasse direttamente da hmax invece che da hmin. In
questo modo anche le curve di transizione del terzo ordine (SOTC inverse)
originate dal ramo discendente del loop esterno sono comprese nelle funzioni
w.
Proprietà 3.4.1. Dal momento in cui il modello comprende sia FOTC [e
SOTC] che FOTC inverse [e SOTC inverse], è necessario tener presente la
seguente disuguaglianza 1:
w(h1, h2; ·) 6= w(h2, h1; ·) (3.4.7)
♣1Questa proprietà permette di scrivere isteresi che sono asimmetriche.
36 A. Rech
�3.4 Modello Costruttivo
3.4.1 Derivazione formule dalle proprietà
Si consideri che, per il modello di Preisach generalizzato, vale il seguente lemma:
Lemma 3.4.1. Per il trasduttore isteretico vale la proprietà di uguaglianza
delle corde verticali, se e solo se:
w(h1, h2; ·) = −w(h2, h1; ·), per ogni coppia (h1, h2) ∈ Dh, h1 < h2.
Sia inoltre data la seguente de�nizione:
Proprietà 3.4.2. Una funzione d'isteresi soddisfa la proprietà di ugua-
glianza debole delle corde verticali se tutti i sottocicli risultanti da una va-
riazione ciclica dell'ingresso tra gli stessi due valori consecutivi, con lo stesso
vertice di partenza, hanno corde verticali uguali. ♣
Si assume, inoltre, la proprietà di cancellazione (wiping out property),
valida anche per i modelli di Preisach e di Preisach generalizzato:
Proprietà 3.4.3. Secondo la proprietà di cancellazione, l'isteresi dipende
solo dal valore attuale dell'ingresso e dalle sequenze monotone di massimi e
minimi. ♣
Cioè, se la funzione d'isteresi in un dato istante passa nuovamente per un punto
in cui è già passata, è possibile non tener conto della storia dell'ingresso tra
l'istante in questione e l'istante in cui era passata in tale punto la prima volta,
in quanto tale storia di ingressi non sarà più rilevante per l'evoluzione futura
della funzione.
Basandosi sulle proprietà 3.4.2 e 3.4.3, si possono ottenere le equazioni (3.4.9)
e (3.4.10) secondo cui si ottiene il sottoinsieme di ingressi passati, rilevante per
A. Rech 37
Cap. 3 Modello d'isteresi
determinare l'evoluzione della funzione d'isteresi. Tale sottoinsieme si ottiene
selezionando, tra tutti gli ingressi passati, la sottosequenza di massimi mono-
tonicamente decrescente: h1 > · · · > h2j+1 > · · · e la sottosequenza di minimi
monotonicamente crescente: h0 < · · · < h2j < · · · o, alternativamente, consi-
derando il tempo, la sequenza di ingressi al tempo: t0, t1, . . . , t2j, t2j+1, . . . .
Tali estremi di input che al tempo t risultano �non cancellati�, sono memoriz-
zati nel vettore ha(t) ed il loro numero è indicato dalla variabile k(t).
Si consideri i = −2,−1, 0, . . . come indice del vettore hai (t), con ha−2(·) =
hmin − 1, ha−1(·) = hmax + 1, ha0(·) = hmin. Tale inizializzazione del vettore è
necessaria per valutare correttamente il valore della funzione k(t) in (3.4.9) ove
un estremo di ingresso deve essere rispettivamente hmin o hmax.
Inizializzando la coppia (k(t), ha(t)) come:
(k(0), ha(0)) = (0, hmin) (3.4.8)
Quando, al tempo t−, inizia una nuova epoca, innescata dall'estremo di in-
put h(t−) = h, la nuova coppia (k(t), ha(t)) si trova eseguendo la legge di
aggiornamento:
k(t) =
maxi=−1,1,...,k−1
{i : hai (t
−) > h}
+ 2, se k(t−) pari
maxi=−2,0,...,k−1
{i : hai (t
−) < h}
+ 2, se k(t−) dispari(3.4.9)
hak(t)(t) = h (3.4.10)
3.4.2 Algoritmo derivante dalla discretizzazione del mo-dello
Si introduce ora l'algoritmo del modello proposto con ingresso discretizzato,
tempo di campionamento T , n variabile che indica il passo a cui ci si trova.
Si usa quindi la notazione: h(nT ) = hn, k(nT ) = kn, ∆hn = hn − hn−1, e la
38 A. Rech
�3.4 Modello Costruttivo
funzione del tempo W : N×Dh → Dx la cui legge di aggiornamento è de�nita
in (3.4.11). Si assume che il sistema sia inizializzato nel punto di saturazione
negativa: h(0) = hmin.
Algoritmo 3.1. Modello costruttivo (Constructive Model):
� Inizializzazione
W (0, ·) = w0(·)
� Legge di aggiornamento
if (∆hn∆hn−1) < 0 then
- calcola (3.4.9) e (3.4.10) con t = nT e t− = (n− 1)T
- assegna:
W (kn, ·) = W (kn − 1, ·) + w(hkn−1, hkn ; ·) (3.4.11)
� Calcolo dell'uscita
si calcoli l'uscita del modello come:
x(hn) = W (kn, hn) (3.4.12)
Si noti che la condizione (∆hn∆hn−1) < 0 risulta soddisfatta quando la deriva-
ta della funzione d'ingresso cambia segno e che l'equazione(3.4.11) è il cuore del
modello. Vediamo a conferma di quanto detto, qualche passo di funzionamento
dell'algoritmo.
Quando kn = 0, la funzioneW (0, ·) = w0(·), quindi può essere ricostruito il
ramo ascendente del loop esterno. Al primo estremo h1 dell'input, la variabile
A. Rech 39
Cap. 3 Modello d'isteresi
k è portata ad 1 dall' equazione (3.4.9) e W (1, ·) = w0 + w(h0, h1; ·) è esatta-
mente la FOTC xh1h.Proseguendo si possono trovare analogamente le curve di
transizione di ordine superiore. Quando alcune epoche vengono cancellate dal
nuovo estremo di ingresso h, W (·) è riportato al valore di W (kn, ·) con il nuovo
kn, ignorando così tutti gli e�etti degli estremi di input cancellati (secondo la
proprietà di wiping out).
Si riporta di seguito l'enunciato e la dimostrazione del teorema che a�erma
la capacità dell'algoritmo di ricostruire esattamente le non linearità isteretiche
non soltanto per le curve di primo e secondo ordine, come si è visto in pre-
cedenza mostrandone l'evoluzione per i primi due passi di funzionamento, ma
anche per ogni curva di transizione di un sistema per cui valgano le proprietà
3.4.2 e 3.4.3, rispettivamente di uguaglianza debole delle corde verticali e di
cancellazione.
Figura 3.3: Esempio di curva di transizione del terzo ordine (TOTC) xh1h2h3h
40 A. Rech
�3.4 Modello Costruttivo
Teorema 3.4.1. Teorema della rappresentazione: In un sistema in cui
valga l'assunzione 3.1, ossia inizializzato come in 3.3.3, le proprietà di ugua-
glianza debole delle corde verticali e di cancellazione, sono condizione necessa-
ria e su�ciente per la rappresentazione della non linearità dell'isteresi attra-
verso il modello costruttivo.
Dimostrazione: La prova della necessità è banale: è infatti già stato mostra-
to che il modello può riprodurre esattamente �no alle curve di transizione di
secondo ordine con la proprietà di cancellazione. Poiché le curve di transizione
di ordine superiore al secondo non sono comprese nelle funzioni w(·), quando
l'ingresso conduce a curve di un tale ordine, si potrebbe pensare che l'algo-
ritmo le ricostruisca in maniera errata, in quanto ha a disposizione soltanto i
dati delle curve di primo e secondo ordine. In realtà, data la validità della pro-
prietà debole di uguaglianza delle corde verticali, tutte le curve di transizione
possono essere ricostruite usando solo le FOTC e le SOTC. Infatti, si assuma
che l'input conduca ad una curva di terzo ordine (una terza epoca ε3) xh1h2h3h
come in Fig. 3.3: quando l'ingresso inizia a decrescere da h3, W si aggiorna
usando la funzione corda w(h2, h3; ·), che è stata de�nita usando le corde del
loop interno generato dal ramo discendente nell'intervallo [h2, h3], innestato sul
ramo ascendente esterno. Quindi, secondo la proprietà di uguaglianza debole
delle corde verticali, il modello ricostruisce esattamente la curva in esame. Per
induzione si può quindi concludere che il modello ha tutte le informazioni ne-
cessarie per ricostruire tutte le curve di transizione. In particolare, le funzioni
corda w con vertici sul ramo crescente sono usate per aggiornare W quando
k è pari, mentre, invece, le funzioni corda w con vertici sul ramo decrescente
sono usate per aggiornare W quando k è dispari. 2
A. Rech 41
Cap. 3 Modello d'isteresi
3.5 Modello Costruttivo Generalizzato
IlModello Costruttivo si generalizza a fronte di una non necessaria validità della
proprietà di uguaglianza debole delle corde verticali. I loop interni, generati da
curve di transizione di ordine arbitrario, saranno memorizzati nelle funzioni
corda w del modello generalizzato. Queste funzioni corda dipenderanno da più
di due parametri e ciò conduce, con un aumento del livello di complicazione,
ad un modello molto più accurato, che si è infatti scelto di prendere in esame
per il nostro sistema.
De�niamo il regressore:
θm,jp = {H,X} (3.5.1)
in cui i singoli parametri non ancora noti a questo punto della trattazione sono
de�niti come:
� H insieme di estremi di ingresso necessari come parametri per una fun-
zione corda w:
H = {hk−p+1, hk−p+2, . . . , hk} (3.5.2)
� p numero di estremi di ingresso necessari come parametri per una funzione
corda w: p = |H| ≥ 2
� m numero di estremi di uscita necessari come parametri per una funzione
corda w
� X collezione di insiemi de�niti come combinazioni semplici dei seguenti
p simboli distinti presi m per m
{{xk−p+1} , {xk−p+2} , . . . , {xk}} (3.5.3)
42 A. Rech
�3.5 Modello Costruttivo Generalizzato
� j numero di insiemi contenuti in X , quindi numero di distinti tipi di
regressore che si possono ottenere con una stessa coppia (m, p):
j =
[1,
(p
m
)](3.5.4)
Siano ancora ha(t) e xa(t) i vettori in cui sono memorizzati gli estremi di input e
di output rilevanti al tempo t, secondo la proprietà di cancellazione. Il sistema
si assume inoltre inizializzato al punto di saturazione negativa: h(0) = hmin.
Algoritmo 3.2. Modello costruttivo generalizzato (Generalized Constructive
Model):
� Inizializzazione: k0 = 0, (ha0(0), xa(0)) = (hmin, xmin), W (0, ·) = w0(·)
� Legge di aggiornamento:
if (∆hn∆hn−1) < 0 then
- calcola (3.4.9) con t = nT e t− = (n− 1)T
- assegna:
(hakn(nT ), xakn(nT )) = (hn−1, xn−1) (3.5.5)
W (kn, ·) = W (kn − 1, ·) + w(θm,jp ; ·) (3.5.6)
� Calcolo dell'uscita: si calcoli l'uscita del modello come
x(hn) = W (kn, hn) (3.5.7)
Si noti che quando p = 2, m = 0 si ha θ0,12 = {hk−1, hk}, che corrisponde al
modello discusso nella sezione precedente (Sez. 3.4). Nel seguito si introdurrà,
dapprima un algoritmo che generi la sequenza di ingressi necessaria per mi-
surare i loop interni necessari per calcolare le funzioni corda w(θm,jp ; ·), poi si
A. Rech 43
Cap. 3 Modello d'isteresi
analizzeranno due casi interessanti, (p,m) = (2, 1) e (p,m) = (2, 2), che rap-
presentano signi�cativamente la classe di non linearità isteretiche che possono
essere modellizzate esattamente dal presente modello.
Si assuma che il dominio di ingresso Dh sia discretizzato in r intervalli (non ne-
cessariamente di eguale ampiezza), de�niti dai valori di ingresso h0, h1, . . . , hr.
Ci si riferisce, d'ora in avanti, alla sequenza generica di ingressi {h0, hr, h1, . . . }
semplicemente attraverso l'inequivocabile sequenza degli indici relativi: S =
{0, r, 1, . . . }.
Come esempio del funzionamento dell'algoritmo, le sequenze di input generate
da esso sono mostrate in Tabella 3.1 con r = 5. Si consideri Sc,jl sia l'l− esimo
1OTC 2OTC 3OTC 4OTCh0h2h0h0h3h0 → h0h3h1h3h0h4h0 → h0h4h1h4 → h0h4h1h3h1
h0h4h2h4h0h5h0 → h0h5h1h5 → h0h5h1h4h1 → h0h5h1h4h2h4
h0h5h1h3h1h0h5h2h5 → h0h5h2h4h2h0h5h3h5
Tabella 3.1: Esempio di sequenza di identi�cazione generata dall'algoritmo 3.3con r = 5.
termine della j − esima sequenza di ingressi che genera una curva di transi-
zione di ordine c − esimo. Ad esempio la sequenza {h0h4h1h4} in Tabella 3.1
corrisponde alla sequenza S2,2 ={S2,21 ,S2,2
2 ,S2,23 ,S2,2
4
}= {0, 4, 1, 4}.
L'algoritmo che genera le sequenze di input per identi�care le curve di transi-
zione �no all'ordine c− esimo (con c ≤ r − 1) è:
Algoritmo 3.3. Algoritmo generatore di sequenze per l'identi�cazione:
1. ∀j ∈ (1, . . . , r − 1) si imponga S1,j−1 = {0, j, 0}
44 A. Rech
�3.5 Modello Costruttivo Generalizzato
2. ∀k ∈ (1, . . . , c):
� i = 1
� ∀j ∈ (1, . . . ,(r−1k
)):
- n = Sk,jk+2
- �nchè |n− Sk,jk+1| > 2:
∗ Sk+1,i ={Sk,j1 , . . . ,Sk,j
k+1, n+ (−1)k+1,Sk,jk+1
}∗ i = i+ 1
∗ n = n+ (−1)k+1
Il numero di sequenze di ingresso necessarie a misurare le curve di transizione
�no all'ordine c− esimo è uguale a∑c
i=1
(r−1i
).
Come annunciato in precedenza si procede ora all'analisi di due casi interes-
santi:
A) (p,m) = (2, 1)
B) (p,m) = (2, 2)
3.5.1 Analisi del caso (p,m) = (2, 1)
In questo caso il regressore può essere:
o θ1,12 = {hk−1, hk, xk} o θ1,22 = {hk−1, hk, xk−1}.
Si consideri il caso θ1,12 . La funzione corda w(hk−1, hk, xk;h) è la corda del
loop interno generato quando l'ingresso parte da hk−1, raggiunge hk con uscita
xk, e va indietro �no ad hk−1. Grazie alla presenza dell'argomento xk, possono
essere immagazzinate in funzioni corda, curve di transizione di ordine maggiore
A. Rech 45
Cap. 3 Modello d'isteresi
di due.
Si de�niscono ora le proprietà coinvolte nel teorema della rappresentazione per
il modello costruttivo generalizzato rispettivamente con regressori θ1,12 e θ1,22 .
Proprietà 3.5.1. Una funzione d'isteresi soddisfa la proprietà di equivalen-
za del primo vertice (FVE - �rst vertex equivalence) [o rispettivamente
la proprietà di equivalenza del secondo vertice (SVE - second vertex
equivalence)] se tutti i loop interni derivanti da una variazione ciclica dell'in-
gresso tra una stessa coppia di estremi di input con lo stesso primo vertice [o
rispettivamente secondo vertice], hanno uguali corde verticali (un esempio di
funzione di isteresi per cui valga tale proprietà è mostrato in Fig. 3.4). ♣
Figura 3.4: Esempio di validità della proprietà di equivalenza del secondovertice (SVE):loop interni con stesso secondo vertice hanno le stesse cordeverticali.
É evidente che questa proprietà è meno restrittiva della proprietà 3.4.2 di
uguaglianza debole delle corde verticali e quindi amplia lo spettro di sistemi
con isteresi che ne possono essere rappresentati.
46 A. Rech
�3.5 Modello Costruttivo Generalizzato
Teorema 3.5.1. Teorema della rappresentazione θ1,j2 : In un sistema la
validità dell'assunzione 3.1, della proprietà 3.4.3 di cancellazione e della pro-
prietà 3.5.1 di equivalenza del secondo vertice [o primo vertice] sono condizioni
necessarie e su�cienti a�nché la non linearità isteretica possa essere rap-
presentata con il modello costruttivo generalizzato con regressore θ1,12 [o θ1,22 ].
Dimostrazione: La dimostrazione può essere eseguita in analogia con la dimo-
strazione del teorema 3.4.1 sostituendo la SVE [o FVE] all'uguaglianza debole
delle corde verticali. 2
Usando l'algoritmo 3.3 generatore di sequenze di ingresso con c = r − 1, sono
memorizzate nelle funzioni w tutte le necessarie corde verticali. Quindi, se vale
la proprietà 3.5.1, si possono ricostruire tutte le curve �no all'ordine c attraverso
il modello costruttivo. É, quindi, evidente una maggiore accuratezza rispetto
al modello con θ0,12 , si è infatti ora mostrato che l'introduzione del regressore
amplia il campo di applicabilità del modello.
A. Rech 47
Capitolo 4
Implementazione del modello
Nel presente capitolo si descrive il modo in cui è stato implementatosu Arduino il �Modello Costruttivo Generalizzato� presentato nelcapitolo precedente. Tale implementazione, è �nalizzata alla veri�cadella fedeltà del modello con la realtà sperimentale, comparando idati previsionali con quelli e�ettivamente misurati.
4.1 Funzionamento dell'attuatore
Come si evince dalla descrizione del sistema e�ettuata dettagliatamente nel
Cap. 2, si sottolinea ora la costruzione speculare dell'attuatore in lega a me-
moria di forma. Esso è, infatti, costituito da due �li di egual lunghezza connessi
ad un capo alla medesima tensione di alimentazione, all'altro a due circuiti elet-
trici identici e poi a massa.
Nel presente capitolo si parlerà di �ingresso del sistema�, indicando con tale
denominazione il valore numerico, comunicato al microcontrollore tramite por-
ta seriale, che rappresenta il valore in milliampere (mA) della corrente che si
richiede scorra su un �lo dell'attuatore. Si è dunque ritenuto signi�cativo as-
sociare al valore di ingresso pari a zero la condizione i cui in nessuna delle due
parti del circuito scorre corrente, di associare ad ingressi negativi la condizio-
A. Rech 49
Cap. 4 Implementazione del modello
ne in cui scorre corrente sulla parte sinistra del sistema, di conseguenza agli
ingressi positivi sarà associata la condizione in cui scorre corrente sulla parte
destra del sistema.
Si nota quindi che, nel momento in cui il sistema riceve un ingresso, esso in-
terpreta il valore ricevuto secondo modulo e segno: il segno determina la parte
di sistema da attivare, mentre il modulo determina il valore di corrente da far
scorrere nella parte di sistema attivata. Per quanto detto, risulta evidente che
per valori negativi di corrente si intende la corrente che attraversa il �lo sini-
stro.
Per semplicità di analisi, il range di possibili valori per l'ingresso [hmin;hmax]
è stato quantizzato secondo un intervallo di quantizzazione I deciso a monte
dello studio.
Si noti che l'ampiezza I di tale intervallo è strettamente legata alla quantità
di dati da memorizzare e al tempo di esecuzione della procedura che esegue
l'individuazione della mappa d'isteresi.
Data la limitata quantità di memoria RAM a disposizione, si è scelto per questa
variabile il valore I = 50 mA. Con questo intervallo �ampio� di quantizzazione,
i tempi di esecuzione della procedura di individuazione della mappa d'isteresi
per curve �no al terzo ordine sono di circa 15 minuti.
4.2 Disegno del ciclo d'isteresi esterno
Il primo passo verso l'implementazione del modello è stato la raccolta dei da-
ti relativi al legame ingresso-uscita dell'attuatore facendo variare ciclicamente
l'ingresso tra il valore minimo hmin ed il valore massimo hmax. Ciò è servito a
veri�care l'e�ettiva presenza della non linearità isteretica nel comportamento
50 A. Rech
�4.2 Disegno del ciclo d'isteresi esterno
dell'attuatore, e quindi della coerenza dei dati e dei gra�ci ottenuti con quanto
ci si aspetterebbe in un comportamento isteretico.
Quest'ultima veri�ca ha messo in evidenza che , al termine delle modi�che
elettriche e�ettuate e descritte nel Cap. 2, uno dei due �li dell'attuatore era
mal funzionante. Infatti. ci si aspettava era che i due �li avessero un com-
portamento molto simile tra loro, avendo la stessa lunghezza e composizione
microscopica. Dal gra�co ingresso-uscita ottenuto e riportato in Fig. 4.1, si è
dedotto che necessariamente qualcosa non funzionasse correttamente:
Figura 4.1: Ciclo d'isteresi ottenuto con �li mal funzionanti.
è, infatti, evidente l'anomala forma del gra�co d'isteresi.
In esso si può notare che, in corrispondenza di valori negativi di corrente, è
presente una variazione trascurabile del valore dell'uscita lungo la curva infe-
riore �di andata�; in seguito poi, in corrispondenza di valori positivi di corrente,
l'attuatore presenta il comportamento atteso; in�ne, invece, attivando nuova-
mente il �lo corrispondente a valori negativi di corrente, si nota una nuova
A. Rech 51
Cap. 4 Implementazione del modello
anomalia data l'inspiegabile forma della curva di legame ingresso-uscita. Te-
stimonianza del mal funzionamento era, inoltre, l'assoluta non ripetibilità dei
dati. Infatti, raccogliendo i dati in diverse sessioni di test, si notava che essi
variavano continuamente rendendo il sistema imprevedibile e incontrollabile.
Pertanto è stato ritenuto necessario cambiare i �li di NiTiNol dell'attuatore e
quindi di ripetere le sessioni di test. Il nuovo gra�co di legame ingresso-uscita
ottenuto (Fig. 4.2) ha rispettato le previsioni.
Figura 4.2: Ciclo d'isteresi ottenuto a seguito della sostituzione dei �li.
Una volta ottenuto il risultato atteso e veri�cata la ripetibilità dei dati, che è
risultata soddisfatta ammettendo un margine trascurabile di errore, si è quin-
di potuto procedere all'implementazione degli algoritmi derivanti dal modello
d'isteresi presentato nel Cap. 3.
52 A. Rech
�4.3 Individuazione della mappa d'isteresi
4.3 Individuazione della mappa d'isteresi
Preliminarmente all'implementazione del modello d'isteresi, è stato necessario
riportare in codice per Arduino alcune formule ed algoritmi di cui il modello
ha bisogno per l'esecuzione.
Sono stati, infatti, realizzati:
� Un algoritmo che, ad ogni passo, aggiornasse la sequenza di ingressi
rilevanti ed il numero kn secondo le equazioni (3.4.10) e (3.4.9);
� Una procedura che generasse le sequenze di ingressi necessarie per per-
correre tutti i sottocicli, �no all'ordine desiderato, secondo l'Algoritmo
3.3;
� Una procedura, speci�catamente progettata, che, percorrendo le sequenze
d'ingresso generate dalla precedente, memorizzasse tutti i dati necessari
per l'esecuzione del modello.
4.3.1 Ingressi Rilevanti
La �nalità del modello proposto è dare la capacità di prevedere il compor-
tamento del sistema, nonostante sia dotato di forte non linearità isteretica.
Poiché il comportamento del materiale, per sua natura, dipende dalla storia
passata degli ingressi, per permettere l'esatta previsione del comportamento
del sistema, è necessario tenere conto di una sequenza di ingressi passati.
Tale sequenza è costruita secondo le equazioni di aggiornamento (3.4.10) e
(3.4.9), sulla base della proprietà di cancellazione (Prop. 3.4.3).Tali equa-
zioni sono state riportate in codice per Arduino nella funzione:
void AggiornaSeqRilev()
A. Rech 53
Cap. 4 Implementazione del modello
la quale è chiamata ogni qual volta che la derivata della funzione di ingresso
cambi di segno.
void AggiornaSeqRilev (){
Serial.println("Aggiornamento Sequenza Ingressi");
int kPrec=k;
int corr=(int)(IdP *1000);
if (pari(kPrec)){
for(int i=1; i<kPrec; i=i+2)
if(IngressiPassati[i]>corr) k=i+2;
IngressiPassati[k]=corr;
}
else{
for(int i=0; i<kPrec; i=i+2){
if(IngressiPassati[i]<corr) k=i+2;
}
IngressiPassati[k]=corr;
}
Serial.print("Ingressi Passati= ");
for(int i=0; i<=k; i++) {
Serial.print(IngressiPassati[i]);
Serial.print(" ");
}
Serial.println ();
}// AggiornaSeqRilev
4.3.2 Generazione sequenze relative ai sottocicli
Al �ne di automatizzare l'individuazione della mappa d'isteresi dell'attuatore,
è stato necessario implementare un algoritmo che generasse automaticamen-
te tutte le sequenze da percorrere. Tale algoritmo elaborato in [1] ed enun-
ciato nella Sez. 3.5 del presente elaborato, è stato implementato su Arduino
attraverso la procedura
void GeneraSequenze()
il cui codice è riportato nel seguito.
Si è ritenuto opportuno che tale procedura fosse parametrizzata, in manie-
ra tale che si potesse cambiare agevolmente sia l'intervallo di quantizzazione
dell'ingresso, sia l'ordine di curve che si vuole raggiungere nell'individuazione.
54 A. Rech
�4.3 Individuazione della mappa d'isteresi
void GeneraSequenze (){
int numero =0;
for(int x=0;x<NumSeq; x++){
for(int y=0;y<LungSeq; y++){
sequenza[x][y]=-1;
}
}
// curve di primo ordine
for(int j=1;j<MaxIn;j++){
sequenza[numero ][0]=0;
sequenza[numero ][1]=(j+1);
sequenza[numero ][2]=0;
numero=numero +1;
}
// curve di ordine superiore
for(int i=1; i<ToOrder; i++){
int limitej=binomiale(MaxIn -1,i);
for(int j=1;j<= limitej;j++){
int indice=sumbinom(MaxIn -1,i-1)+j-1;
int nA=sequenza[indice ][i+1];
int nB=sequenza[indice ][i];
while(modulo(nA -nB) >2){
for(int y=0 ;y<=i; y++){
sequenza[numero ][y]= sequenza[indice ][y];
}
int add= (int) pow(-1,i+1);
sequenza[numero ][i+1]=nA+add;
sequenza[numero ][i+2]= sequenza[indice ][i];
nA=nA+add;
numero = numero + 1;
}
}
}
} // GeneraSequenze
4.3.3 Generazione funzioni w
Una volta generate tutte le sequenze relative a tutti i sottocicli �no all'ordine
desiderato, è stata creata una procedura che facesse percorrere al sistema tali
sequenze al �ne di memorizzare tutti i dati necessari per la creazione delle
funzioni w.
A di�erenza del modello proposto in [1], si è deciso di salvare in ogni funzione
A. Rech 55
Cap. 4 Implementazione del modello
non le corde di un sottociclo, bensì la variazione percentuale dell'uscita rilevata
nel ramo di ritorno, rispetto all'uscita rilevata nel ramo di andata. Con questa
decisione, la rilevazione in uscita di sequenze monotone crescenti [o decrescenti]
lungo il ramo di andata del sottociclo di ingresso è resa condizione necessaria e
su�ciente per prevedere, in uscita, sequenze monotone decrescenti [o crescenti]
lungo il ramo di ritorno del sottociclo di ingresso. Tale caratteristica, dati
i possibili errori di misura del sistema reale, non era infatti garantita dalla
memorizzazione del valore delle corde di ogni sottociclo.
Figura 4.3: Esempio memorizzazione variazione percentuale dell'uscita.
In questo modo si salva nella funzione w il valore V tale che (Fig. 4.3):
xh1(k + n) = xh1(k) ∗ V . (4.3.1)
É stata, quindi, ideata un procedura che percorresse tutti i sottocicli, memoriz-
zasse i valori dell'uscita lungo il ramo di andata e, rilevando i valori dell'uscita
lungo il ramo di ritorno, calcolasse e memorizzasse i valori V in una struttura
56 A. Rech
�4.3 Individuazione della mappa d'isteresi
che rappresentasse le funzioni w.
Per quanto detto a proposito della variazione rispetto al modello di quanto
viene memorizzato nelle funzioni w, risulta opportuno sottolineare che la Leg-
ge di aggiornamento (3.4.11) dell'Algoritmo 3.1 và cambiata nel seguente
modo:
W (kn, ·) = W (kn − 1, ·) ∗ w(hkn−1, hkn ; ·) (4.3.2)
4.3.4 Salvataggio dei dati in memoria EEPROM
L'analisi dei requisiti di progetto e delle limitazioni di spazio di memoria e di
capacità computazionale dell'Arduino ha portato al pieno impiego della me-
moria EEPROM presente della piattaforma.
Tale memoria, che a prima vista sembrerebbe presentare solamente svantaggi
nell'impiego (per la sua gestione, infatti, debbono essere impiegate necessaria-
mente le funzioni della libreria EEPROM.h, che prevedono l'indirizzamento in let-
tura/scrittura a livello di singolo byte), presenta, invece, alcune caratteristiche
estremamente pro�cue per l'applicazione in oggetto e cioè:
� La memoria è di tipo non volatile e quindi, contrariamente alla RAM,
mantiene le informazioni in essa memorizzate anche in assenza di alimen-
tazione. Dedicandone, quindi, l'impiego alla memorizzazione dei dati
relativi alla speci�ca della mappa d'isteresi, che genera le funzioni w,
queste rimangono in memoria per la successiva riaccensione della piatta-
forme, evitando di dar seguito obbligatoriamente all'onerosa procedura
di rilevamento e riservandosi di farlo solamente nei casi in cui le modi�che
introdotte nel sistema la rendano necessaria. Solamente a titolo di esem-
pio si fa notare che detta procedura di rilevamento della mappa d'isteresi
A. Rech 57
Cap. 4 Implementazione del modello
Figura 4.4: Struttura �ssa ideata per la memoria EEPROM.
58 A. Rech
�4.4 Previsione dell'uscita secondo il modello
e di generazione delle funzioni w, nel caso di intervallo di quantizzazione
di 50 mA e mappatura di funzioni �no al terzo ordine, necessita di un
tempo di esecuzione di circa 15 minuti.
� La rigidità di indirizzamento della EEPROM ha, inoltre, imposto di idea-
re una struttura dati �ssa �assoluta� per l'immagazzinamento delle infor-
mazioni di mappa d'isteresi (rappresentate in Fig. 4.4) ed ha, quindi,
evitato ogni ambiguità di interpretazione dei dati che vengono, pertanto,
individuati dal programma autonomamente dopo ogni accensione. Per i
dettagli relativi al codice dell'algoritmo di generazione e salvataggio dei
dati relativi alla mappa ed alle funzioni w, si rimanda all'Appendice.
� L'impiego della EEPROM ha, quindi, consentito di lasciar completamen-
te libera la memoria RAM, il che, visto il suo limitato spazio (2 KB) che
impedirebbe in ogni caso la memorizzazione di �grossi� array, si è tradot-
to in un bene�cio per le altre strutture dati gestite dal programma, che
sono state �pensate� con minori limitazioni di spazio.
4.4 Previsione dell'uscita secondo il modello
Fase conclusiva di questo primo lavoro sul sistema, è stata la veri�ca che il
modello proposto ne approssimasse bene il comportamento. É stato quindi
realizzato un software che prevedesse il comportamento del sistema secondo il
modello. É stata quindi implementata la funzione
void PrevediUscita()
che, utilizzando come dati le variabili impostate dalle procedure descritte nei
paragra� precedenti, stima il comportamento del sistema secondo le regole del
A. Rech 59
Cap. 4 Implementazione del modello
modello.
Tale procedura, quindi, quando viene richiesto un valore di corrente in ingres-
so, esamina la sequenza di ingressi passati rilevanti e calcola il valore presunto
dell'angolo di uscita. Tale calcolo si e�ettua esaminando i valori delle uscite
lungo il ramo ascendente esterno e della funzione W , aggiornata secondo la
legge (4.3.2), in cui w(hkn−1, hkn ; ·) è la funzione w del sottociclo d'isteresi che
si sta percorrendo.
Per comprendere a fondo il funzionamento di questa procedura, momento cul-
mine e conclusione della prima parte del presente lavoro, si riporta di seguito,
come esempio, un ciclo di funzionamento della stessa.
� Richiesta di una nuova corrente in ingresso: h = 50 mA (viene richiesto
di far passare una corrente di 50 mA sul �lo destro corrispondente a valori
positivi di corrente);
� Storia del sistema:
- Sequenza di ingressi passati rilevanti: { −150 100 };
- Valore kn: 2;
- Ingresso precedente: -100 mA
- Derivata della funzione d'ingresso �no all'istante precedente l'avven-
to del presente ingresso: negativa (funzione d'ingresso decrescente);
- Sequenza uscite relative al ramo ascendente esterno:
{θ−150 θ−100 θ−50 θ0 θ50 θ100 θ150 };
- Funzione W : W (kn, ·);
60 A. Rech
�4.4 Previsione dell'uscita secondo il modello
� L'algoritmo confronta l'ingresso presente con quello al tempo precedente
e deduce che la funzione d'ingresso è crescente; osservando lo stato della
derivata della funzione d'ingresso al tempo precedente, deduce che essa ha
cambiato di segno (si è avuto un minimo locale della funzione d'ingresso),
lancia quindi le procedure di aggiornamento della sequenza di ingressi
rilevanti e della funzione W :
- Calcola (3.4.9) e (3.4.10) ottenendo:
> kn = 3;
> Sequenza di ingressi passati rilevanti: { −150 100 − 100 };
- Memorizza in due variabili hiniziale e hfinale i valori corrisponden-
ti alla posizione kn − 1 e kn della sequenza di ingressi rilevanti:
hiniziale = 100 e hfinale = −100 (cioè secondo il modello il sistema
si sta muovendo nel sottociclo tra -100 e 100 nella parte di ramo
crescente);
- Ricerca della corrispondente funzione w(hiniziale, hfinale; ·): per ri-
cercare tale funzione si esegue un ciclo in cui si esaminano i due
parametri iniziali di tutte le funzioni salvate, �nché non si trova una
funzione che abbia come parametri esattamente quelli attuali;
- Aggiornamento della funzione W secondo la legge (4.3.2);
� In base alla funzione W attuale, al valore dell'ingresso richiesto e alle
uscite relative al ramo ascendente esterno, esegue la previsione dell'uscita
del sistema:
Previsione = θh ∗Wattuale(h) (4.4.1)
A. Rech 61
Cap. 4 Implementazione del modello
ove θh è l'uscita registrata in corrispondenza del valore d'ingresso h lun-
go il ramo ascendente esterno, e Wattuale(h) è la variazione percentuale
del valore dell'uscita nel punto desiderato rispetto al ramo ascendente
esterno, in corrispondenza dell'ingresso h richiesto.
Eseguita la previsione, il sistema la comunica all'utente tramite stampa a video
su porta seriale e procede quindi per il raggiungimento del valore d'ingresso
richiesto e in�ne, come veri�ca della correttezza della previsione, stampa anche
il valore reale dell'uscita in corrispondenza dell'ingresso richiesto.
É stato veri�cato, tramite diverse sessioni di test, che la procedura così descritta
commette in generale un errore dell'ordine di grandezza di 1°.
62 A. Rech
Capitolo 5
Controllo tramite inversione del
modello
Il presente capitolo descrive l'elemento centrale di questo lavoro cioèla realizzazione di un sistema di controllo per l'attuatore basato sul-l'inversione del modello d'isteresi. Fine pratico di questo lavoro èottenere un sistema in grado di gestire la corrente da far passare,istante per istante, sui due �li di NiTiNol allo scopo di raggiungerel'angolo richiesto.
5.1 Obiettivo preposto ed ipotesi di progetto
L'obbiettivo è implementare un sistema di controllo per l'attuatore realizzato
tale da garantire che, dato in ingresso un angolo desiderato, il sistema gestisca
la corrente da far scorrere nei �li a�nché portino l'encoder in un intorno di
tale angolo, con un errore accettabile per l'applicazione di utilizzo.
In questo capitolo, a di�erenza del precedente, il sistema prevede come �ingres-
so� un valore numerico che esprime l'angolo (in gradi) a cui si vuole posizionare
l'uscita.
Nella realizzazione è stata assunta l'ipotesi/vincolo che il sistema insegua rife-
rimenti a gradino e che un riferimento costante, relativo all'angolo desiderato,
non varii prima che tale angolo sia stato raggiunto (circa 2 sec).
A. Rech 63
Cap. 5 Controllo tramite inversione del modello
5.2 Il sistema di controllo
Note le ipotesi di base con cui è stato svolto il presente studio, si ritiene ora
necessario schematizzare la struttura del sistema in esame con lo schema a
blocchi di Fig. 5.1.
Figura 5.1: Schema a blocchi del sistema: Attuatore + Controllo (generico).
Si vuole in particolare evidenziare che, nel presente capitolo, si andrà ad esa-
minare in dettaglio come è stato progettato il blocco �Controllore� a�nché
�Angolo Ottenuto� ' �Angolo Richiesto�.
5.2.1 Controllo in Feed Forward: inversione del modello
Figura 5.2: Schema a blocchi del sistema: Attuatore + Controllo con isteresiinvertita.
Il primo passo, fondamentale per il progetto del controllore, è stato l'inversione
del modello d'isteresi (Fig. 5.2).
Nel momento in cui arriva al sistema la richiesta di un angolo, esso e�ettua la
previsione dell'uscita in corrispondenza di tutti i possibili ingressi quantizzati
64 A. Rech
�5.2 Il sistema di controllo
sulla base della posizione attuale e della �storia passata�. Analizzando così tut-
te le previsioni, sarà richiesto il valore di corrente corrispondente all'ingresso
quantizzato che, secondo il modello d'isteresi, produrrà in uscita la migliore
approssimazione dell'angolo richiesto.
L'inversione consiste, infatti, nel calcolo anticipato delle potenziali uscite del
sistema, attraverso gli algoritmi di previsione descritti nel Cap. 4, in corrispon-
denza di tutti gli ingressi quantizzati e nella conseguente scelta dell'approssi-
mazione migliore.
Risulta evidente che il controllo descritto �no ad ora e mostrato nello schema a
blocchi di Fig. 5.2, alla richiesta di un angolo, induce il sistema a posizionarsi
in corrispondenza dell'angolo indotto dalla quantizzazione di corrente di cui al
Cap. 4.
Figura 5.3: Inversione della funzione d'isteresi e relativa funzione d'errore.
Pertanto, in tal modo, si ottiene un insieme limitato di possibili posizioni rag-
giungibili senza errore e non sempre l'uscita prodotta sarà una buona appros-
A. Rech 65
Cap. 5 Controllo tramite inversione del modello
simazione dell'angolo richiesto in ingresso. In particolare, si otterrà un'appros-
simazione tanto migliore, quanto più piccolo sarà il modulo della derivata della
funzione d'isteresi nell'intorno dell'angolo richiesto.
Per quanto detto, esaminando la Fig. 5.3, si deduce che si avrà una buona ap-
prossimazione dell'uscita, solo in corrispondenza di angoli che l'inversione del
modello mappa in angoli ottenuti a bassi moduli di corrente.
Risulta, inoltre, molto interessante osservare in Fig. 5.3 l'andamento della fun-
zione d'errore, da cui si trae un'ulteriore conferma di quanto �n qui esposto a
riguardo della bontà della precisione ottenuta.
É evidente come tale precisione cresca alla diminuzione dell'ampiezza dell'inter-
vallo di quantizzazione, ma tale ipotesi, come detto in precedenza, condurrebbe
all'aumento esponenziale della quantità di dati da memorizzare per implemen-
tare l'inversione.
In alternativa, si può tentare di diminuire l'errore massimo ottenibile rendendo
non uniforme il passo di campionamento cioè, campionando ad intervalli di
ampiezza decrescente al crescere della derivata della funzione d'isteresi.
Nell'ipotesi, di avere memoria e potenza di calcolo su�ciente, o di ritenere
accettabile la funzione di errore ottenuta, o di non avere a disposizione uno
strumento di misura dell'angolo tale da garantire la chiusura del loop di �Feed
Back�, la semplice inversione del modello d'isteresi, controllo ad �anello aper-
to� (Fig. 5.4), potrebbe comunque garantire un soddisfacente posizionamento
senza ricorrere agli ulteriori a�namenti descritti nel seguito.
66 A. Rech
�5.2 Il sistema di controllo
Figura 5.4: Schema a blocchi del sistema ad �anello aperto�.
5.2.2 A�namento del controllo: controllore PI agentesull'errore
A seguito dell'osservazione dei risultati ottenuti sperimentalmente con la sola
inversione del modello d'isteresi discretizzato, si è deciso di non ritenere accet-
tabile l'errore dovuto all'inevitabile approssimazione che si otteneva in uscita.
Si è quindi aggiunto al sistema di controllo una controreazione unitaria sulla
base della quale migliorare i risultati ottenuti (Fig. 5.5).
Figura 5.5: Schema a blocchi del sistema: Attuatore + Controllo con isteresiinvertita + Controllore proporzionale
Il nuovo progetto risulta, pertanto, composto da un controllo in �Feed For-
ward�, costituito dall'inversione del modello d'isteresi e da un controllore pro-
porzionale integrale (PI) in catena diretta, agente sull'errore ottenuto a seguito
dell'inversione d'isteresi. Si ha:
PI(s) = kp +kis
(5.2.1)
A. Rech 67
Cap. 5 Controllo tramite inversione del modello
I valori delle costanti del controllore, kp e ki, sono stati empiricamente adattati
secondo il comportamento del sistema e poi ne è stata veri�cata la correttezza
teorica come trattato nel Cap. 6.
Come si può notare nello schema a blocchi di Fig. 5.5, il controllore PI è prece-
duto da un interruttore, inizialmente aperto, che si chiude nel momento in cui
la di�erenza tra l'angolo richiesto e l'angolo ottenuto è minore di un ∆Angolo
�ssato. Con l'inserimento di tale interruttore si è voluto schematizzare il fatto
che il sistema, una volta ricevuta la richiesta di un angolo, esegue l'inversione
d'isteresi, attende che l'angolo di errore sia inferiore di un valore pre�ssato
(l'esistenza di tale tempo esiste avendo scelto ∆Angolo in funzione dell'errore
massimo commesso dal modello) e, solo in seguito, viene attivato il ramo di
controreazione che opera con un tempo di ciclo di 10 ms (frequenza di 100 Hz).
In questo modo, al valore di corrente indicato dall'inversione d'isteresi viene
sommato il valore di uscita del controllore PI.
Si è ritenuto possibile agire così sull'errore in retroazione in quanto, a valle
dell'e�etto del controllo in �Feed Forward�, che porta il sistema nell'intorno del
valore desiderato, è stata ritenuta accettabile l'approssimazione lineare. In-
fatti, le rilevazioni e�ettuate sul sistema hanno confermato che, per piccole
variazioni di corrente, i cicli d'isteresi risultano molto �schiacciati�, tanto da
poter essere approssimati con una funzione lineare.
5.2.3 Aumento delle prestazioni: cancellazione della di-namica del �lo
Nonostante i buoni risultati che sono stati ottenuti implementando il sistema
di controllo schematizzato in Fig. 5.5, si è voluto proseguire lo studio cercando
68 A. Rech
�5.2 Il sistema di controllo
di migliorare ulteriormente le prestazioni del sistema.
Si è quindi pervenuti alla decisione di ridurre il ritardo dovuto alla dinamica di
riscaldamento dei �li, inserendo nel sistema di controllo un blocco agente sulla
corrente comandata che potesse approssimare una cancellazione zero-polo con
il blocco di dinamica di riscaldamento. Tale cancellazione sarà, infatti, solo
un'approssimazione perché, come mostrato in [2], il valore della variabile τ
è stato dapprima misurato sperimentalmente e poi, avendo ottenuto diversi
valori a seconda della corrente di esercizio, ne è stato preso un valore medio.
Figura 5.6: Schema a blocchi del sistema di controllo �nale completo.
Come risulta evidente nello schema a blocchi di Fig. 5.6 il blocco di �Inversione
della dinamica di riscaldamento� è costituito da:
f(s) =τs+ 1
ετs+ 1(5.2.2)
in cui il numeratore costituisce lo zero che esegue la cancellazione approssimata
con il blocco di �Dinamica di riscaldamento� e il denominatore (ε � 0) è
costituito da un polo veloce, inserito per la realizzabilità �sica del controllore.
Con l'aggiunta di tale blocco di controllo, che ha prodotto i miglioramenti sopra
descritti, si può considerare conclusa la fase sperimentale di questo lavoro.
A. Rech 69
Cap. 5 Controllo tramite inversione del modello
5.3 Note di implementazione e risultati speri-mentali
Si vuole ora far notare, per completezza della trattazione, che nei precedenti
paragra� si sono presentate le funzioni di trasferimento dei blocchi di controllo
espresse nel dominio di Laplace (equazioni 5.2.1 e 5.2.2).
Tale rappresentazione, naturalmente, non è adatta all'implementazione su un
sistema digitale quale il microcontrollore di Arduino; si è, quindi, proceduto,
una tantum, con l'ausilio del software �Matlab�, alla trasformazione di tali
funzioni di trasferimento dal dominio di Laplace al dominio della variabile Z
tramite la funzione:
c2d(fdt, Ts, 'tustin')
ove fdt è la funzione di trasferimento del blocco di controllo su cui si sta
lavorando, Ts è il tempo di campionamento del sistema digitale che, come
menzionato in precedenza, è pari a 10 ms, ed in�ne 'tustin' è il metodo
scelto per la trasformazione da tempo continuo a tempo discreto.
A seguito di questa trasformazione, ottenuta una funzione di trasferimento nel
dominio della variabile Z, si è potuto procedere ad antitrasformarla per ottenere
una funzione di trasferimento nel tempo campionato, che quindi potesse essere
implementata sul microcontrollore.
Le rilevazioni sperimentali e�ettuate hanno mostrato che il sistema di controllo
così ottenuto produce in uscita un errore: |errore| < 0, 3°, trascurabile dal
punto di vista pratico, con tempi di risposta accettabili dell'ordine di 1 secondo.
Nel capitolo seguente si procederà alla veri�ca dei risultati sperimentali tramite
l'applicazione della teoria.
70 A. Rech
Capitolo 6
Veri�ca teorica dei risultati
ottenuti
Nonostante sia stata ottenuta la conferma sperimentale della cor-rettezza del lavoro svolto, si vuole ora veri�carne i risultati tramitel'applicazione della teoria.
6.1 Possibili ipotesi teoriche
Il comportamento che normalmente si richiede ai sistemi di controllo è la sta-
bilità asintotica per perturbazioni di una certa entità (Stabilità Asintotica Glo-
bale).
Il �Criterio del Cerchio� fornisce condizioni su�cienti per la stabilità asintoti-
ca globale di sistemi non lineari autonomi del tipo rappresentato in Fig. 6.1,
cioè costituiti da un anello in cui risultano, disposte in cascata, una parte non
lineare puramente algebrica ed una parte lineare dinamica.
Come detto in precedenza, l'e�etto del controllo è applicato solo dopo che l'in-
versione d'isteresi ha portato il sistema nell'intorno del valore desiderato, ove il
comportamento del sistema è localmente assimilabile ad una sola curva d'iste-
resi. Risulta quindi evidente come il sistema in esame ricada in tali ipotesi: la
A. Rech 71
Cap. 6 Veri�ca teorica dei risultati ottenuti
Figura 6.1: Sistema in retroazione non lineare su cui è possibile applicate ilCriterio del Cerchio.
parte non lineare è costituita dalla curva d'isteresi dell'epoca in cui ci si trova
e la parte lineare è costituita dai blocchi di controllo inseriti. Appare, quindi,
possibile veri�carne la stabilità attraverso il suddetto Criterio del Cerchio.
6.2 Il Criterio del Cerchio
Si suppone che la caratteristica dell'elemento non lineare sia ad un sol valore
e contenuta in un settore del tipo rappresentato in Fig. 6.2, a), delimitato da
due rette passanti per l'origine e aventi rispettivamente pendenze α e β, che si
suppongono entrambe positive.
Figura 6.2: Sistema in retroazione non lineare su cui è possibile applicare ilCriterio del Cerchio.
72 A. Rech
�6.3 Applicazione del Criterio del Cerchio per la veri�ca dei risultati
Noti i parametri α e β, si può costruire il �cerchio critico� rappresentato in
Fig. 6.2, b). Vale il seguente teorema.
Teorema 6.2.1. Criterio del cerchio. Nell'ipotesi che la funzione di tra-
sferimento della parte lineare del sistema, G(s), abbia tutti i poli a parte reale
negativa, eccezion fatta per un eventuale polo nell'origine semplice o doppio,
condizione su�ciente perché il sistema in retroazione di Fig. 6.1 sia globalmen-
te asintoticamente stabile è che il diagramma polare completo della funzione
G(jω) non circondi né tocchi il cerchio critico. 2
Il Criterio del Cerchio, almeno nella sua enunciazione sempli�cata sopra ri-
portata, risulta di applicazione molto semplice e si presenta come un'estensione
del ben noto Criterio di Nyquist.
6.3 Applicazione del Criterio del Cerchio per laveri�ca dei risultati
Nel sistema in esame la parte lineare della catena diretta risulta essere la
funzione:
G(s) =
(kp +
kis
)τs+ 1
ετs+ 1(6.3.1)
ove i parametri sono stati scelti empiricamente:
� kp è il valore della parte proporzionale del controllore PI scelto a seguito
di prove empiriche ed è: kp = 13;
� ki è il coe�ciente della parte integrale del controllore PI scelto a seguito
di prove empiriche ed è: ki = 1;
� τ , il cui calcolo empirico è stato oggetto di studio in [2], era risultato un
valore variabile a seconda della corrente a regime richiesta; per le �nalità
A. Rech 73
Cap. 6 Veri�ca teorica dei risultati ottenuti
del presente studio si è, pertanto, scelto per τ un valore medio tra i valori
calcolati in [2] cioè: τ = 0, 75;
� ε, coe�ciente che garantisce che il denominatore è costituito da un polo
veloce, era necessario che fosse ε� 1; pertanto si è stabilito e veri�cato
sperimentalmente: ε = 0.05.
Prendendo come caratteristica dell'elemento non lineare la derivata della fun-
zione d'isteresi, si può notare, esaminando la Fig. 4.2, che essa risulta variabile
tra i valori α = 0.225
= 0.008 e β = 23.5725
= 0.94.
Figura 6.3: Veri�ca della stabilità asintotica globale con il Criterio del Cerchio.
Disegnando quindi, con l'ausilio di Matlab, il diagramma polare completo della
funzione G(jω) (diagramma di Nyquist), vedi Fig. 6.3, si osserva che e�ettiva-
mente esso �...non circonda né tocca il cerchio critico�, si deduce quindi, per il
Criterio del Cerchio che il sistema è globalmente asintoticamente stabile.
74 A. Rech
Capitolo 7
Conclusioni e sviluppi futuri
A conclusione del presente lavoro, in cui teoria e sperimentazione hanno cammi-
nato di pari passo, si vuole ripercorrere sinteticamente le tappe più signi�cative
che ne hanno caratterizzato lo sviluppo.
Il presente studio è stato, infatti, ciclicamente svolto secondo il più classico dei
metodi, il Metodo Scienti�co Galileiano, seguendo meticolosamente i suoi det-
tami: osservazione, individuazione della problematica, formulazione di ipotesi
risolutive, applicazione del metodo di risoluzione ipotizzato, sperimentazione
per veri�care la soluzione proposta ed in�ne, dopo aver ripercorso più volte
le tappe descritte per le ulteriori veri�che e la risoluzione delle problematiche
incontrate, accettazione dei risultati ottenuti.
Il lavoro svolto può essere, quindi, sinteticamente descritto come segue:
� studio della letteratura riguardante i materiali a memoria di forma;
� osservazione dello strumento a disposizione e primo approccio con il
comportamento del materiale di cui è costituito;
� adattamento del dispositivo;
A. Rech 75
Cap. 7 Conclusioni e sviluppi futuri
� osservazione del comportamento del materiale tramite sessioni di test
sull'attuatore: studio della funzione ingresso-uscita tramite la raccolta di
dati sperimentali;
� studio ed implementazione del modello proposto in [1];
� veri�ca sperimentale che il comportamento reale fosse approssimato sod-
disfacentemente dal modello teorico;
� studio di un metodo originale di inversione del modello;
� miglioramento della precisione del sistema mediante sviluppo di un siste-
ma di controllo in controreazione;
� veri�ca teorica a conclusione e sostegno dei risultati ottenuti.
Questa esperienza ha confermato come l'applicazione della teoria, appresa du-
rante lo svolgimento di questo corso di studi, produca e�etti tangibili, fedeli ai
risultati teorici, di grande interesse per applicazioni in diversi campi del mondo
reale.
Il presente studio è infatti stato svolto con il �ne di essere base teorica e spe-
rimentale per la creazione di un motore in lega a memoria di forma, atto alla
movimentazione di pannelli solari, o di piccoli attuatori adatti per applicazioni
di micro-robotica. Questo materiale infatti, oltre alle caratteristiche ampia-
mente descritte nel corso di questo studio, ha il pregio di avere bassi costi ed
essere leggero, qualità che lo rendono interessante oggetto di studio nei campi
sopracitati.
76 A. Rech
Appendice A
Dati Sperimentali
Nelle pagine seguenti sono riportati i gra�ci, ottenuti tramite l'u-tilizzo del software Matlab, dei dati sperimentali rilevati nel corsodelle prove eseguite.
A. Rech 77
Dati Sperimentali
FiguraA.2:Curve
delSecond
oOrdinerelative
aisottocicligenerabilidall'ingresso
3edall'ingresso
4
A. Rech 79
APPENDICE A
Figura
A.3:
Curve
delSecondo
Ordine
relativeai
sottocicligenerabili
dall'ingresso5
80 A. Rech
Dati Sperimentali
FiguraA.4:Curve
delSecond
oOrdinerelative
aisottocicligenerabilidall'ingresso
6
A. Rech 81
Appendice B
Codice Arduino
Si riporta di seguito il codice per il microcontrollore Arduinoprodotto nel corso del presente lavoro.
De�nizione variabili globali
#include <EEPROM.h>
#define I_MAX 0.250
// assegnazione pin Arduino
#define encoderPin 2
#define posWirePin 11//pin filo dx associato a corrente pos
#define negWirePin 10//pin filo sx associato a corrente neg
#define posResPinH 2 //pin resistenza campione circuito pos
#define posResPinL 1 //pin resistenza campione circuito pos
#define negResPinH 5 //pin resistenza campione circuito neg
#define negResPinL 4 //pin resistenza campione circuito neg
// variabili per il controllore di corrente //
#define Ts 10000 // Sampling time (microsecondi)
#define Kp 2
#define Ki 1
#define a 0.0022559
#define b 0.0061
#define ByteToVolt 204.6 // conversione analogRead () 1023=5.0 V
#define VoltToByte 51 // conversione analogWrite () 5.0 V=255
// valore in Ohm delle resistenze note del circuito
#define ResistenzaCampionePos 28.0
#define ResistenzaCampioneNeg 27.7
// variabili per gli algoritmi del modello
#define ToOrder 3 // costante c dell 'algoritmo
#define MaxIn 6 // costante r dell 'algoritmo
A. Rech 83
APPENDICE B
#define NumSeq 25 //la somma dei coefficienti binomiali(r-1,i)
con i che varia da 1 a c
#define LungSeq 8
// variabbili per il modello e per l'inversione del modello
char sequenza[NumSeq ][ LungSeq ];
double funzW [5]={1.0}; // funzione W
double funzWatt [5]={1.0}; // funzione W attuale
int w[NumSeq ][2]; // array bidim. dei parametri delle funzioni w
int IngressiPassati [10]={ -152};
float RamoAscendente[MaxIn +1]={ 0.00 };
int k; // variabile k(.) dell 'articolo
boolean crescente=true;
float angoloRichiesto =0.0;
float angoloPrevisto[MaxIn +1];
// variabili indirizzamento memoria EEPROM
int EEPROMvar =0;
int EEPROMramo =( NumSeq*LungSeq);
// variabili procedura automatica
#define intervallo 50
#define steps ((150/ intervallo)*4)
int Valore[steps +1] = {0};
boolean autoPrimoGiro;
boolean automatic;
boolean IndividuazioneFatta;
// variabili dialogo da tastiera
int buff , incomingByte;
boolean neg;
boolean Aneg=false;
// variabili controllo corrente
float Iq=0.0;
float IqP =0.0;
float Id = 0;
float IdP = 0;
float IdCC = 0;
float I = 0;
float e = 0;
float m = 0;
float Vp = 0;
float V = 0;
float ep = 0;
int WirePin; //pin del filo in esame
int ResPinHigh; //pin resistenza campione in esame High
int ResPinLow; //pin resistenza campione in esame Low
float ResistenzaCampione; // resistenza campione in esame
// variabili controllo dinamica filo
84 A. Rech
Codice Arduino
#define Tau 0.75
#define Epsilon 0.05
#define CostA 17.76 // variabili cancellazione dinamica
#define CostB 17.53 // variabili cancellazione dinamica
#define CostC 0.7647 // variabili cancellazione dinamica
#define kA 0.25
#define kB 0.15
float eAng =0.0; // errore sullAngolo
float eAngPrec =0.0; //eAng(k-1)
float IdFF = 0; // corrente richiesta dal FeedForward
float IdFFprev = 0; //IdFF(k-1)
float uk = 0; // uscita cancellazione dinamica
float ukPrev = 0; //uk(k-1)
float ukTemp = 0;
float effPI =0.0; // effetto controllore PI sull 'errore
float effPIprec =0.0; //effPI(k-1)
// salvataggio dati
#define MAXINDEX 5
float mediaAngolo = 0.0;
float stampaAngolo = 0.0;
float AngoloIniz = 0.0;
// variabili lettura encoder
int n = MAXINDEX +1;
float angolo =0.0;
volatile unsigned long time = 0;
volatile unsigned long Dtime = 0;
// variabili timer
unsigned long tempoCC = 0; //tempo controllo corrente
unsigned long tempoIC = 0; //tempo inizio controllo
unsigned long tempoST = 0; //tempo stampa
unsigned long tempoCE = 0; //tempo controllo errore
unsigned long tempoPI = 0; //tempo controllo errore
Funzione di setup
void setup() {
pinMode(encoderPin , INPUT);
pinMode(posResPinH ,INPUT);
pinMode(posResPinL ,INPUT);
pinMode(negResPinH ,INPUT);
pinMode(negResPinL ,INPUT);
pinMode(posWirePin , OUTPUT);
pinMode(negWirePin , OUTPUT);
attachInterrupt (0, doEncoder , CHANGE);
Serial.begin (9600);
A. Rech 85
APPENDICE B
IndividuazioneFatta=true;
autoPrimoGiro=false;
I=0;
IdCC =0;
e=0;
m=0;
Vp=0;
V=0;
ep=0;
incomingByte = 0;
buff =0;
neg=false;
Aneg=false;
eAng =0;
uk=0;
effPI =0;
// Lettura Dati da EEPROM per inizializzazione variabili //
EEPROMvar =0;
int s=0;
float l=0.0;
for(int x=0;x<NumSeq;x++){
int huno=EEPROM.read(EEPROMvar);
w[x][0]= -150+( huno)*intervallo; //h1
EEPROMvar=EEPROMvar +1;
int hdue=EEPROM.read(EEPROMvar);
w[x][1]= -150+( hdue)*intervallo; //h2
EEPROMvar=EEPROMvar +1;
EEPROMvar=EEPROMvar +1;
Serial.print("w( ");
s=w[x][0];
Serial.print(s);
Serial.print(" , ");
s=w[x][1];
Serial.print(s);
Serial.print(" ) = ( ");
for (int y=0; y<(LungSeq -3); y++){
s=EEPROM.read(EEPROMvar);
EEPROMvar=EEPROMvar +1;
l=s/100.0;
Serial.print(l);
if(y<(LungSeq -4)) Serial.print(" , ");
}
Serial.println(" ) ");
}
EEPROMvar =( NumSeq*LungSeq);
Serial.print("Angolo Iniziale: ");
86 A. Rech
Codice Arduino
l=(( EEPROM.read(EEPROMvar)*256)+
EEPROM.read(EEPROMvar +1))/100.0;
EEPROMvar=EEPROMvar +2;
AngoloIniz=l;
Serial.println(AngoloIniz);
Serial.println("Ramo Ascendente:");
for(int x=0;x<=MaxIn;x++){
Serial.print(x);
Serial.print(" --> ");
l=(( EEPROM.read(EEPROMvar)*256)+
EEPROM.read(EEPROMvar +1))/100.0;
EEPROMvar=EEPROMvar +2;
RamoAscendente[x]=l;
Serial.println(RamoAscendente[x]);
}
EEPROMvar =0;
// Fine lettura EEPROM per inizializzazione variabili //
angoloPrevisto [0]=0.0;
angoloPrevisto[MaxIn ]= RamoAscendente[MaxIn];
angoloRichiesto=RamoAscendente [3];
IngressiPassati [0]= -151;
IngressiPassati [1]=151;
IngressiPassati [2]= -150;
for(int i=0; i<5; i++){
funzWatt[i]=1.0;
funzW[i]=1.0;
}
k=2;
Iq =0.0;
IqP =0.0;
ImpostaCorrente (0);
}//setup
Funzione loop() per il programma di attuazionedi angoli
void loop() {
IqP=Iq;
int corr;
A. Rech 87
APPENDICE B
if (Serial.available () > 0) {
incomingByte = 0;
Aneg=false;
boolean decimale=false;
int numdecimali =0;
while ((( buff = Serial.read() - '0') >=0 && buff <=9)||
buff ==('-'-'0')||buff ==(','-'0')||buff ==('.'-'0')) {
if(buff=='-'-'0') Aneg=true;
if((buff=='.'-'0')||( buff==','-'0')) decimale=true;
else {
incomingByte = incomingByte *10+ buff;
if(decimale) numdecimali=numdecimali +1;
}
delay (5);
}
angoloRichiesto=incomingByte;
if(decimale){
while (numdecimali >0){
angoloRichiesto=angoloRichiesto /10.0;
numdecimali --;
}
}
if(Aneg) angoloRichiesto=-angoloRichiesto;
}
Serial.print("Angolo Richiesto = ");
Serial.println(angoloRichiesto);
for(int i=1; i<MaxIn;i++){
angoloPrevisto[i]= PrevisioneUscita (-150+i*intervallo);
}
boolean maggiore=false;
int index =0;
while (! maggiore && index <=MaxIn){
if(angoloPrevisto[index]>angoloRichiesto){
maggiore=true;
}
else index ++;
}
if (maggiore=false){
Serial.println("Angolo richiesto troppo grande :\n
-->Si tenterà di raggiungere l'angolo più grade possibile!");
corr =150;
}
else{
float distPrec =0.0;
float distSucc =0.0;
distPrec=angoloRichiesto -angoloPrevisto[index -1];
distSucc=angoloPrevisto[index]-angoloRichiesto;
88 A. Rech
Codice Arduino
if(distPrec <= distSucc) {
corr = -150+(( index -1)*intervallo);
Serial.print("AngoloPrevisto: ");
Serial.println(angoloPrevisto[index -1]);
}
else {
corr = -150+( index*intervallo);
Serial.print("AngoloPrevisto: ");
Serial.println(angoloPrevisto[index]);
}
}
if(corr >150) corr =150;
if(corr <-150) corr = -150;
Serial.print("Corrente Richiesta = ");
Serial.println(corr);
ImpostaCorrente(corr);
Iq=IdCC;
IdFF=corr;
delay (5);
if(( crescente && IqP >Iq)||(! crescente && IqP <Iq)){
//la derivata dell 'ingresso ha cambiato segno
AggiornaSeqRilev ();
}
if(IqP >Iq) crescente=false;
if(IqP <Iq) crescente=true;
Serial.println("\nPer variare il valore dell 'angolo :\n
-Scrivere valore (Gradi) (poi INVIO)");
tempoIC=micros ();
tempoST=tempoIC;
while(Serial.available () == 0){
ControlloCorrente ();
}
}//Loop
Funzione loop() per il programma di previsionedell'uscita del sistema
void loop() {
IdP=Id;
int corr;
A. Rech 89
APPENDICE B
if (Serial.available () > 0) {
incomingByte = 0;
neg=false;
while ((( buff = Serial.read() - '0') >=0 && buff <=9)||
buff ==('-'-'0')) {
if(buff=='-'-'0') neg=true;
else incomingByte = incomingByte *10+ buff;
delay (5);
}
if(buff ==('s'-'0')||buff ==('S'-'0')||buff ==('a'-'0')||
buff ==('A'-'0')||buff ==('i'-'0')||buff ==('I'-'0')||
buff ==('p'-'0')||buff ==('P'-'0')){
if(buff ==('s'-'0')||buff ==('S'-'0')){
n=0;
corr=IdP *1000;
}
else{
if (buff ==('a'-'0')||buff ==('A'-'0')){
corr =0;
ProceduraAutomatica ();
}
else{
if (buff ==('i'-'0')||buff ==('I'-'0')){
corr =0;
ProceduraIndividuazione ();
}
else{
if (buff ==('p'-'0')||buff ==('P'-'0')){
corr =0;
IndividuazioneFatta=true;
Serial.println ("Previsioni uscita attivate!");
}
}
}
}
}
else{
corr=incomingByte;
if(neg) corr=-corr;
}
ImpostaCorrente(corr);
}
if(( crescente && IdP >Id)||(! crescente && IdP <Id)){
//la derivata dell 'ingresso ha cambiato segno
AggiornaSeqRilev ();
}
if(IdP >Id) crescente=false;
if(IdP <Id) crescente=true;
90 A. Rech
Codice Arduino
if(IndividuazioneFatta){
if((corr %50) !=0 || corr >150 || corr < -150){
Serial.println("Corrente richiesta al di fuori della
quantizzazione !\n-->Richiedere una corrente C: C=n*50 e
-150<=C <=150");
corr=(int)(IdP *1000);
}
float previsione= PrevisioneUscita(corr);
Serial.print("Previsione Uscita = ");
Serial.println(previsione);
int corrP= IdP *1000.0;
int corrAtt=corrP;
Serial.print("Corrente Precedente = ");
Serial.println(corrAtt);
Serial.print("Corrente Richiesta = ");
Serial.println(corr);
// int segno =1;
// if (! crescente) segno =-1;
// while (corrAtt !=corr){
// corrAtt=corrAtt +(segno*intervallo);
// ImpostaCorrente(corrAtt);
// StabilizzaEStampa ();
// // UscitePassate [( corrAtt +150) /50]= mediaAngolo;
// }
ImpostaCorrente(corr);
StabilizzaEStampa ();
}
Serial.println("\nPer variare il valore della corrente :\n
-Scrivere valore (mA) (poi INVIO)");
Serial.println ("Per salvare i dati e poi stampare :\n
-Premere [s/S] (poi INVIO)");
Serial.println ("Per avviare procedura automatica :\n
-Premere [a/A] (poi INVIO)");
Serial.println ("Per avviare procedura individuazione :\n
-Premere [i/I] (poi INVIO)");
Serial.println ("Per avviare previsioni uscita :\n
-Premere [p/P] (poi INVIO)\n");
while(Serial.available () == 0){
ControlloCorrente ();
}
}//Loop
A. Rech 91
APPENDICE B
Funzione di controllo della corrente per il pro-gramma di attuazione di angoli
void ControlloCorrente (){
if(micros () >=tempoCC+Ts){
tempoCC=micros ();
if(neg) analogWrite(posWirePin ,0);
else analogWrite(negWirePin ,0);
m=( analogRead(ResPinHigh)-analogRead(ResPinLow))/ByteToVolt;
//m=tensione ai capi della resistenza campione
I = m/ResistenzaCampione;
angolo = Dtime *360/4064.0;
eAng =0.0;
int segno =1;
if(neg)segno=-1;
if(micros ()>tempoCE +0){
tempoCE=micros ();
eAngPrec=eAng;
eAng = angoloRichiesto -(angolo -AngoloIniz);
}
if(eAng <10 && eAng >-10){
if(eAng >=0.4|| eAng <= -0.4) {
// effetto del controllore PI
effPI=effPIprec *0.01 + kA*eAng - kB*eAngPrec;
IdFF=IdFF+effPI;
// cancellazione della dinamica del filo
uk=CostC*ukPrev+CostA*IdFF -CostB*IdFFprev;
IdFFprev=IdFF;
ukPrev=uk;
effPIprec=effPI;
if(uk <0) IdCC=-uk /1000.0;
else IdCC=uk /1000.0;
}
if((! neg && uk <0) ||(neg && uk >0)){
ukTemp=uk;
if((uk <20) &&(uk >-20)) ukTemp =0;
ImpostaCorrente ((int)(ukTemp));
}
}
e = IdCC - I;
V = (a*b)*e + (a*Ts -a*b)*ep + Vp;// controllore PI corrente
ep = e;
if ( V > 5.0 ) {
V = 5.0;
}
else if ( V < -0.1){
92 A. Rech
Codice Arduino
V = 0.0;
}
Vp = V;
analogWrite(WirePin ,V*VoltToByte);
if(micros () >=tempoST +3000000){
tempoST=micros ();
n=0;
}
if(n==0){
mediaAngolo =0;
}
if(n<MAXINDEX){
mediaAngolo=mediaAngolo+angolo;
n++;
}
if(n== MAXINDEX){
ProceduraStampa ();
}
}
}// ControlloCorrente
Funzione controllo della corrente per il program-ma di previsione dell'uscita del sistema
void ControlloCorrente (){
if(micros () >=tempoCC+Ts){
tempoCC=micros ();
if(neg) analogWrite(posWirePin ,0);
else analogWrite(negWirePin ,0);
m=( analogRead(ResPinHigh)-analogRead(ResPinLow))/ByteToVolt;
//m=tensione ai capi della resistenza campione
I = m/ResistenzaCampione;
satur = I_MAX - I;
e = IdCC - I;
//V = (Ki+Kp)*e - Kp*ep + Vp;
V = (a*b)*e + (a*Ts -a*b)*ep + Vp;// nuovo controllore PI
ep = e;
Vp = V;
if ( V > 5.0 ) {
V = 5.0;
}
A. Rech 93
APPENDICE B
else if ( V < -0.1){
V = 0.0;
}
analogWrite(WirePin ,V*VoltToByte);
angolo = Dtime *360/4064.0;
if(n==0){
mediaAngolo =0;
}
if(n<MAXINDEX){
mediaAngolo=mediaAngolo+angolo;
n++;
}
if(n== MAXINDEX){
ProceduraStampa ();
}
}
}// ControlloCorrente
Funzione ProceduraIndividuazione()
Tale funzione è stata creata con il �ne di eseguire l'individuazione della mappa
d'isteresi del modello e salvare nella memoria EEPROM i dati relativi alle
funzioni w, secondo quanto necessario al modello d'isteresi.
void ProceduraIndividuazione (){
Serial.println("\n\n\n\nInizio Procedura Individuazione !\n");
automatic=true;
autoPrimoGiro=true;
GeneraSequenze ();
int numero =0;
for(int y=0; y <1024; y++){ // azzero memoria EEPROM
EEPROM.write(y ,100);
}
for (numero =0; numero <NumSeq; numero ++){
//for (numero =0; numero <5; numero ++){
Serial.print("sequenza ");
Serial.print(numero);
Serial.print(" : ");
int y=0;
while(sequenza[numero ][y]!=-1){
int h=sequenza[numero ][y];
Serial.print(h);
y++;
94 A. Rech
Codice Arduino
}
Serial.println ();
for(int i=0; i<y-3; i++){
int in = sequenza[numero ][i];
int corr = -150 + in*intervallo;
ImpostaCorrente(corr);
StabilizzaEStampa ();
}//for(i)
int i = sequenza[numero ][y-3];
int ii = sequenza[numero ][y-2];
int iii = sequenza[numero ][y-1];
float wProvv[LungSeq -1];
EEPROM.write(EEPROMvar ,i);
EEPROMvar=EEPROMvar +1;
EEPROM.write(EEPROMvar ,ii);
EEPROMvar=EEPROMvar +1;
float h=0.0;
int g=0;
if(i<ii){
int c=2;
while(i<ii){
int corr = -150 + i*intervallo;
ImpostaCorrente(corr);
StabilizzaEStampa ();
wProvv[i]= mediaAngolo;
if(numero ==MaxIn -2){
if(c==2) mediaAngolo =0;
RamoAscendente[c-2]= mediaAngolo;
int val=(int)(mediaAngolo *100);
int valA=val /256;
int valB=val -(valA *256);
EEPROM.write(EEPROMramo ,valA);
EEPROMramo=EEPROMramo +1;
EEPROM.write(EEPROMramo ,valB);
EEPROMramo=EEPROMramo +1;
}
c++;
i++;
}
g=0;
while(ii >=iii){
int corr = -150 + ii*intervallo;
ImpostaCorrente(corr);
StabilizzaEStampa ();
if(g>0 && ii!=iii) {
h=mediaAngolo;
EEPROM.write(EEPROMvar +(ii -1) ,(int)(h*100.0/ wProvv[ii
]));
}
A. Rech 95
APPENDICE B
if(g==0) {
EEPROM.write(EEPROMvar ,(int)(mediaAngolo -wProvv[
sequenza[numero ][y -3]]));
EEPROMvar=EEPROMvar +1;
if(numero ==MaxIn -2) {
RamoAscendente[MaxIn ]= mediaAngolo;
int val=(int)(mediaAngolo *100);
int valA=val /256;
int valB=val -(valA *256);
EEPROM.write(EEPROMramo ,valA);
EEPROMramo=EEPROMramo +1;
EEPROM.write(EEPROMramo ,valB);
EEPROMramo=EEPROMramo +1;
}
g++;
}
c--;
ii --;
}
EEPROMvar=EEPROMvar +(LungSeq -3);
}
else{ //i>ii
int c=2;
while(i>ii){
int corr = -150 + i*intervallo;
ImpostaCorrente(corr);
StabilizzaEStampa ();
wProvv[i]= mediaAngolo;
c++;
i--;
}
g=0;
while(ii <=iii){
int corr = -150 + ii*intervallo;
ImpostaCorrente(corr);
StabilizzaEStampa ();
if(g>0 && ii!=iii) {
h=mediaAngolo;
EEPROM.write(EEPROMvar +(ii -1) ,(int)(h*100.0/ wProvv[ii
]));
}
if(g==0) {
EEPROM.write(EEPROMvar ,(int)(mediaAngolo -wProvv[
sequenza[numero ][y -3]]));
EEPROMvar=EEPROMvar +1;
g++;
}
c--;
ii++;
}
EEPROMvar=EEPROMvar +(LungSeq -3);
96 A. Rech
Codice Arduino
}
}//for(numero)
float l=0.0;
int s=0;
EEPROMvar =0;
for(int x=0;x<numero;x++){
int huno=EEPROM.read(EEPROMvar);
wnew[x][0]= -150+( huno)*intervallo; //h1
//wnew[x][0]=( huno); //h1
EEPROMvar=EEPROMvar +1;
int hdue=EEPROM.read(EEPROMvar);
wnew[x][1]= -150+( hdue)*intervallo; //h2
//wnew[x][1]=( hdue); //h2
EEPROMvar=EEPROMvar +1;
wnew[x][2]= EEPROM.read(EEPROMvar); // Delta Theta
EEPROMvar=EEPROMvar +1;
Serial.print("w( ");
s=wnew[x][0];
Serial.print(s);
Serial.print(" , ");
s=wnew[x][1];
Serial.print(s);
Serial.print(" , ");
s=wnew[x][2];
Serial.print(s);
Serial.print(" ) = ( ");
for (int y=0; y<(LungSeq -3); y++){
s=EEPROM.read(EEPROMvar);
EEPROMvar=EEPROMvar +1;
l=s/100.0;
Serial.print(l);
if(y<(LungSeq -4)) Serial.print(" , ");
}
Serial.println(" ) ");
}
EEPROMvar =( NumSeq*LungSeq)+2;
Serial.println("Ramo Ascendente:");
for(int x=0;x<=MaxIn;x++){
Serial.print(x);
Serial.print(" --> ");
l=(( EEPROM.read(EEPROMvar)*256)+EEPROM.read(EEPROMvar +1))
/100.0;
EEPROMvar=EEPROMvar +2;
RamoAscendente[x]=l;
// UscitePassate[x]= RamoAscendente[x];
Serial.println(RamoAscendente[x]);
}
A. Rech 97
APPENDICE B
EEPROMramo =( NumSeq*LungSeq);
EEPROMvar =0;
IndividuazioneFatta=true;
Serial.println("\n\n\nFine Procedura Individuazione !\n");
}// ProceduraIndividuazione
Funzione ImpostaCorrente()
Tale funzione è chiamata ogni volta che il programma richiede una nuova cor-
rente per l'attuatore. Ha lo scopo di impostare le variabili, che verranno usate
nella funzione ControlloCorrente(), ai valori relativi alla richiesta in corso.
void ImpostaCorrente(int corrente){
Id=corrente /1000.0;
if(Id >0) neg=false;
if(Id <0) neg=true;
if(neg){
// azzero tensione nell 'altro circuito
analogWrite(posWirePin ,0);
if(IdP >0) delay (10); //e attendo
IdCC=-Id;
WirePin=negWirePin;
ResPinHigh=negResPinH;
ResPinLow=negResPinL;
ResistenzaCampione=ResistenzaCampioneNeg;
}
else{
// azzero tensione nell 'altro circuito
analogWrite(negWirePin ,0);
if(IdP <0) delay (10); //e attendo
IdCC=Id;
WirePin=posWirePin;
ResPinHigh=posResPinH;
ResPinLow=posResPinL;
ResistenzaCampione=ResistenzaCampionePos;
}
}// ImpostaCorrente
98 A. Rech
Codice Arduino
Funzione PrevisioneUscita()
Tale funzione è presente solo nel programma di previsione dell'uscita del sistema
ed è chiamata ogni volta che si richiede un nuovo ingrasso. Essa costituisce il
cuore dell'implementazione del modello esposto in [1].
float PrevisioneUscita(int corr){
if (corr == -150) return RamoAscendente [0];
if (corr ==150) return RamoAscendente [6];
int index=(corr +150)/intervallo;
float previsione;
int ind=k; //k = numero di ingressi rilevanti
int Hfin=IngressiPassati[ind];
int Hin=IngressiPassati[ind -1];
while (( crescente && corr >Hin)||(! crescente && corr <Hin)){
ind=ind -2;
AggiornaWatt(Hin ,Hfin);
Hin=IngressiPassati[ind -1];
Hfin=IngressiPassati[ind];
}
if(ind==k){
for(int i=0; i<5; i++){
funzWatt[i]= funzW[i];
}
}
if (ind ==2 && crescente){
previsione=RamoAscendente[index];
return previsione;
}
previsione=RamoAscendente[index]* funzWatt[index -1];
return previsione;
}// PrevisioneUscita
Funzione AggiornaWatt()
Tale funzione, il cui nome indica che esegue l'aggiornamento della funzione W
attuale, è presente solo nel programma di previsione dell'uscita del sistema ed
è chiamata dalla funzione PrevisioneUscita().
void AggiornaWatt(int Hin , int Hfin){
int distanza=modulo(Hin -Hfin);
if(distanza != intervallo){
A. Rech 99
APPENDICE B
int x=0;
boolean trovato=false;
while (! trovato && x<= NumSeq){
if(w[x][0]== Hin && w[x][1]== Hfin) trovato=true;
x++;
}
x=x-1;
if (! trovato){
Serial.println("AggiornaWatt:ERRORE!
--------->(Sequenza Hin Hfin non trovata)");
Serial.print("Hin= ");
Serial.print(Hin);
Serial.print("; Hfin= ");
Serial.println(Hfin);
return;
}
for(int i=0; i<5; i++){
int lettura=EEPROM.read(x*LungSeq +(i+3));
float fact= (float) lettura /100.0;
funzWatt[i]= funzW[i]/fact;
}
}
}// AggiornaWatt
Funzione AggiornaW()
Tale funzione, il cui nome indica che esegue l'aggiornamento della funzione W, è
presente solo nel programma di previsione dell'uscita del sistema ed è chiamata
dalla funzione AggiornaSeqRilev() e permette di aggiornare la funzione W in
corrispondenza di un �cambiamento di epoca�.
void AggiornaW(int Hin , int Hfin){
int distanza=modulo(Hin -Hfin);
if(distanza != intervallo){
int x=0;
boolean trovato=false;
while (! trovato && x<= NumSeq){
if(w[x][0]== Hin && w[x][1]== Hfin) trovato=true;
x++;
}
x=x-1;
if (! trovato){
Serial.println("AggiornaW:ERRORE!
--------->(Sequenza Hin Hfin non trovata)");
100 A. Rech
Codice Arduino
Serial.print("Hin= ");
Serial.print(Hin);
Serial.print("; Hfin= ");
Serial.println(Hfin);
return;
}
for(int i=0; i<5; i++){
int lettura=EEPROM.read(x*LungSeq +(i+3));
float fact= (float) lettura /100.0;
funzW[i]=funzW[i]*fact;
}
}
}// AggiornaWatt
Funzione AggiornaSeqRilev()
Tale funzione, il cui nome indica che esegue l'aggiornamento della sequen-
za di ingressi passati rilevanti, è chiamata qualora la derivata della funzione
d'ingresso cambi di segno.
void AggiornaSeqRilev (){
Serial.println("Aggiornamento Sequenza Ingressi");
int kPrec=k;
int corr=(int)(IqP *1000);
if (pari(kPrec)){
for(int i=1; i<kPrec; i=i+2){
if(IngressiPassati[i]>corr) k=i+2;
}
IngressiPassati[k]=corr;
}
else{
for(int i=0; i<kPrec; i=i+2){
if(IngressiPassati[i]<corr) k=i+2;
}
IngressiPassati[k]=corr;
}
if(IndividuazioneFatta){
if(k==2){
for(int i=0; i<5; i++){
funzW[i]=1.0;
}
}
else{
if(k== kPrec +1){
Serial.println("Aggiornamento W in avanti");
A. Rech 101
APPENDICE B
AggiornaW(IngressiPassati[k-1], IngressiPassati[k]);
}
if(k<kPrec){
Serial.println("Aggiornamento W in dietro");
while(kPrec >k){
AggiornaWatt(IngressiPassati[kPrec -1],
IngressiPassati[kPrec]);
for(int i=0; i<5; i++){
funzW[i]= funzWatt[i];
}
kPrec=kPrec -1;
}
}
}
Serial.print("funzW: ( ");
for(int i=0; i<5; i++){
Serial.print(funzW[i]);
Serial.print(" ");
}
Serial.println(")");
}
Serial.print("Ingressi Passati= ");
for(int i=2; i<=k; i++) {
Serial.print(IngressiPassati[i]);
Serial.print(" ");
}
Serial.println ();
}// AggiornaSeqRilev
Funzione StabilizzaEStampa()
Tale funzione permette di attendere che il comportamento del sistema arrivi
a regime, per poi stampare su porta seriale il valore dell'uscita a valle del
transitorio.
void StabilizzaEStampa (){
volatile unsigned long tempo=micros ();
n=MAXINDEX +1;
long tempoSat =6000000;
if (autoPrimoGiro){
tempoSat =10000000;
}
while(micros ()<tempo+tempoSat){
ControlloCorrente ();
}
n=0;
102 A. Rech
Codice Arduino
while(n<MAXINDEX){
ControlloCorrente ();
}
n=MAXINDEX +1;
}// StabilizzaEStampa
Funzione ProceduraStampa()
Tale funzione permette di stampare su porta seriale il valore dell'uscita for-
mattato secondo i desideri dell'utente.
void ProceduraStampa (){
mediaAngolo=mediaAngolo/MAXINDEX;
if(autoPrimoGiro){
autoPrimoGiro=false;
Serial.println (mediaAngolo);
AngoloIniz=mediaAngolo;
EEPROMramo =( NumSeq*LungSeq);
int val=(int)(AngoloIniz *100);
int valA=val /256;
int valB=val -(valA *256);
EEPROM.write(EEPROMramo ,valA);
EEPROM.write(EEPROMramo +1,valB);
EEPROMramo=EEPROMramo +2;
}
mediaAngolo=mediaAngolo -AngoloIniz;
// int corr =0;
// Serial.print ("deg");
// if(Id <0){
// corr=-Id *1000;
// Serial.print("Neg");
// Serial.print(corr);
// }
// else{
// corr=Id *1000;
// Serial.print("Pos");
// Serial.print(corr);
// }
Serial.print("Angolo");
Serial.print(" = ");
Serial.print(mediaAngolo);
Serial.println(";\n");
n++;
}// ProceduraStampa
A. Rech 103
APPENDICE B
Funzione doEncoder()
Tale funzione è eseguita in corrispondenza di ogni variazione del segnale PWM
proveniente dall'encoder e permette di calcolare il valore dell'angolo in cui i �li
posizionano l'encoder.
void doEncoder ()
{
if(digitalRead(encoderPin)) // se lettura digitale è alta
time = micros ();
else Dtime = micros () - time - 4;
}// doEncoder
Ulteriori funzioni
Tali funzioni sono state scritte in corrispondenza di particolari necessità del
software.
int modulo(int n){
if(n<0) return -n;
return n;
} // modulo
// ////////////////////////////////////////////////////////////
int fattoriale(int n){
if(n==0) return 1;
int nfact =1;
int indiceN=n;
while (indiceN >1){
nfact=nfact*indiceN;
indiceN=indiceN -1;
}
return nfact;
} // fattoriale
// ////////////////////////////////////////////////////////////
int binomiale(int n, int i){
return fattoriale(n)/( fattoriale(i)*fattoriale(n-i));
} // binomiale
// ////////////////////////////////////////////////////////////
104 A. Rech
Codice Arduino
int sumbinom(int r, int c){
if (c==0) return 0;
int ris=0;
for(int i=1; i<=c; i++){
ris=ris+binomiale(r,i);
}
return ris;
} // sumbinom
// ////////////////////////////////////////////////////////////
boolean pari(int num){
if ((num %2) ==0) return true;
else return false;
}
// ////////////////////////////////////////////////////////////
A. Rech 105
Elenco delle �gure
1.1 Esempio di e�etto memoria di forma. In un �lo di NiTi è stata
memorizzata la forma di un piccolo gadget natalizio. Una vol-
ta deformato a temperatura ambiente, esso recupera la forma
memorizzata per semplice riscaldamento a circa 60°C . . . . . . 11
1.2 Trasformazione martensitica termoplastica . . . . . . . . . . . . 13
1.3 Trasformazione di fase nei materiali S.M.A. . . . . . . . . . . . . 14
1.4 Comportamento Tensione-Deformazione di materiali S.M.A. . . 14
1.5 Spiegazione microscopica dello Shape Memory E�ect . . . . . . 16
1.6 Spiegazione macroscopica dello Shape Memory E�ect . . . . . . 17
2.1 Circuito elettrico del singolo �lo nel momento dell'inizio del
presente lavoro. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Arduino Duemilanove ATmega328. . . . . . . . . . . . . . . . . 24
2.3 PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Circuito elettrico del singolo �lo modi�cato secondo le esigenze
del presente studio. . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 Schema a blocchi del sistema modi�cato . . . . . . . . . . . . . 28
3.1 Schema a blocchi del sistema d'isteresi . . . . . . . . . . . . . . 33
A. Rech 107
Elenco delle �gure
3.2 Esempi di curve di transizione del primo (FOTC) e del secondo
(SOTC) ordine . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3 Esempio di curva di transizione del terzo ordine (TOTC) xh1h2h3h 40
3.4 Esempio di validità della proprietà di equivalenza del secondo
vertice (SVE):loop interni con stesso secondo vertice hanno le
stesse corde verticali. . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1 Ciclo d'isteresi ottenuto con �li mal funzionanti. . . . . . . . . . 51
4.2 Ciclo d'isteresi ottenuto a seguito della sostituzione dei �li. . . . 52
4.3 Esempio memorizzazione variazione percentuale dell'uscita. . . . 56
4.4 Struttura �ssa ideata per la memoria EEPROM. . . . . . . . . . 58
5.1 Schema a blocchi del sistema: Attuatore + Controllo (generico). 64
5.2 Schema a blocchi del sistema: Attuatore + Controllo con isteresi
invertita. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3 Inversione della funzione d'isteresi e relativa funzione d'errore. . 65
5.4 Schema a blocchi del sistema ad �anello aperto�. . . . . . . . . . 67
5.5 Schema a blocchi del sistema: Attuatore + Controllo con isteresi
invertita + Controllore proporzionale . . . . . . . . . . . . . . . 67
5.6 Schema a blocchi del sistema di controllo �nale completo. . . . . 69
6.1 Sistema in retroazione non lineare su cui è possibile applicate il
Criterio del Cerchio. . . . . . . . . . . . . . . . . . . . . . . . . 72
6.2 Sistema in retroazione non lineare su cui è possibile applicare il
Criterio del Cerchio. . . . . . . . . . . . . . . . . . . . . . . . . 72
6.3 Veri�ca della stabilità asintotica globale con il Criterio del Cerchio. 74
108 A. Rech
Elenco delle �gure
A.1 Curve del Primo Ordine . . . . . . . . . . . . . . . . . . . . . . 78
A.2 Curve del Secondo Ordine relative ai sottocicli generabili dal-
l'ingresso 3 e dall'ingresso 4 . . . . . . . . . . . . . . . . . . . . 79
A.3 Curve del Secondo Ordine relative ai sottocicli generabili dal-
l'ingresso 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
A.4 Curve del Secondo Ordine relative ai sottocicli generabili dal-
l'ingresso 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
A. Rech 109
Bibliogra�a
[1] D. Carnevale - S. Nicosia - L. Zaccarian, �Generalized Constructive Model
of Hysteresis�, DISP Università degli studi di Roma �Tor Vergata�, 2006.
[2] A. Capozzi, �Studio e realizzazione di un attuatore di�erenziale in lega a
memoria di forma�, Tesi di Laurea, 2009.
[3] C. Bonivento - C. Melchiorri - R. Zanasi, �Sistemi di controllo digitale�,
Progetto Leonardo, 1995.
[4] G. Marro, �Controlli Automatici�, Zanichelli, 1997.
A. Rech 111
Recommended