STM32F4 Discovery: Tasti, PWM, ADC

Nella prima puntata  siamo partiti dall'intenzione di dare a tutti una buona infarinatura 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 possa iniziare a divertirsi con i sensori e gli attuatori più comuni. Completeremo il nostro 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

Tralasciando il concetto di uscita di un sistema, concetto che dovrebbe essere già abbastanza chiaro e per il quale nel caso rimandiamo a testi specialistici, nel primo appuntamento avevano visto come fosse facile una volta assegnato ad un determinato pin, il ruolo di GPIO, settarlo ad un livello logico alto (3.3 Volt sul pin) o basso (0 Volt sul pin) tramite la funzione "HAL_GPIO_WritePin()" ora invece vedremo come impostare sul pin una tensione variabile compresa tra i 0 e i 3.3 Volt, mediante le periferiche PWM del microcontrollore.

Il termine PWM è l'acronimo di Pulse-Width Modulation (Modulazione di larghezza di impulso), trascurando i dettagli di tale tecnica per i quali rimandiamo a testi più specialistici, nell'ottica del semplice microcontrollore si tratta di un treno di impulsi di durata variabile ad una data frequenza. Ogni impulso non è altro che un onda quadra con un periodo fisso, dipendente dalla frequenza del treno, composta da una parte alta (3.3 Volt) che dura per un certo "Ton" e una parte bassa (0 Volt) che dura per un certo "Toff" come mostrato in nella figura 1.

Se la frequenza del treno è sufficientemente alta rispetto alle frequenze dei device a valle è possibile far arrivare a quest'ultimi una tensione variabile tra 0 e 3.3 Volt semplicemente cambiando i tempi di on ed off dell'onda quadra. Il tempo del treno, ovvero il tempo tra due impulsi successivi, ovviamente sarà l'inverso della frequenza di quest'ultimo o più semplicemente la somma dei tempi di on ed off, T = Ton + Toff.

Il rapporto tra il Ton e il tempo globale T, prende il nome di "duty cycle", pertanto se vogliamo creare una tensione variabile ci basterà agire su quest'ultimo, nel caso per esempio in cui vogliamo una tensione nulla, imporremo un duty cycle del 0%, ovvero solo Toff, nel caso in cui vogliamo una tensione media di 3.3 Volt, useremo il duty cycle massimo, ovvero solo Ton e nel caso in cui ad esempio vogliamo una tensione di 0.33 Volt imporremo un duty cycle del 10% in quanto 0.33 volt è esattamente il 10% della tensione massima.

duty_cycle

Figura 1 : Variazione della Tensione Media al Variare del Duty Cycle

 

Rimanendo sempre su quest'ultimo esempio se abbiamo una frequenza del treno di 100 Hz, ovvero un periodo di 10 ms tra due impulsi seguenti e vogliano una tensione di 0.33 Volt, il Ton sarà il 10% del totale e quindi 1 ms, mentre l'onda starà bassa per i restanti 9 ms, prima del nuovo impulso.

Nelle STM32 Discovery boards un segnale di tipo PWM viene generato mediante l’utilizzo dei timer interni al microcontrollore (già incontrati nella puntata precedente) ricordiamoci che il  microcontrollore che stiamo utilizzando monta a bordo ben 12 timers (fig. 2), che nel nostro esempio useremo il timer 3 per la generazione del segnale pwm e che lo faremo tramite un apposita funzione che abbiamo scritto “WritePulse”. Spiegheremo il funzionamento di quest’ultima più avanti quando vedremo il codice completo del nostro esempio.

 

ADC

La periferica ADC, come da acronimo Analog-Digital Converter, non è altro che un convertitore analogico digitale. In questa sede tralasceremo ancora un volta i dettagli un po più tecnici per i quali come sempre rimandiamo a testi più specialistici, e ci limiteremo a dare un breve spiegazione dei concetti e delle grandezze relative a questa periferica, come la risoluzione, il sampling rate e l’aliasing.

Un convertitore analogico digitale si occupa di convertire un segnale analogico [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 4159 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

7 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 26 novembre 2015
    • Gaspare Santaera Gaspare Santaera 26 novembre 2015
  2. Daniele Facchin 26 novembre 2015
    • Gaspare Santaera Gaspare Santaera 26 novembre 2015
      • Daniele Facchin 26 novembre 2015
        • Alessio Cacciapuoti 4 luglio 2017

Scrivi un commento