- Què és un senyal PWM?
- Com convertir el senyal PWM a tensió analògica?
- Esquema de connexions:
- Programació del MSP per al senyal PWM:
- Control de la brillantor del LED amb PWM:
Aquest tutorial forma part de la sèrie de tutorials LaunchPad MSP430G2 en els quals estem aprenent a utilitzar el LaunchPad MSP430G2 de Texas Instruments. Fins ara hem après els conceptes bàsics de la placa i hem tractat com llegir la tensió analògica, la interfície LCD amb MSP430G2, etc. Ara continuem amb el següent pas per aprendre sobre PWM a MSP430G2. Ho farem controlant la brillantor d’un LED variant el potenciòmetre. Per tant, el potenciòmetre estarà connectat a un pin analògic del MSP430 per llegir la seva tensió analògica, per tant, es recomana saber passar pel tutorial ADC abans de continuar.
Què és un senyal PWM?
La modulació d’amplada de pols (PWM) és un senyal digital que s’utilitza més habitualment en circuits de control. Aquest senyal es defineix com a alt (3,3 v) i baix (0 v) en un temps i una velocitat predefinits. El temps durant el qual el senyal es manté elevat s’anomena “hora puntual” i el temps durant el qual el senyal es manté baix es diu “temps apagat”. Hi ha dos paràmetres importants per a un PWM, tal com es descriu a continuació:
Cicle de treball del PWM:
El percentatge de temps en què el senyal PWM roman ALT (puntual) s’anomena cicle de treball. Si el senyal sempre està activat, està en un 100% de cicle de treball i si sempre està apagat, és un 0% de cicle de treball.
Cicle de treball = Temps d’activació / (Temps d’encès + Temps d’APAGAT)

Freqüència d'un PWM:
La freqüència d'un senyal PWM determina la velocitat amb què un PWM completa un període. Un període està completament activat i desactivat d’un senyal PWM tal com es mostra a la figura anterior. Al nostre tutorial, la freqüència és de 500 Hz, ja que és el valor per defecte establert per l’ENergia IDE.
Hi ha una gran quantitat d’aplicacions per a senyals PWM en temps real, però per fer-vos una idea, el senyal PWM es pot utilitzar per controlar servomotors i també es pot convertir a tensió analògica que pot controlar la brillantor de la brillantor d’un LED. Aprenem una mica sobre com es podria fer això.
Aquí hi ha alguns exemples de PWM amb altres microcontroladors:
- Generació de PWM mitjançant microcontrolador PIC amb MPLAB i XC8
- Control de servomotor amb Raspberry Pi
- Dimmer LED basat en Arduino mitjançant PWM
Consulteu aquí tots els projectes relacionats amb PWM.
Com convertir el senyal PWM a tensió analògica?
Per als senyals PWM a la tensió analògica podem utilitzar un circuit anomenat filtre RC. Es tracta d’un circuit senzill i més utilitzat amb aquesta finalitat. El circuit només inclou una resistència i un condensador en sèrie, tal com es mostra al següent circuit.

Per tant, el que passa bàsicament aquí és que quan el senyal PWM és alt, el condensador es carrega a través de la resistència i quan el senyal PWM baixa, el condensador es descarrega a través de la càrrega emmagatzemada. D'aquesta manera, sempre tindrem un voltatge constant a la sortida que serà proporcional al cicle de treball PWM.
Al gràfic que es mostra més amunt, el de color groc és el senyal PWM i el de color blau és el voltatge analògic de sortida. Com podeu veure, l’ona de sortida no serà una ona de CC pura, però hauria de funcionar molt bé per a la nostra aplicació. Si necessiteu una ona de CC pura per a un altre tipus d'aplicació, heu de dissenyar un circuit de commutació.
Esquema de connexions:

El diagrama del circuit és força senzill; només té un potenciòmetre i una resistència i un condensador per formar un circuit RC i el propi Led. El potenciòmetre s'utilitza per proporcionar una tensió analògica basada en la qual es pot controlar el cicle de treball del senyal PWM. La sortida del pot està connectada al pin P1.0 que pot llegir tensions analògiques. Després, hem de produir un senyal PWM, que es pot fer mitjançant el pin P1.2, aquest senyal PWM s'envia al circuit de filtre RC per convertir el senyal PWM en tensió analògica que es dóna al LED.
És molt important entendre que no tots els pins de la placa MSP poden llegir tensió analògica o poden generar pins PWM. Els pins específics que poden fer les tasques específiques es mostren a la figura següent. Utilitzeu-lo sempre com a guia per seleccionar els pins per programar.

