Accelerometro a basso costo [Progetto Completo]

Progetto di riferimento per accelerometri

Con questo Reference Design potrete sviluppare applicazioni a microcontrollore con accelerometri, apprendendone i principi base. In questo progetto sono stati utilizzati gli accelerometri MMA1220D e MMA1260D ed il microcontrollore MC68HC908QY4 di Freescale. Il progetto completo, tradotto e commentato in lingua italiana, comprende lo schema elettrico, la lista parti ed il codice sorgente.

Introduzione

Il progetto di riferimento dell’accelerometro a basso costo è stato sviluppato per dimostrare le capacità degli accelerometri MMA1220D e MMA1260D, insieme con il microcontrollore MC68HC908QY4.

La parte hardware è composta dal microcontrollore a 8bit MC68HC908QY4 (ma può essere utilizzato anche il MC68HC908QY1), dai due accelerometri, un’interfaccia utente con Display LCD a caratteri 16×2 e due tasti push, l’alimentazione on-board di 5 Vdc e un’interfaccia seriale RS-232 e MON08 per la comunicazione esterna del microcontrollore e per la programmazione in-application. L’applicazione software è scritta interamente in linguaggio C per Metrowerks CodeWarrior. La memoria Flash da 4K del micro può essere programmata o cancellata direttamente in-circuit utilizzando l’interfaccia hardware MON08.

Microcontrollore MC68HC908QY4 Freescale

La famiglia di microcontrollori Motorola M68HC908 a 8 bit permette ai progettisti di sistemi elettronici, industriali e automotive, di avere a disposizione una maggiore flessibilità nei processi di sviluppo e produzione, e al tempo stesso garantiscono una riduzione dei costi time to market. Questo sviluppo si basa su un microcontrollore MC68HC908QY4, che ha incorporata la tecnologia Flash, ed è quindi riprogrammabile nel circuito (in-circuit), con tempi molto rapidi (32 microsecondi/byte), bit di protezione e altre funzionalità che aiutano l’utente a tenere sotto controllo la proprietà intellettuale contenuta nel codice.
I microcontrollori della famiglia MC68HC908QY permettono ai progettisti di sistemi embedded, di programmare nel ciclo di produzione, fare upgrade in remoto e rispondere in modo rapido ai bisogni variabili dei consumatori e del mercato, con maggiore flessibilità rispetto ai microcontrollori programmabili una sola volta e quelli ROM-based. Un diagramma a blocchi di MC68HC908QY4 è mostrato nella figura

Inoltre, l’integrazione di una varietà di periferiche rendono questi MCU versatili abbastanza da coprire una vasta gamma di sistemi, dalle periferiche dei computer ai componenti elettronici in ambito automotive. Tutti i micocontrollori sono basati su una CPU M68HC08.

Diagramma a blocchi MC68HC908QY4

Vediamo quali sono le funzionalità incluse in MC6868HC908QY4:

– core CPU M68HC08 ad alte prestazioni

– codice oggetto dotato di completa compatibilità upward con la famiglia M68HC05

– tensioni operative a 5V e a 3V

– oscillatore interno trimmabile

– capacità di auto wakeup da Stop

– registro di configurazione per le opzioni di settaggio del microcontrollore, che includono un trip point LVI (Low Voltage Inhibit) – programmazione Flash in-system

– sicurezza Flash

– 4096 byte di memoria Flash on-chip, programmabile in applicazione

– 128 byte di memoria RAM

– TIM (timer interface module) a 16 bit e 2 canali

– convertitore AD da 8bit a quattro canali

– 5 o 13 linee bidirezionali I/Oe un solo input

– funzionalità di protezione del sistema: watchdog COP (Computer operating properly), individuazione di bassa tensione con reset, individuazione Opcode illegale con reset, individuazione di indirizzo illegale con reset

– pin di interruzione asincrono esterno con pullup interno condiviso con un pin di input general-purpose

– pin di reset asincrono Master condiviso con pin I/O general purpose

– pullup interni su IRQ e RST per ridurre i componenti esterni

– registri I/O di memoria mappata

Le funzionalità della CPU08 includono:

– funzioni estese di controllo del loop

– 16 modalità di indirizzo

– registro indice a 16 bit e stack pointer

– trasferimenti dati memoria-memoria

– istruzione di moltiplicazione 8×8 veloce

– istruzione di divisione 16/8 veloce

– istruzioni BCD (binary-code decimal)

– ottimizzazione per le applicazioni del controller

– efficiente supporto per il linguaggio C

Accelerometri MMA1220 e MMA1260

