Sei sulla pagina 1di 68

l Edit oriale

Elettronica Super Source


Solo da pochi mesi abbiamo acquisito la rivista Firmware, ma con EOS-Book distribuiamo i PDF
da ormai pi di 3 anni. In questo periodo abbiamo raggiunto traguardi importanti, con migliaia di
abbonati.
Ogni tanto per riceviamo qualche lamentela sullusabilit del blog. Una percentuale bassissima
rispetto al totale, zero virgola zero zero percento.

MA giustamente, e ripeto, giustamente, abbiamo il dovere di aiutare anche


l'utente smarrito nel nostro sito.

Del resto abbiamo pi di 6500 articoli pubblicati nei quali facile perdersi. Le richieste che abbiamo
ricevuto sono state tutte prontamente risolte via email, ma ho comunque deciso di fare un articolo
dedicato allusabilit per una migliore fruizione dei contenuti.
Tramite il menu nella barra in alto possibile accedere alla sezione EOS-Book.
Sezione dedicata agli ABBONATI con lelenco di tutti gli articoli PREMIUM che comprende anche
gli EOS-Book pubblicati con i link ai download dei PDF. Nella stessa lista sono presenti anche gli
articoli PLATINUM (archivio Premium).
Di seguito i link diretti agli articoli per i download dei PDF ePub e mobi: EOS-Book (per gli abbonati
Premium mensili o annuali) EOS-Book archivio e Firmware (per gli abbonati Platinum).
Di seguito i link diretti agli articoli di Firmware ed agli articoli Platinum.
E inoltre disponibile anche un sito dedicato per una ulteriore fruibilit dei contenuti:
www.emcelettronica.com.

Emanuele Bonanni

2 - Firmware
SETTEMBRE 2015

ANALOG
4 Automatizzazione del processo di taratura
di un motore a corrente continua
33 Le tecnologie per lenergy harvesting si
diffondono sempre di pi

DESIGN
17 Implementare il GSR (Galvanic Skin Response)
a microcontrollore nei dispositivi indossabili
24 Progetto di una libreria per LCD 162 compatibile
con Arduino M0 PRO
37 EMG superficiale per sport performance
con Arduino M0 Pro
47 Power Line Monitor Open Source
[Progetto Completo]

TOOLS
56 STM32F4 Discovery: Tasti, PWM, ADC

3 - Firmware
ANALOG

Automatizzazione del
processo di taratura
di un motore a
corrente continua
di Giuseppe Silano
03 Novembre 2015

Larticolo evidenzia limportanza del processo di taratura, fondamentale affinch pi


misure di uno stesso oggetto siano confrontabili tra loro. Tale importanza passa at-
traverso lautomatizzazione del processo di taratura di un motore a corrente continua.
Lobiettivo realizzare un tachimetro digitale per misurare la velocit di rotazione
di un motore, utilizzando lo stesso come dinamo tachimetrica, collegato attraverso
un giunto metallico ad un secondo motore controllato utilizzando un full bridge, e la
tecnica PWM. Allo scopo vengono descritti i componenti utilizzati, le fasi di lavoro,
e i due pannelli frontali sviluppati utilizzando il software LabVIEW. Il primo consente
di interfacciarsi alla struttura di controllo, settare i parametri, monitorare la tensione
ai capi del motore, ed accedere ai diagrammi di taratura; il secondo permette ad un
qualsiasi utente di variare il valore del duty cycle e conoscere la velocit di rotazione
corrispondente del motore.

DESCRIZIONE DELLA STRUTTURA Il circuito di controllo (Figura 1.0.2) alimenta-


to mediante il generatore di tensione, Agilent

I
n Figura 1.0.1 mostrato lo schema a blocchi E3631A, settato ad una tensione di 11 V e limi-
rappresentativo della struttura in esame dal tato in corrente ad 1 A.
quale si evince: lalimentatore stabilizzato, il
segnale di PWM, il circuito di controllo, il blocco
motore, e lencoder.

4 - Firmware
ANALOG

Figura 1.0.1: Schema a blocchi della struttura

Lelemento fondamentale di tale circuito il


convertitore DC/DC Full Bridge LMD 18200, il
quale, come si deduce dallo schema circuitale
(Figura 1.0.2), riceve in ingresso sul pin 5 il se-
gnale di PWM, uscita digitale della DAQ NI PCI
6036E (Figura 1.0.5), generato appositamen-
te in LabVIEW. I pin 6 e 7 sono collegati rispet-
tivamente allalimentazione, fornita dal genera-
tore, ed alla massa. Mentre, al fine di ridurre il
ripple sullalimentazione fornita in ingresso al
full bridge, si utilizzato un apposito condensa-
tore elettrolitico del valore di 220 F. Infine, i pin
1 e 11 destinati al bootstrap sono connessi me- Figura 1.0.2: Convertitore DC/DC Full Bridge, LMD18200

diante due condensatori ceramici di 10 nF ai pin


La parte principale dello schema rappresenta-
2 e 10, collegati a loro volta ai capi del motore.
to dal blocco motore (Figura 1.0.1), costituito
da un primo motore comandato attraverso il cir-
cuito di controllo e collegato mediante un giunto
metallico ad un secondo motore (Figura 1.0.3),
che funge da dinamo tachimetrica.

5 - Firmware
ANALOG

Figura 1.0.3: Blocco motore: Gebr Bhler Nachf. Motor


Figura 1.0.4: HP HEDS 9500, package pinouts

Osservata la tensione duscita ai capi del se-


Il funzionamento di tutta la struttura possibi-
condo motore, si vuole misurare la sua velocit le grazie alla scheda DAQ di acquisizione dati,
di rotazione in giri/minuto (rpm, rounds per mi- NI PCI 6036E (Figura 1.0.5) che funge da in-
nute). A tal fine, si dispone di un encoder ottico terfaccia tra il computer e i segnali del mondo
incrementale Hp HEDS 9500 (Figura 1.0.4), os- esterno. Essa include sedici ingressi analogici a
sia, un trasduttore analogico - digitale che, sulla 16 bit e due uscite analogiche a 16 bit, presenta
base della rotazione dellasse del motore, forni- poi otto linee I/O digitali e due counter/timer a
24 bit, a 20MHz.
sce in uscita due segnali elettrici in quadratura
sottoforma di treni dimpulsi rettangolari.
I due segnali sono disponibili in uscita ai pin
channel A e channel B (Figura 1.0.4). Il chan-
nel B la sorgente del contatore ed connesso
al pin DEV 1CTR1SRC del blocco connettore
NI CB 68LP, a sua volta collegato tramite la-
dattore PCI 1200 alla DAQ; invece, il channel
A fornisce la direzione del conteggio ed col-
Figura 1.0.5: NI PCI - 6036E
legato al pin P.07. Inoltre, ai pin 8 e 35, sempre
della morsettiera, sono collegati i due ingressi
In Figura 1.0.6 mostrata la struttura nel suo
dellencoder relativi allalimentazione (VCC) ed
insieme.
alla massa (GND). Infine, il terminale N.C. (not
connected) dellencoder collegato al rispettivo
pin N.C. del blocco connettore.

6 - Firmware
ANALOG
detti controlli e gli output, chiamati
indicatori;
un Block Diagram, ossia il co-
dice dellapplicazione, costituito da
nodi, terminali e connessioni;
unicona di connessione per
poter richiamare il VI da un altro VI
(in questo caso prende il nome di
SubVI).

LabVIEW trova impiego principalmente per


Figura 1.0.6: Struttura completa
lacquisizione e lanalisi dei dati, il controllo di
processi, la generazione di rapporti, o pi in ge-
TARATURA AUTOMATICA IN LABVIEW
nerale, per tutto ci che riguarda lautomazione
Lobiettivo di questo progetto, ripercorrendo
industriale. Ai fini del progetto, sono stati realiz-
quanto gi detto allinterno del paragrafo intro-
zati due diversi VI, uno per il processo di tara-
duttivo, quello di realizzare un tachimetro in
tura automatico, laltro per la realizzazione del
modo che lutente finale, inserendo un valore di
tachimetro.
duty cycle, possa conoscere la corrispettiva ve-
In questo paragrafo, verr analizzato esclusiva-
locit in giri al minuto del motore. La relazione
mente il VI relativo al primo. Vedremo come lo-
costitutiva che lega la tensione ai capi del
peratore selezionando diversi parametri, quali
motore, funzione del duty cycle, alla sua ve-
valore iniziale e passo del duty cycle, frequenza
locit di rotazione stata ottenuta attraverso
della generazione della PWM e canali fisici, dai
un processo di taratura automatico. Il proces-
quali la DAQ Pannello Frontale della taratura
so di taratura, cos come il tachimetro, sono sta-
preleva e fornisce segnali, potr monitorare la
ti realizzati nellambiente di sviluppo LabVIEW.
tensione in uscita ai capi del motore e visualiz-
LabVIEW uno strumento di programmazione
zare le caratteristiche statiche tra cui diagrammi
grafico anzich testuale, sviluppato dalla Natio-
di taratura, isteresi, accuratezza, etc.
nal Instruments (NI). Tale linguaggio, basato sul
modello di programmazione a flusso di dati,
PANNELLO FRONTALE DELLA TARA-
anche detto Linguaggio G. Un programma o
TURA
un sottoprogramma scritto in questo ambiente
In Figura 2.1.1 mostrato il pannello frontale
viene detto VI (Virtual Instruments) ed compo-
relativo alla taratura. A sinistra possibile nota-
sto dai seguenti elementi:
re il pulsante di Start/Stop del programma con
il Pannello Frontale, con il quale si inter-
il relativo LED, i parametri relativi alla PWM ed
faccia lutilizzatore, che contiene gli input,

7 - Firmware
ANALOG
allencoder. BLOCK DIAGRAM DELLA TARATURA
Il Block diagram del VI tara-
tura stato strutturato in due
parti. Nella prima si effettua
lacquisizione dei dati neces-
sari al processo di taratura,
mentre, nella seconda si ef-
fettua lanalisi di regressione
sulla base delle informazioni
acquisite, in modo da ottene-
re i corrispondenti diagrammi
di taratura.
Lacquisizione dei dati viene
gestita attraverso un ciclo for,
in modo che vengano realiz-
Figura 2.1.1: Pannello frontale della taratura zati N cicli di misura in salita ed N cicli di misu-
ra in discesa, dove N inserito dalloperatore
Nella Figura 2.1.1 sono mostrati i campi della attraverso il pannello frontale. Ciascun ciclo di
PWM che loperatore pu settare: il canale, la misura prevede M valori di duty cycle, dove M
frequenza, lidle state (cio lo stato a riposo del dato da:
segnale, alto o basso), il valore iniziale ed il pas-
so del duty cycle. E possibile, inoltre, visualiz-
zare in tempo reale, tramite appositi indicatori, il
valore del duty cycle ed il numero totale di cicli
corrente. Per ogni valore corrente del duty cycle, posto
Nella stessa figura sono mostrati i control- che non si sia verificata una condizione di termi-
li dellencoder da settare, il canale e la risolu- nazione (stop del programma o raggiungimento
zione, gli indicatori corrispondenti al numero di dei valori limiti di duty cycle), si entra nel true di
fronti del segnale di counter (edge count), ed una struttura if else, dove il processo di acqui-
il numero di giri al minuto relativo al valore del sizione delle informazioni gestito attraverso
duty cycle corrente. una flat sequence (Figura 2.2.1).
Infine, presente la TabControl che permette Nel primo frame della flat sequence viene setta-
alloperatore di selezionare la pagina desiderata to il verso della direzione del motore, vengono
tra Measure Voltage, Uncertainty range Rising configurati la PWM, lencoder e la lettura della
and Falling Cycles, Hysteresis e Best Linear Fit. tensione in uscita ai capi del motore. Il secondo

8 - Firmware
ANALOG
frame riguarda, invece, la gestione del transito- Nella Figura 2.2.2 mostrato il Block Diagram
rio. Il terzo frame il nucleo della flat sequence, realativo allelaborazione dei dati, come si pu
in quanto qui che avviene lacquisizione dei vedere vengono calcolati i valori della deviazio-
campioni relativi al segnale di tensione oppor- ne standard delle misure in salita, in discesa, e
tunamente filtrato, e la memorizzazione sia del quelle totali. Successivamente vengono utilizza-
loro valore medio che del valore di velocit di ti appositi blocchetti per ricavarne le funzione di
rotazione del motore in giri al minuto, per il valo- regressione. Allinterno della figura volutamente
re corrente di duty cycle. Nellultimo frame viene non sono state rappresentate le linee di inter-
gestito il clear dei task creati nel primo, inoltre, connessione, con il fine di rendere pi agevole
viene visualizzata la forma donda della tensio- la lettura dellintero schema.
ne.
Al termine dei 2N cicli di misura, in uscita dal
ciclo for, sono disponibili due matrici di dimen-
sione 2NxM, una per la velocit di rotazione (giri
al minuto) e laltra per la tensione (V). In parti-
colare, le prime N righe sono relative ai cicli di
misura in salita, mentre, le restanti N righe sono
relative a quelle in discesa. Inoltre, ciascuna co-
lonna corrisponde ad un determinato valore di
duty cycle tra gli M possibili.

Figura 2.2.1: Struttura if - else con allinterno la flat sequence

9 - Firmware
ANALOG

Figura 2.2.2: Seconda parte Block Diagram, elaborazione dati.

ANALISI DEI DATI di un incremento del valore del duty cycle. In


In questo paragrafo, verranno mostrati i risultati particolare, avendo fissato un determinato valo-
delle prove sperimentali effettuate, verificando il re di duty cycle, sono state raccolte K misure sia
corretto processo di taratura e traendo le rela- di giri al minuto che di tensione. Sulla base di
tive conclusioni sullanalisi di regressione rea- queste popolazioni, calcolate medie e deviazio-
lizzata. I parametri utilizzati sono riassunti nella ni standard, si scelto di utilizzare come valore
tabella seguente (Tabella 2.1): di passo minimo quello che assicurava la non
sovrapposizione degli intervalli
di misura, ossia 0.03.
Il processo di taratura dello
strumento stato svolto in
condizioni ambientali il pi
possibile controllate per limi-
tare la variazione dei dati. Allo
Ai fini della taratura, stato necessario deter- scopo di conoscere la velocit di rotazione del
minare il valore del passo minimo in modo da motore, si variato il duty cycle su tutto il pos-
garantire la variabilit della misura a fronte sibile range di applicazione, dal valore minimo

10 - Firmware
ANALOG
di 0.15 al valore massimo di 0.95, secondo il quadratica e polinomiale. Si scelta come fun-
passo selezionato. zione di interpolazione quella lineare, sulla base
Come si evince dal grafico (Figura 2.3.1) dellan- dellerrore quadratico medio, o residuo, e del
damento della tensione nel tempo, vi sono, per coefficiente di correlazione lineare R2, tenendo
un singolo ciclo di misurazione, 17 diverse ac- anche conto della complessit computazionale
quisizioni del segnale di tensione in corrispon- (Tabella 2.2).
denza degli altrettanti valori di duty cycle appli-
cati con un passo di 0.05. La tensione, inoltre,
stata opportunamente filtrata utilizzando un
filtro FIR a media mobile in modo da eliminare
le fastidiose fluttuazioni.

Di seguito sono mostrati i grafici relativi allana-


lisi di regressione lineare effettuata, per i cicli in
salita, in discesa e quelli totali. In Figura 2.3.2
mostrata la retta di regressione relativa ai cicli
di misura in salita. Ciascun punto di misura ha
come coordinate il valore medio di tensione e
quelli di giri al minuto relativi allo stesso valo-
re di duty cycle. Tutti i punti di misura ricadono
allinterno delle fasce dincertezza 2.
Figura 2.3.1: Caratteristica tempo - tensione

Fatta lipotesi di gaussianit, con-


