- Cos'è un segnale PWM?
- Come convertire il segnale PWM in tensione analogica?
- Schema elettrico:
- Programmazione dell'MSP per il segnale PWM:
- Controllo della luminosità del LED con PWM:
Questo tutorial fa parte di una serie di tutorial MSP430G2 LaunchPad in cui stiamo imparando a utilizzare MSP430G2 LaunchPad di Texas Instruments. Finora abbiamo appreso le basi della scheda e abbiamo spiegato come leggere la tensione analogica, l'interfaccia LCD con MSP430G2 ecc. Ora procediamo con il passaggio successivo dell'apprendimento del PWM in MSP430G2. Lo faremo controllando la luminosità di un LED variando il potenziometro. Quindi il potenziometro sarà collegato a un pin analogico dell'MSP430 per leggere la sua tensione analogica, quindi si consiglia di leggere il tutorial sull'ADC prima di procedere.
Cos'è un segnale PWM?
Pulse Width Modulation (PWM) è un segnale digitale più comunemente utilizzato nei circuiti di controllo. Questo segnale è impostato alto (3,3 V) e basso (0 V) in un tempo e una velocità predefiniti. Il tempo durante il quale il segnale rimane alto è chiamato "tempo di accensione" e il tempo durante il quale il segnale rimane basso è chiamato "tempo di spegnimento". Esistono due parametri importanti per un PWM come discusso di seguito:
Ciclo di lavoro del PWM:
La percentuale di tempo in cui il segnale PWM rimane ALTO (tempo di attivazione) viene chiamata duty cycle. Se il segnale è sempre ON è nel duty cycle del 100% e se è sempre spento è nel duty cycle dello 0%.
Ciclo di lavoro = Tempo di accensione / (Tempo di accensione + Tempo di spegnimento)
Frequenza di un PWM:
La frequenza di un segnale PWM determina la velocità con cui un PWM completa un periodo. Un periodo è completo ON e OFF di un segnale PWM come mostrato nella figura sopra. Nel nostro tutorial la frequenza è di 500Hz in quanto è il valore di default impostato da Energia IDE.
Esistono moltissime applicazioni per segnali PWM in tempo reale, ma per darvi un'idea il segnale PWM può essere utilizzato per controllare i servomotori e può anche essere convertito in tensione analogica che può controllare la luminosità della luminosità di un LED. Impariamo un po 'su come potrebbe essere fatto.
Ecco alcuni esempi PWM con altri microcontrollori:
- Generazione di PWM utilizzando il microcontrollore PIC con MPLAB e XC8
- Controllo servomotore con Raspberry Pi
- Dimmer LED basato su Arduino con PWM
Controlla tutti i progetti relativi al PWM qui.
Come convertire il segnale PWM in tensione analogica?
Per i segnali PWM alla tensione analogica possiamo utilizzare un circuito chiamato filtro RC. Questo è un circuito semplice e più comunemente usato per questo scopo. Il circuito include solo un resistore e un condensatore in serie come mostrato nel circuito sottostante.
Quindi quello che fondamentalmente accade qui è che quando il segnale PWM è alto il condensatore si carica attraverso il resistore e quando il segnale PWM si abbassa il condensatore si scarica attraverso la carica immagazzinata. In questo modo avremo sempre una tensione costante in uscita che sarà proporzionale al duty cycle PWM.
Nel grafico mostrato sopra, quello di colore giallo è il segnale PWM e quello di colore blu è la tensione analogica in uscita. Come puoi vedere l'onda di uscita non sarà un'onda DC pura, ma dovrebbe funzionare molto bene per la nostra applicazione. Se hai bisogno di un'onda DC pura per altri tipi di applicazioni, dovresti progettare un circuito di commutazione.
Schema elettrico:
Lo schema del circuito è piuttosto semplice; ha solo un potenziometro e un resistore e un condensatore per formare un circuito RC e il Led stesso. Il potenziometro viene utilizzato per fornire una tensione analogica in base alla quale è possibile controllare il duty cycle del segnale PWM. L'uscita del potenziometro è collegata al Pin P1.0 che può leggere tensioni analogiche. Quindi dobbiamo produrre un segnale PWM, che può essere fatto utilizzando il pin P1.2, questo segnale PWM viene quindi inviato al circuito del filtro RC per convertire il segnale PWM in tensione analogica che viene quindi fornita al LED.
È molto importante capire che non tutti i pin sulla scheda MSP possono leggere la tensione analogica o possono generare pin PWM. I pin specifici che possono eseguire le attività specifiche sono mostrati nella figura seguente. Usalo sempre come guida per selezionare i tuoi pin per la programmazione.
Assembla il circuito completo come mostrato sopra, puoi usare una breadboard e pochi cavi jumper ed effettuare facilmente i collegamenti. Una volta che i collegamenti sono stati effettuati, la mia scheda aveva l'aspetto mostrato di seguito.
Programmazione dell'MSP per il segnale PWM:
Una volta che l'hardware è pronto possiamo iniziare con la nostra programmazione. La prima cosa in un programma è dichiarare i pin che useremo. Qui useremo il pin numero 4 (P1.2) come pin di uscita poiché ha la capacità di generare PWM. Quindi creiamo una variabile e assegniamo il nome del pin in modo che sia facile farvi riferimento in seguito nel programma. Alla fine viene fornito il programma completo.
int PWMpin = 4; // Stiamo usando il 4 ° pin sul modulo MSP come pin PWM
Successivamente entriamo nella funzione di configurazione . Qualunque codice sia scritto qui verrà eseguito solo una volta, qui dichiariamo che stiamo usando questo 4 ° pin come pin di output poiché PWM è la funzionalità di output. Nota che abbiamo usato la variabile PWMpin qui invece del numero 4 in modo che il codice appaia più significativo
void setup () { pinMode (PWMpin, OUTPUT); // Il PEMpin è impostato come Outptut }
Infine entriamo nella funzione loop . Qualunque cosa scriviamo qui viene eseguita ancora e ancora. In questo programma dobbiamo leggere la tensione analogica e generare di conseguenza un segnale PWM e questo deve accadere ancora e ancora. Quindi per prima cosa iniziamo leggendo la tensione analogica dal pin A0 poiché ci siamo collegati al potenziometro ad esso.
Qui stiamo leggendo il valore utilizzando la funzione AanalogRead , questa funzione restituirà un valore compreso tra 0-1024 in base al valore della tensione applicata al pin. Memorizziamo quindi questo valore in una variabile chiamata "val" come mostrato di seguito
int val = analogRead (A0); // legge il valore ADC dal pin A0
Dobbiamo convertire i valori da 0 a 1024 dall'ADC in valori da 0 a 255 per assegnarli alla funzione PWM. Perché dovremmo convertirlo? Lo dirò a breve, ma per ora ricorda solo che dobbiamo convertirci. Per convertire un insieme di valori in un altro insieme di valori Energia ha una funzione di mappatura simile ad Arduino. Quindi convertiamo i valori di 0-1204 in 0-255 e li salviamo nuovamente nella variabile "val".
val = map (val , 0, 1023, 0, 255); // L'ADC darà un valore di 0-1023 convertendolo in 0-255
Ora abbiamo un valore variabile di 0-255 in base alla posizione del potenziometro. Tutto quello che dobbiamo fare è utilizzare questo valore sul pin PWM, ciò può essere fatto utilizzando la riga seguente.
analogWrite (PWMpin, val); // Scrive quel valore nel pin PWM.
Torniamo alla domanda sul perché 0-255 è scritto sul pin PWM. Questo valore 0-255 decide il ciclo di lavoro del segnale PWM. Ad esempio, se il valore del segnale è 0, significa che il duty cycle è 0% per 127 è 50% e per 255 è 100% proprio come quello mostrato e spiegato all'inizio di questo articolo.
Controllo della luminosità del LED con PWM:
Dopo aver compreso l'hardware e il codice, è tempo di divertirsi con il funzionamento del circuito. Carica il codice sulla scheda MSP430G2 e ruota la manopola del potenziometro. Ruotando la manopola varierà la tensione sul pin 2 che verrà letta dal microcontrollore e in base alla tensione verranno generati i segnali PWM sul pin 4. Maggiore è la tensione, maggiore sarà il duty cycle e viceversa.
Questo segnale PWM viene quindi convertito in tensione analogica per illuminare un LED. La luminosità del LED è direttamente proporzionale al duty cycle del segnale PWM. Oltre al LED sulla breadboard si può notare anche il LED smd (colore rosso) che varia la sua luminosità simile al led della breadboard. Anche questo LED è collegato allo stesso pin, ma non dispone di una rete RC, quindi lampeggia molto velocemente. Puoi scuotere la tavola in una stanza buia per verificarne la natura tremolante. La lavorazione completa è visibile anche nel video sottostante.
Questo è tutto per ora gente, abbiamo imparato come usare i segnali PWM sulla scheda MSP430G2, nel nostro prossimo tutorial impareremo quanto sia facile controllare un servomotore usando gli stessi segnali PWM. Se hai dubbi, pubblicali nella sezione commenti qui sotto o sui forum per assistenza tecnica.