La serie di accelerometri MMA presentano le seguenti funzionalità: condizionamento del segnale, un filtro passa basso a due poli e la compensazione della temperatura. La funzionalità del sistema viene verificata mediante da un auto test. Altre caratteristiche importanti degli accelerometri MMA1220 e MMA1260, includono un auto test di calibrazione, un output lineare, lo status sul controllo di parità EPROM e un design robusto, in grado di reggere shock molto elevati.

Vediamo quali sono le applicazioni tipiche:

– registrazione e monitoraggio delle vibrazioni

– apparati di controllo

– protezione dell’hard disk del computer, oltre che del mouse e del joystick

– dispositivi di input della realtà virtuale

– sistemi e dispositivi di diagnostica nello sport

Guida al setup della scheda dell’accelerometro

Questa scheda opera in due differenti modalità: programmazione e running. La prima permette di scaricare il codice sul microcontrollore, sia usando un programmatore User Monitor che MON08; la seconda, invece, fa eseguire al microcontrollore il codice scaricato.

Riprogrammare la User Flash utilizzando User Monitor

La scheda demo dell’accelerometro è dotata di un codice di test extra nel modulo Flash. Vediamo di seguito una sessione tipo che utilizza CodeWarrior IDE per riprogrammare la Flash e quindi riavviare il progetto con l’accelerometro, utilizzando la modalità User Monitor.

L’unica interfaccia hardware necessaria per eseguire questa operazione è un cavo seriale connesso dalla scheda al PC.

Vediamo come procedere passo dopo passo.

1. Lanciare CodeWarrior IDE (CW08 V2.1 o successive)

2. selezionare Open da File

3. Selezionare la cartella QY4_Acc_Board e aprirla

4. doppio click sul file QY4_Accelerometer.mcp. Si aprirà il progetto CodeWarrior

5. cliccare l’icona Debug (la freccia verde) sia nella barra di menu CodeWarrior, che nella finestra del progetto. Si aprirà la finestra True-Time Simulator e Real-Time Debugger

6. Dal menu PEDebug selezionare Device: M68DEMOQTY

7. Scegliere Mode: In-Circuit Debug/Programming e apparirà la finestra in figura

8. Se compare la finestra in figura, selezionare Class III, serial port, 9600 baud, IGNORE security failure e cliccare Contact target in basso a sinistra

9. tenere premuto il tasto S1 sulla demo board, mentre si passa S2 sulla posizione ON

10. Cliccare OK

11. cliccare YES e apparirà questa finestra

12. cliccare di nuovo YES e si avvierà una sequenza automatica per cancellare il modulo Flash, che poi verrà riprogrammato

13. chiudere lo switch S2

14. attivare S1

15. cliccare OK

16. Dovrebbe riapparire la finestra di Debugger, tasto destro sulla finestra Memory, selezionare Address nel menù, scrivere nell’indirizzo EF82 e cliccare OK. Vengono mostrati in nuovi contenuti della memoria.

17. chiudere la finestra Debugger e CodeWarrior, disattivare la board e disconnettere il cavo.

18. Riavviare la demo board: dovrebbero essere mostrati i cambiamenti di accelerazione quando la board viene spostata sul suo asse Z.

Riprogrammare la Flash

Per riprogrammare l’intero modulo Flash della demo board, sarà necessaria la modalità Monitor. Oltre a CodeWarrior, sono rischiesti i seguenti tool: interfaccia in modalità normal monitor (esterna e on-board), valore trim dell’oscillatore interno e il software. L’interfaccia in modalità Normal Monitor deve essere utilizzata per riprogrammare tutta la memoria Flash. La demo board è dotata di interfaccia MON08 e, per utilizzare la modalità normal monitor, devono essere rimossi i jumper JP3 e JP4.

Connettere i seguenti segnali con i rispettivi pin:

1. messa con pin 2

2. segnale Vtst con pin 6 (PTA2/IRQ)

3. segnale COM con pin 8 (PTA0)

4. segnale MOD1 con pin 10 (PTA4)

5. segnale MOD0 con pin 12 (PTA1)

6. segnale OSC con pin 13 (OSC1)

7. contatto Vddcon pin 15 (Vdd)

Tutti gli altri pin devono restare disconnessi

Riprogrammare la Flash utilizzando un’interfaccia MON08

Questa procedura è, per la maggior parte, necessaria a caricare un programma completamente nuovo nella memoria Flash sulla demo board. Qui vengono usati CodeWarrior e l’interfaccia MON08-Cyclone.

Ecco i passaggi:

1. lanciare CodeWarrior IDE

2. da file, selezione New

3. selezionare HC08 Stationery

4. digitare il nome del progetto. Cliccare OK

