- PWM-signaalin perusteet
- Laitteiston asennus ja vaatimus
- Piirikaavio Nuvoton N76E003 -mikro-ohjaimen LED-himmennykselle
- PWM-nastat N76E003 Nuvoton -mikrokontrolleriin
- PWM-rekisterit ja toiminnot N76E003 Nuvoton -mikrokontrollerissa
- PWM-toimintatilat Nuvoton N6E003 -mikro-ohjaimessa
- Nuvoton N76E003 -ohjelmointi PWM: lle
- Koodin vilkkuminen ja tuotoksen testaaminen
Pulssileveyden modulaatio (PWM) on yleisesti käytetty tekniikka mikrokontrollereissa jatkuvan pulssisignaalin tuottamiseksi määrätyllä taajuudella ja toimintajaksolla. Lyhyesti sanottuna PWM tarkoittaa pulssin leveyden muuttamista taajuuden ollessa vakio.
PWM-signaalia käytetään enimmäkseen servomoottorin tai LED-valon kirkkauden ohjaamiseen. Lisäksi, koska mikro-ohjaimet voivat tuottaa vain logiikan 1 (korkea) tai logiikan 0 (matala) lähtöliittimiin, se ei voi tarjota vaihtelevaa analogista jännitettä, ellei käytetä DAC- tai Digital to Analog -muunninta. Tällöin mikro-ohjain voidaan ohjelmoida tuottamaan PWM: ää vaihtelevalla käyttöjaksolla, joka voidaan sitten muuntaa vaihtelevaksi analogiseksi jännitteeksi. Olemme aiemmin käyttäneet PWM-oheislaitteita myös monissa muissa mikro-ohjaimissa.
- ARM7-LPC2148 PWM -opetusohjelma: LED-valon kirkkauden säätö
- Pulssinleveyden modulointi (PWM) MSP430G2: lla: LED-valon kirkkauden säätö
- PWM: n tuottaminen PIC-mikrokontrollerilla MPLAB: n ja XC8: n kanssa
- Pulssileveyden modulointi (PWM) STM32F103C8: DC-tuulettimen nopeuden säätö
- PWM-signaalien tuottaminen PIC-mikrokontrollerin GPIO-nastoille
- Vadelma Pi PWM -opastus
- PWM-opas ESP32: lla
Tässä opetusohjelmassa liitämme LEDin, jota ohjataan tällä PWM-signaalilla N76E003-mikrokontrolleriyksiköltä. Arvioimme, minkälaisen laitteiston asennuksen tarvitsemme ja miten meidän tulisi ohjelmoida mikro-ohjaimemme. Ennen sitä ymmärretään joitain PWM-signaalin perusteita.
PWM-signaalin perusteet
Alla olevassa kuvassa näkyy vakio PWM-signaali.
Yllä oleva kuva ei ole muuta kuin jatkuva neliöaalto, jolla on sama ON-aika ja sama OFF-aika. Oletetaan, että signaalin kokonaisjakso on 1 sekunti. Täten käynnistysaika ja sammutusaika ovat 500 ms. Jos tämän signaalin yli on kytketty LED, LED syttyy 500 ms: ksi ja sammuu 500 ms: ksi. Siksi perspektiivinäkymässä LED palaa puolella todellisesta kirkkaudesta, jos se kytketään suoraan 5 V: n signaaliin ilman sammutusaikaa.
Kuten yllä olevassa kuvassa näkyy, jos käyttöjaksoa muutetaan, LED syttyy 25%: lla todellisesta kirkkaudesta samalla periaatteella kuin aiemmin keskusteltiin. Jos haluat tietää enemmän ja oppia pulssinleveyden modulaatiosta (PWM), voit tutustua linkitettyyn artikkeliin.
Laitteiston asennus ja vaatimus
Koska tämän projektin vaatimus on ohjata LEDiä PWM: n avulla. LED on liitettävä N76E003: een. Koska N76E003-kehityskortissa on käytettävissä LED, sitä käytetään tässä projektissa. Muita komponentteja ei tarvita.
Puhumattakaan, tarvitsemme N76E003-mikrokontrolleripohjaisen kehityskortin sekä Nu-Link-ohjelmoijan. Ylimääräinen 5 V: n virtalähde voidaan tarvita, jos ohjelmoijaa ei käytetä virtalähteenä.
Piirikaavio Nuvoton N76E003 -mikro-ohjaimen LED-himmennykselle
Kuten alla olevasta kaaviosta voidaan nähdä, testi-LED on käytettävissä kehityskortin sisällä ja se on kytketty porttiin 1.4. Vasemmassa reunassa näkyy ohjelmointirajapinnan yhteys.
PWM-nastat N76E003 Nuvoton -mikrokontrolleriin
N76E003: ssa on 20 nastaa, joista 10 nastaa voidaan käyttää PWM: nä. Alla olevissa kuvissa näkyvät punaisessa neliölaatikossa korostetut PWM-nastat.
Kuten näemme, korostettuja PWM-nastoja voidaan käyttää myös muihin tarkoituksiin. Tämä nastojen toinen tarkoitus ei kuitenkaan ole käytettävissä, kun nastat on määritetty PWM-lähtöä varten. Nasta 1.4, jota käytetään PWM-lähtöniittinä, se menettää muut toiminnot. Mutta se ei ole ongelma, koska toista toimintoa ei tarvita tälle projektille.
Syynä tapin 1.4 valitsemiseen lähtöliittimeksi johtuu siitä, että sisäänrakennettu testi-LED on kytketty kyseiseen tapiin kehityskortissa, joten emme tarvitse ulkoisia LED-valoja. Tässä mikrokontrollerissa 20 nastasta 10-nastaa voidaan kuitenkin käyttää PWM-ulostulotapana ja kaikkia muita PWM-nastoja voidaan käyttää lähtöön liittyviin tarkoituksiin.
PWM-rekisterit ja toiminnot N76E003 Nuvoton -mikrokontrollerissa
N76E003 käyttää järjestelmän kelloa tai ajastimen 1 ylivuotoa jaettuna PWM-kellolla, jossa esivalitsin on valittavissa välillä 1/1 ~ 1/128. PWM-jakso voidaan asettaa käyttämällä 16-bittistä jaksorekisteriä PWMPH ja PWMPL.
Mikrokontrollerissa on kuusi erillistä PWM-rekisteriä, jotka tuottavat kuusi PWM-signaalia nimeltä PG0, PG1, PG2, PG3, PG4 ja PG5. Aika on kuitenkin sama jokaiselle PWM-kanavalle, koska niillä on sama 16-bittinen jaksolaskuri, mutta kunkin PWM: n toimintajakso voi olla erilainen kuin muut, koska kukin PWM käyttää eri 16-bittistä työjaksorekisteriä nimeltä {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} ja {PWM5H, PWM5L}. Siten N76E003: ssa voidaan tuottaa kuusi PWM-lähtöä itsenäisesti erilaisilla työjaksoilla.
Toisin kuin muissa mikrokontrollereissa, PWM: n käyttöönotto ei aseta I / O-nastoja niiden PWM-ulostuloon automaattisesti. Siten käyttäjän on määritettävä I / O-lähtötila.
Joten mitä sovellukselle vaaditaan, ensimmäinen vaihe on määrittää tai valita, mikä yksi tai kaksi tai jopa enemmän kuin kaksi I / O-nastaa PWM-ulostulona. Yhden valitsemisen jälkeen I / O-nastat on asetettava Push-Pull-moodiksi tai lähes kaksisuuntaiseksi PWM-signaalin muodostamiseksi. Tämä voidaan valita käyttämällä PxM1- ja PxM2-rekisteriä. Nämä kaksi rekisteriä asettavat I / O-tilat, joissa x tarkoittaa portin numeroa (esimerkiksi portti P1.0, rekisteri on P1M1 ja P1M2, P3.0: lle se on P3M1 ja P3M2 jne.)
Kokoonpano näkyy alla olevassa kuvassa
Sitten seuraava vaihe on ottaa PWM käyttöön kyseisissä I / O-nastoissa. Tätä varten käyttäjän on asetettava PIOCON0- tai PIOCON1-rekisterit. Rekisteri riippuu tapin kartoituksesta, koska PIOCON0 ja PIOCON1 ohjaavat eri nastoja PWM-signaaleista riippuen. Näiden kahden rekisterin kokoonpano näkyy alla olevassa kuvassa.
Kuten näemme, yllä oleva rekisteri ohjaa 6 kokoonpanoa. Käytä loput PIOCON1-rekisteristä.
Siten yllä oleva rekisteri ohjaa loput 4 kokoonpanoa.
PWM-toimintatilat Nuvoton N6E003 -mikro-ohjaimessa
Seuraava vaihe on valita PWM-toimintatilat. Jokainen PWM tukee kolmea toimintatilaa - Independent, Synchronous ja Dead-Time enable mode.
Riippumaton tila tarjoaa ratkaisun, jossa kuusi PWM-signaalia voidaan tuottaa itsenäisesti. Tämä vaaditaan enintään kertaa, kun LEDiin liittyvät toiminnot tai summerit on kytkettävä päälle ja ohjattava.
Synkroninen tila asettaa PG1 / 3/5 on sama kolmivaiheisen PWM ulostulo, sama kuin PG0 / 2/4, jossa PG0 / 2/4 antaa riippumattomia PWM-signaalia. Tätä tarvitaan pääasiassa kolmivaiheisten moottoreiden ohjaamiseen.
Dead-Time kiinnitystapa on hieman monimutkainen ja sovellettu todellinen moottorin sovelluksissa, erityisesti teollisissa sovelluksissa. Tällaisissa sovelluksissa täydentävän PWM-lähdön on oltava "dead-time" -lisäys, joka estää virtakytkinlaitteiden, kuten GPIB-laitteiden, vahingoittumisen. Konfiguraatiot asetetaan tässä tilassa siten, että PG0 / 2/4 antaa PWM-lähtösignaaleja samalla tavalla kuin itsenäinen tila, mutta PG1 / 3/5 tarjoaa PG0 / 2/4: n "out-phase PWM signaalit" vastaavasti ja ohita PG1 / 3/5-tulorekisteri.
Yli kolme tilaa voidaan valita seuraavalla rekisterikokoonpanolla -
Seuraava kokoonpano on PWM-tyyppien valinta PWMCON1-rekisterin avulla.
Joten, kuten näemme, on saatavilla kaksi PWM-tyyppiä, jotka voidaan valita yllä olevan rekisterin avulla. Reunatasoitettuna 16-bittinen laskuri käyttää yhden kaltevuuden toimintaa laskemalla arvosta 0000H asetettuun arvoon {PWMPH, PWMPL} ja aloittaen sitten arvosta 0000H. Lähdön aaltomuoto on vasemman reunan suuntainen.
Mutta keskitetyssä tilassa 16-bittinen laskuri käyttää kaksoiskaltevuutta laskemalla ylöspäin arvosta 0000H arvoon {PWMPH, PWMPL} ja siirtymällä sitten jälleen arvosta {PWMPH, PWMPL} arvoon 0000H laskemalla alaspäin. Lähtö on kohdistettu keskelle ja siitä on hyötyä päällekkäisten aaltomuotojen luomisessa. Lopuksi PWM-ohjaustoiminnot, jotka voidaan tarkistaa alla olevista rekistereistä -
Aseta kellolähde CKCON- kellonohjausrekisterillä.
PWM-lähtösignaali voidaan peittää myös PMEN-rekisterillä. Tämän rekisterin avulla käyttäjä voi peittää lähtösignaalin 0 tai 1.
Seuraava on PWM Control Register-
Yllä oleva rekisteri on hyödyllinen PWM: n ajamiseksi, uuden jakson ja käyttökuorman lataamiseksi, PWM-lipun hallitsemiseksi ja PWM-laskurin tyhjentämiseksi.
Liittyvät bittimääritykset on esitetty alla-
Aseta kellonjakaja käyttämällä PWMCON1-rekisteriä PWM- kellonjakajaksi. Viides bittiä käytetään ryhmätilassa käytössä olevaan ryhmiteltyyn PWM: ään ja tarjoaa saman käyttöjakson kolmelle ensimmäiselle PWM-parille.
Nuvoton N76E003 -ohjelmointi PWM: lle
Koodaus on yksinkertaista, ja tässä opetusohjelmassa käytetty täydellinen koodi löytyy tämän sivun alaosasta. LED on kytketty P1.4-nastaan. Siksi P1.4-nasta tarvitaan PWM-lähtöön.
Pääohjelmassa asetukset tehdään vastaavassa järjestyksessä. Koodirivien alapuolella asetetaan PWM ja konfiguroidaan P1.4-nasta PWM-ulostuloksi.
P14_PushPull_Mode;
Tätä käytetään tapin P1.4 asettamiseen push-pull-tilassa. Tämä on määritelty Function_define.h- kirjastossa
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Seuraavat rivit, joita käytetään PWM: n ottamiseen käyttöön tapissa P1.4. Tämä määritetään myös Function_define.h- kirjastossa
#define 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_TMP //P1 PWM1-lähtö ottaa käyttöön PWM_IMDEPENDENT_MODE;
Alla olevaa koodia käytetään asettamaan PWM itsenäiseen tilaan. Vuonna Function_define.h kirjastossa, se määritellään AS-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Sitten meidän on asetettava EDGE-tyyppinen PWM-lähtö. Vuonna Function_define.h kirjastossa, se määritellään AS-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Seuraavaksi meidän on tyhjennettävä PWM-laskurin arvo, joka on saatavana SFR_Macro.h- kirjastossa-
#define set_CLRPWM CLRPWM = 1
Sen jälkeen PWM-kello valitaan Fsys-kelloksi ja käytetty jakokerroin on 64-jako.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Molemmat määritellään
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Koodirivin alapuolella käytetään PWM-lähtösignaalin peittämistä 0 määritetyllä
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Sitten meidän on asetettava PWM-signaalin jaksoaika. Tämä toiminto asettaa ajanjakson PWMPL- ja PWMPH-rekisterissä. Koska tämä on 16-bittinen rekisteri, toiminto määrittää bittisiirtomenetelmän PWM-jakson asettamiseksi.
void set_PWM_period (allekirjoittamaton int-arvo) { PWMPL = (arvo & 0x00FF); PWMPH = ((arvo & 0xFF00) >> 8); }
1023- ja 8-bittisen jakson lisäksi käyttäjät voivat kuitenkin käyttää myös muita arvoja. Jakson pidentäminen johtaa tasaiseen himmenemiseen tai haalistumiseen.
set_PWMRUN;
Tämä käynnistää PWM: n, joka on määritelty SFR_Macro.h- kirjastossa
#define set_PWMRUN PWMRUN = 1
Seuraavaksi, samalla silmukassa , LED syttyy ja häipyy jatkuvasti.
kun taas (1) { for (arvo = 0; arvo <1024; arvo + = 10) { set_PWM1 (arvo); Ajastin1_viive10ms (3); } for (arvo = 1023; arvo> 0; arvo - = 10) { set_PWM1 (arvo); Ajastin1_viive10ms (2); } } }
Toimintajakson asettaa set_PWM1 ();, toiminto, joka asettaa käyttöjakson rekisteriin PWM1L ja PWM1H.
void set_PWM1 (allekirjoittamaton int-arvo) { PWM1L = (arvo & 0x00FF); PWM1H = ((arvo & 0xFF00) >> 8); set_LOAD; }
Koodin vilkkuminen ja tuotoksen testaaminen
Kun koodi on valmis, käännä se vain ja lataa se ohjaimeen. Jos olet uusi ympäristö, tutustu Nuvoton N76E003 -opetusohjelman käytön aloittamiseen ja opi perusteet. Kuten alla olevasta tuloksesta näet, koodi palautti 0 varoituksen ja 0 virhettä ja välähti käyttäen Keilin oletusarvoista vilkkumenetelmää. Sovellus alkaa toimia.
Uudelleenrakennus aloitettu: Projekti: PWM Rakenna uudelleen kohde 'Kohde 1' koottaessa STARTUP.A51… kääntäen main.c… kääntäen Delay.c… linkittämällä… Ohjelman koko: data = 35,1 xdata = 0 koodi = 709 luonti hex-tiedosto tiedostosta ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 virhettä, 0 varoitusta. Rakennusaika kului: 00:00:05
Laitteisto on kytketty virtalähteeseen ja se toimi odotetusti. Tämä on aluksella olevan LED-valon kirkkaus, jota pienennetään ja lisätään sitten osoittamaan muutosta PWM-työjaksossa.
Tämän opetusohjelman täydellinen toiminta löytyy myös alla olevasta videosta. Toivottavasti pidit opetusohjelmasta ja opit jotain hyödyllistä, jos sinulla on kysyttävää, jätä ne kommenttiosioon tai voit käyttää foorumeitamme muihin teknisiin kysymyksiin.