CMPS03 Bussola elettronicaData di pubblicazione: 17-10-2003 | Versione Italiana | (No English Version) Parole chiave: - Domotica - |
La bussola CMPS03
utilizza due sensori magnetici Philips KMZ51 posizionati tra
loro con uno sfasamento di 90 gradi. Un PICmicro rileva l'intensità di
flusso magnetico misurata da ogni sensore e calcola la componente orizzontale
dell'angolo di rotazione del modulo rispetto al campo magnetico terrestre.
E' possibile memorizzare una posizione
iniziale, detta punto di calibrazione, rispetto alla quale il modulo è
in grado di fornire successivamente l'angolo di rotazione relativo con una precisione
di 0.1 gradi.
Il valore di rotazione viene fornito
dal modulo sia come semplice segnale impulsivo di ampiezza proporzionale all'angolo
rilevato (PWM), sia in forma numerica tramite un bus I2C.
Connessioni elettriche
Il modulo dispone di nove pin di connessione
la cui piedinatura viene riportata in figura 1.
Figura 1 - Piedinatura
della bussola CMPS03
Sui pin 1 (+5v) e
9 (0v Ground) dobbiamo fornire la tensione di alimentazione
a 5 volt continui.
Sul pin 4 (PWM) viene
fornito il segnale impulsivo proporzionale all'angolo di rotazione come descritto
più avanti.
I pin 3 (SDA) e 2 (SCL)
sono rispettivamente la linea dati ed il clock del bus I2C con cui comunicare
in digitale con il modulo. Questi pin devono essere collegati a Vcc nel caso
si utilizzi solo il PWM per la lettura dell'angolo di rotazione.
Il pin 5 (No Connect)
non deve essere connesso. Il pin 8 (No Connect) è connesso
alla linea del reset del PICmicro interno e deve rimanere non connesso a meno
di particolari esigenze di progettazione.
Il pin 6 (Calibrate) è
usato per calibrare la bussola. La procedura di calibrazione è descritta
più avanti.
Il pin 7 (50/60Hz)
questo pin serve ad evitare interferenze nel rilevamento del campo magnetico
terrestre dovuto alla rete elettrica. In italia il pin 7 va collegato a 0v.
Nei paesi dove la corrente elettrica viene distribuita a 60Hz il pin 6 può
essere lasciato non connesso.
Lettura della rotazione da segnale
PWM
Sul pin 4 il modulo fornisce un segnale
positivo (da 0 a +5v) in PWM (Pulse Width Modulated = Segnale a modulazione
di ampiezza) la cui ampiezza è proporzionale all'angolo di rotazione
dell'intero modulo rispetto al punto di calibrazione iniziale.
La durata dell'impulso è compresa
in un intervallo che va da 1mS, in corrispondenza di un angolo di rotazione
di 0°, a 36.99mS per una rotazione pari a 359.9°. In pratica per ogni grado
di rotazione la durata dell'impulso positivo sul pin 4 incrementa di 100uS.
La risoluzione massima ottenibile dal modulo è di 0.1° per cui per riuscire
a rilevare l'angolo di rotazione con la stessa precisione dobbiamo poter misurare
la durata dell'impulso con una precisione di almeno 10uS.
Tra un impulso e l'altro il pin 4
rimane a 0 volt per 65mS.
I pin 3 (SDA) e 2 (SCL) devono essere
connessi a +5v nel caso si intenda leggere la rotazione solo tramite segnale
PWM.
Lettura della rotazione da I2C bus
Sui pin 3 (SDA) e 2 (SCL)
è disponibile un bus I2C per la lettura dell'angolo di rotazione del
modulo oltre che di un'altra serie di dati. L'accesso a questi dati avviene
tramite una serie di registri interni a cui è possibile accedere dopo
aver fornito l'indirizzo giusto.
Nella tabella seguente
vengono riportati i registri disponibili.
Registro |
Funzione |
0 |
Revisione software |
1 |
Angolo di rotazione in byte da 0=0°, 255=359.9° |
2,3 |
Angolo di rotazione in word da 0 = 0°, 3599=359.9° |
4,5 |
Riservato - Riporta il valore rilevato dal sensore 1 |
6,7 |
Riservato - Riporta il valore rilevato dal sensore 2 |
8,9 |
Riservato - Riporta il valore di calibrazione 1 |
10,11 |
Riservato - Riporta il valore di calibrazione 2 |
12 |
Non usato |
13 |
Non usato |
14 |
Non usato |
15 |
Comando di calibrazione - Scrivendo 255 in questo registro
viene attivata la calibrazione |
Tavola 1 - Registri accessibili
via I2C bus
In figura 2 viene riportato
il diagramma temporale dei segnali presenti sul bus I2C del modulo.
Figura 2 - Segnali
I2C bus
Il protocollo utilizzato sull'I2C bus
è identico a quello delle popolari EEPROM quali ad esempio la 24C04.
Prima deve essere inviato uno start
bit, l'indirizzo del modulo (0xC0) con il bit read/write a zero, quindi il numero
del registro da leggere.
Di seguito deve viene ripetuto lo
start bit e l'indirizzo del modulo ma con il bit read/write a 1 (0xC1).
Ora è possibile leggere uno
o due byte dai registri a 8 o 16 bit. I registri a 16bit bit forniscono il byte
più significativo per primo.
I pin dell'I2C bus non hanno resistenze
di pull-up interne. La velocità di clock a cui può lavorare il
modulo è pari a 100KHz, comunque possono essere raggiunte anche velocità
superiori (fino a 1MHz) progettando correttamente le connessioni del bus.
Al di sopra dei 160Khz è necessario
inserire dei ritardi di 50uS tra le letture.
I valori di rotazione forniti tramite
segnale PWM o registri I2C vengono aggiornati continuamente indipendentemente
dal fatto che vengano letti o no.
Caratteristiche tecniche
Nella seguente tabella sono riportate
le caratteristiche della bussola magnetica CMPS03
Alimentazione |
5 VCC |
Assorbimento |
20mA |
Risoluzione |
0,1 gradi |
Accuratezza |
3-4 gradi circa dopo la calibrazione |
Uscita
PWM |
Impulsi da 1 a 37 mS con incrementi di 0,1 mS |
Uscita
I2C bus |
0-255 e 0-3599
Clock massimo
(SCL) 1MHz |
Dimensioni |
32x35 mm. Di seguito viene
riportato il piano di foratura del PCB.
|
Tavola 2 - Caratteristiche
della CMPS03
Procedura di calibrazione
La procedura di calibrazione della
bussola CMPS03 serve per fissare un punto di riferimento (normalmente il nord)
relativamente al quale la bussola, una volta calibrata, fornirà l'angolo
di rotazione.
Durante la calibrazione il modulo
deve essere mantenuto in posizione orizzontale con il lato componenti in alto,
lontato da oggetti mettallici e/o magnetici e rivolto verso il nord come mostrato
nella figura seguente.
La calibrazione può essere
effettuata in due modi.
Calibrazione via I2C bus
La calibrazione tramite I2C bus avviene scrivendo il valore 255 (0xFF)
nel registro 15 ad ogni puntamento del
modulo verso i quattro punti cardinali:
nord, est, sud e ovest.
Il registro 15 viene azzerato automaticamente
ad ogni calibrazione. La sequenza delle quattro calibrazioni può essere
qualsiasi, l'importante è che vengano eseguite tutte.
Calibrazione via pin 6
La calibrazione tramite il pin 6 (Calibrate)
avviene mettendo a zero questo pin ad ogni puntamento del modulo verso i quattro
punti cardinali: nord, est, sud e ovest.
Il pin 6 dispone di una resistenza
di pull-up interna per cui è sufficiente connettere un pulsante verso
massa. E' importante rilasciare il pulsante ogni volta che si passa da un punto
all'altro. Terminata la calibrazione in pin 6 può essere lasciato disconnesso.
La sequenza delle quattro calibrazioni
può essere qualsiasi, l'importante è che vengano eseguite tutte.
Esempio di utilizzo della bussola
con il modulo BX24
In questo esempio vedremo come connettere
la bussola CMPS03 al microcontrollore programmabile in Basic BX24 tramite bus
I2C.
Figura 3 - La bussola
CMPS03 conessa al modulo BasicX BX24
Il BX24 è un piccolo
microcontroller programmabile in BasicX, un basic con sintassi identica al popolare
Visual Basic della Microsoft. Vediamo come sia semplice connettere la bussola
CMPS03 a questo modulo tramite la connessione I2C bus come riportato nello schema
elettrico seguente:
Figura 4 - Schema
elettrico
Il pulsante Calibrate
Switch connesso al pin 15 del BX24 serve ad attivare la procedura di calibrazione
della bussola. Il BX24 legge i dati relativi alla rotazione del modulo e li
invia tramite porta RS232 ad un PC per la visualizzazione.
Nella sezione download
in fondo a questo articolo è possibile scaricare il codice BasicX da
programmare sul BX24.
Download
- Sorgente BasicX d'esempio E' il
sorgente in BasicX per realizzare l'applicazione d'esempio riportata in figura
3 e 4. Il valore di rotazione viene letto dalla bussola CMPS03 ed inviato
al PC tramite porta RS232.
Segnala questo articolo:
Parole chiave: - Domotica -
|