Sadržaj
- Što su dspic30f i dspic33f?
- Primjer PWM koda za dspic30f i dspic33f
- Važni registri koji se koriste za inicijalizaciju PWM-a u dspicu
- 1: Odaberite način rada PWM
- 2: Izračunajte razdoblje PWM-a
- 3: Izračunajte vrijednost radnog ciklusa
- PWM u načinu brojanja gore-dolje
- PWM u besplatnom načinu
- Umetanje mrtvog vremena u dspicu
- Prekid PWM-a u dspic30f i dspic33f
- PWM prekidač poruka
- Pitanja i odgovori
Autor je završio svoju posljednju godinu inženjerskog projekta s dsPic mikrokontrolerima, stekavši opsežan uvid u ove uređaje.
Što su dspic30f i dspic33f?
Mikrokontroleri serije dspic30f i dspic33f napredni su 16-bitni procesori iz mikročipa koji se mogu koristiti za razne PWM aplikacije. Ovaj vodič za podučavanje naučit će vas kako konfigurirati PWM module u dspicu da biste dobili željeni PWM izlaz.
Ovaj uzorak koda može se koristiti za inicijalizaciju svih registara i konfiguracijskih bitova potrebnih za dobivanje željenog PWM izlaza.
Primjer PWM koda za dspic30f i dspic33f
praznina PWM_Init (void) {TRISE = 0x00; // provjerite jesu li PWM pinovi postavljeni na izlaze PORTE = 0x00; // obriši izlaze PTCONbits.PTOPS = 1; // PWM timer nakon skale PTCONbits.PTCKPS = 0; // PWM timer unaprijed skalira PTCONbits.PTMOD = 2; // PWM neprekidno radi u načinu gore-dolje PTMR = 0; // Vrijednost brojača PWM, početak od 0 PTPER = 19999; // Razdoblje PWM vremenske baze PWMCON1bits.PMOD3 = 0; // PWM u besplatnom načinu PWMCON1bits.PMOD2 = 0; // PWM u besplatnom načinu PWMCON1bits.PMOD1 = 0; // PWM u besplatnom načinu PWMCON1bits.PEN3H = 1; // PWM High pin je omogućen PWMCON1bits.PEN2H = 1; // PWM High pin je omogućen PWMCON1bits.PEN1H = 1; // PWM High pin je omogućen PWMCON1bits.PEN3L = 1; // PWM omogućen nizak pin (kontrola smjera kasnije?) PWMCON1bits.PEN2L = 1; // Omogućen PWM donji pin (kontrola smjera kasnije?) PWMCON1bits.PEN1L = 1; // Omogućen PWM niski pin (kontrola smjera kasnije?) // PWMCON2 = 0x0000; // Informacije o ažuriranju PWM-a DTCON1bits.DTAPS = 0; // DeadTime skaler DTCON1bits.DTA = 59; // Vrijednost mrtvog vremena za 4 nas. // FLTACON = 0x0000; // Kontrola greške // OVDCON = 0x0000; // Nadjačavanje podataka o kontroli // Dežurni ciklus ima maksimalnu vrijednost 2xPeriod budući da se izlaz // može mijenjati na rastućem ili padajućem rubu Tcy PDC1 = 19999; // PWM # 1 registar radnog ciklusa (11-bitni) PDC2 = 19999; // PWM # 2 registar radnog ciklusa (11-bitni) PDC3 = 19999; // PWM # 3 registar radnog ciklusa (11-bitni) PTCONbits.PTEN = 1; // Omogući PWM Timerbase! }
Važni registri koji se koriste za inicijalizaciju PWM-a u dspicu
Registar | Funkcija |
---|---|
PTPER | Registar vremenskog razdoblja PWM sadrži vrijednost vremenske osnove. |
PDC | PWM registar radnog ciklusa sadrži vrijednost radnog ciklusa. |
PTCON | Konfiguracijski registri PWM-a imaju konfiguracijske bitove. |
PTCON1 | Konfiguracijski registri PWM-a imaju konfiguracijske bitove. |
DTCON1 | Registar konfiguracije mrtvog vremena. |
PTMR | To se obično postavlja na nulu. |
1: Odaberite način rada PWM
To se radi uz pomoć PTMOD-ovih konfiguracijskih bitova u PTCON registru, kao što je prikazano u retku 8 našeg koda.
PTMOD | Način rada |
---|---|
11 | Neprekidan način rada gore / dolje s prekidima za dvostruko ažuriranje PWM-a |
10 | Neprekidan način brojanja gore / dolje |
01 | Način pojedinačnog događaja |
00 | Slobodni način rada |
2: Izračunajte razdoblje PWM-a
Vremensko osnovno razdoblje PWM-a može se izračunati pomoću dolje navedene formule:
Gdje:
1 / Tcy = 4 / (frekvencija oscilatora * PLLx)
Izračunajmo ovo za vremensko bazno razdoblje od 1 ms. Frekvencija oscilatora je 10 MHz, a PLL je postavljen na x8.
Rješenjem za PTPER dobiva se vrijednost od 19.999 koja se zatim učitava u PTPER registar u retku 12.
- PTPER se može učitati s maksimalnom vrijednošću od 32.768.
- Ako izračunata vrijednost dođe veća od ove, tada treba prilagoditi uređaj za prednamještanje.
3: Izračunajte vrijednost radnog ciklusa
Vrijednost radnog ciklusa izračunava se pomoću iste formule koja se koristi za izračun vremenske osnovice (PTPER), osim što se umjesto vremenskog baznog razdoblja zadržava potrebno visoko vrijeme impulsa. Nakon rješavanja za PTPER, odgovor je:
- Pomnoženo sa 2 i
- Umetnuto u PDC registar, kao što je prikazano u retku 35.
U ovom primjeru, za 50% radnog ciklusa, 0,5 ms se drži umjesto 1 ms u gornjoj datoj formuli. Rješenje za PTPER daje 9.999. Vrijednost učitana u PDC registar je 19.999.
Izlaz PWM-a dobiven s ovom konfiguracijom prikazan je u nastavku:
PWM u načinu brojanja gore-dolje
Način brojanja gore-dolje daje PWM koji je poravnat prema sredini. To je osobito korisno u aplikacijama za upravljanje vektorima.
- U ovom načinu rada, PWM vremenska baza dvostruko je veća od one izračunate za slobodni način rada. Na primjer, PTPER = 19,999 dat će period od 2 ms, a ne 1 ms.
- Isto vrijedi i za vrijednosti radnog ciklusa u PDC registrima.
PWM u besplatnom načinu
Besplatni način rada jedinstvena je značajka serija dspic30f i dspic33f. Omogućuje nam konfiguriranje dva PWM kanala u besplatnom načinu, tako da je izlaz jednog kanala točno suprotan drugom.
Da biste to konfigurirali,
- Bit PMOD u registru PTCON1 treba zapisati s nulom, kao što je spomenuto u retku 14-16.
PMOD | Način rada |
---|---|
0 | Besplatan način |
1 | Neovisni način rada |
- PWM bit za visoku mogućnost ili PENxH i odgovarajući PWM bit za malo omogućavanje PENxL moraju biti napisani s jednim, kao što je spomenuto u redovima 17–22.
Umetanje mrtvog vremena u dspicu
Kada je PWM konfiguriran u besplatnom načinu, konfiguracijom DTCON1 registra lako se može umetnuti mrtvo vrijeme između dva besplatna kanala.
- DTAPS bit koristi se za odabir uređaja za predskaliranje mrtvih vremena.
- DTA se učitava s 6-bitnom cijelom vrijednošću kako bi se utvrdilo trajanje mrtvog vremena koje treba umetnuti. Može se izračunati iz iste gore navedene formule izračuna PTPER vrijednosti.
- Budući da je ovo samo 6-bitna vrijednost, ona ne može biti veća od 64. Ako nakon izračuna dođe do veće vrijednosti, potrebno je prilagoditi uređaj za predskaliranje.
- Linija 27 prikazuje vrijednost 59 izračunatu za 4 mikrosekunde, održavajući uređaj za predskaliranje na nuli.
Prekid PWM-a u dspic30f i dspic33f
Prekid PWM-a dostupan je u dspic30f i dspic33f koji se mogu pokrenuti na raznim mjestima tijekom PWM ciklusa.
Način rada | Točka na kojoj se aktivira prekid |
---|---|
Neprekidan način odbrojavanja gore-dolje s prekidima za dvostruko ažuriranje | Na početku i na kraju svakog PWM ciklusa. Alat za skaliranje u ovom načinu nema učinka. |
Neprekidan način odbrojavanja gore-dolje | Na početku svakog PWM ciklusa. |
Način pojedinačnog događaja | Na kraju svakog PWM ciklusa. (Kad se usporedi usporedba između PTPER-a i PTMR-a.) Post skaler nema učinka u ovom načinu rada. |
Slobodni način rada | Na kraju svakog PWM ciklusa. (Kada se usporedi usporedba između PTPER-a i PTMR-a) |
Da bi se omogućio PWM prekid, bit PWMIE u registru IEC2 mora biti postavljen na 1.
void Interrupt_Init (void) {IEC2bits.PWMIE = 1; }
Slijedi standardni kod funkcije PWM prekida koji će se pozvati kad se prekid aktivira.
void __attribute __ ((prekid, auto_psv)) _PWMInterrupt (void) {// vaš kod ovdje IFS2bits.PWMIF = 0; }
Više informacija o prekidima možete pronaći u ovom detaljnom vodiču: Kako koristiti prekide u Pic MicroControllerima.
PWM prekidač poruka
Postkaler se može koristiti za smanjenje učestalosti okidanja prekida. Na primjer, može biti konfiguriran za aktiviranje nakon svakih 1, 2, 4 ili 8 PWM ciklusa, ovisno o PTOPS bitovima u PTCON registru, kao što je prikazano u retku 6 našeg referentnog koda.
Ovaj je članak točan i vjeran prema autorskom znanju. Sadržaj je samo u informativne ili zabavne svrhe i ne zamjenjuje osobne savjete ili profesionalne savjete u poslovnim, financijskim, pravnim ili tehničkim pitanjima.
Pitanja i odgovori
Pitanje: Pokušavam dobiti besplatni način rada za jedan PWM izlaz pomoću referentnog programa, dspic30f4011 i Pickit 3. Jedino što sam uključio su konfiguracijski bitovi za interni odabir frekvencije i c-kompajler, ali ne mogu dobiti nikakve izlaze na PWM1 igle?
Odgovor: Ponekad, kada promijenite konfiguracijske bitove, mikrokontroler prestane raditi i pod tim mislim, kad oscilator ne radi ispravno, vaš se kôd neće početi izvršavati.
Dakle, da biste potvrdili da je vaš kontroler odabrao ispravnu konfiguraciju oscilatora, trebali biste uključiti LED lampicu koja trepće u sve svoje kodove kako biste potvrdili da je kontroler uključen i radi.