siderando dapprima solo i cicli in
salita, poi solo quelli in discesa ed
infine quelli totali, stata effettuata
loperazione di media aritmetica sul-
le misure ottenute di giri al minuto e
di tensione. Figura 2.3.2: Regressione lineare dei cicli in salita
La curva che approssima in modo adeguato i
valori medi delle misure effettuate, in corrispon- In Figura 2.3.3, analogamente a quella prece-
denza di ogni valore di duty cycle applicato, dente, mostrata la retta di regressione relativa
la curva di taratura. Tra le tipologie di regres- ai cicli di misura in discesa, con le relative fasce
sione sono state valutate quella di tipo lineare, dincertezza.

11 - Firmware
ANALOG

Figura 2.3.3: Regressione lineare dei cicli in discesa

In Figura 2.3.4 sono mostrate, per ogni valore di


duty cycle applicato, le differenze in valore as-
soluto tra i corrispondenti valori di giri al minuto
in salita e in discesa per il relativo valore di ten-
sione. Il massimo valore tra queste differenze
rappresenta listeresi, ed pari a 15.293 giri al
minuto.

Figura 2.3.5: Tab Control, Hysteresis

Infine, in Figura 2.3.6 mo-


strata la retta di regressione
relativa a tutti i cicli di misu-
ra effettuati, sia in salita che
in discesa. Ancora una vol-
ta i punti di misura ricadono
Figura 2.3.4: Isteresi: cicli in salita ed in discesa
allinterno delle fasce dincertezza.

Come si evince dalla Figura


2.3.5, il LED relativo alliste-
resi spento (rosso), infatti,
il valore dellisteresi calcola-
to inferiore al valore mas-
simo della deviazione stan-
dard (rpm) che invece pari
a 80.018.
Figura 2.3.6: Regressione lineare sul numero totale di cicli

12 - Firmware
ANALOG
Il grafico in Figura 2.3.7 conferma la scelta di IL TACHIMETRO DIGITALE
utilizzare una curva di regressione lineare anzi- Terminato il processo di taratura, si pu passa-
ch quadratica, in quanto i loro andamenti sono re alla fase finale del progetto: la realizzazione
simili. del tachimetro. Analizzeremo, ora, dapprima il
Block diagram ed in se-
guito il Pannello frontale
del VI, attraverso il qua-
le un qualunque ope-
ratore, settando il solo
valore del duty cycle,
in grado di conoscere la
velocit di rotazione in
Figura 2.3.7: Confronto tra curve di regressione sul giri al minuto del motore.
numero totale di cicli

BLOCK DIAGRAM DEL TACHIMETRO


Al fine di testare la precisione delle misure ef- La parte del Block Diagram del tachimetro rela-
fettuate, il processo di taratura stato ripetuto tiva alla configurazione della PWM, alla misura
pi volte in condizioni di ripetibilit, quali stessa della tensione ed alla direzione del motore,
temperatura di funzionamento (26 C), stesso analoga a quella della taratura; in aggiunta, vi
piano di appoggio della strumentazione, assen- la lettura da file dei parametri (i risultati del pro-
za di urti accidentali, ecc. La Tabella 2.3 mostra cesso di taratura sono stati salvati in un file .txt),
come i parametri di ciascuna retta di regressio- il coefficiente angolare e lintercetta, della retta
ne ottenuti in queste diverse prove sperimentali di regressione lineare ottenuta nel VI taratura
sono simili tra loro. considerando tutti i cicli di misura, sia in salita
che in discesa.
Loperazione di lettura stata realizzata attra-
verso il blocchetto Read from Spreedsheet Fi-
gura 3.1.1

Figura 3.1.1: Lettura da file

Il funzionamento effettivo del tachimetro con-

13 - Firmware
ANALOG
siste in un ciclo while (Figura 3.1.2), nel qua- tazione del motore (rpm), corrispondente al duty
le, avviene la lettura del valore del duty cycle cycle corrente.
e lacquisizione di 500 campioni del segnale di La condizione di uscita dal ciclo dettata dalla-
tensione ai capi del motore. zionamento del pulsante di STOP da parte
delloperatore. Infine, vi la
parte del Block Diagram re-
lativa alla chiusura dei task.

PANNELLO FRONTALE
DEL TACHIMETRO
Nella Figura 3.2.1 mostra-
to il Pannello frontale del ta-
chimetro destinato allutente
finale. A sinistra vi il knob,
con il quale lutente pu se-
Figura 3.1.2: Ciclo while del tachimetro lezionare il valore del duty cycle in un range
compreso tra 0.15 e 0.95, con un passo di 0.05,
Lutilizzo del blocchetto DAQmx Channel pro- e leggerlo nellapposito indicatore. Vi poi il pul-
perty node, avente la propriet change to wri- sante di STOP. A destra vi leffettivo tachime-
te, consente di osservare istantaneamente gli tro che mostra allutente, attraverso il posizio-
effetti della variazione del valore del duty cycle namento di una lancetta, il valore della velocit
senza la necessit di effettuare la chiusura di rotazione in giri al minuto per quel valore di
del task corrente per poter generare la nuova duty cycle selezionato. Allo stesso tempo luten-
PWM. I campioni di tensione letti vengono poi te pu conoscere anche il valore medio della
opportunamente filtrati, attraverso il filtro FIR a tensione, ai capi del motore, per quella velocit.
media mobile (lo stesso utilizzato nel proces-
so di taratura). Sui campioni filtrati, eliminati
quelli sporchi, viene effettuata loperazione di
media aritmetica. Il valore di tensione x cos
ottenuto, insieme a quelli di coefficiente an-
golare m ed intercetta q, letti precedentemen-
te (Figura 3.1.1), entrano nel blocco Formula-
Node in cui implementata lequazione della
retta y = mx + q. In uscita dal blocco si rende
disponibile allutente il valore della velocit di ro- Figura 3.2.1: Pannello frontale del Tachimetro

14 - Firmware
ANALOG
CONCLUSIONI prima fase stabilisce una relazione tra i valori di
Larticolo ha consentito di illustrare, passando una grandezza, con le rispettive incertezze di
attraverso la realizzazione di un progetto, quan- misura, forniti da campioni di misura, e le cor-
to sia importante il processo di taratura, e della rispondenti indicazioni, comprensive delle in-
sua automatizzazione (loperatore potrebbe in- certezze di misura associate, e in una seconda
trodurre errori di misura), le accortezze da te- fase usa queste informazioni per stabilire una
nere a mente durante la sua realizzazione, e relazione che consente di ottenere un risulta-
quanto sia fondamentale la conoscenza di mi- to di misura a partire da unindicazione. Lesito
sure elettroniche. Infatti, unerrata valutazione di una taratura pu essere espresso mediante
dei dati a disposizione pu comportare unerrato una dichiarazione, una funzione di taratura, un
processo di taratura, conseguentemente valori diagramma di taratura, una curva di taratura, o
di giri/minuto (nel caso in esame) che possono una tabella di taratura. In alcuni casi esso pu
provare danni allinterno di un processo indu- consistere in un semplice fattore additivo o mol-
striale, cosa non da poco per chi vuole fare di tiplicativo, utilizzabile per la correzione, accom-
questa passione una professione. pagnato dallincertezza di misura associata.

Precisione: Definizione di Precisione di misura


NOTE dal VIM: grado di concordanza tra indicazioni o
Bootstrap: Quando il carico collegato tra valori misurati ottenuti da un certo numero di mi-
source e massa (high side), applicando il se- surazioni ripetute dello stesso oggetto o di og-
gnale di pilotaggio, il mosfet non entra in condu- getti similari, eseguite in condizioni specificate.
zione, in quanto, il source non a massa, bens
segue la tensione sul carico. Per assicurare la
conduzione di tale mosfet si rende, pertanto, ALLEGATI
necessario un apposito circuito di bootstrap che Pannello_Utente_Project with flat sequence e
innalza la tensione sulla gate del transistor ad Project with flat sequence
un valore superiore a quello di alimentazione.

Taratura: Definizione di taratura dal VIM (Voca-


bolario Internazionale di Metrologia): operazio-
ne eseguita in condizioni specificate, che in una

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/automatizzazione-del-processo-di-taratura-di-un-motore-a-cor-
rente-continua
15 - Firmware
DESI GN

Implementare il GSR
(Galvanic Skin Response)
a microcontrollore nei
dispositivi indossabili
di Maurizio
05 Novembre 2015

La risposta galvanica della pelle (GSR) definita come un cambiamento delle pro-
priet elettriche in seguito ad eventi quali lo stress o sudorazione da esercizi fisici. Le
misurazione GSR rilevano limpedenza della pelle umana e la temperatura corporea
in situazioni diverse e possono essere utilizzate nel trattamento medico, benessere e
nella rivelazione del falso (macchina della verit). GSR anche conosciuto come EDA
(Electrodermal Activity) che la propriet del corpo umano che provoca una variazio-
ne continua delle caratteristiche elettriche della pelle. Un sistema di questo tipo pu
essere implementato con un sistema mobile, al fine di provvedere al monitoring in
real time delle condizioni di salute attraverso linterfaccia bluetooth a basso consumo
energetico (BLE). In questo articolo analizzeremo un design con il microcontrollore
MAX32600 della Maxim evidenziando i suoi utilizzi in vari campi applicativi.

1. INTRODUZIONE tali e dallo stato psicologico dellindividuo. La

L
a risposta galvanica della pelle (GSR) una pelle umana un buon conduttore di elettrici-
variazione in termini di energia cinetica tra- t e quando una debole corrente elettrica vie-
smessa dai nervi e dal sudore della pelle, de- ne erogata alla pelle, possono essere misurati
finita come una delle diverse risposte elettro- cambiamenti nella conduzione. La variabile che
dermiche (EDR) relative a cambiamenti nelle si misura la resistenza della pelle o il suo reci-
propriet elettriche della pelle di una persona, proco, la conduttanza cutanea. Secondo la leg-
causati da uninterazione tra gli eventi ambien- ge di Ohm, la resistenza della pelle (R) uguale

17 - Firmware
DESI GN
alla tensione (V) applicata tra due elettrodi sulla differenza tra il livello di conduttanza della pel-
pelle divisa per la corrente che la attraversa (I). le al momento della risposta, e quella al picco
La legge pu essere espressa come R = V / della risposta stessa. La latenza il tempo che
I. Un amplificatore GSR applica una tensione intercorre tra lo stimolo e linizio del GSR; valori
costante sulla pelle attraverso dei mini-elettrodi. di latenza dovrebbe essere di circa tre secondi
La tensione cos piccola che non pu esse- o meno. Un altro parametro il tempo di salita,
re percepita. La corrente che fluisce attraverso ovvero il tempo tra linizio dellevento GSR e il
la pelle pu essere rilevata e visualizzata per picco della risposta; valori tipici per il tempo di
mezzo di eventuali display. Poich la tensione salita sono da uno a tre secondi.
costante applicata alla pelle nota e il flusso
di corrente pu essere misurato, la conduttanza 2. IL SISTEMA ELETTRODERMICO
della pelle, espressa in microSiemens (S), pu La pelle essenzialmente formata da tre stra-
essere determinata dalla legge di ohm. La con- ti (epidermide, derma, subdermis) che aiutano
duttanza caratterizzata da due tipi: tonica e nella manutenzione del bilancio idrico e nella re-
fasica. La conduttanza cutanea tonica il livello golazione della temperatura del corpo. Queste
di base in assenza di qualsiasi particolare even- funzioni sono svolte da vasi sanguigni e ghian-
to ambientale, ed generalmente indicato come dole sudoripare eccrine. I vasi sanguigni si re-
Skin Conductance Level (SCL). La conduttanza stringono e si dilatano per fornire il flusso
cutanea fasica, invece, cambia in funzione de- di sangue sulla superficie del corpo per la
gli eventi. Eventuali stimoli discreti ambientali conservazione o rilascio di calore. Le ghian-
(suoni, odori, ecc) evocheranno cambiamenti dole eccrine raffreddano il corpo depositando
connessi alla conduttanza cutanea. Questi sono umidit sulla superficie della pelle attraverso dei
generalmente indicati come risposte di condut- condotti. Le ghiandole, che si trovano nelle sub-
tanza cutanea (SCR). Le variazioni di SCR pos- dermis su gran parte del corpo, sono circa dieci
sono durare circa 10-20 secondi e sono spesso volte pi dense sulla superficie palmare delle
denominate GSR. mani e delle piante dei piedi. Il modello pi am-
La frequenza tipica di GSR spontanei com- piamente accettato di conduttanza cutanea
preso tra uno e tre per minuto. Alcune per- quello proposto da Edelberg nel 1972. Nel mo-
sone sono molto reattive con notevole genera- dello di Edelberg, i condotti di sudore si compor-
zione spontanea di GSR, mentre altri hanno un tano come resistenze variabili; la loro resistenza
livello tonico relativamente costante di condut- diminuisce (aumenta conduttanza) in quanto si
tanza cutanea, senza segnali GSR spontanei. I riempiono di sudore. Lampiezza della variazio-
parametri che possono essere definiti per la mi- ne della conduttanza dipende dalla quantit di
sura sono: lampiezza, in microSiemens (S), sudore consegnata ai condotti e dal numero di
e la latenza. Lampiezza di un evento GSR la ghiandole sudoripare che sono state attivate.

18 - Firmware
DESI GN
Lattivazione della ghiandola di sudore un La zona di misura interessata (la pelle del
semplice meccanismo di sopravvivenza fi- polso) linput della impedenza di un ampli-
siologica che di interesse per la psicologia ficatore invertente opportunamente designato
perch una risposta neurale. Questa attiva- con gli operazionali disponibili nel microcontrol-
zione controllata dal cervello attraverso la divi- lore. Un segnale sinusoidale stimola la risposta
sione simpatica del sistema nervoso autonomo. dellimpedenza ad una frequenza desiderata Fc
che viene rilevata in termini di ampiezza. Espri-
3. IL DESIGN miamo la tensione di prova come:
Lelemento principale il microcontrollore
MAX32600 che integra le periferiche front-end x (t) = cos (2 Fc t)
analogiche per le misure di impedenza, in par-
ticolare un ADC a 16 bit con un MUX in ingres- Il segnale in uscita dellADC pu essere espres-
so e quattro DAC da 12 bit e 8 bit. La figura 1 so mediante la seguente relazione:
visualizza un esempio di schema a blocchi per
limplementazione di un rivelatore GSR a basso y (t) = VL cos (2 Fc t + )
costo, flessibile per lo sviluppo di dispositivi in-
dossabili. Lo schema a blocchi di misura dellim- scalata e shiftata di fase rispetto allinput. Per
pedenza riportato in figura 2. estrarre la fase del segnale ricevuto, neces-
saria una rivelazione coerente.
I sistemi coerenti hanno bisogno
delle informazioni di fase e usa-
no filtri adattati per rilevare e de-
cidere quali dati sono stati inviati.
Considerando che:

Figura 1: Schema a blocchi per limplementazione di un TS = 1/(4 Fc)


rivelatore GSR

Figura 2: Misura dellImpedenza

19 - Firmware
DESI GN
Allora:

y(k) = VL cos(/2 k + )

con k = {0, 1, 2, ... N - 1} ed N = campioni ADC

Utilizzando le formule delle trigonometria pos-


siamo esprimere la relazione sopra nel seguen-
te modo:
La fase e ampiezza possono essere espressi
nelle seguenti equazioni:
y(k) = VL[cos, cos(/2 + ), cos( + ),
cos(3/2 + ), ...]
Fase = = atan2(Q,I)
y(k) = VL[cos, - sin, - cos, sin, ...] Ampiezza= VL = (I2 + Q2)

Ricordando che: Il carico di impedenza complessa (Z (s)) mi-


surata con un carico di calibrazione (Ycal (s)) e
VLej = VLcos() + jVLsin() = I + JQ con il campione di prova (Ysys (s)) ad una fre-
quenza di interesse. Sulla base del rapporto tra
le risposte e le due resistenze esterne Ri e Rcal,
Ci calcoliamo i fattori I e Q analizzando i primi
calcolata limpendenza di prova:
due campioni dellADC:

(Ri + Z (s)) / Rcal = Ycal (s) / Ysys (s)


