UNIVERSITÀ DEGLI STUDI DI ROMA AFCOLTÀ DI...

119

Transcript of UNIVERSITÀ DEGLI STUDI DI ROMA AFCOLTÀ DI...

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

Cap. 2 Hardware a disposizione e modi�che e�ettuate

30 A. Rech

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

APPENDICE A

Figura

A.1:

Curve

delPrim

oOrdine

78 A. Rech

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

Elenco delle �gure

110 A. Rech

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