- Vad är en PWM-signal?
- Hur konverterar man PWM-signal till analog spänning?
- Kretsschema:
- Programmering av MSP för PWM-signal:
- Kontroll av ljusstyrka hos LED med PWM:
Denna handledning är en del av serien av MSP430G2 LaunchPad-självstudier där vi lär oss att använda MSP430G2 LaunchPad från Texas Instruments. Hittills har vi lärt oss grunderna och har täckt hur man läser analog spänning, gränssnitt LCD med MSP430G2 etc. Nu fortsätter vi med nästa steg för att lära oss om PWM i MSP430G2. Vi kommer att göra det genom att kontrollera ljusstyrkan på en LED genom att variera potentiometern. Så potentiometern kommer att anslutas till en analog stift på MSP430 för att läsa dess analoga spänning, därför rekommenderas det att du går igenom ADC-handboken innan du fortsätter.
Vad är en PWM-signal?
Pulsbreddsmodulering (PWM) är en digital signal som oftast används i styrkretsar. Denna signal är inställd hög (3,3v) och låg (0v) på en fördefinierad tid och hastighet. Tiden under vilken signalen förblir hög kallas "i tid" och den tid under vilken signalen förblir låg kallas "avstängningstid". Det finns två viktiga parametrar för en PWM som diskuteras nedan:
PWM: s arbetscykel:
Procentandelen tid under vilken PWM-signalen förblir HÖG (i tid) kallas som arbetscykel. Om signalen alltid är PÅ är den i 100% arbetscykel och om den alltid är av är den 0% arbetscykel.
Driftscykel = Slå PÅ-tid / (Slå PÅ-tid + Stäng av tid)
Frekvens av en PWM:
Frekvensen för en PWM-signal avgör hur snabbt en PWM slutför en period. En period är fullständig PÅ och AV för en PWM-signal som visas i figuren ovan. I vår handledning är frekvensen 500Hz eftersom det är standardvärdet som ställs in av Energia IDE.
Det finns många applikationer för PWM-signaler i realtid, men för att ge dig en uppfattning kan PWM-signalen användas för att styra servomotorer och kan också konverteras till analog spänning som kan styra ljusstyrkan på en LEDs ljusstyrka. Låt oss lära oss lite om hur det kan göras.
Här är några PWM-exempel med andra Microcontroller:
- Generera PWM med PIC Microcontroller med MPLAB och XC8
- Servomotorstyrning med Raspberry Pi
- Arduino-baserad LED-dimmer med PWM
Kontrollera alla PWM-relaterade projekt här.
Hur konverterar man PWM-signal till analog spänning?
För att PWM-signaler till analog spänning kan vi använda en krets som kallas RC-filter. Detta är en enkel och vanligast använd krets för detta ändamål. Kretsen innehåller bara ett motstånd och en kondensator i serie som visas i kretsen nedan.
Så vad som i princip händer här är att när PWM-signalen är hög kondensatorn laddas upp trots motståndet och när PWM-signalen blir låg kondensatorn urladdas genom den lagrade laddningen. På detta sätt har vi alltid en konstant spänning vid utgången som kommer att vara proportionell mot PWM-arbetscykeln.
I grafen som visas ovan är den gula färgen PWM-signalen och den blåa färgen är den analoga utgångsspänningen. Som du ser kommer utgångsvågen inte att vara en ren likströmsvåg, men det borde mycket väl fungera för vår applikation. Om du behöver ren likströmsvåg för annan typ av applikation bör du utforma en omkopplingskrets.
Kretsschema:
Kretsschemat är ganska enkelt; den har bara en potentiometer och en motstånd och kondensator för att bilda en RC-krets och ledningen själv. Potentiometern används för att tillhandahålla en analog spänning baserad på vilken PWM-signalens arbetscykel kan styras. Utgången från potten är ansluten till Pin P1.0 som kan läsa analoga spänningar. Då måste vi producera en PWM-signal, vilket kan göras med hjälp av stift P1.2, denna PWM-signal skickas sedan till RC-filterkretsen för att omvandla PWM-signalen till analog spänning som sedan ges till lysdioden.
Det är mycket viktigt att förstå att inte alla stift på MSP-kortet kan läsa analog spänning eller kan generera PWM-stift. De specifika stiften som kan utföra de specifika uppgifterna visas i figuren nedan. Använd alltid detta som en vägledning för att välja dina stift för programmering.
Montera hela kretsen som visas ovan, du kan använda ett brödbräda och få bygelkablar och enkelt göra anslutningarna. När anslutningarna är klara såg mitt bräde ut som visas nedan.
Programmering av MSP för PWM-signal:
När hårdvaran är klar kan vi börja med vår programmering. Det första i ett program är att deklarera stiften som vi ska använda. Här ska vi använda stift nummer 4 (P1.2) som vår utgångsstift eftersom det har förmågan att generera PWM. Så vi skapar en variabel och tilldelar stiftnamnet så att det är lätt att hänvisa till det senare i programmet. Komplett program ges i slutet.
int PWMpin = 4; // Vi använder den fjärde stiftet på MSP-modulen som PWM-stift
Nästa vi kommer in i inställningsfunktionen . Oavsett vilken kod som skrivs här kommer endast att köras en gång, här förklarar vi att vi använder den här fjärde stiftet som en utgångsstift eftersom PWM är utgångsfunktionalitet. Observera att vi har använt variabeln PWMpin här istället för siffran 4 så att koden ser mer meningsfull ut
ogiltig installation () { pinMode (PWMpin, OUTPUT); // PEMpin är inställd som Outptut }
Slutligen vi komma in i loop -funktionen. Vad vi än skriver här körs om och om igen. I detta program måste vi läsa den analoga spänningen och generera en PWM-signal i enlighet därmed och detta måste hända om och om igen. Så låt oss först börja med att läsa av den analoga spänningen från stift A0 eftersom vi har anslutit till potentiometer till den.
Här läser vi värdet med funktionen AanalogRead , den här funktionen returnerar ett värde från 0-1024 baserat på värdet på spänningen som appliceras på stiftet. Vi lagrar sedan detta värde till en variabel som kallas "val" som visas nedan
int val = analogRead (A0); // läs ADC-värdet från stift A0
Vi måste konvertera värdena 0 till 1024 från ADC till värdena 0 till 255 för att ge det till PWM-funktionen. Varför ska vi konvertera detta? Jag kommer att berätta det snart, men för nu bara kom ihåg att vi måste konvertera. För att konvertera en uppsättning värden till en annan uppsättning värden Energia har en karta funktion liknar Arduino. Så vi konverterar värdena 0-1204 till 0-255 och sparar det tillbaka i variabeln "val".
val = karta (val , 0, 1023, 0, 255); // ADC ger värdet 0-1023 omvandlar det till 0-255
Nu har vi ett variabelt värde på 0-255 baserat på potentiometerns position. Allt vi behöver göra är att använda detta värde på PWM-stiftet. Detta kan göras med följande rad.
analogWrite (PWMpin, val); // Skriv det värdet till PWM-stiftet.
Låt oss komma tillbaka till frågan varför 0-255 skrivs till PWM-stiftet. Detta värde 0-255 bestämmer PWM-signalens arbetscykel. Till exempel om signalvärdet är 0 så betyder det att arbetscykeln är 0% för 127 är det 50% och för 255 är det 100% precis som det som visas och förklaras högst upp i denna artikel.
Kontroll av ljusstyrka hos LED med PWM:
När du väl har förstått hårdvaran och koden är det dags att ha lite kul med kretsens arbete. Ladda upp koden till MSP430G2-kortet och vrid på potentiometervredet. När du vrider på ratten varierar spänningen på stift 2 vilket kommer att läsas av mikrokontrollen och enligt spänningen genereras PWM-signalerna på stift 4. Ju större spänning, desto större blir arbetscykeln och vice versa.
Denna PWM-signal omvandlas sedan till analog spänning för att lysa en LED. Den ljusstyrkan på LED är direkt proportionell mot PWM-signalarbetscykeln. Förutom lysdioden på brädbrädan kan du också märka att smd-lysdioden (röd färg) varierar sin ljusstyrka liknar brödbrädans led. Denna LED är också ansluten till samma stift, men den har inte ett RC-nätverk så det blinkar faktiskt väldigt snabbt. Du kan skaka brädet i ett mörkt rum för att kontrollera dess flimrande natur. Hela arbetet kan också ses i videon nedan.
Det är allt för nu folkens, vi har lärt oss hur man använder PWM-signaler på MSP430G2-kortet, i vår nästa handledning lär vi oss hur lätt det är att styra en servomotor med samma PWM-signaler. Om du är osäker kan du lägga upp dem i kommentarsektionen nedan eller på forumen för teknisk hjälp.