I = VLcos() = y(0)
Q = VLsin() = y(1) Lampiezza e la fase impedenza di carico pos-
sono essere espresse nel seguente modo:
Splittiamo i campioni (N) ADC in pari e dispari.
Poich stiamo elaborando una singola frequen- Z (s)ampiezza = Rcal (Ycal (s)ampiezza / Ysys (s)
za, possiamo mediare i valori per aumentare ampiezza) - Ri

il rapporto segnale rumore. E quindi possiamo


Z (s)fase = Ycal (s)fase - Ysys (s)fase
esprimere I e Q nel seguente modo andando ad
osservare lo schema di figura 2:
Il progetto prevede una batteria ricaricabile agli
ioni di litio con una tensione nominale di 3,6 V
e capacit massima di 45mAH. La batteria re-

20 - Firmware
DESI GN
golata dal LDO MAX8880 che offre una combi- alle piccole variazioni di temperatura. I parame-
nazione ottimale di bassa tensione di dropout, tri Steinhart-Hart del sensore sono i seguenti:
bassa corrente di riposo, rapida risposta ai tran-
sienti, basso rumore e buona reiezione ai ripple. a = 824.970719, b = 222.454876, c =
In generale un LDO costituito da un riferi- 0,095600.
mento di tensione, un amplificatore di errore
e un partitore di tensione di retroazione. La Sulla base dellapprossimazione al terzo ordine
sua tensione di gate del transistor che fornisce dellequazione Steinhart-Hart, la temperatura
la corrente in uscita controllato dallamplifica- espressa in kelvin data da
tore che confronta la tensione di riferimento con
la tensione di retroazione e amplifica la differen- b ln (RNTC) + c (ln (RNTC)) 3
T = 1 / (a +
za in modo da ridurre la tensione di errore. Se la
tensione di reazione inferiore alla tensione di Dove RNTC la resistenza del sensore misu-
riferimento, il gate del transistore si comporta op- rata dallADC. Attraverso il controller Bluetooth
portunamente per consentire una maggiore cor- Low Energy EM9301 della EM Microelectronics,
rente con un aumento della tensione di uscita. il circuito in grado di funzionare attraverso un
Viceversa, se la tensione di retroazione supe- dispositivo mobile (App. Android) per controllare
riore alla tensione di riferimento. Inoltre, gli LDO e comandare le operazioni di lettura. LEM9301
richiedono condensatori di ingresso e uscita per dotato di un Host Controller Interface (HCI)
filtrare transitori di carico di rumore e di control- e una potente gestione dellalimentazione.
lo. La batteria pu essere comodamente ca- Questa caratteristica ottenuta grazie allele-
ricata da una connessione USB di un PC at- vata efficienza di un convertitore up DC / DC
traverso il controller MAX8814 che integra un che fornisce la tensione richiesta per il circuito.
MOSFET ed elimina il diodo Schottky-reverse Bluetooth Low Energy (BLE), a volte indicato
di blocco per una semplice soluzione offrendo come Bluetooth intelligenti, un sottoinsieme
una rapida carica con una corrente impostata a del classico Bluetooth, introdotto come parte
32 mA. Un sensore di temperatura utilizzato della specifica Bluetooth 4.0. Mentre vi una
per valutare lescursione termica della pelle, il certa sovrapposizione con il classico Bluetooth,
microcontrollore dispone di un sensore interno BLE ha in realt una stirpe completamente di-
e di pin per la disposizione di uno esterno. Nel versa ed stato avviato da Nokia come un pro-
design utilizzato un termistore NTC con resi- getto in-house chiamata Wibree prima di esse-
stenza nominale di 30.15 k a 37 C. I Termi- re adottato dalla Bluetooth SIG. Ci che rende
stori sono elementi temperatura di rilevamento BLE interessante e applicabile in molti progetti
di materiale semiconduttore adatti a visualizza- la semplice modalit di progettare sistemi che
re grandi variazioni di resistenza in proporzione possono interloquiare con qualsiasi piattaforma

21 - Firmware
DESI GN
mobile moderna (telefoni iOS, Android, Win-
dows, ecc .).

4. FIRMWARE
Il firmware del progetto abbastanza semplice,
basato essenzialmente su un modello interrupt-
driven. Ogni volta che un trasferimento di dati
da o verso lhardware deve essere ritardato per
qualsiasi motivo, necessario attuare dei buf-
fering. I Buffer di dati aiutano a staccare la tra-
smissione e ricezione dati dalla scrittura e lettu-
ra di sistema. Un buon meccanismo di buffer ci
Figura 3: Diagramma a blocchi del firmware
conduce verso il modello interrupt-driven I/O,
in cui un buffer di ingresso viene riempito duran-
te un interrupt e viene svuotato da processi che
leggono il dispositivo; un buffer di uscita viene
riempito da processi che scrivono al dispositivo
e viene svuotato per mezzo di interrupt. In par-
ticolare, dopo aver definito le impostazioni quali
alimentazione e clock, il dispositivo si connette
con il primo mobile BLE che trova nella zona,
passando nella modalit di sospensione qualo-
ra nessun dispositivo presente (Figura 3). Ap-
pena la connessione stata stabilita, il circuito
misura limpedenza ogni secondo e trasferisce
i dati allhost (Figura 4). Il firmware sviluppa-
to utilizzando lARM Cortex Toolchain per il Figura 4: Diagramma a blocchi del Interrupt Service
Routine (ISR)
pacchetto di microcontrollori medici Maxim
Integrated.
5. CONCLUSIONI
Il progetto qui descritto (MAXREFDES73#) di-

22 - Firmware
DESI GN
sponibile dalla Maxim Integrated, si rivolge a
qualsiasi sviluppatore che abbia interesse a
sviluppare dispositivi di misura di impedenza e
temperatura con il microcontrollore MAX32600.
EDA ampiamente utilizzato nella ricerca psi-
cologica a causa del suo basso costo e lalta
utilit. Molti dispositivi di terapia di biofeedback
utilizzano EDA come indicatori della risposta
allo stress con lobiettivo di aiutare lutente a
controllare lansia. Spesso, il monitoraggio
EDA combinato con la registrazione della fre-
quenza cardiaca, la frequenza respiratoria e la
pressione sanguigna. Inoltre, la misurazione
EDA un componente dei moderni dispositivi
utilizzati come macchine della verit (poligrafi).
Figura 5: Screenshot della App android della Maxim per
La conducibilit della nostra pelle cambia a se- il progetto MAXREFDES73#
conda degli effetti di emozione inconsci come
il rumore improvviso, lo stress, il tatto, dolore La misura della conducibilit della pelle una
o vista. I dispositivi GSR consentono di in- sfida, perch i progettisti hanno bisogno di ma-
nipolare diversi chip discreti e software di cali-
dividuare emozioni forti dal semplice colle-
brazione prima di completare il design del sen-
gamento di sensori sulla nostra pelle. Sem-
sore. Il MAXREFDES73# integra una serie di
plicemente misurando la conduttanza cutanea
periferiche e una facile App da usare in An-
(che controllata da una parte speciale del no-
droid (figura 5). E disponibile sotto forma di un
stro cervello) possiamo individuare e rilevare le braccialetto ed include misure di superficie della
emozioni umane e lo stress...non vi pare molto temperatura, le comunicazioni Bluetooth e una
interessante ? batteria ricaricabile che dura fino a una settima-
na con una singola carica.

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/implementare-il-gsr-galvanic-skin-response-a-microcontrollore-
nei-dispositivi-indossabili
23 - Firmware
DESI GN

Progetto di una libreria per


LCD 162 compatibile
con Arduino M0 PRO di Mario Mottula
10 Novembre 2015

Questo articolo stato scritto con lo scopo di provare a dare le nozioni fondamen-
tali per la creazione di una libreria Arduino, in particolare analizzeremo una libreria
da me creata e non ancora esistente che permette di gestire un display LCD 16x2
con controller Hitachi HD44780 compatibile. Le librerie vengono pi volte usate in
file sorgente, ed hanno lo scopo di semplificare di molto il listato di un programma
rendendolo pi snello e comprensibile, queste sono costituite da funzioni o strutture
di dati ed hanno la caratteristica fondamentale di essere riutilizzabili evitando cos
al programmatore di riscrivere il codice ogni qualvolta si ha la necessit di eseguire
quelle determinate operazioni.

L
idea di sviluppare la libreria nata da una visibile a pagina 21 del datasheet scaricabile
mia esigenza di progettazione, visto che dal link seguente Datasheet dv-12765.
quella messa a disposizione dallIDE di Ar- Resistenza 220 Ohm 1/4 Watt per imposta-
duino non era ancora stata resa compatibile con zione contrasto standard LCD tra pin 3 e
il controller di Arduino M0 Pro, avendo la neces- GND
sit di controllare un display di questo tipo ho
deciso di crearla da zero. PREPARAZIONE DI UNA NUOVA
LIBRERIA
Componenti utilizzati Una libreria per Arduino costituita da due file
Board Arduino M0 Pro fondamentali che sono un file .h ed un file .cpp,
LCD Data Vision DV-16275 compatibile con ed un file opzionale che il keywords.txt.
i segnali di dato a 3.3 Volt provenienti dalla Il file .h o header file contiene la dichiarazione
M0 Pro (da notare che il display va comun- della classe, tutte le funzioni usate nella stes-
que alimentato a 5 Volt, ma riconosce perfet- sa e le definizioni delle variabili necessarie, il
tamente i segnali dingresso a 3.3 Volt come file .cpp contiene il codice vero e proprio di ogni

24 - Firmware
DESI GN
funzione , mentre il file keywords.txt, che ripeto libreria sviluppata che vengono messi a dispo-
opzionale, contiene le parole chiave e permet- sizone da chi la progetta, per facilitare la com-
te di visualizzare le chiamate alla libreria di co- prensione dutilizzo della stessa.
lore diverso ogni qualvolta si invoca una singola
funzione nello sketch. FILE LCD_M0.H
Di fondamentale importanza che sia la car- Entriamo a questo punto in merito al file LCD_
tella che il file .h ed il file .ccp abbiano lo stes- m0.h e vediamo come strutturato (Fig.2).
so nome, come vedremo di seguito, quindi do-
vremo innanzitutto creare una cartella con un
nome che descriva intuitivamente per questione
di comodit il nome della libreria, che conten-
ga sia il file .h che il file .cpp ed eventualmente
anche il keyword.txt tutti con lo stesso nome.
Nel mio caso ho nominato libreria LCD_m0
e di conseguenza, come accennato preceden-
temente, ho creato una cartella con lo stesso
nome e con allinterno i tre file di cui abbiamo
discusso prima, ottenendo il risultato seguente
(Fig.1):

Fig.2

Come si pu vedere ogni file header che de-


finisce una classe, delimitato dalle direttive
#ifndef (Con al seguito il nome della libreria e
lidentificativo _h) e #endif che devono sempre
essere presenti.
Va inoltre usato sempre il #define seguito dal
Fig.1 nome della libreria, in questo caso LCD_m0_h,
che definisce la costante LCD_m0_h.
Nella cartella si nota una sottocartella con nome Detto questo vediamo cosa bisogna inserire
examples, della quale parleremo in seguito e allinterno della classe, che chiameremo sem-
che sostanzialmente contiene gli esempi della pre con il nome assegnato alla libreria, in que-

25 - Firmware
DESI GN
sto caso LCD_m0. La funzione Scrivi_Car_PC(char c), permette
La dichiarazione public: In questa zona del linserimento di un singolo carattere nella posi-
programma si inseriranno tutte le funzioni della zione corrente del display, ovvero alla prima po-
libreria che ovviamente dovranno essere rese sizione successiva a quella in cui si fermata la
pubbliche dalla classe, per poter essere richia- data ram del display.
mate in qualunque punto dellapplicazione. La funzione Scrivi_Car_PS(char c, int rig, int
Aprendo ad esempio il file LCD_m0.h da me pos) , permette di scrivere un singolo carattere
creato, si pu notare come in public vengono in una posizione specifica del display, passando
definite le funzioni : alla stessa il numero di riga e la posizione co-
void Inizializza_LCD(int pin_RS,int pin_ lonna alla quale si vuole scrivere.
EN,int pin_D4,int pin_D5,int pin_D6,int pin_ La funzione Scrivi_Testo(String stringa, int
D7); rig), permette invece di scrivere del testo rac-
void Cursore_ON(); chiuso tra virgolette nella riga specificata.
void Cursore_OFF(); Ed in fine la funzione void Pulisci() , la quale
void Scrivi_Car_PC(char c); ha il compito di svuotare la memoria interna del
void Scrivi_Car_PS(char c, int rig, int pos); display e quindi di pulire le due righe.
void Scrivi_Testo(String stringa, int rig); Da notare che tutte queste funzioni sono di tipo
void Pulisci(); void, ovvero non restituiscono alcun valore al
programma chiamante, quindi eseguono dei
N.B:Ho voluto appositamente riportare le fun- comandi specifici e ma non invieranno nessun
zioni pi interessanti, tralasciando quelle ad uso risultato verso il programma principale.
interno della libreria. Di queste funzioni cercher di dare illustrazio-
ne pi approfondita nel seguito, tentando di far
La prima funzione Inizializza_LCD(int pin_ comprendere in modo semplice qual il mecca-
RS,int pin_EN,int pin_D4,int pin_D5,int pin_ nismo che permette di interfacciare il software
D6,int pin_D7), come si intuisce dallo stesso della libreria allhardware del display studiando
nome, quella di inizializzazione ovvero quella per sommi capi il datasheet dello stesso.
che permette di avviare il controller del display La dichiarazione private :in questa zona del
specificando al momento della chiamata, come programma si inseriscono invece tutte le di-
vedremo in seguito, i pin di RS di Enable ed i 4 chiarazioni di variabili che verranno usate nel-
bit di dato. la libreria. Queste potranno essere visibili solo
Subito dopo troviamo le funzioni Cursore_ON() allinterno di questultima e non utilizzabili allin-
e Cursore_OFF() che permettono rispettiva- terno del programma principale perch appunto
mente laccensione e lo spegnimento del curso- dichiarate come private.
re al disotto del carattere. Nel nostro caso, ne elenco solo alcune, si pos-

26 - Firmware
DESI GN
sono notare le variabili di dato D7,D6,D5,D4 di li a livello altro di 3.3 Volt, leggendo dei dati
tipo int, le variabili carattere e c di tipo char etc provenienti dal display senza un traslatore di
etc queste come vedremo in seguito sono uti- livello finirei per danneggiare microcontrollore
lizzate tutte nel file .cpp. ATSAMD21G18 a bordo.

FILE LCD_M0.CPP Dovendo invece solo scrivere dei dati verso il


Il file .cpp quello a mio avviso pi importan- display a 3.3 Volt, questi saranno correttamente
te della libreria, ovvero quello che permette di riconosciuti dal dispositivo.
dare vita alle funzioni essenziali che permettono Tornando alla funzione vi invito a notare come
il dialogo tra software ed hardware. prima di questultima si inserisce la scritta
LCD_m0::, che indica lappartenenza della
Nel nostro caso questo file denominato LCD_ funzione Inizializza_LCD alla libreria LCD_m0.
m0.cpp. Ogniqualvolta quindi si crea un file .cpp da te-
nere presente questa caratteristica, ovvero tutte
Nella descrizione delle funzioni pi importanti di le funzioni scritte nel file dovranno essere pre-
questa libreria, impareremo anche come come cedute dalla sintassi:
di fondamentale importanza la consultazione
del datasheet del componente da interfacciare, NomeDellaLibreria::NomeDellaFunzione
in modo da rispettare il pi possibile i parametri
descritti dalla casa produttrice. Vediamo dunque che questa prende in ingresso
Aprendo tramite un editor di testo il file LCD_ 6 variabili intere che rappresentano i PIN che
mo.cpp ci imbatteremo nella funzione fondamen- assegneremo rispettivamente al RS allEnable
tale della libreria ovvero LCD_m0::Inizializza_ ed ai bit di dato che vanno da D4 a D7.
LCD(int pin_RS, int pin_EN,int pin_D4,int La libreria stata resa pi generica possibile e
pin_D5, int pin_D6, int pin_D7). la scelta dei pin del micro dedicati alla comuni-
Da notare che il pin R/W non utilizzato ed cazione con il display praticamente arbitraria
posto a GND inquanto nel nostro caso provve- compatibilmente con lhardware in uso.
deremo solo ed esclusivamente alla scrittura Nel momento in cui si richiama la funzione di
verso il display e mai alla lettura della sua linea inizializzazione, questa esegue i seguenti pas-
dati, anche perch essendo il display alimentato saggi:
a 5Vdc, per leggere i dati sul suo Bus dovrei 1. Causa un ritardo di 250 ms (pi che suffi-
utilizzare un traslatore di livello, inquanto que- ciente per la stabilizzazione delle tensioni di
sti avrebbero valore alto di tensione pari a 5Volt alimentazione)
non compatibile con quelli della board M0 Pro. 2. Definisce tutti i pin scelti della scheda come
Siccome la board M0 Pro lavora con segna- Output con la funzione pinMode(..........,

27 - Firmware
DESI GN
OUTPUT); una transizione L-H- L con durata minima di 230
3. Come da datasheet invia i comandi di inizia- ns , quando sia il bit di RS che i bit di dato assu-
lizzazione mediante la funzione SetCom- mono un valore stabile sul bus.
mandPin(.....) Per inviare un comando verso il controller ho uti-
4. Prepara il display a lavorare con interfaccia lizzato la funzione SetCommandPin(), la quale
a 4 bit font 5x8 e scrittura da destra a sini- manda i valori booleani dei bit da D7, D6, D5 e
stra (leggere approfondimenti punto 3 per D4 mediante la funzione digitalWrite(_pin_D7,
comprendere meglio largomento). D7) seguendo il protocollo di Fig.3.
Di seguito il codice della funzione SetCom-
Approfondimenti del punto 3 : mandPin:
Come suggerito dai datasheet dei costruttori
di display con controller HD44780, per inviare
dei dati a questultimi bisogna rispettare una
sequenza ben precisa di segnali come visibile
nella figura seguente (Fig.3):

Infatti come prima operazione la funzione ab-


bassa il pin RS con il comando digitalWrite(_
pin_RS, L), dopo questo invia i comandi sul bus
da D7 a D4 e poi per validare il tutto genera un
Fig.3 image credits: datasheet impulso di Enable della durata di 1 msec che
ben pi ampio di quello richiesto dal datasheet,
tralasciando il segnale R/W, si nota come innan- quindi assolutamente idoneo.
zitutto il segnale RS deve essere posto basso Le funzioni SetCommandPin e SetDataPin no-
per specificare che si stanno per inviare dei co- nostante molto semplici sono di fondamentale
mandi. importanza per il corretto funzionamento del-
Il controller infatti a seconda del valore del pin di la libreria, infatti vengono invocate pi volte e
RS, discrimina tra comandi e dati, cio capisce provvedono allinvio ed alla corretta validazione
se voglio impartire un comando come ad esem- dei comandi sul Bus.
pio pulire lo schermo quando RS=0, oppure leg- Detto questo e tenendo presente il funziona-
gere un dato dalla sua DDRam con RS=1. mento di SetCommandPin, andiamo avanti nel-
Queste due funzioni devono essere sempre va- la descrizione della funzione di inizializzazione
lidate da un impulso di Enable che dovr subire dellLCD, procedendo con il punto 4 ed analiz-

28 - Firmware
DESI GN
zando quali sono i dati da inviare in sequenza
per fare in modo da poter utilizzare il display con
configurazione 4 bit e font 5x8.
Sempre guardando i datasheet troviamo che
per inizializzare il display con le caratteristiche
scritte pocanzi, i passi sono i seguenti : (Fig.4)

Fig.5 Inizializzazione

Inviate queste 3 sequenze di dati il passo suc-


cessivo sar quello di specificare al controller
che abbiamo intenzione di lavorare con interfac-
cia a 4 bit anzich ad 8 bit e lo facciamo con
linvio del comando:

SetCommandPin(0,0,1,0);

Fig.4 image credits: sparkfun.com Da questo momento in poi ogni comando da


inviare verso il display dovr essere suddivi-
da come si evince dal diagramma di Fig.4, per so in due pacchetti da 4 bit ciascuno.
prima cosa viene richiesto di attendere circa Di seguito avremo limpostazione del font che
40ms per la stabilizzazione della tensione di ali- sar la standard 5x8 su due righe :
mentazione (la nostra libreria attende 250 ms)
e poi ad intervalli ben precisi di inviare il dato SetCommandPin(0,0,1,0);
(0,0,1,1) sui pin D7...D4, cosa che noi facciamo SetCommandPin(1,0,0,0);
con la solita funzione SetCommandPin(0,0,1,1)
per 3 volte consecutivamente, inserendo dei e successivamente le istruzioni relative a: spe-
ritardi abbastanza elevati per non incorrere in gnimento, riaccensione del display, pulizia dello
problemi di temporizzazione (Fig.5). schermo e shift a sinistra dei caratteri (Fig.6):

29 - Firmware
DESI GN
scritte vengono eseguite alla rovescia, se I/
D=1 le scritte vengono visualizzate normal-
mente
S Shift caratteri ==> se S=0 Allora scri-
vo da Destra a Sinistra mentre se S=1 ho il
contrario
S/C Spostamento del cursore
R/L Spostamento dellintero contenuto del
display senza variare il contenuto della
DDRAM
DL Indica in che modo verranno inviati i
dati se in 2 pacchetti da 4 o in uno da 8 bit
nel nostro caso DL=0 , interfaccia a 4 + 4
bit
Fig.6 Inizializzazione
N Numero di righe N = 0 una sola riga N
= 1 pi di una riga
per analizzare nello specifico le varie sequenze F Font Display F = 0 5x8 mentre
di 8 bit (4 + 4) inviate al dispositivo, fare riferi- F = 1 5x10
mento alla tabella seguente (Tab.1.). Fino ad ora abbiamo analizzato linizializzazione
del display, senza la quale questultimo non sar
in grado di visualizzare alcun carattere, studian-
do la funzione SetCommandPin che provvede
ad inviare i dati a pacchetti da 4 + 4 bit.
Ogni comando inviato verso il controller costi-
tuito dunque dai primi 4 bit pi significativi, se-
guito dai 4 bit meno significativi.
Successivamente vedremo come far scrivere
un carattere al display, adoperando due funzioni
tra loro uguali e simili alla SetCommandPin, che
questa volta ho chiamato SetDataPin1 e SetDa-
taPin2.
I pi attenti a questo punto noteranno che, men-
Dove si indicano con: tre nellinvio di un comando adoperavo per due
I/D Incremento o Decremento DDRAM ==> volte la stessa funzione, adesso invece, per la
I/D =0 ho un decremento della DDRAM e le richiesta di un dato uso due funzioni diverse.

30 - Firmware
DESI GN
Tutto ci dovuto al fatto che oltre alla transizio- de in ingresso un carattere e mediante il ciclo
ne L-H-L del pin di Enable deve verificarsi una for, shifta uno ad uno tutti i bit che compongono
transizione anche sul pin di RS ogni 4 bit inviati. lo stesso.

LINVIO DEI DATI E RICHIESTA DI Questi verranno moltiplicati mediante la funzio-


SCRITTURA CARATTERE ne AND con il valore uno booleano e memo-
Analizziamo quindi unaltra funzione importante rizzati uno per volta nel vettore bin[i]. Di con-
della libreria che permette di inviare un testo e vi- seguenza alla fine del ciclo for, il vettore bin[i]
sualizzarlo sul display, che LCD_m0::Scrivi_ conterr i vari bit che rappresentano il codice
Testo(String stringa,int rig) , la quale prende ASCII del carattere inviato.
in ingresso come parametri una stringa con il
testo da scrivere immesso tra virgolette , ed il Lunico problema che per questo codice
numero della riga sulla quale scriverlo. ASCII memorizzato in bin[i] disposto al con-
La funzione non fa altro che calcolare la lun- trario, quindi mediante un altro ciclo for riallineo
ghezza della stringa e memorizzare questa in correttamente tutti i bit del carattere e li invio
una variabile numerica n, dopodich a secon- uno ad uno al controller del display mediante le
da che abbia selezionato la prima o la seconda funzioni:
riga, dico al display tramite la solita SetCom-
madPin che voglio iniziare a scrivere sulla prima SetDataPin1(bin_inv[0],bin_inv[1],bin_
o sulla seconda riga, mediante la sequenza di inv[2],bin_inv[3]) SetDataPin2(bin_
comandi : inv[4],bin_inv[5],bin_inv[6],bin_inv[7])

SetCommandPin(1,0,0,0) e SetCom- a questo punto vedremo finalmente visualizzato


mandPin(0,0,0,0) per la riga 1 il carattere o i caratteri prescelti.
A seguito dellanalisi fatte sulle principali funzio-
SetCommandPin(1,1,0,0) e SetCom- ni della libreria, ritengo non necessaria la spie-
mandPin(0,0,0,0) per la riga 2. gazione delle altre funzioni, in quanto una volta
comprese quelle analizzate finora le altre risul-
Impostato il display, la funzione provvede ad tano di facile comprensione.
estrapolare bit dopo bite tutti i caratteri presenti Mi soffermer solo per qualche altro rigo, spie-
nella stringa tramite il ciclo for e provvede a scri- gando per chi ancora non lo sapesse, come fare
verli uno ad uno tramite laltra importantissima ad inserire nellide la libreria e lesempio svilup-
funzione Scrivi_Car_PC(c) che analizzeremo pato.
tra un attimo. Per inserire la libreria nellIDE di Arduino, con-
Come si pu vedere dal listato, la funzione pren- veniente scaricare il file Zip e memorizzarlo nel-

31 - Firmware
DESI GN
la cartella Documenti =>Arduino=>Libraries. spicio di poter essere stato di aiuto a tutti coloro
Fatto ci basta entrare nellIDE e nella barra de- che volessero crearne una personalizzata.
gli strumenti sotto la voce Sketch selezionare Il secondo aspetto riguarda laver creato una li-
Aggiungi Libreria, andando ad aggiungere dun- breria funzionante non ancora sviluppata per la
que il file zip che poco fa abbiamo inserito nel board Arduino M0 Pro, che potr essere utile a
percorso precedente. tutti coloro che come me hanno preferito partire
Detto questo non ci rimane che aprire il file nella da questo dispositivo per iniziare una nuova e
cartella Example e testare il file di esempio. affascinante avventura.
Spero che il lavoro da me eseguito possa esse-
re utile per due aspetti fondamentali, il primo Segue il link per il download dei file della li-
quello di aver provato a dare delle nozioni sulla breria LCD_m0.
creazione di una libreria Arduino partendo dal
software e scendendo fino allo studio dellhar- Buon Lavoro!
dware del dispositivo da interfacciare, con lau-

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/progetto-di-una-libreria-per-lcd-16x2-compatibile-con-ardu-
ino-m0-pro

32 - Firmware
ANALOG

Le tecnologie per lenergy


harvesting si diffondono
sempre di pi di Emanuele Bonanni
12 Novembre 2015

Nel passato, vari tipi di sensori venivano ordinariamente collegati agli alimentatori
mediante cavi, mentre oggi, anzich dover far fronte al problema e al costo della posa
di cavi in vari punti di un edificio o di un impianto, possibile installare robusti e af-
fidabili sensori wireless di qualit industriale in grado di funzionare per anni alimen-
tati da una piccola batteria o anche accumulando lenergia generata da sorgenti che
assicurino gradienti di luce, vibrazioni o temperatura. possibile anche utilizzare la
combinazione di una batteria ricaricabile e di pi sorgenti di energia ambiente. Inoltre,
a causa di problemi di sicurezza intrinseci, alcune batterie ricaricabili non possono
essere caricate mediante cavi ma richiedono limpiego di tecniche di trasferimento
wireless della potenza.

L
e tecnologie per lenergy harvesting avanza- sistemi che incorporano soluzioni per lenergy
te e immediatamente disponibili, ad esem- harvesting in genere sono in grado di ricaricarsi
pio in trasduttori piezoelettrici che sfruttano quando la carica si esaurisce, un vantaggio che
lenergia generata da vibrazioni e in celle foto- manca nei sistemi alimentati da batterie prin-
voltaiche per locali chiusi, producono livelli di cipali. Quindi, il costo aggiuntivo dellutilizzo di
potenza dellordine dei milliwatt in condizioni di un sistema per lenergy harvesting allo scopo di
funzionamento tipiche. Sebbene questi livelli di alimentare un sensore pu essere compensato
potenza possano inizialmente apparire limitati- dal ridotto costo di manutenzione, poich sar
vi, il funzionamento di elementi di energy har- necessario sostituire le batterie principali ogni
vesting nel corso di vari anni pu far s che le 7 10 anni circa.
tecnologie siano in gran parte comparabili con
batterie principali di lunga durata, sia per quan- SUPERARE LE BARRIERE
to riguarda lerogazione di energia che in termi- I sistemi di sensori, sia wireless che cablati,
ni del costo unitario di energia fornita. Inoltre, i spesso sono presenti in ambienti ricchi di ener-

33 - Firmware
ANALOG
gia naturale, ideali per alimentare i sensori stes- una batteria ricaricabile.
si. Oggi, unidea generalmente accettata che Anche se si seleziona una batteria ricaricabile,
lenergy harvesting pu prolungare notevolmen- rimane aperta la questione di quale sia il meto-
te la durata di batterie installate, specialmente do ottimale di ricarica. Alcuni dei fattori che influ-
quando i requisiti di alimentazione sono bassi, iscono su tale decisione sono:
riducendo sia i tempi di fermo che i costi di ma-
nutenzione a lungo termine. Nonostante questi 1) disponibile una sorgente di energia cablata
vantaggi, esistono ancora vari ostacoli allado- per caricare la batteria?
zione di queste tecnologie; quello pi grave 2) disponibile potenza sufficiente dalle sor-
che le fonti di energia ambientale sono spesso genti di energia ambiente per alimentare la rete
intermittenti oppure sono insufficienti per alimen- di sensori wireless (WSN, wireless sensor net-
tare continuamente il sistema di sensori, mentre work) e inoltre caricare la batteria?
lalimentazione ottenuta con batterie principali 3) necessario un trasferimento di potenza
estremamente affidabile per lintera durata no- wireless per caricare la batteria a causa di re-
minale delle batterie. Quindi, alcuni progettisti di quisiti di sicurezza intrinseci dovuti alla natura
sistemi potrebbero essere riluttanti allaggiorna- pericolosa della sua installazione?
mento dei loro sistemi ai fini dellenergy harve-
sting di fonti ambientali, specialmente quando Indipendentemente dalla soluzione richiesta
una perfetta integrazione fondamentale. dalla specifica implementazione del processo di
Ci nonostante, nella maggior parte delle imple- energy harvesting, sono disponibili molti circuiti
mentazioni si impiega una sorgente di energia integrati che risolvono il problema di assicurare
ambiente come generatore di energia principa- al progettista del sistema le caratteristiche pre-
le, ma integrandola con una batteria che pu stazionali necessarie per soddisfarne semplice-
essere inserita se tale sorgente non pi di- mente e agevolmente le necessit.
sponibile o viene interrotta. Questa batteria pu
essere ricaricabile o monouso e la scelta nor- SOLUZIONI SEMPLICI ED EFFICACI
malmente dipende dallapplicazione finale. Ne LLTC3107 di Linear Technology un conver-
consegue che se linstallazione finale consente titore CC/CC a elevato livello di integrazione,
un accesso agevole per sostituire una batteria progettato per prolungare la durata di una batte-
non ricaricabile e questa operazione pu essere ria principale in sistemi wireless a bassa poten-
eseguita velocemente e a un costo contenuto za, sfruttando il processo di energy harvesting
dagli addetti alla manutenzione, tale soluzione e gestendo il surplus di energia disponibile da
economicamente conveniente. Se invece sosti- fonti a bassa tensione dingresso come genera-
tuire la batteria scomodo e costoso, dal punto tori termoelettrici e termopile.
di vista economico pi conveniente lutilizzo di Impiegando lLTC3107, un sistema per lenergy

