Eccomi di rientro dalle festività con tantissime nuove idee e progetti per il 2014, il primo che voglio presntarti riguarda il mo autoregalo natalizio il DSO nano v3 arduino PWM
Il regalo in particolare è il DSO Nano V3 che ho voluto subito collaudare con arduino generando un segnale PWM variabile in funzione di un potenziometro da 10K.
DSO nano V3
Il DSO nano V3 è un oscilloscopio prodotto dalla seeedstudio
che mette a tua disposizione un’ottima Wiki in cui descrive non solo le caratteristiche del prodotto ma anche come utilizzarlo.
Nell’immagine presa dalla Wiki del produttore puoi vedere la disposizione e la funzione di ciascun singolo pulsante e connettore per le sonde.
Unboxing DSO Nano V3
Era mia intenzione realizzare un filmato sull’unboxing del DSO Nano V3 prima di utilizzarlo in questo articolo ma cercando su youtube ho trovato questo video davvero ben fatto e farne un duplicato mi è sembrato superfluo:
DSO Nano V3 arduino PWM
Il progetto DSO Nano v3 arduino PWM ha lo scopo di testare il funzionamento del DSO leggendo il segnale PWM generato con Arduino. Qualche mese fa ho pubblicato questo articolo: Frequenza PWM su Arduino e Duty Cycle in cui hai letto come funzionano i Timer arduino e come siano connessi ai pin arduino. In particolare per eseguire il mio primo test ho deciso di utilizzare il pin 3, connesso al Timer2 Regostro B, con prescaler 64 che imposta la frequenza del pin a 488Hz di default. Ricorda che puoi variare la frequenza del segnale PWM ma non il Duty-Cycle agendo sui Timer corrispondenti ed i prescaler; la variazione del Duty-Cycle puoi ottenerla via sketch.
Lo sketch del DSO Nano v3 arduino PWM
Per terstare il funzionamento del mio DSO Nano v3 arduino PWM ho scritto uno sketch in cui leggi il valore di un potenziometro connesso al pin A0 ed in funzione del valore letto moduli il Duty-Cycle da 0% a 100%.
Important!
Ricorda che il segnale PWm output in arduino ha un range da 0 a 255 (256 valori) corrispondente rispettivamente a 0% e 100%; un Duty Cycle del 50% sarà rappresentato dal valore 128. Di contro la lettura dei segnali analogici sui pin A0-A5 è di 10bit ossia del range 0-1023. ( 1024 valori ) Tale discrepanza può essere colmata in questo esempio con una banale divisione 1024/4 = 256 In questo modo otterrai che per il valore 0 letto sul pin A0 avrai il duty cycle 0% sul pin 3, per 512 su A0 avrai 128 sul pin 3 e per 1023 sul pin A0 avrai 255 sul pin 3.
Passa allo sketch:
#define pinOutput 3 #define pinPot A0 void setup() { pinMode( pinOutput,OUTPUT ); pinMode( pinPot,OUTPUT ); analogWrite( pinOutput,LOW ); } void loop() { int pot = (analogRead( pinPot ) / 4); analogWrite( pinOutput,pot ); }
avrai già notato la semplicità di questo sketch, il punto più complesso è nelle linee 12-13:
linea 12: leggi il valore del poteziometro con il comando analogRead( pin ) e lo dividi in 4 per la teoria che puoi leggere le riquadro sopra, assegnando il risultato alla variabile pot di tipo integer;
linea 13: usa il comando analogWrite( pin,val ) per impostare il valore calcolato alla linea 12 come duty cycle del pin 3 PWM.
Come funziona DSO Nano v3 arduino PWM
Ruotando il potenziometro varia il valore PWM generato sul pin 3 e sul DSO Nano visualizzi l’onda quadra con il duty cycle generato.
Quando il valore del potenziometro è 0 vedrai una linea continua a livello basso ( LOW ) o 0v che indica un PWM 0%:
ruotando il potenziometro a circa 1/4 della sua corsa il PWM arriva pian piano al 25% visualizzando quanto in figura:
ruotando il potenziometro a circa 1/2 della sua corsa il PWM generato è 50% e l’onda che visualizzi è:
continua la rotazione fino ai 3/4 della corsa del potenziometro e generi un onda con PWM 75%:
Nel video puoi osservare anche le variazioni intermedie dei valori PWM visualizzati sul DSO nano v3 arduino PWM al variare del duty cycle:
Buon test !!!