5. nella finestra New Project Stationery, cliccare sul + a fianco a QT_QY per espandere la selezione.

6. cliccare sul + a fianco di QY4, cliccare su C e poi OK

7. viene mostrata la finestra di progetto

8. cliccare sul + per espandere la cartella Sources

9. cliccare sulla cartella Sources per evidenziarla

10. per creare nuovi file cliccare sull’icona New Text File

11. salvare il documento

12. per aggiungere i file al progetto cliccare con il tasto destro sulla cartella Sources e selezionare Add Files.

13. togliere la spunta a P&E PEDebug FCS-ICS-ICD e MMDS-MMEVS. Cliccare OK

14. chiudere la finestra Project Messages se appare

15. impostare il valore di trim

16. cliccare sul tab Target e selezionare Cyclone

17. cliccare l’icona Debug nella toolbar di CodeWarrior: verrà lanciato il simulatore True-Time Simulator & Real-Time Debugger

18. Se la finestra Attempting to contact target window non dovesse apparire, selezionare Device: HC908QY4 dal menu PEDebug

19. allo stesso modo, selezionare Mode: In-Circuit Debug/Programming. Il programmer PROG08SZ lancerà la finestra Attempting to contact target.

20. Selezionare Class V in Target Hardware Type e porta seriale, QT/QY, s volts e 4.9152-MHz clock

21. spuntare IGNORE security failure

22. cliccare su Contact target with these setting

23. se appare la finestra di conferma, cliccare YES per ricaricare l’object data.

24. cliccare YES nella finestra Contact target with these setting

25. Quando lo script di programmazione cancella e riprogramma la memoria Flash, appare la finestra CPROG08S7 Programmer. Seguire le istruzioni riportate a schermo e cliccare OK come richiesto.

Nella figura viene mostrato che l’operazione è stata terminata con successo.

26. Chiudere le finestre Debugger e CodeWarrior

27. disattivare la board

28. disconnettere l’interfaccia MON08 dalla board: in questo momento viene caricato un nuovo programma sulla demo board.

Descrizione operativa: introduzione

Il progetto di riferimento dell’accelerometro a basso costo è sviluppato per offrire un modo facile per testare e valutare la funzionalità di un sensore. La board include due accelerometri con sensibilità sull’asse Z, progettati per sentire i cambiamenti di accelerazione e fornire misurazioni proporzionali di tensione, da utilizzare per diverse applicazioni.

Caratteristiche elettriche

Le caratteristiche elettriche sono riportate nella tabella e vanno applicate all’operatività della board ad una temperatura di 25°.

Interfacce utente

L’interfaccia utente della board dell’accelerometro consiste nei componenti specificati nella figura e nella tabella seguenti:

Descrizione funzionale

Il progetto è fornito di un firmware denominato ‘QY4 Accelerometer Code V1′. Questo programma utilizza tutte le funzionalità degli accelerometri MMA1220 e MMA1260.

Per attivare la board, inserire l’adattatore DC nel jack e spostare la switch S3 sulla posizione ON, dopodiché dovrebbe comparire il seguente messaggio sul display:’ACCELEROMETER EVALUATION BOARD’.

Auto test

Una volta scomparso il messaggio di benvenuto, ne apparirà un altro:’ Running SelfTest on Demo Board’. A questo punto la board inizierà a svolgere l’auto test su entrambi gli accelerometri. Questa procedura permette la modifica dell’integrità elettrica e meccanica degli accelerometri. La board inzierà a testare prima MMA1220, per poi passare a MMA1260.

Fate attenzione a non muovere la board durante questa fase, perché ogni minimo spostamento può influenzare il test.

A seconda dei risultati del test, possono apparire due messaggi:

1. ‘Self-Test OK…’

2. ‘Self-Test Failed’

Se, dopo cinque tentativi, l’esito è sempre negativo, allora le risposte potrebbero essere:

1. la board era in movimento durante il test

2. l’accelerometro non funziona correttamente e va cambiato

Modalità normale (Normal Mode)

Dopo la fine dell’auto test, l’applicazione si avvierà in modalità normale; visto che entrambi gli accelerometri hanno sensibilità sull’asse Z, la board deve essere spostata su questo asse per permettere al display di mostrare ogni cambiamento di accelerazione. Il primo accelerometro ad essere letto è MMA1220. Premendo il tasto S2, si possono alternare i due accelerometri e le informazioni a schermo sono rappresentate nella figura seguente:

Per resettare i valori, premere S1.

Sovraccelerazione