34 - Firmware
ANALOG
harvesting al punto di carico richiede uno spazio una singola uscita di continuit per applicazioni
ridotto quello sufficiente per il package DFN di energy harvesting come quelle di dispositivi
da 3mm x 3mm dellLTC3107 e alcuni compo- IoT e dei nodi sensori wireless.
nenti esterni. Generando una tensio-
ne di uscita che segue quella della
batteria principale installata, possi-
bile adottare senza alcun problema
lLTC3107 per ottenere il conteni-
mento dei costi possibile con lener-
gy harvesting di sorgenti di energia
termica gratuita, in sistemi alimentati
a batteria nuovi o preesistenti. Inol-
tre, lLTC3107, unitamente a una
piccola fonte di energia termica, pu
prolungare la durata della batteria,
in alcuni casi fino alla sua scadenza,
riducendo cos i costi di manutenzio-
ne periodica dovuti alla sostituzione della bat- Figura 1. LLTC3331 converte lenergia di pi
teria stessa. LLTC3107 stato concepito per sorgenti e pu utilizzare una batteria princi-
completare la batteria o anche alimentare il ca- pale ricaricabile
rico autonomamente, secondo le sue condizioni
e lenergia ottenibile con lenergy harvesting. Lalimentatore EH dellLTC3331, consistente di
Un altro esempio lLTC3331: una soluzione un raddrizzatore a ponte a onda intera che ac-
completa, dotata di circuito di regolazione, che cetta ingressi CA o CC e di un convertitore buck
genera fino a 50mA di corrente di uscita con- sincrono ad alta efficienza, accumula lenergia
tinua per prolungare la durata della batteria generata da sorgenti piezoelettriche (CA), solari
quando disponibile una fonte di energia per (CC) o magnetiche (CA). Uno shunt da 10mA
lenergy harvesting (EH). Non assorbe corren- consente di caricare la batteria con lenergia cos
te di alimentazione dalla batteria quando tra- ottenuta, mentre una funzione di scollegamen-
sferisce potenza regolata al carico utilizzando to della batteria quando questa quasi scarica
lenergia accumulata e solo 950nA quando la protegge dagli effetti della scarica profonda.
alimentato dalla batteria a vuoto. Integra un ali- La batteria ricaricabile alimenta un convertitore
mentatore EH ad alta tensione oltre a un con- buck-boost sincrono che funziona con tensione
vertitore CC/CC buck-boost sincrono alimentato dingresso compresa tra 1,8V e 5,5V e sinseri-
da una batteria principale ricaricabile per creare sce quando lenergia accumulata non dispo-

