Tesina Sella Michele

14
Alunno: Sella Michele Classe: 5^BE Approfondimenti tecnici sul progetto Robocup 2009

description

Tesina di Sella Michele per l'esame di stato 2009

Transcript of Tesina Sella Michele

Page 1: Tesina Sella Michele

Alunno: Sella Michele Classe: 5^BE

Approfondimenti tecnici sul progetto Robocup 2009

Page 2: Tesina Sella Michele

Argomenti Trattati

Tecnologia Disegno e Progettazione

Tecnica di modulazione PWM:

• Introduzione al PWM• Applicazione Pratica

Sistemi

Microprocessore

• Storia del Microprocessore• Come funziona il microprocessore• Esempi di Microprocessore• Considerazioni sullo sviluppo futuro• Applicazione Pratica

Inglese

Artificial Intelligence

• Definition of Artificial Intelligence• History of Artificial Intelligence• Pratical Application

Page 3: Tesina Sella Michele

Tecnica di modulazione di ampiezza PWM

Introduzione al PWM

La tecnica di modulazione PWM (Pulse Width Modulation) viene utilizzata per regolare il Duty Cycle di un segnale in modo da trasportare informazioni lungo un canale oppure controllare la tensione ai capi di un carico.

Il sistema PWM si basa su un amplificatore operazionale usato come comparatore. All'ingresso invertente viene collegato un'onda triangolare o a dente di sega ad alta frequenza che viene chiamata Portante. All'ingresso non invertente invece viene collegata una tensione continua o la forma d'onda da riprodurre. Questa tensione deve avere comunque una frequenza molto inferiore rispetto alla frequenza della portante e viene chiamata Modulante.In questa configurazione l'amplificatore operazionale lavorerà sempre in saturazione. Infatti quando la tensione della modulante è superiore a quella della portante, in uscita si ottiene una tensione molto vicina a +Vcc (alimentazione positiva dell'amplificatore). Nel caso invece la tensione della portante sia superiore a quello della modulante, allora in uscita si otterrà una tensione vicina a -Vcc (alimentazione negativa dell'amplificatore).

Nella figura qui sopra si può notare che l'uscita dell'operazionale con una tensione modulante continua è un'onda quadra con periodo Ts uguale a quello della portante. Viene definito Ton il tempo in cui il segnale è a livello logico alto, mentre Toff il tempo in cui il segnale è a livello logico basso.

Con Duty Cycle del segnale di uscita si intende il rapporto fra il tempo Ton ed il periodo Ts.

Duty Cycle = TonTonToff

= TonTs

Osservando la formula che definisce il Duty Cycle si nota che è una grandezza adimensionale in quanto è un rapporto fra due tempi e può assumere valori compresi fra 0 e 1. Infatti:

dMin = 00Ts

= 0Ts

= 0

dMax = TsTs0

= TsTs

= 1

Page 4: Tesina Sella Michele

Esempio di applicazione della tecnica PWM per la regolazione della tensione su di un carico:

Il circuito è composto dal modulatore PWM analizzato con l'uscita collegata direttamente al gate di un IGBT (o qualsiasi altro interruttore elettronico di potenza come Mosfet o Transistor). Supponendo che la modulante e la portante siano uguali a quelle analizzate prima otterremo un'onda quadra che comanda l'apertura e la chiusura dell'IGBT. Il funzionamento è il seguente:

• Con uscita a livello logico alta, l'interruttore risulta chiuso e quindi al carico viene applicata la tensione Vcc.

• Con uscita a livello logico bassa, l'interruttore risulta aperto e di conseguenza anche il circuito di alimentazione del carico che avrà ai suoi capi V=0 volt.

Ecco l'andamento della tensione che si otterrà sul carico:

Durante il tempo Ton avremo quindi una tensione sul carico pari a Vcc, mentre durante il tempo toff il carico avrà ai suoi capi una tensione nulla. La tensione media ai capi del carico risulterà quindi la seguente:

Vm =Vdc⋅Ton0⋅Toff

TonToff =

Vdc⋅TonTs

= Vdc⋅TonTs

= Vdc⋅d

Si ottiene quindi sul carico una tensione che va da 0 (con d=0) a Vcc (con d=1). Con questo circuito è quindi possibile ottenere una tensione variabile su un carico semplicemente variando la tensione della modulante. Se sostituiamo la resistenza con un motore in corrente continua si noterà che al variare del Duty Cycle varierà anche la velocità del motore. Sostituendo la resistenza con una lampadina invece si noterà la variazione della luminosità al variare del Duty Cycle.

Page 5: Tesina Sella Michele

Supponiamo ora che la tensione della modulante non sia costante, ma assuma un andamento sinusoidale. Riprendendo i ragionamenti applicati prima otterremo la seguente forma d'onda in uscita dal modulatore PWM:

Da questi grafici si può notare che il Duty Cycle non resta costante, ma continua a variare. Calcolando il d per ogni intervallo di tempo Ts si può notare che questo varia per ogni periodo ed in definitiva ha un andamento sinusoidale. Si può quindi dire che qualsiasi sia la forma d'onda della modulante, il Duty Cycle avrà lo stesso andamento con la medesima frequenza. Ecco qui una rappresentazione delle correnti sul carico se questo è di tipo R-L.

E' facile notare l'azione filtrante dell'induttanza che riduce le armoniche presenti nel segnale e porta la corrente ad assumere un'andamento pressochè sinusoidale.

Page 6: Tesina Sella Michele

Applicazione Pratica

Nel nostro progetto per la RoboCup 2009 abbiamo utilizzato la tecnica di modulazione PWM per riuscire a controllare la velocità dei motori. Infatti il nostro robot monta dei motori in corrente continua a magneti permanenti. Il segnale PWM viene prelevato direttamente dal microprocessore ma, non essendo un segnale di potenza, abbiamo dovuto realizzare un piccolo circuito elettronico per poter utilizzare questo segnale per comandare i nostri motori. Per fare questo abbiamo utilizzato l'integrato L6202 che contiene un Full-Bridge. Aggiungendo a questo 2 porte logiche NOT e 4 AND siamo riusciti anche a gestire la direzione di rotazione dei motori semplicemente cambiando lo stato logico di due pin del microprocessore. Sono riportati qui sotto gli schemi dei sopracitati circuiti:

Da questi schemi si può capire che quando DIR è a livello logico alto, la tensione PWM, arriverà nel motore in un senso facendolo ruotare di conseguenza in una direzione. Quando DIR invece è a livello logico basso, la tensione, arriverà dall'altro senso facendo così ruotare il motore nell'altra direzione

Page 7: Tesina Sella Michele

Microprocessori

Storia del microprocessore

Il microprocessore viene definito come l'implementazione di una CPU in un singolo circuito integrato. La sua prima apparizione avvenne non appena fu possibile costruirlo attraverso la tecnologia LSI nel 1970. Nel 1968 infatti Garrett iniziò a sviluppare un sistema elettronico per competere con i sistemi elettromeccanici utilizzati nei caccia militari. L'obiettivo del progetto era equipaggiare il nuovo F14 Tomcat che era allora in sviluppo con questa nuova tecnologia. Il progetto era semplice e innovativo e vinse sui competitori elettromeccanici. La marina americana però considerò il progetto tanto innovativo che impedì la pubblicazione di articoli sul sistema fino al 1997 per cui, questo microprocessore, rimase semisconosciuto. Da allora il microprocessore diventò il cuore di moltissime apparecchiature elettroniche che ormai usiamo ogni giorno come computer, telefoni cellulari, palmari e moltissimi altri dispositivi digitali.

Come funziona un microprocessore

Per capire come funziona un microprocessore è utile guardarlo all'interno e capire la logica con cui è stato costruito. Principalmente esso esegue una serie di istruzioni scritte in linguaggio macchina che gli indicano cosa fare. Basandosi su queste il microprocessore esegue principalmente 3 tipi di azioni:

• Usando L'ALU (Arithmetic/Logic Unit) può eseguire semplici calcoli matematici come addizione, sottrazione, moltiplicazione e divisione. I microprocessori moderni possono eseguire anche calcoli estremamente complessi su numeri a virgola mobile ( principalmente utilizzati per la grafica tridimensionale)

• Può spostare i dati da un indirizzo di memoria ad un altro• Può prendere delle decisioni e saltare da un istruzione ad un'altra in base a questa decisione

Ci sono molte altre istruzioni complesse che possono essere eseguite, ma sicuramente queste sono le 3 principali. Qui sotto è riportato lo schema a blocchi di un microprocessore in grado di eseguire queste azioni.

Page 8: Tesina Sella Michele

Questo semplice microprocessore comprende:• Un Bus di Indirizzi (può essere a 8, 16 o 32 bit) che manda un indirizzo alla memoria.• Un Bus Dati (può essere a 8,16 o 32 bit) che può mandare o ricevere dati dalla memoria.• Una linea RD (lettura) e una WR (scrittura) che dicono alla memoria se i dati devono essere

letti o scritti.• Una Linea di Clock alla quale viene collegato il segnale pulsante che gestisce il tempo di

eleborazione dei dati.• Una Linea di Reset che permette di azzerare i dati nel microprocessore e di riavviare da

capo l'esecuzione del programma.

I bus e le linee sopracitate servono a collegare i vari componenti del microprocessore cone le sue memorie interne. Queste memorie possono essere di due tipi:

ROM (Read Only Memory)

Questo tipo di memoria è programmata con un set predefinito di istruzioni che non possono essere modificate in nessuna maniera dal programma. Solitamente contengono le tabelle di allocazione dei dati che servono al microprocessore per sapere dove andare a prendere i dati. Ad esempio in un PC la memoria ROM è costituita dal CMOS che è la memoria sfruttata dal BIOS per avviare il computer.

RAM (Random Acces Memory)

Questa memoria viene utilizzata per leggere e scrivere i dati calcolati dal microprocessore. Questa tipoligia di memoria è molto veloce e permette di eseguire tutti i calcoli alla massima velocità però è volatile cioè i dati vengono persi quando viene tolta l'alimentazione. E' per questo motivo che è necessario avere delle memorie di tipo ROM.

Esempi di microprocessori

Risulta interessante comparare i microprocessori installati su dispositivi di ambiti e tempi diversi per vedere l'evoluzione esponenziale che questi hanno ottenuto in così pochi anni. Riportiamo qui sotto alcuni brevi esempi:

Intel 8086 ( 1981 )

L'intel 8086 è stato il primo processore per personal computer . E' un processore importante perchè ha dato le linee guida per l'architettura x86 ( ancora utilizzata oggi).La sua frequenza di funzionamento era compresa fra i 4.6Mhz della versione base e i 10Mhz della versione più potente. Questo processore supportava al massimo 1Mb di memoria ram di cui solo 640Kb potevano essere utilizzati dal sistema operativo DOS.

Page 9: Tesina Sella Michele

Intel 80486 ( 1989 )

Altro passo importante nella storia dei microprocessori. Con il 486 si passò dalla cache esterna introdotta nei 386 alla cache interna. Questa memoria estremamente veloce permise di raddoppiare la velocità di calcolo rispetto ai suoi predecessori.Le frequenze di funzionamento andavano dai 25Mhz della versione base ai 33Mhz della versione più veloce. In seguito, grazie all'introduzione del moltiplicatore 2x si riuscì ad ottenere una frequenza di 66Mhz.

Intel Pentium Pro ( 1995 )

Il pentium Pro include delle novità importanti come l'integrazione di un secondo livello di cache per velocizzare ulteriormente le operazioni. Da questo microprocessore è stata abbandonata la tecnica di aumento delle IPC (Instrucions Per Clock) e si è passati all'aumento della frequenza di funzionamento. La sua frequenza di funzionamento variava da 150 a 200Mhz e fu il primo microprocessore facilmente overclockabile. Non ebbe molto successo perchè era veloce nell'esecuzione di codice a 32Bit ma non altrettanto in quello a 16Bit. In quel tempo spopolavano Windows 3.1

(completamente a 16Bit) e successivamente Windows 95 (ancora parzialmente a 16Bit) . Tutti i microprocessori successivi a questo fino al Pentium 4 sono praticamente identici tranne per la parte che riguarda il socket.

Intel Core i7 Nehalem ( 2009 )

Passiamo ora al presente. Questa è la nuova Cpu di intel che sfrutta la tecnologia Multicore. Questa permette di avere in un unico chip più microprocessori; nel caso specifico sono 4 che però grazie alla tecnologia HyperThreding possono gestire 8 processi contemporaneamente. Questo processore include 731 milioni di transistor ed ha una frequenza di funzionamento che va da 2,66Ghz a 3,33Ghz per core.

La comparazione fra i vari processori proposti, la data di sviluppo e le loro capacità elaborative dimostrano i passi da gigante fatti dalla tecnologia dei microprocessori in questi anni. Oltre all'aumento delle velocità però sono stati fatti grandissimi avanzamenti tecnologici anche sui consumi e sulle dimensioni dei dispositivi, permettendo così di integrarli in dispositivi portatili come consolle, telefonini e palmari. A scopo puramente illustrativo riportiamo qui due telefoni cellulari di ultima generazione attualmente disponibili in mercato con le relative specifiche del microprocessore.

Page 10: Tesina Sella Michele

Apple iPhone 3G

Cpu Samsung S3C6400 con clock a 620Mhz e 128 Mb di Ram. Il processore è in grado di gestire la tecnologia MultiTouch del display da 3.5" che riconosce fino a 5 tocchi simultanei.

Nokia N95 8GB

Cpu Texas Instruments OMAP2420 con clock a 330Mhz Dual Core. Include un altro microprocessore a virgola mobile per velocizzare il rendering di scene 3D. Il processore è in grado di gestire una fotocamera da 5Mpx e grafica tridimensionale complessa ad una risoluzione di 320x240 pixel.

Considerazioni sullo sviluppo futuro

Non possiamo sapere di preciso come si evolverà la tecnologia dei microprocessori nei prossimi anni, però sappiamo che le frequenze di funzionamento non possono essere alzate ancora molto con l'attuale tecnologia costruttiva. Infatti probabilmente i microprocessori saranno sempre più veloci solo perchè avranno sempre più unità di calcolo in parallelo a loro disposizione e verranno ottimizzate per lavorare al meglio insieme. Sarà possibile aumentare la frequenza di funzionamento solo quando entreranno in gioco le nanotecnologie. Queste permetteranno la costruzione di microprocessori fino a 1000 volte più piccoli di quelli attuali a parità di potenza di calcolo. Con questo sistema sarà così possibile anche avvicinare fra di loro i vari componenti all'interno dell microprocessore, ricudendo così i disturbi causati da induttanze e capacità parassiste che attualmente impediscono l'aumento della frequenza dei microprocessori. La nanotecnologia è comunque ancora in sviluppo e non sarà accessibile a tutti probabilmente prima di 6 / 10 anni. E' importante notare che la nostra zona (nord-est italiano) è comunque una delle aree al mondo più progredite nello studio e nella sperimentazione delle nanotecnologie.

Page 11: Tesina Sella Michele

Applicazione Pratica

Sul nostro progetto per la RoboCup 2009 abbiamo deciso di utilizzare un microprocessore per comandare il nostro robot. Il microprocessore utilizzato è un BX-24 dalle seguenti caratteristiche tecniche:

• Velocità CPU: 8Mhz• Dimensione EEPROM: 32Kb• Dimensione RAM: 400b• Dimensione massima del programma: fino a 8000 righe• Pin I/O: 21• Ingressi analogici: 8

Questo microprocessore è programmabile tramite un linguaggio Basic molto simile a quello del famoso software Microsoft Visual basic, ma con inoltre alcune funzioni aggiuntive dedicate a delle operazioni specifiche. Il programma utilizzato per la programmazione si chiama BasicX e dispone di due comode interfacce grafiche: una di scrittura dove viene immesso il codice che andrà scritto sulla EEPROM del micro e un'altra di debug che stampa a schermo tutte le operazioni svolte dal microprocessore in fase di funzionamento.

Il nostro programma è composto da 750 righe di codice per un totale di 2358 parole. Nel programma abbiamo fatto ampio uso della funzionalità di multitasking del microprocessore. Infatti il codice relativo alla lettura dei sensori, quello che regola la velocità dei motori in base alla lettura degli encoder e la lettura degli encoder stessi venivano eseguiti ad ogni ciclo del programma. Questo sistema però causa un grande utilizzo della Ram e i soli 400 Byte disponibili ci hanno messi un pò in difficoltà, ma con alcuni accorgimenti siamo riusciti a rispettare i limiti e i vantaggi così ottenuti sono stati molti rispetto ad altri sistemi di programmazione. Ad esempio riuscivamo ad escludere o aggiungere al programma alcune parti semplicemente cambiando una riga di codice. Questo ci è stato molto utile, ad esempio, nelle fasi di taratura dei sensori dove dovevamo collegare il robot al computer per poter visualizzare i valori restituiti dai circuiti delle fotoresistenze e regolarli di conseguenza. Con il sistema che abbiamo adottato potevamo fare una regolazione precisa entro i 2 minuti di tempo che ci erano concessi dal regolamento.Un altra funzione importante che abbiamo utilizzato è stata quella della lettura della tensione sui pin dell'adc. Con un semplice comando riuscivamo a leggere la tensione presente su di un piedino, permettendoci così di leggere direttamente la tensione in uscita dalla scheda delle fotoresistenze. Il microprocessore riusciva senza alcun problema ad eseguire la lettura contemporanea di 4 fotoresistenze e mandare i sengali di interrupt in tempo reale per effettuare le azioni nei casi che avevamo fissato.

Page 12: Tesina Sella Michele

Esempio di programmazione

Riporto qui sotto una piccola parte del programma utilizzato per il nostro robot.

Public Sub controllosensori()

dim dbg as string

doCall GetAdc(SenDxPin, SenDxVal) 'Lettura valore Fotoresistenza DestraCall GetAdc(SenCenPin, SenCenVal) 'Lettura valore Fotoresistenza CentraleCall GetAdc(SenSxPin, SenSxVal) 'Lettura valore Fotoresistenza SinistraCall GetAdc(SenMortiPin, SenMortiVal) 'Lettura valore Fotoresistenza ded. Morti

'dbg = cstr(SenDxVal*5.0) & " --- " & cstr(SenCenVal*5.0) & " --- " & cstr(SenSxVal*5.0) & " --- " & cstr(SenMortiVal*5.0)

'debug.print dbg 'Togliere commento per visualizzare datiif SenDxVal*5.0 < TracciaSogliaBassa then 'Controlla se Destra legge bianco

SenDxStato=0end ifif SenDxVal*5.0 > TracciaSogliaAlta then 'Controlla se Destra legge nero

SenDxStato=1end ifif SenSxVal*5.0 < TracciaSogliaBassa then 'Controlla se Sinistra legge bianco

SenSxStato=0end ifif SenSxVal*5.0 > TracciaSogliaAlta then 'Controlla se Sinistra legge nero

SenSxStato=1end ifif SenCenVal*5.0 < TracciaSogliaBassa then 'Controlla se Centrale legge bianco

SenCenStato=0end ifif SenCenVal*5.0 > TracciaSogliaAlta then 'Controlla se Centrale legge nero

SenCenStato=1end ifif SenMortiVal*5.0 < MortiSogliaAltaArgento then 'Controlla se dedicata legge argento

SenMortiStato=1end ifif SenSxVal*5.0 > TracciaSogliaAlta then 'Controlla se Dx e Sx leggono nero (verde)

if SenDxVal*5.0 > TracciaSogliaAlta thenSenMortiStato=1

elseSenMortiStato=0

end if'dbg = cstr(SenDxStato) & " --- " & cstr(SenCenStato) & " --- " & cstr(SenSxStato) & " --- " & cstr(SenMortiStato) & " --------" & cstr(senCenStato)

'debug.print dbg 'Togliere commento per visualizzare datiCall Sleep (0.0)loop

End Sub

Nel codice riportato sono da notare le due parti commentate. Queste se non commentate permettono di visualizzare i valori restituiti dagli adc collegati alle fotoresistenze e il valore delle variabili associate ad esse. In pochissimo tempo è quindi così possibile regolare i circuiti. Inoltre questa porzione di codice è eseguita in Multitasking; questo si può capire dal fatto perchè è racchiusa in un ciclo loop con all'interno un richiamo alla funzione Sleep. Questa se richiamata con tempo pari a 0.0 servirà a gestire le priorità dei vari processi messi in multitasking.

Page 13: Tesina Sella Michele

Artificial Intelligence ( A. I. )

Artificial Intelligence ( A. I ) is the intelligence of machines and the branch of computer science which aims to create it. AI is also definied as "the study and design of intelligent agents" where an intelligent agent is a system that perceives its environment and takes actions which maximize its chances of success. John McCarthy, who coined the term in 1956, defines it as "the science and engineering of making intelligent machines".AI research is highly technical and specialized, so much that some critics decry the "fragmentation" of the field. Subfields of AI are organized around particular problems, the application of particular tools and around longstanding theoretical differences of opinion. The central problems of AI include such traits as reasoning, knowledge, planning, learning, communication, perception and the ability to move and manipulate objects.

History of AI research

The field of modern AI research was founded at a conference on the campus of Dartmouth College in the summer of 1956.Those who attended would become the leaders of AI research for many decades, especially John McCarthy, Marvin Minksy, Allen Newell and Herbert Simon, who founded AI laboratories at MIT, CMU and Stanford. They and their students wrote programs that were, to most people, simply astonishing: computers were solving word problems in algebra, proving logical theorems and speaking English. By the middle 60s their research was heavily funded by the U.S. Department of Defense and they were optimistic about the future of the new field:

• 1965, H.A. Simon: "Machines will be capable, within twenty years, of doing any work a man can do".

• 1967, Marvin Minsky: "Within a generation, the problem of creating 'artificial intelligence', will substantially be solved".

These predictions would not come true. They had failed to recognize the difficulty of some of the problems they faced. In 1974, in response to the criticism of England's Sir James Lighthill and ongoing pressure from Congress to fund more productive projects, the U.S. and British governments cut off all undirected, exploratory research in AI. This period was the first AI winter.

In the early 80s, AI research was revived by the commercial success of expert systems, a form of AI program that simulated the knowledge and analytical skills of one or more human experts. By 1985 the market for AI had reached more than a billion dollars, and governments around the world poured money back into the field. However, just a few years later, beginning with the collapse of the Lisp Machine market in 1987, AI once again fell into disrepute, and a second, longer lasting AI winter began.

In the 90s and early 21st century, AI achieved its greatest successes, albeit somewhat behind the scenes. Artificial intelligence is used for logistics, data mining, mediacl diagnosis and many other areas throughout the technology industry. The success was due to several factors: the incredible power of computers today, a greater emphasis on solving specific subproblems, the creation of new ties between AI and other fields working on similar problems, and above all a new commitment by researchers to solid mathematical methods and rigorous scientific standards.

Page 14: Tesina Sella Michele

Pratical Application

The main feature of our robot is that it is independent. That means it has to perceives the surroundig environment through its sensor and takes decisions based upon them.For making this we need to write a program that includes a simple Artificial Intelligence. For example for making the robot to follow the black line, it needs to continuosly check its 3 photoresistance. Just after a sensor changes its status, for example the right photoresistance change its value from the white color to the black color, the robot has to do a specific sub-program to turn till he finds the black line with the central photoresistance and the right sensor reads the white color. The same operation is needed when the left photoresistance changes its status too.There are other types of operations corresponding to various input signals such as the avoiding of obstacles and the surveys of victims.With some more work and a longer code we could make a learning program. That means that the robot would learn from his errors and would try not to repeat them in the future. This is an advanced type of Artificial Intelligence.

This is the block diagram of the program we have written for avoid of obstacles.

Control the front sensor

No

Yes

Has the robot touchedan object?

Disable line followers And Avoid the Object

Check the Line Followers

Has the line been found?

No

Yes