- Hva er et PWM-signal?
- Hvordan konvertere PWM-signal til analog spenning?
- Kretsdiagram:
- Programmering av MSP for PWM-signal:
- Kontrollere lysstyrken på LED med PWM:
Denne opplæringen er en del av serien av MSP430G2 LaunchPad-opplæringsprogrammer der vi lærer å bruke MSP430G2 LaunchPad fra Texas Instruments. Så langt har vi lært det grunnleggende på tavlen og har dekket hvordan man leser analog spenning, grensesnitt LCD med MSP430G2 osv. Nå fortsetter vi med neste trinn for å lære om PWM i MSP430G2. Vi vil gjøre det ved å kontrollere lysstyrken til en LED ved å variere potensiometeret. Så potensiometeret vil bli festet til en analog pinne på MSP430 for å lese den analoge spenningen, derfor anbefales det å gå gjennom ADC-opplæringen før du fortsetter.
Hva er et PWM-signal?
Pulse Width Modulation (PWM) er et digitalt signal som oftest brukes i kontrollkretser. Dette signalet er satt høyt (3,3v) og lavt (0v) i en forhåndsdefinert tid og hastighet. Tiden der signalet holder seg høyt kalles "på tid" og tiden som signalet holder seg lavt kalles "av-tid". Det er to viktige parametere for en PWM som diskutert nedenfor:
Driftssyklus for PWM:
Prosentandelen av tid PWM-signalet forblir HØY (i tide) kalles som driftssyklus. Hvis signalet alltid er PÅ, er det i 100% driftssyklus, og hvis det alltid er av, er det 0% driftssyklus.
Driftssyklus = Slå på tid / (Slå på tid + slå av tid)
Frekvens av en PWM:
Frekvensen til et PWM-signal bestemmer hvor raskt en PWM fullfører en periode. Én periode er fullstendig PÅ og AV for et PWM-signal som vist i figuren ovenfor. I vår opplæring er frekvensen 500Hz, da det er standardverdien satt av Energia IDE.
Det er mange applikasjoner for PWM-signaler i sanntid, men for å gi deg en ide kan PWM-signalet brukes til å kontrollere servomotorer og kan også konverteres til analog spenning som kan kontrollere lysstyrken til lysstyrken til en LED. La oss lære litt om hvordan det kan gjøres.
Her er noen PWM-eksempler med annen Microcontroller:
- Genererer PWM ved hjelp av PIC Microcontroller med MPLAB og XC8
- Servomotorstyring med Raspberry Pi
- Arduino-basert LED-dimmer ved bruk av PWM
Sjekk alle PWM-relaterte prosjekter her.
Hvordan konvertere PWM-signal til analog spenning?
For å PWM-signaler til analog spenning kan vi bruke en krets som heter RC-filter. Dette er en enkel og mest brukt krets for dette formålet. Kretsen inkluderer bare en motstand og en kondensator i serie som vist i kretsen nedenfor.
Så det som i utgangspunktet skjer her er at når PWM-signalet er høyt, kondensatoren lades opp selv om motstanden og når PWM-signalet blir lavt, kondensatoren utlades gjennom den lagrede ladningen. På denne måten vil vi alltid ha en konstant spenning ved utgangen som vil være proporsjonal med PWM-driftssyklusen.
I grafen vist ovenfor er den gule fargen PWM-signalet og den blå fargen den analoge utgangsspenningen. Som du kan se, vil ikke utgangsbølgen være en ren DC-bølge, men det skal veldig bra fungere for applikasjonen vår. Hvis du trenger ren DC-bølge for andre typer applikasjoner, bør du designe en bryterkrets.
Kretsdiagram:
Kretsskjemaet er ganske enkelt; den har bare et potensiometer og en motstand og kondensator for å danne en RC-krets og selve ledningen. Potensiometeret brukes til å gi en analog spenning basert på hvilken PWM-signalets driftssyklus kan styres. Utgangen fra potten er koblet til Pin P1.0 som kan lese analoge spenninger. Deretter må vi produsere et PWM-signal, som kan gjøres ved å bruke pinnen P1.2, dette PWM-signalet blir deretter sendt til RC-filterkretsen for å konvertere PWM-signalet til Analog Voltage som deretter blir gitt til LED-en.
Det er veldig viktig å forstå at ikke alle pinner på MSP-kortet kan lese analog spenning eller generere PWM-pinner. De spesifikke pinnene som kan utføre de spesifikke oppgavene vises i figuren nedenfor. Bruk alltid dette som en veiledning for å velge pinnene dine for programmering.
Monter hele kretsen som vist ovenfor, du kan bruke et brødbrett og få hoppetråder og enkelt koble til. Når tilkoblingene er gjort, så kortet mitt ut som vist nedenfor.
Programmering av MSP for PWM-signal:
Når maskinvaren er klar kan vi begynne med programmeringen. Det første i et program er å erklære pinnene vi skal bruke. Her skal vi bruke pin nummer 4 (P1.2) som utgangs pin siden den har muligheten til å generere PWM. Så vi lager en variabel og tildeler pinnenavnet slik at det er enkelt å referere til det senere i programmet. Komplett program er gitt på slutten.
int PWMpin = 4; // Vi bruker den fjerde pinnen på MSP-modulen som PWM-pinne
Neste vi kommer inn i setup -funksjonen. Uansett hvilken kode som er skrevet her, vil den bare utføres en gang, her erklærer vi at vi bruker denne fjerde pinnen som en utgangspinne siden PWM er utgangsfunksjonalitet. Merk at vi har brukt variabelen PWMpin her i stedet for tallet 4 slik at koden ser mer meningsfull ut
ugyldig oppsett () { pinMode (PWMpin, OUTPUT); // PEMpin er satt som Outptut }
Endelig kommer vi inn i loop- funksjonen. Uansett hva vi skriver her blir henrettet igjen og igjen. I dette programmet må vi lese den analoge spenningen og generere et PWM-signal tilsvarende, og dette må skje igjen og igjen. Så la oss først begynne med å lese den analoge spenningen fra pinnen A0 siden vi har koblet til potensiometeret til den.
Her leser vi verdien ved hjelp av AanalogRead- funksjonen, denne funksjonen vil returnere en verdi fra 0-1024 basert på verdien av spenningen som påføres pinnen. Vi lagrer deretter denne verdien til en variabel kalt “val” som vist nedenfor
int val = analogRead (A0); // les ADC-verdien fra pin A0
Vi må konvertere verdiene 0 til 1024 fra ADC til verdiene 0 til 255 for å gi den til PWM-funksjonen. Hvorfor skal vi konvertere dette? Jeg vil fortelle det snart, men husk for øyeblikket at vi må konvertere. For å konvertere et verdisett til et annet verdisett har Energia en kartfunksjon som ligner på Arduino. Så vi konverterer verdiene 0-1204 til 0-255 og lagrer den tilbake i variabelen "val".
val = kart (val , 0, 1023, 0, 255); // ADC vil gi verdien 0-1023 konvertere den til 0-255
Nå har vi en variabel verdi på 0-255 basert på potensiometerets posisjon. Alt vi trenger å gjøre er å bruke denne verdien på PWM-pinnen. Dette kan gjøres ved hjelp av følgende linje.
analogWrite (PWMpin, val); // Skriv den verdien til PWM-pinnen.
La oss komme tilbake til spørsmålet hvorfor 0-255 skrives til PWM-pinnen. Denne verdien 0-255 bestemmer driftssyklusen til PWM-signalet. For eksempel hvis verdien av signalet er 0, betyr det at driftssyklusen er 0% for 127, det er 50%, og for 255 er det 100% akkurat som det som er vist og forklart øverst i denne artikkelen.
Kontrollere lysstyrken på LED med PWM:
Når du har forstått maskinvaren og koden, er det på tide å ha det gøy med kretsarbeidet. Last opp koden til MSP430G2-kortet og vri på potensiometer-knappen. Når du vrir på knappen, vil spenningen på pinne 2 variere som vil bli lest av mikrokontrolleren, og i henhold til spenningen vil PWM-signalene bli generert på pinne 4. Jo større spenning, desto større vil driftssyklusen og omvendt.
Dette PWM-signalet blir deretter konvertert til analog spenning for å lyse en LED. Den lysstyrken for lysdioden er direkte proporsjonal med den PWM-signalet driftssyklus. Bortsett fra LED-en på brødplaten, kan du også se at SMD-lysdioden (rød farge) varierer lysstyrken, lik den på brødbrettet. Dette er at LED også er koblet til samme pin, men den har ikke et RC-nettverk, så det blinker faktisk veldig fort. Du kan riste brettet i et mørkt rom for å kontrollere dets flimrende natur. Komplett arbeid kan også sees i videoen nedenfor.
Det er alt for nå folkens. Vi har lært hvordan vi bruker PWM-signaler på MSP430G2-kortet, i vår neste opplæring vil vi lære hvor enkelt det er å kontrollere en servomotor ved hjelp av de samme PWM-signalene. Hvis du er i tvil, legg dem inn i kommentarseksjonen nedenfor eller på forumet for teknisk hjelp.