35 - Firmware
ANALOG
nibile, per regolare luscita indipendentemente ma di applicazioni, nuove e preesistenti, che im-
dal livello a cui si trova lingresso: superiore, piegano una batteria principale per lalimenta-
inferiore o uguale a quello di uscita. Il carica- zione, Linear Technology ha introdotto appositi
batteria dellLTC3331 dotato di una funzione circuiti integrati, progettati per funzionare con
di gestione della potenza molto importante, che batterie a varie tensioni, comprese la maggior
non pu essere trascurata quando si impiegano parte delle pi diffuse batterie principali di lunga
sorgenti di micropotenza. LLTC3331 incorpora durata utilizzate in applicazioni a potenza infe-
una funzione di controllo logico del circuito di riore, come le batterie a bottone al litio da 3V
carica della batteria tale che questa viene cari- e quelle al litio-cloruro di tionile da 3V. Questi
cata solo quando lalimentatore che accumula prodotti offrono entrambi i vantaggi laffidabi-
lenergia ne ha una quantit in eccesso; sen- lit dellalimentazione a batteria e la riduzione
za questa funzione logica, allavvio la sorgente dei costi di manutenzione assicurata dallener-
di energia accumulata rimarrebbe bloccata in gy harvesting senza bisogno di un impegno di
qualche punto di funzionamento non ottimale e progettazione gravoso.
non sarebbe in grado di alimentare il disposi-
tivo previsto. LLTC3331 inserisce automatica-
mente la batteria quando la sorgente per energy
harvesting non pi disponibile. Si ottiene cos
lulteriore vantaggio di consentire alla WSN ali-
mentata dalla batteria di prolungarne la durata
operativa da 10 a oltre 20 anni se per almeno
met del tempo disponibile una sorgente di
alimentazione EH adatta; la durata sar ancora
maggiore se tale sorgente disponibile per un
intervallo pi lungo. stato integrato anche un
circuito di bilanciamento a supercondensatore,
che consente di accumulare una quantit mag-
giore di energia alluscita.

CONCLUSIONE
Per facilitare ladozione del processo di energy
harvesting da fonti ambientali in unampia gam-

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/le-tecnologie-per-lenergy-harvesting-si-diffondono-sempre-di-piu
36 - Firmware
DESI GN

EMG superficiale per


sport performance
con Arduino M0 Pro di Domenico Canepa
17 Novembre 2015

In quest articolo verr impiegata la sEMG per studiare la risposta muscolare degli arti
superiori al sollevamento di pesi calibrati. Sar messa in evidenza la differenza che
esiste tra il braccio di destra e quello di sinistra. Per acquisire i dati, sar utilizzata la
board Arduino M0 Pro, che grazie alla sua potenza di calcolo permetter lelaborazio-
ne dei dati in tempo reale per poi essere graficati su Pc.

INTRODUZIONE zioni di prelievo del segnale e, unitamente alla

L
Elettromiografia Superficiale (SEMG) non-invasivit della tecnica, rende possibile lef-
una tecnica che misura lattivit elettrica du- fettuazione di registrazioni sia in condizioni di
rante la contrazione dei muscoli. Opera in contrazione isometrica sia in sforzo dinamico,
maniera simile allelettrocardiogramma che in- ad esempio durante lesecuzione di esercizi o
vece misura lattivit del cuore. Lesame in- gesti funzionali (1).
dolore. E totalmente non invasivo e non causa
irritazioni. assolutamente sicuro per bambini e CONCETTI BASE
neonati, donne incinte e persone anziane. Il muscolo un organo costituito da tessuto mu-
Lanalisi elettromiografica rappresenta la ma- scolare con propriet contrattili. Ci sono diver-
nifestazione elettrica della contrazione musco- si tipi di muscoli, distinti in base alle propriet
lare. Se sulla superficie della cute vengono del tipo di tessuto muscolare che lo costituisce,
applicati due elettrodi bipolari possibile os- quello che prenderemo in considerazione ap-
servare durante la contrazione muscolare una partiene alla categoria dei muscoli striati sche-
variazione della distribuzione di potenziale. Re- letrici.
gistrando questa variazione si ottiene un segna- Questo tipo di muscoli costituito da unit di
le indicativo dellattivit muscolare in funzione fibre muscolari di forma allungata, detti sarco-
del movimento effettuato. Lutilizzo di elettrodi meri, che si contraggono in seguito agli impulsi
di superficie semplifica sensibilmente le opera- nervosi inviati dai motoneuroni.

37 - Firmware
DESI GN
La contrazione muscolare si pu dividere in tre che si generano durante la contrazione volon-
fasi principali: taria di un muscolo. Questo esame viene effet-
Contrazione; tuato normalmente grazie alluso di elettrodi su-
Rilassamento; perficiali che amplificano e registrano limpulso
Fase latente. nervoso.
La contrazione avviene quando uno stimolo Essendo depolarizzazioni della membrana cel-
elettrico, proveniente dai motoneuroni, arriva ai lulare, un singolo potenziale dazione corrispon-
bottoni sinaptici, i quali liberano il neurotrasmet- de, nel caso delluso di elettrodi interni, allatti-
titore acetilcolina che apre i canali del sodio e vit di una singola unit motoria (ununica fibra
depolarizza la membrana plasmatica delle fibre muscolare collegata ad una terminazione ner-
muscolari. Questa prima depolarizzazione d vosa) oppure, nel caso di elettrodi superficiali,
origine ad un potenziale dazione di 70mV che, ad un gruppo di unit motorie, come nel nostro
propagandosi lungo la fibra, permette la diffu- caso.
sione di ioni calcio e quindi lunione di actina e Dalla letteratura, emerge che il segnale mioe-
miosina con una precisione di 45. lettrico per essere comprensibile, deve essere
Nella fase di rilassamento il procedimento opportunamente elaborato, in particolare filtrato
sostanzialmente eseguito al contrario. Ci che , raddrizzato e calcolato il valore RMS (valore
varia sono i neurotrasmettitori coinvolti, specifici quadratico medio) nel dominio del tempo; men-
nellinibire il rilascio di acetilcolina. tre nel dominio della frequenza si deve calcola-
La fase latente la fase successiva allo stimolo re lo spettro in frequenza, la frequenza media e
in cui il muscolo deve riadattarsi al potenziale la frequenza mediana.
di origine. In questa fase, le fibre muscolari non
sono in grado di ricevere un nuovo stimolo se ARCHITETTURA DEL SISTEMA
non un nuovo impulso che non sia superiore a Il sistema composto di un unit di controllo
quello ricevuto precedentemente. In alcuni casi, ed elaborazione costituita da Arduino M0 Pro, la
il muscolo sottoposto anche ad un periodo quale campiona il segnale amplificato e filtrato
refrattario durante il quale le fibre muscolari da un circuito di condizionamento, effettua del-
non sono in grado di rispondere a nessun tipo di le elaborazioni numeriche per poi inviare i dati
stimolo, anche di forte entit (2). attraverso un modulo Bluetooth RN42. possi-
La fase di contrazione pu essere monitorata bile osservare in figura 1 che si ha la possibilit
tramite tracciato EMG (elettromiogramma). di acquisire 5 coppie di elettrodi (canali), ga-
Lelettromiografia misura i potenziali dazione rantendo la massima efficienza, senza perdere

38 - Firmware
DESI GN
prestazioni, grazie al potente microcontrollore
ARM 32bit montato su Arduino.

Figura 1: composizione del sistema

39 - Firmware
DESI GN
Il circuito di condizionamento formato da un
amplificatore per strumentazione INA122 che
amplifica il segnale di 30db, avente un CMRR di
90db; in cascata, un filtro passa banda con fre-
quenze di taglio 20Hz-600Hz elimina la compo-
nente continua e frequenze superiori alla banda
di interesse.

Figura 2: schema elettrico del circuito di condizionamento

Il circuito di condizionamento connesso alla


board Arduino mediante uno shield che equi-
paggia a bordo anche un carica batterie a litio,
permettendone lutilizzo senza la rete elettrica.

40 - Firmware
DESI GN

Figura 3: schema elettrico shield carica batteria

Lo schema dello shield mostrato in figura3, per- diante il voltage follower. Per alzare la tensione
mette di alimentare Arduino M0 Pro senza dover della batteria a 5V stato utilizzato il convertito-
connettere altri fili o quantaltro, consentendo di re DC-DC TLC499A
caricare una batteria al litio quando Arduino Durante il funzionamento, il sistema dovr esse-
connesso al pc tramite porta usb o connesso re alimentato esclusivamente dalla batteria, poi-
al proprio alimentatore. La carica della batteria ch una connessione con la rete elettrica pu
affidata a due operazionali, dove il primo, in provoca disturbi elettromagneti non trascurabili
configurazione voltage follower mantiene la ten- che altererebbero i segnali elettromiografici.
sione costante, mentre laltro amplificatore in Per risolvere il problema disolamento elettrico
configurazione di convertitore corrente tensio- nella comunicazione dei dati, stata utilizzata
ne, fa si che scorra una corrente costante sulla un connessione wireless. In particolare, il siste-
batteria sino al raggiungimento di una tensione ma in grado di comunicare con un pc o con
di 4.1V, per poi essere mantenuta costante me- uno smartphone che hanno un modulo Blueto-

