Tema di Sistemi elettronici automatici ESAME 2009 Soluzione La traccia presenta lo sviluppo di un progetto relativo al monitoraggio della temperatura durante un processo di produzione tipico nelle applicazione di controllo di processo. Tra le soluzioni possibili ne presentiamo una che, a nostro avviso, è esauriente e nello stesso tempo semplice. Domanda 1. - Individui uno schema a blocchi dell’impianto utilizzando un microcontrollore o un microprocessore conosciuto. Lo schema a blocchi proposto prevede un microprocessore dotato di risorse di input/output in grado di gestire i segnali previsti. I segnali provenienti dai sensori di temperatura saranno opportunamente condizionati, come richiesto, per poter essere elaborati. Circuito di condizionamento CH0 .................. ….. traduttore 8 Circuito di condizionamento ADC Dato digitale traduttore 1 MICRO CONTROLLORE CH7 DISPLAY LCD Ogni trasduttore produce una tensione di uscita con escursione massima di 1V (10 mV/°C x 100 °C) Non essendo data alcuna indicazione riguardo la tensione di uscita corrispondente ad un valore di riferimento della temperatura, possiamo ipotizzare che sia Vout = 0V per T=0 °C. In queste condizioni il range della tensione di uscita dei sensori sarà 0V-1V Il circuito di condizionamento avrà la funzione di amplificare il range del sensore fino al valore di riferimento del convertitore A/D, quindi 0V-5V. Pertanto utilizzeremo un amplificatore non invertente con guadagno 5. Per la conversione degli 8 segnali prodotti dai sensori si potrebbe impiegare un solo convertitore A/D preceduto da un MUX analogico a 8 ingressi. Sono però comunemente disponibili convertitori integrati già completi di MUX, pertanto lo schema a blocchi riporta il solo convertitore MAX 1270 della MAXIM che comprende un MUX ad 8 ingressi del tipo ad approssimazioni successive, certamente in grado di soddisfare le esigenze dell’applicazione in esame. La velocità di variazione della temperatura, nel caso in esame, è certamente molto bassa rispetto ai tempi di conversione, pertanto non vi è necessità di inserire un circuito campionatore, né di interporre un filtro per eventuali limitazioni di banda. Il rapporto S/N (SNR) di 72 dB si riferisce al rumore di quantizzazione del convertitore, pertanto dalla formula: SNR = 6 * NQ Si ottiene NQ, cioè il numero di bit del convertitore (che equivale alla risoluzione del convertitore): NQ = SNR / 6 = 72 / 6 = 12 Quindi occorre scegliere un convertitore A/D con risoluzione pari a 12 bit. Il dato fornito dall’ADC MAX 1270 è in formato seriale SPI e con lo stesso standard viene letto dal microcontrollore, che può essere scelto nel PIC16F877 che dispone dello standard SPI. Qui di seguito riportiamo qualche chiarimento sullo standard SPI: Il Serial Peripheral Interface o SPI (pronuncia: ɛs pi aɪ o spaɪ) è un sistema di comunicazione tra un microcontrollore e altri circuiti integrati o tra più microcontrollori. È un bus standard di comunicazione ideato dalla Motorola e sviluppato, in una sua variante, anche dalla National Semiconductor con il nome di bus MicrowireTM. La trasmissione avviene tra un dispositivo detto master e uno o più slave (letteralmente dall'inglese padrone e schiavo). Il master controlla il bus, emette il segnale di clock, decide quando iniziare e terminare la comunicazione[1]. Il bus SPI si definisce: di tipo seriale sincrono per la presenza di un clock che coordina la trasmissione e ricezione dei singoli bit e determina la velocità di trasmissione full-duplex in quanto il "colloquio" può avvenire contemporaneamente in trasmissione e ricezione. Per quanto riguarda la velocità di scambio dei dati (in pratica la frequenza del clock) non vi è un limite minimo (in quanto i dispositivi sono statici: possono mantenere se alimentati uno stato logico per un tempo indefinito) ma vi è un limite massimo che va determinato dai datasheet dei singoli dispositivi connessi e dal loro numero in quanto ogni dispositivo collegato al bus introduce sulle linee di comunicazione una capacità parassita). Il sistema di comunicazione di solito serve per lo scambio di dati tra dispositivi montati "sulla stessa scheda elettronica" (o comunque tra schede elettroniche vicine tra di loro) in quanto non prevede particolari accorgimenti hardware per trasferire informazioni tra dispositivi lontani connessi con cavi soggetti a disturbi. Il sistema è comunemente definito a quattro fili. Con questo si intende che le linee di connessione che portano i segnali sono in genere quattro. Va però tenuto conto che vi deve comunque essere una connessione di riferimento (0 Vdc comunemente indicata con GND, nome che a rigore è improprio) e che fisicamente quindi i fili sarebbero cinque. Discorso analogo si può fare su altri bus seriali definiti a due fili (I²C) o ad un filo in quanto si considerano solo le linee di segnale e si sottintende la connessione di riferimento. Segnali dell’SPI Esso si basa su 4 segnali (si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare il datasheet del componente che si intende utilizzare in caso di dubbi): SCLK - SCK: Serial Clock (emesso dal master) SDI – MISO – SIMO – DI - SI: Serial Data Input, Master Input Slave Output (ingresso per il master ed uscita per lo slave) SDO – MOSI – SOMI – DO – SO: Serial Data Output, Master Output Slave Input (uscita dal master) CS – SS – nCS – nSS – STE: Chip Select, Slave Select, emesso dal master per scegliere con quale dispositivo slave vuole comunicare (dalla figura, il segnale con la sbarretta sui caratteri SS, si comprende che per comunicare con il dispositivo slave deve venire messo a livello logico basso) Di questi il Chip Select (CS o SS) non è indispensabile in tutte le applicazioni. È facile confondersi nei nomi, spesso ambigui, sui segnali di trasferimento dei dati (ingressi e uscite). In ogni caso la consultazione dei datasheet dei dispositivi scelti dovrebbe chiarire ogni dubbio. Le denominazioni MOSI (Master Output Slave Input), MISO (Master Input Slave Output) sembrano essere quelle che comportano meno equivoci. Il segnale SCLK è il clock seriale che scandisce gli istanti di emissione e di lettura dei bit sulle linee di dati. È un segnale emesso dal master ed è quindi quest'ultimo a richiedere di volta in volta la trasmissione di una "parola"[2]. Il segnale SDI/MISO è la linea attraverso cui il dispositivo (master o slave) riceve il dato seriale emesso dalla controparte. Sullo stesso fronte di commutazione del clock, il dispositivo emette, con la stessa cadenza, il suo output ponendo il dato sulla linea SDO/MOSI (linea di output di dato). Esempio di 2 dispositivi slaves controllati singolarmente da un master SPI Come display può essere un display LCD del tipo LCD216S che dispone della predisposizione allo standard SPI. Di seguito riportiamo qualche caratteristica del modello: 16 column by 2-line text display Built-in font with provision for up to 8 user-defined characters Speeds from 2400 bps to 57.6 Kbps over RS-232 Communicate over RS-232, inverted RS-232, SPI or I2C Use of multiple modules over it interface and up to 32 modules over single I2C interface Software controlled contrast Software controlled Backlight Two different on the fly, software selectable protocols OR Hard wired Vertical bar graph Easy commands for printing number on display Di seguito riportiamo un possibile schema elettrico del sistema completo: +5 V LM35 traduttore 1 Circuito di condizionamento LM35 traduttore 2 Circuito di condizionamento LM35 traduttore 3 Circuito di condizionamento VREF Vcc GND CH0 CH1 LM35 traduttore 4 Circuito di condizionamento LM35 traduttore 5 Circuito di condizionamento CH2 CS CH3 CH4 SCLK CH5 (MISO) DIN CH6 LM35 traduttore 6 Circuito di condizionamento LM35 traduttore 7 Circuito di condizionamento LM35 traduttore 8 Circuito di condizionamento (MOSI) DOUT CH7 MAX1270 (slave2) CS SCLK SDI CS1 SDO CS2 SCLK GND DISPLAY LCD (Slave1) SDI SDO (MISO) (MOSI) (MISO) (MOSI) GND MCLR PIC 16F877 Vcc (master) +5 V Vcc Domanda 2. – Sviluppi il circuito di condizionamento tra un sensore di temperatura e un canale del convertitore A/D. L’amplificatore richiesto, realizzato con AmpOp, avrà lo schema seguente: Av = 1+Rf /R1 = 5 Da cui : Rf /R1 = 4 Quindi si può fissare: R1=10 KΩ ed Rf = 40 KΩ Domanda 3. – Indichi le risorse software in termini di registri e/o variabili utilizzate per realizzare l’algoritmo di acquisizione e di calcolo della temperatura media. Il microcontrollore PIC 16F877 può essere programmato in MIKROBASIC mediante apposito programmatore. Il programma del microcontrollore deve provvedere alla gestione dello standard SPI per la lettura del dato dall’ADC e per la scrittura sull’LCD per la visualizzazione della temperatura. La traccia non indica la necessità di memorizzare alcun dato una volta acquisite le 8 temperature e calcolata la media. Si può ipotizzare che ad ogni ciclo di acquisizione i dati vengano sovrascritti. Pertanto occorrerà disporre di 8 variabili (o di un array) per le temperature rilevate ed una variabile per il calcolo della media. Domanda 4. – Disegni il diagramma di flusso dell’algoritmo per il calcolo della temperatura media. Il presente diagramma di flusso fa riferimento alla realizzazione con un generico microprocessore, ipotizzando che i valori di temperatura acquisiti siano contenuti in celle di memoria con indirizzi da 0 a 7. Il risultato della media si troverà nella variabile MEDIA. Occorre considerare che: • Il convertitore A/D prende in ingresso un segnale compreso fra 0 e 5 [V] e lo converte in un dato digitale N a 12 bit compreso fra 0 e 4096. • Per ottenere da questo numero N un valore che rappresenta la TEMPERATURA T (in °C) occorre impostare un’altra proporzione. Considerando che a 100°C sull’ADC arriva una tensione di 5 Volt (in virtù dall’amplificazione del circuito di condizionamento) che corrisponde ad un dato convertito (il massimo) di 4096 – su una risoluzione di 12 bit) T : N = 100 : 4095 • E cioè risolvendo rispetto a T: T = N * 100 / 4095 inizio Configura dispositivi SPI MEDIA = 0 SOMMA = 0 I=1 LEGGI DATO_ADC I=I+1 SOMMA = SOMMA + DATO_ADC no si I=9? MEDIA = SOMMA / 8 FINE Domanda 5. – Fornisca una porzione di codice significativa dell’algoritmo utilizzato. program TEMPERATURA dim Chip_Select as sbit at RC0_bit Chip_Select_Direction as sbit at TRISC0_bit dim value as word sub procedure InitMain() Chip_Select = 1 Chip_Select_Direction = 0 SPI1_Init() end sub ' Deselect DAC ' Set CS# pin as Output ' Initialize SPI1 module sub procedure ADC_READ(dim valueADC as word) dim temp as word Chip_Select = 0 ' Select ADC chip valueADC = SPI1_Read(temp) Chip_Select = 1 end sub main: InitMain() MEDIA = 0 Somma = 0 while TRUE ' Read 12 bit word via SPI ' Deselect DAC chip ' Perform main initialization ' variabile media ' Endless loop For i=1 to 8 Somma = Somma + ADC_READ(value) Next i Media = Somma / 8 TEMPERATURA = N * 100 / 4095 ‘ segue poi la procedura per spedire il dato di temperature al display LCD wend end. Domanda 6. – Indichi almeno un tipo di circuito per visualizzare le grandezze acquisite ed elaborate. Una soluzione potrebbe essere quella di interfacciare il PIC (master SPI) con un display LCD (slave 2 SPI). La scelta cade sul modello LCD216S, che dispone di 2 righe a 16 caratteri ciascuna. La gestione del display LCD viene effettuata tramite le routine SPI a disposizione del software MIKROBASIC. Il programma principale nel PIC, una volta calcolata la media delle 8 temperature, deve provvedere ad inviarla al display LCD mediante una operazione di write con la procedura write_SPI. Lo schema di riferimento per il collegamento al PIC è quello delle pagine precedenti.