- Grundlæggende om PWM Signal
- Opsætning og krav til hardware
- Kredsløbsdiagram for Nuvoton N76E003 Microcontroller LED-dæmpning
- PWM-stifter på N76E003 Nuvoton Microcontroller
- PWM-registre og funktioner i N76E003 Nuvoton Microcontroller
- PWM-driftstilstande i Nuvoton N6E003 Microcontroller
- Programmering af Nuvoton N76E003 til PWM
- Blinker koden og tester output
Pulse Width Modulation (PWM) er en almindeligt anvendt teknik i mikrocontrollere til at producere et kontinuerligt pulssignal med en defineret frekvens og driftscyklus. Kort sagt handler PWM om at ændre bredden på en puls, mens frekvensen er konstant.
Et PWM-signal bruges mest til at styre en servomotor eller lysstyrken på en LED. Da mikrokontrollere kun kan levere Logic 1 (High) eller Logic 0 (Low) på dets udgangsstifter, kan de ikke give en varierende analog spænding, medmindre der anvendes en DAC eller Digital til Analog-konverter. I et sådant tilfælde kan mikrokontrolleren programmeres til at udsende en PWM med en varieret driftscyklus, som derefter kan konverteres til den varierende analoge spænding. Vi har tidligere også brugt PWM-periferi i mange andre mikrokontrollere.
- ARM7-LPC2148 PWM Vejledning: Styring af lysstyrke på LED
- Pulsbreddemodulation (PWM) ved hjælp af MSP430G2: Styring af lysstyrke på LED
- Generering af PWM ved hjælp af PIC Microcontroller med MPLAB og XC8
- Pulsbreddemodulation (PWM) i STM32F103C8: Styringshastighed for DC-ventilator
- Generering af PWM-signaler på GPIO-ben på PIC Microcontroller
- Raspberry Pi PWM-vejledning
- PWM Tutorial med ESP32
I denne vejledning interagerer vi med en LED, der styres ved hjælp af dette PWM-signal fra N76E003-mikrocontroller-enheden. Vi vurderer, hvilken type hardwareopsætning vi har brug for, og hvordan vi skal programmere vores mikrocontroller. Før det, lad os forstå nogle grundlæggende i et PWM-signal.
Grundlæggende om PWM Signal
I nedenstående billede vises et konstant PWM-signal.
Ovenstående billede er intet andet end en konstant firkantbølge med samme ON-tid og samme OFF-tid. Antag, signalets samlede periode er 1 sekund. Således er tiden til og fra 500 ms. Hvis en LED er tilsluttet på tværs af dette signal, tænder LED'en i 500 ms og slukkes i 500 ms. Derfor, i perspektivbillede, vil LED'en lyse op med halvdelen af den faktiske lysstyrke, hvis den tændes for et direkte 5V-signal uden slukket tid.
Nu som vist i ovenstående billede, hvis driftscyklussen ændres, vil LED'en lyse op med 25% af den faktiske lysstyrke ved hjælp af det samme princip som tidligere beskrevet. Hvis du vil vide mere og lære mere om Pulse Width Modulation (PWM), kan du tjekke den linkede artikel.
Opsætning og krav til hardware
Da kravet i dette projekt er at styre LED ved hjælp af PWM. En LED er påkrævet for at være grænseflade til N76E003. Da en LED er tilgængelig i N76E003-udviklingskortet, vil den blive brugt i dette projekt. Der kræves ingen andre komponenter.
For ikke at nævne har vi brug for det N76E003 mikrocontroller- baserede udviklingskort såvel som Nu-Link Programmer. En ekstra 5V strømforsyningsenhed kan være påkrævet, hvis programmøren ikke bruges som strømkilde.
Kredsløbsdiagram for Nuvoton N76E003 Microcontroller LED-dæmpning
Som vi kan se i nedenstående skematisk, er test-LED'en tilgængelig inde i udviklingskortet, og den er forbundet på port 1.4. Yderst til venstre vises forbindelsen til programmeringsgrænsefladen.
PWM-stifter på N76E003 Nuvoton Microcontroller
N76E003 har 20 ben, hvoraf 10 ben kan bruges som PWM. Nedenstående billeder viser PWM-benene fremhævet i det røde felt.
Som vi kan se, kan de fremhævede PWM-ben også bruges til andre formål. Dette andet formål med stifterne vil dog ikke være tilgængelige, når stifterne er konfigureret til PWM-output. Pin 1.4, som bruges som en PWM output pin, mister den anden funktionalitet. Men det er ikke et problem, da der ikke kræves en anden funktionalitet til dette projekt.
Årsagen til at vælge pin 1.4 som output pin er, at den indbyggede test-LED er tilsluttet den pin i udviklingskortet, og derfor kræver vi ikke eksterne LED'er. I denne mikrocontroller ud af 20 ben kan 10 ben dog bruges som en PWM-udgangsstift, og andre PWM-ben kan bruges til outputrelaterede formål.
PWM-registre og funktioner i N76E003 Nuvoton Microcontroller
N76E003 bruger systemur eller Timer 1-overløb divideret med et PWM-ur med Prescaler, der kan vælges fra 1/1 ~ 1/128. PWM-perioden kan indstilles ved hjælp af 16-bit periode register PWMPH og PWMPL register.
Mikrocontrolleren har seks individuelle PWM-registre, der genererer seks PWM-signaler kaldet PG0, PG1, PG2, PG3, PG4 og PG5. Perioden er dog den samme for hver PWM-kanal, fordi de deler den samme 16-bit periode- tæller, men pligtcyklussen for hver PWM kan være forskellig fra andre, da hver PWM bruger forskellige 16-bit duty cycle- register navngivet som {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} og {PWM5H, PWM5L}. Således kan seks PWM-udgange i N76E003 genereres uafhængigt med forskellige driftscyklusser.
I modsætning til andre mikrokontrollere, aktiverer PWM ikke automatisk I / O-benene i deres PWM-output. Derfor skal brugeren konfigurere I / O-outputtilstand.
Så uanset hvad der kræves til applikationen, er det første trin at bestemme eller vælge hvilken eller to eller endda mere end to I / O-ben som PWM-udgang. Efter at have valgt en, skal I / O-stifterne indstilles som Push-Pull-tilstand eller kvasidirektional for at generere PWM-signalet. Dette kan vælges ved hjælp af PxM1 og PxM2 registeret. Disse to registre indstiller I / O-tilstande, hvor x står for portnummeret (for eksempel Port P1.0 vil registret være P1M1 og P1M2, for P3.0 vil det være P3M1 og P3M2 osv.)
Konfigurationen kan ses i nedenstående billede-
Derefter er det næste trin at aktivere PWM i den eller de bestemte I / O-ben. For at gøre dette skal brugeren indstille PIOCON0- eller PIOCON1-registre. Registret er afhængigt af korttilknytningen, da PIOCON0 og PIOCON1 styrer forskellige ben afhængigt af PWM-signalerne. Konfigurationen af disse to registre kan ses i nedenstående billede-
Som vi kan se, kontrollerer ovenstående register 6 konfigurationer. For resten skal du bruge PIOCON1-registeret.
Således styrer ovenstående register de øvrige 4 konfigurationer.
PWM-driftstilstande i Nuvoton N6E003 Microcontroller
Det næste trin er at vælge PWM-driftstilstande. Hver PWM understøtter tre operationstilstande - uafhængig, synkron og deaktiveringstilstand.
Uafhængig tilstand giver den løsning, hvor de seks PWM-signaler kan genereres uafhængigt. Dette kræves maksimalt, når LED-relaterede operationer eller summer skal tændes og styres.
Den synkrone tilstand indstiller PG1 / 3/5 i den samme fase-PWM-udgang, den samme som PG0 / 2/4, hvor PG0 / 2/4 leverer uafhængige PWM-udgangssignaler. Dette kræves hovedsageligt til styring af trefasemotorer.
Den Dead-Time indsættelse tilstand er en lille smule kompliceret og anvendt i reelle motor applikationer, især i industrielle applikationer. I sådanne applikationer skal en supplerende PWM-udgang være "dead-time" indsættelse, der forhindrer beskadigelse af strømafbrydere som GPIB'er. Konfigurationerne er indstillet i denne tilstand på en sådan måde, at PG0 / 2/4 leverer PWM-udgangssignaler på samme måde som uafhængig tilstand, men PG1 / 3/5 leverer "udfase PWM-signaler" -udgang på PG0 / 2/4 tilsvarende og ignorere PG1 / 3/5 Duty register.
Over tre tilstande kan vælges ved hjælp af nedenstående registerkonfiguration-
Den næste konfiguration er valget af PWM-typer ved hjælp af PWMCON1-registeret.
Så som vi kan se, er der to PWM-typer tilgængelige, som kan vælges ved hjælp af ovenstående register. I kantjusteret bruger 16-bit-tælleren operation med enkelt hældning ved at tælle op fra 0000H til den indstillede værdi på {PWMPH, PWMPL} og derefter starte fra 0000H. Outputbølgeformen er justeret til venstre.
Men i centerjusteret tilstand bruger 16-bit tælleren dobbelt hældning ved at tælle op fra 0000H til {PWMPH, PWMPL} og derefter igen gå fra {PWMPH, PWMPL} til 0000H ved at tælle ned. Outputtet er centreret og det er nyttigt til at generere ikke-overlappende bølgeformer. Nu endelig PWM-kontroloperationer, der kan kontrolleres i nedenstående registre-
Brug CKCON urregistreringsregistret til at indstille urkilden.
PWM-udgangssignalet kan også maskeres ved hjælp af PMEN-registeret. Ved hjælp af dette register kan brugeren maskere udgangssignalet med 0 eller 1.
Næste er PWM Control Register-
Ovenstående register er nyttigt til at køre PWM, indlæse ny periode og duty load, styre PWM Flag og rydde PWM-tælleren.
De tilknyttede bitkonfigurationer er vist nedenfor -
For at indstille urdeleren skal du bruge PWMCON1-registeret til PWM- urdeleren. Den 5. bit bruges til grupperet PWM-aktiveret gruppetilstand og giver den samme driftscyklus for de første tre PWM-par.
Programmering af Nuvoton N76E003 til PWM
Kodningen er enkel, og den komplette kode, der bruges til denne tutorial, kan findes nederst på denne side. LED'en er tilsluttet P1.4-stiften. Derfor er P1.4-stiften nødvendig for at blive brugt til PWM-output.
I hovedprogrammet udføres indstillingerne i den respektive rækkefølge. Nedenfor linjer med koder indstiller PWM og konfigurerer P1.4-pin som PWM-output.
P14_PushPull_Mode;
Dette bruges til at indstille stiften P1.4 i push-pull-tilstand. Dette er defineret i Function_define.h- biblioteket som-
#definer P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
De næste linjer bruges til at aktivere PWM i pin P1.4. Dette er også defineret i Function_define.h- biblioteket som-
#definer PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT_TM PWM1 output aktiverer PWM_IMDEPENDENT_MODE;
Nedenstående kode bruges til at indstille PWM i uafhængig tilstand. I biblioteket Function_define.h er det defineret som-
#definer PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Så er vi nødt til at indstille EDGE-typen PWM-output. I biblioteket Function_define.h er det defineret som-
#definer PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Derefter skal vi rydde PWM-tællerværdien, som er tilgængelig i SFR_Macro.h- biblioteket-
#define set_CLRPWM CLRPWM = 1
Derefter vælges PWM-uret som Fsys-uret, og den anvendte delingsfaktor er 64-divisionen.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Begge er defineret som-
#definer PWM_CLOCK_FSYS CKCON & = 0xBF #definer PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Nedenstående kodelinje bruges til at maskere output-PWM-signalet med 0 defineret som-
#definer PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Derefter skal vi indstille PWM-signalets periode. Denne funktion indstiller perioden i PWMPL- og PWMPH-registeret. Da dette er et 16-bit register, bruger funktionen en bit shifting-metode til at indstille PWM-perioden.
ugyldig set_PWM_period (usigneret int-værdi) { PWMPL = (værdi & 0x00FF); PWMPH = ((værdi & 0xFF00) >> 8); }
Dog bortset fra 1023- og 8-bit-perioden kan brugere også bruge andre værdier. Forøgelse af perioden resulterer i glat dæmpning eller falmning.
sæt_PWMRUN;
Dette starter PWM'en, der er defineret i SFR_Macro.h- biblioteket som-
#define set_PWMRUN PWMRUN = 1
Derefter tændes LED'en i mens sløjfen og falder kontinuerligt.
mens (1) { for (værdi = 0; værdi <1024; værdi + = 10) { set_PWM1 (værdi); Timer1_Delay10ms (3); } for (værdi = 1023; værdi> 0; værdi - = 10) { set_PWM1 (værdi); Timer1_Delay10ms (2); } } }
Arbejdscyklussen indstilles af set_PWM1 (); en funktion, der indstiller arbejdscyklus i PWM1L- og PWM1H-registeret.
ugyldig set_PWM1 (usigneret int-værdi) { PWM1L = (værdi & 0x00FF); PWM1H = ((værdi & 0xFF00) >> 8); sæt_LOAD; }
Blinker koden og tester output
Når koden er klar, skal du bare kompilere den og uploade den til controlleren. Hvis du er ny i miljøet, skal du se at komme i gang med Nuvoton N76E003-tutorial for at lære det grundlæggende. Som du kan se fra nedenstående resultat, returnerede koden 0 advarsel og 0 fejl og blinkede ved hjælp af standardblinkmetoden af Keil. Ansøgningen begynder at virke.
Genopbygning startet: Projekt: PWM Genopbyg mål 'Mål 1', der samler STARTUP.A51… kompilering af main.c… kompilering Delay.c… sammenkædning… Programstørrelse: data = 35,1 xdata = 0 kode = 709 oprettelse hex-fil fra ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Fejl (r), 0 Advarsel (r). Bygget tid forløbet: 00:00:05
Hardwaren er tilsluttet strømkilden, og den fungerede som forventet. Det er lysstyrken på den indbyggede LED reduceret og derefter øget for at indikere ændringen af PWM-driftscyklus.
Den komplette bearbejdning af denne vejledning kan også findes i videoen, der er linket nedenfor. Håber du har haft vejledningen og lært noget nyttigt, hvis du har spørgsmål, skal du lade dem være i kommentarsektionen, eller du kan bruge vores fora til andre tekniske spørgsmål.