41 - Firmware
DESI GN
oth. Il passo successivo stato la conversione del
Il modulo Bluetooth utilizzato il famoso RN42, sistema in figura 4 nel codice per Arduino.
con il quale possibile stabilire facilmente una
connessione ed possibile trasmettere dati const float b0=0.0954,b2=-0.0954,a1=-
come una normale comunicazione seriale pun- 1.729,a2=0.787;
to punto.
float filter_IIR(void)
ELABORAZIONE NUMERICA SEGNALI
Il compito pi importante affidato ad Arduino {
che tramite unelaborazione numerica permette
di filtrare e ricavare il valore true RMS del se- u2=u1;
gnale acquisito.
Il filtro digitale realizzato un IIR (infinite impulse u1=u0;
response) del 6 ordine con approssimazione di
butterworth frequenze di taglio 20Hz e 500Hz. u0=in(i);
Senza entrare molto nel dettaglio, vediamo la
struttura del filtro IIR. y2=y1;

y1=y0;

y0=b0*u0+ b2*u2 -a1*y1 -a2*y2;

return y0;

Essendo Arduino M0 pro un micro a 32 bit,


Figura 4: filtro digitale IIR 2 ordine permette facilmente di operare con numeri float
a 32 bit. Ogni campione IN(i) acquisito dallADC
La figura 4 rappresenta un filtro IIR del secondo con una frequenza di campionamento di 5KHz,
ordine che collegato in cascata con altri due filtri viene dato in pasto alla funzione filter_IIR che
identici, costituiscono un filtro del sesto ordine. effettua un filtraggio e ne ritorna il valore.
I coefficienti A0,A1,A2,B0,B1,B2 sono stati cal- A questo punto viene calcolato il valore true
colati con il software Matlab, garantendo le spe- RMS con il seguente algoritmo:
cifiche in frequenza.

42 - Firmware
DESI GN
un sistema di visualizzazione dati sia tramite
pc sia smartphone. Grazie al canale Bluetooth
non dobbiamo preoccuparci del protocollo di
comunicazione, poich il modulo RN42 preve-
de allincapsulamento dei dati secondo lo stack
Dove N la finestra dei campioni, nel nostro Bluetooth. Il massimo baud-rate ammesso di
caso N= 100. circa 1Mb/s il che permette uno scambio dati
agevole, considerando poi che tutta lelabora-
float true_RMS(void) zione interna allArduino, i dati da fornire in
uscita hanno una baud rate di pochi Kb/s.
{

For( i=0;i<100;i++)

Somma=(Y[i]^2)/100;

return somma;

Dopo essere stato elaborato, il segnale invia-


to tramite Bluetooth allutente finale. Essendo in
questo caso il dato in uscita a 32 bit, esso viene
spezzato in 4 byte. Alla ricezione, viene ricostru-
ita lintera parola e vengono visualizzati su un Figura 5: applicazione android
grafico i dati finali.
Lapplicazione stata sviluppata per Android
SOFTWARE con il software Eclipse in java, ricorrendo alle
Com stato accennato nei capitoli precedenti, numerose API che il mondo android mette a
non presente uno shield che fa da interfac- disposizione. Con lapplicazione per smartpho-
cia visiva, per questo motivo stato studiato ne possibile visualizzare esclusivamente un

43 - Firmware
DESI GN
canale alla volta, per allo stesso tempo il pro-
gramma immagazzina anche i dati degli altri ca-
nali.
Il software per il pc stato sviluppato in visual
C# con lambiente visual studio della Microsoft.
Com possibile notare dalla figura 6 il sistema
stato progettato per acquisire un massimo di 5
coppie di elettrodi. I sensori (elettrodi) vengono
acquisiti sequenzialmente, elaborati e inviati in
maniera seriale al pc e agendo sui tab presen-
ti nel software possibile visualizzarne landa-
mento nel tempo.

Figura 7: dati braccio destro

Figura 6: software pc

RISULTATI
Per verificare il funzionamento dellintero siste-
ma, sono state fatte due misure elettromiografi-
che sollevando un peso calibrato da 2Kg, con il
braccio destro e con il braccio sinistro. Di segui-
to sono riportati i risultati ottenuti.
Figura 8: dati braccio sinistro

44 - Firmware
DESI GN
Dai grafici esportati con il software Pc pos- canica posturale. [Online] www.kisshealth.it.
sibile riscontrare come lattivit muscolare del 2. Bentivoglio, M. Anatomia umana e Istologia
braccio destro non sia identica a quello sinistro . torino : Minerva Medica, 2010.
come ampiezza e come valore RMS. Tra le linee 3. thought technology ltd. thoughttechno-
rosse verticali, possiamo vedere la contrazione logy. thoughttechnology.com. [Online]
del muscolo quando solleviamo il peso. Per evi-
denziare meglio questa differenza si potrebbe ALLEGATI
effettuare una trasformata di Fourier in digitale
(FFT) del segnale mioelettrico quantificando il AllegatiEMG
contenuto in frequenza e la densit spettrale di
potenza.

SVILUPPI FUTURI
Il seguente sistema da intendersi come un
prototipo di test per tutte quelle persone che
vogliono conoscere lattiva muscolare quando
svolgono unattivit fisica, senza dover ricorre-
re a complicati mezzi che costano centinaia di
euro. Il prototipo pu essere modificato a pro-
prio piacimento secondo quello che si vuole
analizzare; unidea basilare da cui partire e
sviluppare qualcosa di pi interessante, utiliz-
zabile in altre circostanze come ad esempio:
motion control, protesi artificiali e quantaltro
possiamo immaginare. Com stato accennato
nel capitolo precedente, un altro parametro che
andrebbe misurato la composizione armonica
del segnale mioelettrico per quantificare e qua-
lificare al meglio lattivit muscolare.

BIBLIOGRAFIA
1. kisshealth. kisshealth laboratorio di biomec-

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/emg-superficiale-per-sport-performance
45 - Firmware
Ti occorre Potenza Digitale con
funzionalit di prossima generazione?
I nuovi DSC dsPIC fissano nuovi benchmark per dimensioni,
latenza e consumo di potenza

Grazie a sofisticati algoritmi di controllo funzionanti a frequenze switching superiori e a


Live Update Flash, i Digital Signal Controller 16-bit dsPIC33EP GS di Microchip offrono
prestazioni di digital-power di prossima generazione.

Questi DSC consumano fino all80% di potenza in meno in qualsiasi applicazione e


offrono una latenza pari a meno della met di quella delle precedente generazione
nellutilizzo in un compensatore three-pole three-zero.

Oltre alle eccezionali performance grazie ad algoritmi di controllo predittivi ed adattivi


non-lineari la famiglia dsPIC33EP GS offre maggiore integrazione e pi funzionalit in
package che includono il pi piccolo digital-power-optimised DSC sul mercato,
4 x 4 mm UQFN.

www.microchip.com/get/eudspic33ep

Il nome e logo Microchip un marcho industriale registrato di Microchip Technology Incorporated negli U.S.A. e altri Stati. Tutti gli altri marchi industriai menzionati nel presente documento appartengono ai rispettivi titolari.
2015 Microchip Technology Inc. Tutti i diritti riservati. DS70005225A. MEC2015Ita08/15
DESI GN

Power Line Monitor


Open Source
[Progetto Completo] di Maurizio
19 Novembre 2015

Limplementazione hardware dellAtmel 90E24 permette di avere a disposizione una


soluzione completa energy meter per la misura di tensione, corrente, potenza reale,
apparente e reattiva, fattore di potenza, angolo di fase e frequenza di linea. Il tutto mi-
surato con unaccurata precisione in una semplice soluzione di energy management
on-chip. La scheda si basa essenzialmente su un modulo ESP12 per il trasferimento
dati Wi-Fi e il chip Atmel 90E24 Energy monitor, un dispositivo di misurazione di ener-
gia per linea monofase a due e a tre fili, pienamente compatibile con IEC62052-11,
IEC62053-21 e IEC62053-23. In questo articolo analizzeremo un progetto di power line
monitor, mettendo in risalto gli aspetti hardware e software.

1. INTRODUZIONE rantiscono una stabilit a lungo termine in

L
a board contiene essenzialmente un modu- funzione dei fattori ambientali e per variazio-
lo Wi-Fi ESP12 e un chip monitor di Atmel ni di rete. Il chip 90E24 fornisce in uscita due
90E24 (Figura 1). I dati seriali sul modulo segnali proporzionali alle energie attive e re-
ESP8266 non sono isolati e sono al potenziale attive, con registri di sistema per il controllo e la
della linea. Una scheda utilizzata per isolare condivisione dei dati.
i segnali dei dati seriali del ESP8266 (Figura 2)
e proteggere nello stesso tempo il computer dal 2. ISOLATORE USB
potenziale di rete. E assolutamente necessario La scheda isolatore USB (Figura 3 e 4), come
utilizzare uninterfaccia seriale-USB per isolare descritto in precedenza, fa parte del progetto
e impedire al computer (o ad un altro sistema)
di power line monitoring. E realizzato con un
di ricevere segnali spuri che possono provoca-
CH340G e 4 isolatori digitali Silicon Labs
re disturbi ma nello stesso tempo anche difetti
SI8410. In una interfaccia USB standard, la con-
irreversibili.
nessione di terra proveniente dal PC collegata
Le tecnologie ADC e DSP del chip Atmel ga-
a quella USB e, quindi, con il dispositivo in

47 - Firmware
DESI GN

Figura 1: Schema a blocchi dellAtmel 90E24

per evitare che una corrente di guasto possa


fluire e danneggiare il sistema. CH340G un
dispositivo USB full-speed che emula uninter-
faccia seriale standard, con velocit da 50bps
a 2Mpbs.

Figura 2: Modulo ESP8266

comunicazione. Una
corrente di corto o so-
vraccarico potrebbe
generare un enorme
flusso di corrente tale
da danneggiare il com-
puter o altri sistemi col-
legati. E giusto, quindi,
utilizzare una qualche
forma di isolamento
Figura 3: Schema elettrico dellisolatore USB

48 - Firmware
DESI GN
to per alimentare con 3.3V o 5V il lato isolato
dellinterfaccia. Il lato isolato ha un LED rosso
per indicare che acceso. Il lato USB, invece,
ha un LED verde per indicare che il cavo USB
collegato. Quando il chip CH340 funziona
normalmente, lo stadio di oscillazione deve
fornire un segnale di clock a 12 MHz al pin
XI. In generale, il segnale di clock generato da
un oscillatore a cristallo e collegato tra il pin XI e
XO come visualizzato in figura 3. Il chip CH340
supporta 5V e 3.3V di alimentazione. Quando
Figura 4: Vista 3D del PCB dellisolatore USB si utilizza 5V, il pin VCC e V3 devono essere
collegati con una capacit di disaccoppiamento
di 4700 pF o 0.01 F. In modalit di interfaccia
seriale asincrona, i pin da prendere in esame
sono i seguenti: trasferimento dati e segnali di
controllo. I pin di trasferimento dati sono TXD
Figura 5: Semplice schema a blocchi di funzionamento e RXD. Quando linterfaccia seriale inattiva,
del CH340 RXD deve essere di alto livello. Quando luscita
di interfaccia seriale libera, il TXD
in CH340H e CH340T di alto livello,
mentre in CH340R di basso livello.
I pin riguardanti i segnali di control-
lo sono CTS, DSR, RI, DCD e RTS.
Lerrore della velocit di trasmissione
seriale inferiore allo 0,3%, e il tasso
Figura 6: Schema a blocchi del SI8410 di errore in ricezione seriale non inferiore allo
0,2%.
Il chip CH340 (figura 5) pu essere utilizzato per Il funzionamento di un Si84xx analogo a
realizzare un convertitore USB-seriale, USB-Ir- quella di un accoppiatore optoelettronico
DA infrarossi o USB-interfaccia stampante. La che fornisce unarchitettura robusta per il per-
scheda ha un tipo di connettore USB micro B corso dati. Uno schema a blocchi semplificato di
da un lato, e un connettore a 5 millimetri 6 pin un singolo canale Si84xx mostrato nella figura
e il connettore 5 millimetri 2 pin sullaltra estre- 6. Essenzialmente costituito da un trasmetti-
mit. Il connettore 2 pin pu essere utilizza- tore e ricevitore RF separato da una barriera di

49 - Firmware
DESI GN
isolamento a semiconduttore. Lingresso A mo- 3. HARDWARE E FIRMWARE DEL
dula il vettore dati fornito da un oscillatore RF, il POWER MONITORING
ricevitore contiene un demodulatore che deco-
La scheda si basa essenzialmente su due ele-
difica lo stato dellingresso in base al suo conte-
menti principali, il modulo ESP8266 e il chip
nuto energetico e applica il risultato in B tramite
il driver di output. Il chip della Silicon fornisce della Atmel come descritto nellintroduzione.

immunit al rumore, basso consumo energeti- ESP8266 offre una soluzione completa per la
co e una migliore immunit ai campi magnetici. gestione di applicazioni Wi-Fi con una cache
In genere si richiede una capacit di 0,1 F di allinterno per migliorare le prestazioni del siste-
bypass quando viene utilizzato in ambienti elet-
ma. In alternativa, se si necessita di altri bus di
tricamente silenziosi.
comunicazione, pu essere aggiunto qualsiasi
Comunque, gli isolatori digitali sono utilizzati in
micro controller con la connettivit embedded
ambienti pericolosi con alimentatori eccessiva-
mente rumorosi. Per contrastare queste condi- desiderata. ESP8266 integra i commutatori di
zioni, si raccomanda un ulteriore condensatore antenna, balun RF, amplificatore di potenza,
di bypass di 1 F tra VDD e GND su entrambi i amplificatore a basso rumore e filtri, con un mi-
lati del package. I condensatori devono essere nimo di componenti esterni. E spesso integra-
posizionati il pi vicino possibile al IC per mi-
ta con sensori esterni e altri dispositivi specifici
nimizzare linduttanza parassita. Se il sistema
di applicazione attraverso le sue GPIO (Figura
eccessivamente rumoroso, il progettista do-
vr prevedere laggiunta di resistori da 50 a 100 8). Il modulo stato progettato per i telefoni,
ohm in serie alla tensione di alimentazione e elettronica indossabile e Internet delle cose
da 50 a 300 ohm in serie agli ingressi / usci- con lobiettivo di raggiungere il pi basso consu-
te digitali. Nella figura 7 visualizzato il layout mo energetico, con una combinazione di diver-
completo dellisolatore USB con i componenti
se tecniche power management: active, sleep
appena descritti.
e deep sleep. Il chip dispone dei seguenti stati
(Figura 9):
OFF: pin CHIP_PD basso. Il RTC (Real
Time Clock) disattivato. Tutti i registri ven-
gono cancellati.
DEEP_SLEEP: solo RTC ON. La memoria
di recupero del RTC pu mantenere le infor-
Figura 7: Circuito Isolatore USB con vista su entrambe
le facce PCB mazioni di base del collegamento Wi-Fi.

50 - Firmware
DESI GN
SLEEP: Solo lRTC ON. Loscillatore a cri-
stallo disabilitato. Eventuali eventi di atti-
vazione (interrupt esterni: pin IRQ) metter il
chip nello stato WAKEUP.
WAKEUP: Il sistema passa dallo stato di
sospensione allo stato PWR. Loscillatore di
cristallo e PLL sono abilitati.
ON: il clock ad alta velocit operativo e in-
viato a ciascun blocco attivato dal registro di
controllo.
Ci sono fino a 17 pin GPIO (figura 10). Essi pos-
sono essere assegnati a diverse funzioni in ac-
cordo con il firmware. Ogni GPIO pu essere
configurato come ingresso, uscita, innescare un
interrupt, come sorgente di uscita da un registro Figura 9: Power management del ESP8266

software o un DAC sig-


ma-delta PWM. Questi
pin sono multiplexati
con altre funzioni come
I2C, I2S, UART, PWM.

Figura 10: Pin GPIO del ESP8266

ESP8266 WiFi SoC un integrato con controller


di memoria, tra cui SRAM e ROM. Il microcon-
troller pu visitare le unit di memoria attraverso
interfacce iBus, dbus, e AHB. Tutte le unit di
memoria possono essere visitate su richiesta,
mentre un memory arbiter decider la sequenza
Figura 8: Layout PIN del ESP8266 di tali richieste. Il firmware in python installato

51 - Firmware
DESI GN
sotto linux consente ad un carico AC di essere MQTT un protocollo di connettivit dellInter-
monitorato tramite Wi-Fi. I messaggi di control- net delle cose. E stato progettato come un tra-
lo sono ricevuti da tutti i nodi del /node/control. sporto estremamente leggero di messaggistica.
Questi sono destinati ad essere utilizzati per in- E utile per i collegamenti con localit remote
terrogare i nodi connessi alla rete ed eseguire dove richiesto un codice di ingombro ridotto.
altre funzioni di controllo a livello di sistema. I Ad esempio, stato utilizzato in sensori che co-
messaggi relativi ai comandi vengono in- municano ad un broker di collegamento via sa-
viati utilizzando la codifica JSON come se- tellite e in una serie di applicazioni domotiche.
gue:{command: comando da tabella di figura Il modello richiede un message broker, re-
10} per quelli senza parametri; {command: sponsabile per la distribuzione dei messaggi
$ COMMAND, param, $PARAM} per quelli ai clienti. I comandi vengono inviati a $device-
con un parametro. In figura 11 sono elencati i path/command. Inoltre, tutti i messaggi di stato
comandi MQTT supportati (con il simbolo $ si vengono inviati dal nodo su $devicepath/status
sta indicando una variabile). tranne che per la configurazione del nodo che
viene inviato su /node/info. Lo
schema elettrico di collegamento
visualizzato in figura 12.
Costruire il proprio hardware per
misurare la corrente alternata,
non un compito semplice. Ci
sono un certo numero di cose da
misurare, tra tensione, corren-
te, potenza e fattore di potenza.
Figura 11: Comandi MQTT LAtmel 90E24 una soluzione single chip
progettata per questo sco-
po, con segnali di uscita ai pin
CFx proporzionali allenergia
attiva (CF1) e reattiva (CF2).
Il firmware (Figura 13) scrit-
to in C ed utilizza la gestione
dellenergia dellAtmel 90E24 e
dellAtmel ATMEGA328P. Sfrut-
ta u8glib per controllare un di-
splay nella visualizzazione dei
Figura 12: Schema di connessione per il modulo ESP8266 dati (Figura 14).

52 - Firmware
DESI GN

Figura 16: Sequenza di lettura nella modalit a quattro


fili (four-wire mode) nel chip Atmel 90E24

Figura 13: Diagramma a blocchi del firmware della


power monitoring

Figura 17: Schema elettrico dellalimentazione e connes-


sione dei segnali V e I per lingresso al chip Atmel
Figura 14: Immagine del display del power monitoring

Lo schema elettrico di collegamento


dellatmel 90E24 visualizzato in figura 15.
SPI un full-duplex con due modalit di
connessione: la modalit SPI a quattro
fili e la modalit a tre fili. Nella modalit a
quattro fili, si utilizzano quattro pin (figura
15): CS, SCLK, SDI e SDO. Nella modalit
a tre fili, invece, vengono utilizzati tre pin:
SCLK, SDI e SDO. Nella modalit a quat-
tro fili, il pin CS viene abilitato per le varie
operazione di lettura o scrittura. Il primo
bit sulla SDI definisce il tipo di accesso e
Figura 15: Schema elettrico di connessione dellAtmel 90E24

53 - Firmware
DESI GN
i restanti 7-bit sono decodificati come indirizzo. rente con un carico scollegato, prima di questo
Come mostrato in Figura 16, unoperazione azzerare loffset: si avr bisogno di scrivere i
di lettura viene iniziata da un high SDI segui- valori al registro IOFFSETL allindirizzo 0x35.
to da un indirizzo di registro a 7-bit. Unope- Collegare un carico resistivo e un accurato mi-
razione di lettura completa contiene 24 cicli. I suratore di corrente a 1/2 digit. Regolare il va-
segnali di input (Figura 17) corrispondente alla lore nel registro IGAIN in modo che la lettura
linea, vengono immessi in modalit differenziale sul preciso misuratore di corrente corrisponda
(linea L e N) nei pin 10-11 per la corrente (input al valore IRMS restituito dal comando di query.
range 120 Vrms~600mVrms), e 15-16 per la Assicurarsi di impostare il PSTARTTH sul va-
tensione (input range 120 Vrms~600mVrms). lore predefinito 0x8BD nel registro 0x27. Scol-
Il chip Atmel dispone di una funzione di diagnosi legare qualsiasi carico e scrivere 0x400 nel
dei parametri e luscita interrupt programmabile registro PNolTh allindirizzo 0x28 (questo impe-
del segnale IRQ e il segnale WarnOut. Lalimen- disce la misura a correnti molto basse quando
tazione per Atmel 90E24 deve essere floating. per esempio non vi nessun carico collegato).
Non conveniente utilizzare un alimentatore da Assicurarsi che il registro LPHI allindirizzo 0x24
laboratorio, ma un opportuno modulo power da impostato a 0. Successivamente, collegare
5 V (power module in figura 17). un carico resistivo noto spento ed eseguire il
comando MQTT reset {comando: resetkwh}.
4. CALIBRAZIONE Accendere il carico per 6 minuti e acquisi-
La calibrazione della scheda (Figura 18 e 19) re il valore kWh con il comando di query,
determina la messa a punto di alcune variabili quindi spegnere il carico. Successivamente,
e in particolare la corretta lettura dellenergia. Il regolare il valore nel registro LGAIN allindirizzo
firmware provveder al corretto salvataggio 0x27, reimpostare resetkwh, e ripetere fino al
della calibrazione nella memoria non volati- raggiungimento del valore desiderato.
le.
Con una sorgente AC collegata e nessun carico
allingresso, sar necessario calibrare la tensio-
ne RMS scrivendo valori di prova per il registro
UGAIN allindirizzo 0x31. Esempio di comando
MQTT il seguente: {command:register,ad
dr:31,value:XXXX} dove XXXX un nu-
mero esadecimale a 4 cifre. La lettura dei valori
di tensione dovr avvenire tramite il comando di
query e, successivamente, si dovr regolare il
guadagno UGAIN fino a raggiungere la correla-
Figura 18: Immagine in primo piano della scheda. A
zione ragionevole. destra una vista dellisolatore USB, in alto il modulo 5 V
Passo successivo sar quello di leggere la cor- power.

54 - Firmware
DESI GN
zione di alcune funzioni.

ALLEGATI

FW-AC-Emeter-master

FW-AC-Emeter-ESP8266-master

Figura 19: Vista 3D del PCB del Power monitoring

5. CONCLUSIONI
Il power monitoring come lo abbiamo descritto
particolarmente adatto per una vasta gamma
di applicazioni come contatori elettrici, nella
domotica e sistemi di sub-metering. La famiglia
dei chip Atmel per misuratori di potenza intelli-
genti presentano una ampia gamma dinamica
del settore insieme ad altri fornitori quali la Te-
xas Instruments con il suo MSP430F677x.
Lobiettivo dei chip smart meter fornire una
elevata precisione nella misura, contribuendo a
migliorare le prestazioni dei contatori intelligen-
ti. Il circuito pu essere modificato introducen-
do altri bus di comunicazione. Una interessante
modifica lutilizzo di un modulo GSM/UMTS
per limplementazione della comunicazione mo-
bile e la condivisione dei dati con linvio dei co-
mandi via GSM per lattivazione o la disattiva-

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/power-line-monitor-open-source-progetto-completo
55 - Firmware
TOOLS

STM32F4 Discovery:
Tasti, PWM, ADC
di Salvatore Armnia
26 Novembre 2015

Nella prima puntata siamo partiti dallintenzione di dare a tutti una buona infarinatu-
ra delle schede STM Discovery al fine di portare il generico neofita a padroneggiare
appieno questa eccezionale scheda. In questa seconda puntata, continuando nel
nostro intento, scopriremo le periferiche pi semplici da utilizzare per completare il
quadro generale di ingressi ed uscite, esplorando gli output analogici e gli ingressi
digitali e analogici, in modo tale che gi dopo questo secondo articolo chiunque pos-
sa iniziare a divertirsi con i sensori e gli attuatori pi comuni. Completeremo il no-
stro articolo con un paio di progetti pratici, realizzando dapprima un dispositivo che
previa attuazione in grado di regolare la luminosit di un LED in funzione della luce
ambientale, per poi concludere con il controllo di un motore in dc. Ma ora basta con
le chiacchiere, facciamo parlare le periferiche.

IL PWM dulation (Modulazione di larghezza di impulso),

T
ralasciando il concetto di uscita di un si- trascurando i dettagli di tale tecnica per i quali
stema, concetto che dovrebbe essere gi rimandiamo a testi pi specialistici, nellottica
abbastanza chiaro e per il quale nel caso del semplice microcontrollore si tratta di un tre-
rimandiamo a testi specialistici, nel primo ap- no di impulsi di durata variabile ad una data fre-
puntamento avevano visto come fosse facile quenza. Ogni impulso non altro che un onda
una volta assegnato ad un determinato pin, il quadra con un periodo fisso, dipendente dalla
ruolo di GPIO, settarlo ad un livello logico alto frequenza del treno, composta da una parte alta
(3.3 Volt sul pin) o basso (0 Volt sul pin) tramite (3.3 Volt) che dura per un certo Ton e una par-
la funzione HAL_GPIO_WritePin() ora invece te bassa (0 Volt) che dura per un certo Toff
vedremo come impostare sul pin una tensione come mostrato in nella figura 1.
variabile compresa tra i 0 e i 3.3 Volt, mediante Se la frequenza del treno sufficientemente
le periferiche PWM del microcontrollore. alta rispetto alle frequenze dei device a valle
Il termine PWM lacronimo di Pulse-Width Mo- possibile far arrivare a questultimi una tensione

56 - Firmware
TOOLS
variabile tra 0 e 3.3 Volt semplicemente cam- nuovo impulso.
biando i tempi di on ed off dellonda quadra. Il
tempo del treno, ovvero il tempo tra due impulsi Nelle STM32 Discovery boards un segnale di
successivi, ovviamente sar linverso della fre- tipo PWM viene generato mediante lutilizzo
quenza di questultimo o pi semplicemente la dei timer interni al microcontrollore (gi incon-
somma dei tempi di on ed off, T = Ton + Toff. trati nella puntata precedente) ricordiamoci
Il rapporto tra il Ton e il tempo globale T, pren- che il microcontrollore che stiamo utilizzando
de il nome di duty cycle, pertanto se vogliamo monta a bordo ben 12 timers (fig. 2), che nel
creare una tensione variabile ci baster agire su nostro esempio useremo il timer 3 per la gene-
questultimo, nel caso per esempio in cui voglia- razione del segnale pwm e che lo faremo tra-
mo una tensione nulla, imporremo un duty cycle mite un apposita funzione che abbiamo scritto
del 0%, ovvero solo Toff, nel caso in cui voglia- WritePulse. Spiegheremo il funzionamento di
mo una tensione media di 3.3 Volt, useremo il questultima pi avanti quando vedremo il codi-
duty cycle massimo, ovvero solo Ton e nel caso ce completo del nostro esempio.
in cui ad esempio vogliamo una tensione di 0.33
Volt imporremo un duty cycle del 10% in quanto ADC
0.33 volt esattamente il 10% della tensione La periferica ADC, come da acronimo Analog-
massima. Digital Converter, non altro che un converti-
tore analogico digitale. In questa
sede tralasceremo ancora un vol-
ta i dettagli un po pi tecnici per
i quali come sempre rimandiamo
a testi pi specialistici, e ci limite-
remo a dare un breve spiegazio-
ne dei concetti e delle grandezze
relative a questa periferica, come
la risoluzione, il sampling rate e
Figura 1 : Variazione della Tensione Media al Variare del
Duty Cycle
laliasing.
Un convertitore analogico digitale si occupa di

Rimanendo sempre su questultimo esempio convertire un segnale analogico tempo costan-

se abbiamo una frequenza del treno di 100 Hz, te, teoricamente periodico, in un insieme di va-

ovvero un periodo di 10 ms tra due impulsi se- lori digitali quantizzati da un certo numero di bit.

guenti e vogliano una tensione di 0.33 Volt, il Il numero di bit usati per quantizzare il segnale,

Ton sar il 10% del totale e quindi 1 ms, mentre non altro che la risoluzione del convertitore,

londa star bassa per i restanti 9 ms, prima del ad esempio supponiamo di avere un ADC con

57 - Firmware
TOOLS
livelli logici del tipo TTL, dove quindi ad un bit di tale vale 512, se il segnale analogico vale 5 Volt
valore 1 corrisponde quindi un valore di tensio- il digitale vale 1023 e cos via.
ne di 5 Volt, mentre al valore 0 corrisponde un In conclusione la risoluzione serve a fissare il
valore di tensione di 0 Volt e un risoluzione di 10 valore minimo di tensione rilevabile dal converti-
bit, In queste condizioni possiamo campionare tore, ad essa di conseguenza legato lerrore di
un segnale analogico compreso in tensione tra quantizzazione, ovvero lerrore commesso dal
0 e 5 Volt tramite 1024 valori, ovvero due ele- convertitore durante la conversione. Se come
vato alla decima, ovvero lintervallo di tensioni nellesempio precedente associato ad ogni
possibili tra i 0 e i 5 volt, viene suddiviso in 1024 bit un valore di tensione di 4.88 mVolt il con-
intervalli pi piccoli di dimensione di circa 4.88 vertitore restituir il valore 1 sia che il segnale
mVolt (5/1024) ognuno dei quali associato ad analogico valga 4.88 mVolt sia che il segnale
ogni singolo bit, ovvero ad ogni variazione di analogico valga 7 mVolt, e ci accade proprio
4.88 mV corrisponde la variazione di un bit del perch la risoluzione pi alta della variazione
segnale duscita del convertitore. in questione.
Con il sampling rate si identi-
fica il tempo di campionamen-
to, ovvero il tempo minimo
tra la lettura di una campione
digitale e il successivo. Per il
teorema di Shannon per cam-
pionare bene un segnale pe-
riodico bisogna leggerlo con
un frequenza che sia almeno
il doppio di quella del segnale
stesso, pertanto quando si ha
intenzione di usare un con-
vertitore analogico digitale
sempre buona norma ave-
re una stima dalla frequenza
del segnale da convertire per
Figura 2 : Riepilogo dei Timer a bordo del microcontrollore settare in modo opportuno il sampling rate di
questultimo.
Ricapitolando se ad esempio il segnale analogi- Un tempo di campionamento errato genera il
co vale 4.88 mV il segnale digitale vale 1, se il fenomeno dellaliasing, infatti, come accen-
segnale analogico vale 2.5 Volt il segnale digi- nato quando si campiona un segnale non si fa

58 - Firmware
TOOLS
altro che leggere il valore
istantaneo di tensione del
segnale da campionare a
determinati tempi discreti
t1, t2, t3, ect Guardando
il segnale campionato quin-
di non possibile ricostrui-
re landamento del segnale
originale nel tempo com-
preso ad esempio tra t1 e
t2, se pertanto il tempo di
campionamento maggio-
re del tempo del segnale,
ovvero se la frequenza di
campionamento inferiore
alla frequenza del segnale,
nel segnale campionato po-
trebbero mancare pezzi importanti del segnale
Figura 3 : Riepilogo delle periferiche ADC a bordo del
originale che possono causare errore o strani microcontrollore
effetti. Ad esempio quasi sempre nei film sem-
bra che le pale degli elicotteri o le ruote delle Per luso dellADC nel nostro caso useremo la
automobili girino al contrario e questo avviene funzione ADC_Read() che vedremo in detta-
proprio per il fenomeno dellaliasing in quanto glio nella prossima sezione.
la frequenza di campionamento della cinepresa
inferiore rispetto alla frequenza di rotazione Linterruttore Crepuscolare
delle ruote. Chiariti un po velocemente i concetti di PWM ed
I microcontrollori STM32 e di conseguenza le ADC passiamo al nostro secondo progetto, che
Discovery board montano a bordo ben 16 pe- ci permetter di prendere confidenza con que-
riferiche ADC, ognuna delle quali ha un risolu- ste nuove periferiche e con gli ingressi digitali.
zione di 12 bit su una tensione campionabile di Lesempio che proponiamo come sempre
3.3 Volt, ottenendo quindi un risoluzione di 0.8 semplice ma esplicativo, realizzeremo un inter-
mVolt (3.3/4096). ruttore crepuscolare, ovvero un dispositivo che
una volta attivato (disattivato) tramite un tasto
regola tramite un onda PWM la luminosit di un
led al variare dei valori di luce letti tramite un

59 - Firmware
TOOLS
ADC da una banale fotoresistenza. I quattro led caso il centro delle due reistenze collegato
a bordo della Discovery verranno utilizzati per allADC del microcontrollore tramite il pin PA1,
indicare laccensione o meno del crepuscolare. mentre il partitore viene completato da una re-
Prima di andare sui dettagli del codice spendia- sistenza da 47 KOhm, in questo modo il valore
mo due righe sullo schematico in questione. di tensione sullingresso dellADC varia da circa
0.6 V ((10/(10+47))*3.3) in condizioni di buio a
circa 2.5 V ((150/(150+47)*3.3) in condizioni di
luce. Per quanto riguarda il LED connesso al
segnale pwm, si tratta di un normalissimo led
ad alta luminosit connesso in serie ad un resi-
stenza in modo da limitare la caduta di tensione
su questultimo.

Figura 5 : Esempio di Fotoresistenza


Figura 4 : Componenti Esterni alla Scheda
Firmware
Per quanto riguardo lo schema elettrico oltre a Descritto lhardware finalmente possiamo
quello che si trova gi a bordo della Discovery passare alla scrittura del firmware. Apriamo
per il nostro esempio ci serve una fotoresisten- STM32CubeMX e rifacendo gli stessi passi vi-
za, un LED e le resistenze necessarie per utiliz- sti nel precedente articolo impostiamo i quattro
zare questultime (fig. 4). pin connessi ai led (PD12, PD13, PD14, PD15)
Una fotoresistenza un componente passivo come uscite digitali (GPIO_Output),il pin con-
capace di cambiare la propria resistenza elettri- nesso al tasto PA0 come ingresso digitale col-
ca al variare della luce che la colpisce. General- legato ad una interruzione (GPIO_EXTI0), il
mente una fotoresistenza ha un valore di circa pin dellADC PA1 (ADC1_IN1) e il pin del PWM
10/15 KOhm al buio e di circa 150 KOhm in con- PA6 (TIM3_CH1), ricordando che tali pin di-
dizioni di luce; per la corretta lettura di questo pendono dal microcontrollore utilizzato e che
sensore normalmente questultimo viene inse- nel nostro caso usiamo il microcontrollore della
rito in un partitore resistivo e viene letto il valo- serie STM32F407VGTx, su CubeMX otterremo
re di tensione tra le due resistenze. Nel nostro qualcosa di simile a ci che e mostrato nella

60 - Firmware
TOOLS
figura 6. periferica come mostrato nella figura 8.

Finito con il timer cliccando nella sezione GPIO


(fig. 7) controlliamo la configurazione dei pin
utilizzati ed in particolare apriamo la configura-
zione del GPIOA_Pin0 che corrisponde allu-
ser- button, settando la GPIO mode in External
Interrupt Mode with Falling Edge Trigger Detec-
tion.
Generato il codice tramite CubeMX per limpor-
tazione su CoIDE ripetiamo esattamente tutti i
passaggi visti nel precedente articolo e conclu-
diamo con la prima compilazione.
Adesso abbiamo tutte le periferiche che ci in-
Figura 6 : Configurazione su STM32CubeMX teressano inizializzate ed inserite nel progetto,
passiamo alla scrittura del nostro codice.
A questo punto prima di compilare dobbiamo Il codice completo scaricabile in allegato, in
configurare tutte le periferiche in modo opportu- questo secondo capitolo il codice ovviamente
no, per questo basta cliccare su configuration un po pi complesso, ma esaminando le sin-
tra le tabs di CubeMX dovremmo vedere qual- gole funzioni scopriremo che ognuna di queste
cosa di simile a quanto mostrato nella figura 7. abbastanza semplice da scrivere e compren-
dere.
Partiamo dal controllo dellaccen-
sione / spegnimento del sistema
tramite la pressione delluser-but-
ton, per poi vedere come leggere
i valori di luminosit ambientale e
come variare lintensit del LED in
Figura 7 : Riepilogo delle periferiche inserite nel progetto base ai valori letti.
In questa sede tralasceremo la gestione dei
Clicchiamo su TIM3 e modifichiamo i parame- LED per la quale rimandiamo allarticolo prece-
tri dinizializzazione del timer in particolare il dente e vedremo soltanto le novit.
counter period ponendolo uguale a 7999, (nel
codice fra i commenti vengono riportati i conti Gestione dellUser Button: Questultimo
fatti per ottenere questo numero) e settiamo la connesso al pin PA0 e alla sua pressione viene

61 - Firmware
TOOLS

Figura 8 : Configurazione del Timer

generata uninterruzione, in corrispondenza del- controllo crepuscolare, quando mode uguale


la quale viene eseguita una funzione. Abbiamo a ON vengono accessi i 4 LED integrati della di-
scelto questa strategia (generazione di un inter- scovery, viceversa nel caso in cui mode ugua-
rupt) per ovviare in modo semplice al problema le a OFF.
dellantirimbalzo del tasto.
Operativamente bisogna dapprima abilitare la Gestione ADC: Capiamo ora come gesti-
funzione che controlla la pressione del tasto e re la lettura dei vari livelli di luminosit tramite
poi specificare cosa fare nel caso in cui il tasto la periferica ADC. A tal scopo abbiamo scritto
viene premuto e viene quindi generata lapposi- la funzione unsigned int ADC_Read(ADC_
ta interruzione. HandleTypeDef *hadc), questa viene richia-
Per il primo aspetto, ovvero labilitazione del mata allinterno del loop infinito prende come
controllo del tasto, aggiungiamo allinterno della argomento lADC che stiamo utilizzando. In
funzione SysTick_Handler(void) contenuta nel questo modo sar possibile nei prossimi proget-
file stm32f4xx_it.c listruzione HAL_GPIO_ ti riutilizzare la stessa funzione anche nel caso
EXTI_IRQHandler(GPIO_PIN_0). in cui ci serviranno pi periferiche ADC. Nel no-
Adesso dobbiamo scrivere il codice da attivare stro caso passeremo come parametro la strut-
nel caso in cui venga premuto il tasto. tura precedentemente configurata dalle funzioni
La callback che controlla la pressione del tasto di inizializzazione autogenerate da STMCube.
void HAL_GPIO_EXTI_Callback (uint16_t La funzione infine ritorna il valore letto dallADC,
GPIO_Pin) e il codice che scriviamo dentro che viene dapprima abilitato alla conversione
questultima molto semplice, ovvero non fac- tramite la funzione HAL_ADC_Start(hadc),
ciamo altro che incrementare una variabile sta- dove hadc il parametro che indica quale ADC
tica mode che accende (ON) o spegne (OFF) utilizzare, e poi tramite la funzione HAL_ADC_
il controllo crepuscolare del LED. Inoltre per GetValue(hadc), il valore letto viene infine sal-
avere anche un feedback visivo sullo stato del vato nella variabile sample.

62 - Firmware
TOOLS
Gestione PWM: Infine vediamo come gestire il incollata fuori dalla funzione, facendola quindi
PWM. Il pulse del PWM viene variato in base ai diventare una struttura globale visibile anche da
valori letti dalla foto resistenza solo nel caso in altre funzioni: in questo modo possiamo inserirla
cui la variabile statica mode sia uguale a ON, come parametro della funzione WritePulse(...).
ovvero il controllo crepuscolare sia stato pre- Va detto che, avendo reso la funzione quanto
cedentemente acceso tramite la pressione del pi generale possibile dando al programmato-
tasto. Il convertitore analogico-digitale (ADC) re la possibilit di specificare il canale del timer
lavora a 12 bit ritornando quindi un valore com- come parametro, abbiamo dovuto inserire un
preso tra 0 e 4095, mentre il max pulse che controllo sulla bont del canale passato come
possiamo associare al PWM uguale a 7999, parametro. In particolare avendo a disposizio-
cos come stabilito quando abbiamo configurato ne 4 canali, i valori ammessi saranno uguali a
il timer ad esso associato. Per avere una certa quelli delle define globali TIM_CHANNEL_1,
uniformit di valori abbiamo pertanto deciso di TIM_CHANNEL_2, TIM_CHANNEL_3 e TIM_
moltiplicare il valore letto dallADC per 1.95 (ot- CHANNEL_4.
tenendo un range di valori da 0 a 7985) in modo Fatto questo abbiamo modificato il campo pul-
da ottenere variazioni di luminosit pi nette e di se della struttura, passata come parametro,
sfruttare il pi possibile il range del PWM. assegnando sConfig.Pulse = pulse. Infine,
La gestione del pulse del PWM avviene tramite dopo aver modificato il pulse, allinterno della
lapposita funzione WritePulse bisogna richiamare le funzioni per
WritePulse (TIM_HandleTypeDef* htimer, la riconfigurazione dei parametri associati alla
TIM_OC_InitTypeDef sConfig, int pulse, struttura htimer. Nel nostro caso stiamo usando
uint32_t channel). Anche in questo caso ab- il Timer 3 collegato alla struttura htimer, ot-
biamo cercato di scrivere una funzione che fos- tenendo infine HAL_TIM_PWM_ConfigChan-
se il pi portabile possibile in modo da riciclarla nel (htimer, &sConfig, channel) e HAL_TIM_
nei progetti futuri. La funzione pertanto prende PWM_Start (htimer, channel).
come parametri la struttura del timer di cui vo-
gliamo modificare il pulse, la struttura sConfig e ora Controlliamo un Motore in Continua
utilizzata nella funzione di inizializzazione del In questo secondo progettino pratico ci occu-
timer, il valore da associare alla variabile pulse peremo del controllo di un motore in continua
e il canale del timer da modificare. tramite un potenziometro, ovvero il nostro mi-
Per la scrittura della funzione WritePulse par- crocontrollore legger i valori in tensione su un
tendo dalla funzione dinizializzazione del timer potenziometro e regoler la velocit a vuoto di
MX_TIM3_Init(void) abbiamo tagliato la strut- un motore in continua. In particolare un valore
tura utilizzata per linizializzazione del timer di tensione di 3.3 V far girare il motore al mas-
TIM_OC_InitTypeDef sConfigOC e labbiamo simo in un verso, un valore di 0 V lo far girare

63 - Firmware
TOOLS
alla massima velocit nel verso opposto e un ca strategia valida quella di far costantemente
valore di 1.65 V tender a far star fermo il mo- oscillare questultimo attorno ad una posizione
tore. desiderata. Per controllare quindi in posizio-
In questo caso in firmware abbastanza simile ne un motore in continua, come quelli presen-
a quello precedentemente visto e ci limiteremo ti allinterno dei servo motori bisogna fissare
pertanto a spiegare soltanto quello che voglia- dapprima una posizione desiderata, e partendo
mo fare lasciando il resto ai commenti presenti dalla posizione attuale (letta tramite un apposito
sul codice, ma prima di passare al firmware ci sensore), far oscillare tramite un controllore (ba-
sembra invece doveroso spendere qualche pa- sta un semplice PID), lalbero duscita attorno a
rola sui motori in continua e sui circuiti per il loro quella posizione. Lintensit di tale oscillazione
controllo. ovviamente dipender dai parametri del control-
Un motore in dc offre elevate prestazioni, in lore (nel caso del PID soprattutto dal fattore pro-
termini di robustezza meccanica, ridotte dimen- porzionale P).
sioni e bassi costi e consumi, per questi motivi
nel corso degli ultimi ventanni, ad eccezione
dei motori passo-passo usati per scopi diversi,
i motori in dc hanno spiazzato qualsiasi altra ti-
pologia di motore. Oggi quasi tutti i dispositivi di
media e piccola potenza montano un motore in
continua. Il principio fisico di funzionamento di Figura 9 : Esempio di Motore in DC
un motore in continua, come in tutti i motori elet-
trici si basa sul magnetismo, nel pi semplice Il pilotaggio del motore un punto molto deli-
dei casi, un motore a magneti permanenti: si ha cato quando si controllano motori in continua
uno statore attorno al quale sono avvolti dei fili in posizione, bisogna infatti, avere un circuito
e un rotore composto da un nucleo ferromagne- versatile capace di cambiare in modo semplice
tico; quando scorre corrente sui fili dello statore il senso di rotazione del motore e di erogare a
questo genera un campo magnetico che viene questultimo una corrente in funzione dellerro-
inseguito dal magnete allinterno che costitui- re di posizione. La soluzione pi semplice e pi
sce il rotore. diffusa a riguardo il circuito a ponte H (fig .10).
Lincontro di questi motori con i moderni disposi- In questa sede daremo un breve descrizione di
tivi di controllo come i driver rende il controllo in questo circuito lasciando varianti, dimostrazioni
coppia di questultimi semplice ed affidabile. Un fisiche e matematiche a testi pi specialistici.
discorso a parte merita invece il controllo in po- Un ponte H, proprio come la lettera composto
sizione, infatti, non potendo mai bloccare lalbe- da due gambe ognuna delle quali a sua volta
ro di un motore dc su una posizione fissa, luni- composta da due interruttori in serie e il mo-

64 - Firmware
TOOLS
tore viene attaccato tra le due gambe al centro fatti un motore normalmente composto da una
di queste. Nel caso in figura vengono usati due parte resistiva e da una parte reattiva sotto for-
transistor bjt come interruttori, questi possono ma di induttore. Quando passa corrente sul cir-
cambiare dimensioni e tipologia (mos ad esem- cuito tutti gli elementi induttivi presenti accumu-
pio) in funzione del motore da pilotare o della lano corrente che poi normalmente rilasciano al
corrente da erogare a questultimo. Il funziona- circuito nel momento in cui la corrente esterna
mento molto semplice ad ogni istante vengo- cessa di esistere, pertanto bisogna tener conto
no accesi due interruttori diametralmente oppo- che questi elementi in certi istanti possono fun-
sti, nel caso in figura ad esempio la coppia dei gere da generatore di corrente, immettendo nel
transistor T1 e T4 che faranno ruotare in motore resto del circuito correnti che potrebbero dan-
in un senso e la coppia dei transistor T2 e T3 neggiare il circuito stesso. Per questo vengono
che lo faranno ruotare nel verso opposto. Non inseriti in antiparallelo ai transistor dei diodi che
possibile o quantomeno totalmente inutile nel caso di correnti indesiderate chiudono su se
accendere i due transistor di una stessa gamba, stessi una piccola maglia circuitale e scaricano
in quanto si creerebbe semplicemente un corto le correnti parassite.
circuito tra la tensione di alimentazione e mas-
sa che non avrebbe nessun effetto sul motore
ma che anzi potrebbe danneggiare il resto del
circuito. Allo stesso modo non ha senso accen-
dere contemporaneamente due transistor paral-
leli come T1 e T3 in quanto questi si trovano
gi allo stesso potenziale elettrico e quindi non
si avrebbe corrente sul motore. Riassumendo
accendendo in modo opportuno le due coppie
di interruttori un circuito a ponte H in grado di
pilotare un motore in dc in entrambi i versi di ro- Figura 10 : Esempio di Full Brigde
tazione. La velocit di rotazione nel caso in cui
luscita del motore sia libera di ruotare dipende Spese due parole su motore e controllo, tor-
invece dai tempi di accensione e spegnimento niamo al nostro esempio, dove nello specifico
degli interruttori, pi tempo una coppia di inter- utilizzeremo un classico nel campo dei driver
ruttori resta accesa e maggiore sar la tensione ovvero: L293D.
efficace che arriva al motore fino al suo massi- Questo semplice integrato ci permette di con-
mo valore possibile. trollare contemporaneamente fino a due motori
Un ultima considerazione va fatta suoi diodi pre- con una corrente nominale di 600 mA o un picco
senti nel circuito, ovvero i diodi di ricircolo. In- di 1.2 A, mentre la tensione massima con cui

65 - Firmware
TOOLS
si pu pilotare i motori di 36 V. Nelle figure Nella figura 14 viene mostrato lo schema cir-
11, 12 e 13 vengono riportati rispettivamente lo cuitale del progetto. Per mantenere lo schema
schema a blocchi del driver, il pin-out della ver- il pi generico possibile non abbiamo indicato
sione in DIP e la tabella di verit per un singolo le connessioni tra i pin della Discovery e il ri-
canale. spettivo hardware. In particolare i tre pin di ali-
mentazione (5V, Gnd e Tensione-Motore) vanno
connessi rispettivamente a 5V, a Ground ed a
una tensione compatibile con la tensione del
motore. Nel nostro caso, per testare il circuito
abbiamo usato un motore di ridotte dimensioni
alimentandolo a 7V.

Figura 11 : Schema Interno del L293D

Figura 14: Schema Circuitale del Progetto

Per quanto riguarda gli altri pin, i due ingressi


del driver (Input 1 e Input 2) vanno collegati a
Figura 12: Pin-Out del L293D due uscite PWM della Discovery, in particolare
abbiamo usato il PA6 (collegato al Timer 3) ed
il PB6 (collegato al Timer 4). In funzione di que-
ste connessioni verr stabilito il verso di rotazio-
ne del motore (per esempio connettendo il PA6
allinput 1 con tensione di 0V sul potenziometro
il motore girer in verso orario, viceversa con-
nettendo il PA6 allinput 2). Per quanto riguar-
Figura 13: Tavola delle Verit del L293D da il potenziometro questo andr collegato ad

66 - Firmware
TOOLS
un canale ADC della Discovery, nello specifico non meno importante, per avermi spronato a ci-
abbiamo utilizzato ADC1 (IN1) collegato al pin mentarmi in questa nuova esperienza.
PA1.
Come gi detto il firmware (scaricabile in allega-
to) di questo secondo esempio molto simile a ALLEGATO
quello dellinterruttore crepuscolare, ovvero vie-
ne letto un valore tramite lADC del microntrol- FileSorgenti.zip
lore ed in funzione di questo vengono generate
due onde PWM che controlleranno poi il moto-
re, pertanto lasceremo al lettore il dettaglio delle
singole funzioni che lo compongono.
Anche il secondo appuntamento con le
STM32 Discovery finito. Nel prossimo
capitolo approfondiremo unaltra temati-
ca interessante quando si lavora con i mi-
crocontrollori, ovvero la comunicazione. Ci
soffermeremo in particolare sul protocollo
UART che ci permetter di far comunicare il
microcontrollore con un computer e sui pro-
tocolli SPI e I2C che quasi sempre sincon-
trano quando si lavora con sensori un po
pi complessi, come gli accelerometri. Infine
vedremo unapplicazione pratica creando un
piccolo dispositivo, che acquisendo le infor-
mazioni da un accelerometro sar capace di
inviarci, tramite porta seriale del computer,
la propria inclinazione rispetto al suolo.
Questo secondo articolo sulle STM Discovery
stato scritto con la collaborazione di Gaspare
Santaera, che colgo loccasione di ringraziare
per il tempo e la pazienza dedicatami e cosa

Lautore e a disposizione nei commenti per eventuali approfondimenti sul tema dellArticolo.
Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/stm32f4-discovery-tasti-pwm-adc
67 - Firmware

Potrebbero piacerti anche