- Hvad er et PWM-signal?
- Hvordan konverteres PWM-signal til analog spænding?
- Kredsløbsdiagram:
- Programmering af MSP til PWM-signal:
- Kontrol af lysstyrke på LED med PWM:
Denne tutorial er en del af serien af MSP430G2 LaunchPad-tutorials, hvor vi lærer at bruge MSP430G2 LaunchPad fra Texas Instruments. Indtil videre har vi lært det grundlæggende på tavlen og har dækket, hvordan man læser analog spænding, interface LCD med MSP430G2 osv. Nu fortsætter vi med det næste trin i at lære om PWM i MSP430G2. Det gør vi ved at kontrollere lysstyrken på en LED ved at variere potentiometeret. Så potentiometeret fastgøres til en analog pin på MSP430 for at læse dens analoge spænding, og det anbefales derfor at kende gennem ADC-tutorialen, før du fortsætter.
Hvad er et PWM-signal?
Pulse Width Modulation (PWM) er et digitalt signal, der oftest bruges i kontrolkredsløb. Dette signal er indstillet højt (3,3v) og lavt (0v) i en foruddefineret tid og hastighed. Den tid, hvorunder signalet forbliver højt, kaldes "til tiden" og den tid, hvor signalet forbliver lavt, kaldes "slukketid". Der er to vigtige parametre for en PWM som beskrevet nedenfor:
PWM's driftscyklus:
Den procentdel af tid, hvor PWM-signalet forbliver HØJ (til tiden) kaldes som driftscyklus. Hvis signalet altid er TIL, er det i 100% driftscyklus, og hvis det altid er slukket, er det 0% driftscyklus.
Arbejdscyklus = Tænd tid / (Tænd tid + Sluk tid)
Frekvens af en PWM:
Frekvensen af et PWM-signal bestemmer, hvor hurtigt en PWM gennemfører en periode. En periode er fuldstændig TIL og FRA for et PWM-signal som vist i ovenstående figur. I vores vejledning er frekvensen 500Hz, da det er standardværdien, der er indstillet af Energia IDE.
Der er overflod af applikationer til PWM-signaler i realtid, men for at give dig en idé kan PWM-signalet bruges til at styre servomotorer og kan også konverteres til analog spænding, som kan styre lysstyrken på lysdioden på en LED. Lad os lære lidt om, hvordan det kunne gøres.
Her er få PWM-eksempler med anden Microcontroller:
- Generering af PWM ved hjælp af PIC Microcontroller med MPLAB og XC8
- Servomotorstyring med Raspberry Pi
- Arduino-baseret LED-dæmper ved hjælp af PWM
Tjek alle PWM-relaterede projekter her.
Hvordan konverteres PWM-signal til analog spænding?
Til PWM-signaler til analog spænding kan vi bruge et kredsløb kaldet RC-filter. Dette er et simpelt og mest almindeligt anvendt kredsløb til dette formål. Kredsløbet inkluderer bare en modstand og en kondensator i serie som vist i nedenstående kredsløb.
Så hvad der grundlæggende sker her er, at når PWM-signalet er højt, kondensatoren oplades gennem modstanden, og når PWM-signalet bliver lavt, kondensatoren aflades gennem den lagrede opladning. På denne måde vil vi altid have en konstant spænding ved udgangen, som vil være proportional med PWM-driftscyklussen.
I grafen vist ovenfor er den gule farvede PWM-signalet, og den blå farve den analoge udgangsspænding. Som du kan se, vil outputbølgen ikke være en ren DC-bølge, men det skal meget vel fungere for vores applikation. Hvis du har brug for ren jævnstrømsbølge til anden type applikation, skal du designe et skifte kredsløb.
Kredsløbsdiagram:
Kredsløbsdiagrammet er ret simpelt; det har bare et potentiometer og en modstand og kondensator til at danne et RC-kredsløb og selve ledningen. Potentiometeret bruges til at tilvejebringe en analog spænding baseret på hvilken PWM-signalets arbejdscyklus kan styres. Potens output er forbundet til Pin P1.0, som kan læse analoge spændinger. Derefter skal vi producere et PWM-signal, hvilket kan gøres ved hjælp af stiften P1.2, dette PWM-signal sendes derefter til RC-filterkredsløbet for at konvertere PWM-signalet til analog spænding, som derefter gives til lysdioden.
Det er meget vigtigt at forstå, at ikke alle ben på MSP-kortet kan læse analog spænding eller kan generere PWM-ben. De specifikke ben, der kan udføre de specifikke opgaver, vises i nedenstående figur. Brug altid dette som en vejledning til at vælge dine ben til programmering.
Saml det komplette kredsløb som vist ovenfor, du kan bruge et brødbræt og få jumperledninger og nemt oprette forbindelserne. Når forbindelserne er udført, så mit bord ud som vist nedenfor.
Programmering af MSP til PWM-signal:
Når hardwaren er klar, kan vi starte med vores programmering. Den første ting i et program er at erklære de ben, som vi skal bruge. Her skal vi bruge pin nummer 4 (P1.2) som vores output pin, da det har evnen til at generere PWM. Så vi opretter en variabel og tildeler pin-navnet, så det er let at henvise til det senere i programmet. Komplet program gives i slutningen.
int PWMpin = 4; // Vi bruger den 4. pin på MSP-modulet som PWM-pin
Næste vi kommer ind i setup -funktionen. Uanset hvilken kode der er skrevet her vil blive henrettet kun én gang, her er vi erklærer, at vi bruger denne 4 th pin som et output pin da PWM udsendes funktionalitet. Bemærk, at vi har brugt variablen PWMpin her i stedet for tallet 4, så koden ser mere meningsfuld ud
ugyldig opsætning () { pinMode (PWMpin, OUTPUT); // PEMpin er indstillet som Outptut }
Endelig kommer vi ind i loop- funktionen. Uanset hvad vi skriver her bliver henrettet igen og igen. I dette program skal vi læse den analoge spænding og generere et PWM-signal i overensstemmelse hermed, og dette skal ske igen og igen. Så lad os først starte med at læse den analoge spænding fra pin A0, da vi har tilsluttet potentiometer til den.
Her læser vi værdien ved hjælp af AanalogRead- funktionen, denne funktion returnerer en værdi fra 0-1024 baseret på værdien af den spænding, der påføres stiften. Vi gemmer derefter denne værdi til en variabel kaldet “val” som vist nedenfor
int val = analogRead (A0); // læs ADC-værdien fra pin A0
Vi er nødt til at konvertere værdierne fra 0 til 1024 fra ADC til værdier fra 0 til 255 for at give det til PWM-funktionen. Hvorfor skal vi konvertere dette? Jeg vil fortælle det snart, men husk nu, at vi er nødt til at konvertere. Hvis du vil konvertere et sæt værdier til et andet sæt værdier Energia har en kort funktion ligner Arduino. Så vi konverterer værdierne 0-1204 til 0-255 og gemmer det tilbage i variablen "val".
val = kort (val , 0, 1023, 0, 255); // ADC vil give en værdi på 0-1023 konvertere den til 0-255
Nu har vi en variabel værdi på 0-255 baseret på potentiometerets position. Alt hvad vi skal gøre er at bruge denne værdi på PWM-stiften. Dette kan gøres ved hjælp af følgende linje.
analogWrite (PWMpin, val); // Skriv denne værdi til PWM-stiften.
Lad os komme tilbage til spørgsmålet, hvorfor 0-255 er skrevet til PWM-stiften. Denne værdi 0-255 bestemmer PWM-signalets arbejdscyklus. For eksempel, hvis signalets værdi er 0, betyder det, at arbejdscyklussen er 0% for 127, det er 50%, og for 255 er det 100% ligesom hvad der er vist og forklaret øverst i denne artikel.
Kontrol af lysstyrke på LED med PWM:
Når du først har forstået hardware og kode, er det tid til at have det sjovt med arbejdet i kredsløbet. Upload koden til MSP430G2-kortet, og drej potentiometer-knappen. Når du drejer på knappen, varierer spændingen på pin 2, som læses af mikrokontrolleren, og i henhold til spændingen genereres PWM-signalerne på pin 4. Jo større spændingen er, desto større bliver driftscyklussen og omvendt.
Dette PWM-signal konverteres derefter til analog spænding for at tænde en LED. Den lysstyrke LED er direkte proportional med cyklus PWM-signalet pligt. Bortset fra lysdioden på brødbrættet kan du også bemærke, at smd-lysdioden (rød farve) varierer dens lysstyrke svarende til brødbrætledningen. Denne LED er også tilsluttet den samme pin, men den har ikke et RC-netværk, så det flimrer faktisk meget hurtigt. Du kan ryste brættet i et mørkt rum for at kontrollere dets flimrende natur. Det komplette arbejde kan også ses i videoen nedenfor.
Det er alt for nu folkens, vi har lært, hvordan man bruger PWM-signaler på MSP430G2-kortet, i vores næste tutorial lærer vi, hvor let det er at styre en servomotor ved hjælp af de samme PWM-signaler. Hvis du er i tvivl, kan du sende dem i kommentarfeltet nedenfor eller på foraerne for teknisk hjælp.