Nel caso in cui le letture dell’accelerometro eccedono quelle della sua specifica (+/- 8g per MMA1220 e +-1,5 per MMA1260), viene mostrato un avvertimento di sovraccelerazione (come nella figura sopra, il riquadro C). Per normali letture di accelerazione, apparirà a schermo ‘—‘. Se l’accelerazione è più alta del valore massimo precedentemente descritto, il segnale sarà: ‘!!!’. Per resettare premere S1.

Dopo aver visto il funzionamento analizziamo schema elettrico e firmware

Schema elettrico

Analizzando lo schema elettrico possiamo vedere in alto a destra la sezione di alimentazione con il DC JACK ed il regolatore di tensione a 5V LM7805. Subito sotto il connettore JP1 per il collegamento del display con il potenziometro R8 adibito alla regolazione del contrasto. Sotto ancora la porta seriale RS232 X1 con relativo driver U5 MAX232. Da notare come la comunicazione TxD e RxD sia gestita da un unica porta del microcontrollore PTA0 (pin13) che si occupa sia della trasmissione che della ricezione seriale tramite il circuitino composto da D1, R5 e R6. Lo stesso pin è anche condiviso con il pin MON08 del connettore JP5 che si occupa della programmazione del microcontrollore. La suddetta porta seriale può essere utilizzata come porta seriale di comunicazione RS232 in Run Mode.

Risalendo il circuito troviamo finalmente il microcontrollore MC68HC908QY4 dotato di oscillatore interno.
Per ultimi, ma componenti chiave della scheda, sono i due accelerometri MMA1220D (8g) e MMa1260D (1.5g). Questi sono gestiti direttamente dal micro tramite i pin:
– ST che si occupano dell’inizializzazione dei sensori con il Self Test di calibrazione.
– STATUS che si occupano di segnalare eventuali errori
– VOUT (PTA4/PTA5) che sono le uscite analogiche degli accelerometri e quindi devono essere gestite dalla periferica interna del micro che si occupa appunto di conversione analogico/digitale (ADC).

Notare anche qui la condivisione di questi pin con il connettore di JP5 di programmazione. Questo porta ad un evidente risparmio di pin sovrapponendo appunto funzioni non in conflitto.

Firmware

Il firmware può essere schematizzato in 3 blocchi: setup, interrupt, main

La fase di setup prevede la chiamata alle routines di inizializzazione hardware ed il relativo test. La gestione dei tasti con necessario antitimbalzo è affidata all’interrupt. Dopo il setup si passa al main_loop con la verifica di nuovi valori dagli accelerometri e successivo, eventuale, aggiornamento del display lcd.

Ecco di seguito tutti file del codice sorgente:

• file Include:
MC68HC908QY4.H (include specifico per il microcontrollore utilizzato)
NITRON_MASKS.H (configurazione delle periferiche compresi gli I/O)
TYPES.H (definizioni ed etichette rivolte a semplificare la lettura del firmware)
LCDDRV.H (prototipi delle funzioni relative al display)
ADC.H (prototipi delle funzioni relative all’ad converter //necessario per leggere i valori di tensione degli accelerometri)
TIMER.H (prototipi delle funzioni relative ai timer)
KBI.H (prototipi delle funzioni relative ai tasti)
ACCELEROMETER.H (prototipi delle funzioni relative agli accelerometri)

• Source files:
MC68HC908QY4.C (mappatura degli I/O del micro utilizzato)
VECTORS.C (una specifica vector-table relativa al monitor-mode quindi per tenere sotto controllo alcuni parametri in fase di sviluppo)
MAIN.C (il MAIN, con le configurazioni iniziali ed il main_loop )
LCDDRV.C (routines di controlo dell’lcd)
ADC.C (routines di controllo dell’adc)
TIMER.C (controllo del timer e gestione interrupt relativa)
KBI.C (controllo dei tasti e gestione interrupt relativa)
ACCELEROMETER.C (routines relative agli accelerometri con formazione del dato dall’adc da presentare all’lcd)

La versione originale del progetto completo è scaricabile a questo link

Sono a disposizione, come sempre, nei commenti, per ogni approfondimento tecnico

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

10 Comments

  1. Boris L. 13 novembre 2012
  2. Piero Boccadoro Piero Boccadoro 13 novembre 2012
  3. Emanuele Emanuele 13 novembre 2012
  4. Emanuele Emanuele 13 novembre 2012
  5. Emanuele Emanuele 13 novembre 2012
  6. Emanuele Emanuele 13 novembre 2012
  7. Emanuele Emanuele 13 novembre 2012
  8. Piero Boccadoro Piero Boccadoro 13 novembre 2012
  9. Emanuele Emanuele 14 novembre 2012
  10. Piero Boccadoro Piero Boccadoro 14 novembre 2012

Leave a Reply