Progettato da Terraneo Federico Introduzione Questo progetto consente di sperimentare diversi tipi di controllori in anello chiuso con l'obbiettivo di mantenere costante la temperatura di un transistor. Il progetto è composto da due parti: • Un circuito, realizzabile su breadboard, basato sul microcontrollore ATmega8535, su cui gira il software temp_ctrl • Un programma, wxTempCtrl, che comunica con il microcontrollore tramite una porta seriale (o un adattatore USB->seriale). Tale programma implementa quattro tipi di regolatori: uno proporzionale, uno integrale, uno di tipo PI, e un PID. É inoltre presente un simulatore che si attiva automaticamente se il circuito non è connesso al computer. Compilare wxTempCtrl da Linux • Dipendenze Per compilare wxTempCtrl occorrono i seguenti pacchetti: gcc g++ libc libstdc++ libwxbase libwxbasedev libwxgtk libwxgtkdev wxheaders wxcommon per installarli è possibile usare tool come aptget. • Compilazione Aprire un terminale, spostarsi nella cartella wxTempCtrl e digitare ln s makefile_linux makefile make make cleantemp appena terminata la compilazione è possibile provare il programma digitando ./wxTempCtrl Non è prevista una procedura di installazione all'interno delle cartelle di sistema (per esempio in /usr/local o in /opt). Si consiglia di copiare la cartella wxTempCtrl nella home directory ed eseguire il programma da lì. NOTA: Il programma wxTempCtrl deve essere eseguito con il working path all'interno del quale sia presente il file config, altrimenti non riuscirà a caricare i parametri di configurazione. È questo il motivo per cui il programma restituisce un errore se lanciato facendo doppio clic sull'eseguibile. Per ovviare a questo inconveniente è possibile procedere in molti: 1) Copiare il file config nella home directory 2) Lanciare wxTempCtrl aprendo un terminale nella cartella dove si trovano l'eseguibile e il file config e digitando ./wxTempCtrl. 3) Usare il file wxTempCtrl.desktop, che è un file di tipo “Application launcher” da mettere sul desktop. Tale file va però configurato aprendolo con un editor di testo e editando le righe exec e path in modo da riflettere il percorso dove si trova il file. Compilare temp_ctrl da Linux • Dipendenze Per compilare temp_ctrl occorre installare il cross-compiler per l'architettura AVR: binutilsavr gccavr avrlibc avrdude per installarle tali pacchetti è possibile usare tool come aptget. • Compilazione Aprire un terminale, spostarsi nella cartella temp_ctrl e digitare make • Trasferimento del firmware nel microcontrollore Per programmare il microcontrollore è necessaria un'apposita interfaccia da connettere alla porta parallela del computer. Per avere lo schema basta inserire in un motore di ricerca “stk200 schematic”, dove stk200 è il nome del programmatore. Supponendo che il microcontrollore sia connesso al programmatore ed alimentato, e supponendo che il programmatore sia connesso al computer tramite la porta parallela, per programmarlo occorre aprire un terminale nella cartella temp_ctrl e digitare sudo chmod ugo+rw /dev/parport0 //Per avere accesso alla porta parallela make program Poiché i microcontrollori della Atmel di default utilizzano un oscillatore interno a 1MHz, mentre in questo progetto occorre usare un quarzo esterno, bisogna riconfigurare i fuses del micro. Nota: occorre effettuare questa operazione con il microcontrollore connesso al programmatore e con il quarzo già connesso agli appositi piedini del micro, altrimenti il micro si bloccherà e non sarà possibile portare a termine l'operazione. Aprire un terminale e digitare sudo chmod ugo+rw /dev/parport0 //Per avere accesso alla porta parallela avrdude p m8535 c stk200 P /dev/parport0 t A questo punto avrdude verrà eseguito in modalità terminale, pronto ad accettare comandi, digitare write lfuse 0 0xfd dump lfuse quit //Controllare che il valore sia corretto Test del circuito Ecco un'esempio di realizzazione. Si noti che il sensore di temperatura LM35 deve essere fissato alla parte metallica del transistor BUX84 tramite colla o nastro biadesivo sottile. Connettere il circuito al computer tramite la porta seriale o un adattatore USB->seriale. Aprire la cartella wxTempCtrl, e editare il file config inserendo il percorso della porta che si sta effettivamente utilizzando. Per esempio inserire /dev/ttyUSB0 per un adattatore USB-> seriale, oppure /dev/ttyS0 per una porta seriale. Alimentare il circuito, aprire un terminale, spostarsi nella directory wxTempCtrl e digitare sudo chmod ugo+rw /dev/ttyUSB0 //Per accedere alla porta seriale ./wxTempCtrl Se tutto funziona correttamente il programma dovrebbe riconoscere il circuito. Taratura del circuito • Strumenti necessari Per effettuare la taratura è necessario un tester in grado di misurare tensioni e correnti. • Compensazione dell'offset di misura Facendo riferimento allo schema del circuito, scollegare l'uscita del sensore di temperatura LM35 e collegare il piedino 3 dell'LM358 a massa. Alimentare il circuito e far partire il programma wxTempCtrl, leggere la temperatura, che dovrebbe essere circa zero. Chiudere il programma, aprire il file config e riportare tale valore alla riga temp offset. Connettere nuovamente l'uscita dell'LM35 all'ingresso dell'LM358. • Calibrazione del misuratore di temperatura Collegare il tester tra il pin 3 dell'LM358 e massa, impostare il tester per leggere tensioni con una risoluzione di almeno 1mV. Alimentare il circuito e far partire il programma wxTempCtrl. La temperatura effettiva si legge dal tester, per esempio se la tensione è di 215mV, la temperatura è di 21.5°C. Ruotare lentamente il trimmer multigiri connesso tra i piedini 1 e 2 dell'LM358 fino a far coincidere la temperatura che appare sullo schermo con quella attuale. • Calibrazione del generatore di corrente Facendo riferimento allo schema del circuito, collegare il tester in serie al collettore del transistor BUX84, impostato come misuratore di corrente con un fondo scala di almeno 400mA. Alimentare il circuito e far partire il programma wxTempCtrl. Assicurarsi che sia in modalità manuale e impostare la potenza al 100%. Ruotare il trimmer multigiri connesso al piedino 5 dell'LM358 in modo da leggere sul tester una corrente di 150mA Importare i dati relativi a risposte a scalino in Scilab Ogni volta che si esegue il programma wxTempCtrl viene creato un file di nome Log.txt nella stessa cartella del file config, che contiene il log delle temperature, delle potenze e dei set point. Per importarlo in Scilab è sufficiente editarlo, per eliminare la prima riga Temp:Set_point:Power dopodiché si può usare la funzione Scilab fscanfMat. Nota: se il file Log.txt esiste già, verrà sovrascritto. Occorre quindi rinominare tale file se si intende utilizzarlo in seguito. Cambiare i parametri del regolatore/simulatore Tutti i parametri si trovano nel file config. Ottenere automaticamente l'accesso alla porta seriale Ogni volta che si riavvia il computer (o si disconnette e riconnette l'adattatore USB->seriale) occorre ridigitare sudo chmod ugo+rw /dev/ttyUSB0 per avere accesso alla porta seriale. Per ovviare a questo inconveniente è possibile seguire questa procedura: digitare ls la /dev/ttyUSB0 ottenendo un risultato simile a crwrw 1 root uucp 188, 0 20080122 19:30 /dev/ttyUSB0 da cui si ottiene il gruppo di appartenenza del device, in questo caso uucp. Poi digitare sudo nano /etc/group e aggiungere il proprio nome utente al gruppo uucp. Come in ogni caso in cui occorre modificare un file di configurazione, si consiglia di farne un backup prima di editarlo. Known bugs • La compensazione dell'offset nella misura della temperatura, causato dell'amplificatore operazionale funziona solo se l'errore è di segno positivo. Tuttavia, data la natura didattica del circuito, l'offset non produce un errore rilevante. • Il codice dell'evento OnPaint (nel file wxTempCtrl.cpp) che si occupa di disegnare il grafico non è molto ottimizzato. Infatti il grafico viene ridisegnato completamente ogni volta, invece che aggiornare solo la parte di grafico che è cambiata. Questo causa un leggero aumento dell'utilizzo di cpu.