Munteu el circuit complet tal com es mostra a la part anterior, podeu utilitzar una placa de tall i pocs cables de pont i fer les connexions fàcilment. Un cop fetes les connexions, el meu tauler es veia com es mostra a continuació.

Programació del MSP per al senyal PWM:
Un cop el maquinari estigui a punt, podem començar amb la nostra programació. El primer en un programa és declarar els pins que utilitzarem. Aquí utilitzarem el pin número 4 (P1.2) com a pin de sortida, ja que té la capacitat de generar PWM. Per tant, creem una variable i assignem el nom del pin perquè sigui més fàcil referir-s’hi més endavant al programa. Al final es dóna un programa complet.
int PWMpin = 4; // Estem utilitzant el quart pin del mòdul MSP com a pin PWM
A continuació, entrem a la funció de configuració . Qualsevol que sigui el codi que està escrit aquí s'executarà només una vegada, aquí declarem que estem utilitzant aquest 4 º pin com un pin de sortida des de PWM és la funcionalitat de sortida. Tingueu en compte que hem utilitzat la variable PWMpin aquí en lloc del número 4 perquè el codi sembli més significatiu
void setup () { pinMode (PWMpin, OUTPUT); // El PEMpin es defineix com a resultat }
Finalment entrem en la funció de bucle . Tot el que escrivim aquí s'executa una i altra vegada. En aquest programa hem de llegir la tensió analògica i generar un senyal PWM en conseqüència i això ha de passar una i altra vegada. Per tant, primer comencem llegint la tensió analògica del pin A0, ja que hi hem connectat el potenciòmetre.
Aquí estem llegint el valor mitjançant la funció AanalogRead , aquesta funció retornarà un valor de 0-1024 en funció del valor de la tensió aplicada al pin. A continuació, emmagatzemem aquest valor a una variable anomenada "val", tal com es mostra a continuació
int val = analogRead (A0); // llegiu el valor ADC del pin A0
Hem de convertir els valors de 0 a 1024 de l'ADC a valors de 0 a 255 per donar-lo a la funció PWM. Per què hauríem de convertir això? Ho diré aviat, però de moment només recordeu que hem de convertir-nos. Per convertir un conjunt de valors a un altre conjunt de valors, Energia té una funció de mapa similar a Arduino. Per tant, convertim els valors de 0-1204 a 0-255 i el desem de nou a la variable "val".
val = mapa (val , 0, 1023, 0, 255); // L’ADC donarà un valor de 0-1023 i el convertirà en 0-255
Ara tenim un valor variable de 0-255 en funció de la posició del potenciòmetre. Tot el que hem de fer és utilitzar aquest valor al pin PWM, això es pot fer mitjançant la línia següent.
analogWrite (PWMpin, val); // Escriviu aquest valor al pin PWM.
Tornem a la pregunta de per què s’escriu 0-255 al pin PWM. Aquest valor 0-255 decideix el cicle de treball del senyal PWM. Per exemple, si el valor del senyal és 0, significa que el cicle de treball és del 0% per a 127 és del 50% i per al 255 és del 100% tal com es mostra i s’explica a la part superior d’aquest article.
Control de la brillantor del LED amb PWM:
Un cop hàgiu entès el maquinari i el codi, és hora de divertir-vos amb el funcionament del circuit. Pengeu el codi a la placa MSP430G2 i gireu el comandament del potenciòmetre. A mesura que gireu el comandament, el voltatge del pin 2 variarà, que serà llegit pel microcontrolador i, segons la tensió, es generaran els senyals PWM al pin 4. Com més gran sigui el voltatge, major serà el cicle de treball i viceversa.

Aquest senyal PWM es converteix en voltatge analògic per encendre un LED. La brillantor del LED és directament proporcional al cicle de treball del senyal PWM. A part del LED de la placa, també podeu notar que el LED smd (color vermell) varia la seva brillantor similar al LED de la placa. Aquest LED també està connectat al mateix pin, però no té una xarxa RC, de manera que parpelleja molt ràpidament. Podeu sacsejar el tauler en una habitació fosca per comprovar-ne la naturalesa parpellejant. El treball complet també es pot veure al vídeo següent.
Això és tot per ara gent, hem après a utilitzar els senyals PWM a la placa MSP430G2; al nostre següent tutorial aprendrem el fàcil que és controlar un servomotor utilitzant els mateixos senyals PWM. Si teniu cap dubte, publiqueu-los a la secció de comentaris de sota o als fòrums per obtenir ajuda tècnica.
