- Kas ir PWM signāls?
- PWM, izmantojot PIC16F877A:
- PIC programmēšana PWM signālu ģenerēšanai:
- Shēmas un testēšana:
- Darbs ar aparatūru:
Šī ir mūsu 10. apmācība par PIC mikrokontrolleru apgūšanu, izmantojot MPLAB un XC8. Līdz šim mēs esam apskatījuši daudzas pamata apmācības, piemēram, gaismas diode mirgo ar PIC, taimeri PIC, saskarnes LCD, saskarnes 7 segmenti, ADC, izmantojot PIC utt. Ja esat absolūti iesācējs, lūdzu, apmeklējiet pilnu PIC apmācību sarakstu šeit un sākt mācīties.
Šajā apmācībā mēs uzzināsim, kā ģenerēt PWM signālus, izmantojot PIC PIC16F877A. Mūsu PIC MCU ir īpašs modulis, ko sauc par Salīdzināt uztveršanas moduli (CCP), ko var izmantot PWM signālu ģenerēšanai. Šeit mēs ģenerēsim 5 kHz PWM ar mainīgu darba ciklu no 0% līdz 100%. Lai mainītu darba ciklu, mēs izmantojam potenciometru, tāpēc pirms sākat ar PWM ieteicams iemācīties ADC apmācību. PWM modulis arī izmanto taimerus, lai iestatītu tā frekvenci, tāpēc šeit iepriekš uzziniet, kā lietot taimerus. Turklāt šajā apmācībā mēs izmantosim RC ķēdi un LED, lai PWM vērtības pārveidotu par analogo spriegumu un izmantotu to LED gaismas aptumšošanai.
Kas ir PWM signāls?
Pulsa platuma modulācija (PWM) ir ciparu signāls, ko visbiežāk izmanto vadības ķēdēs. Šis signāls ir iestatīts uz augstu (5v) un zemu (0v) iepriekš noteiktā laikā un ātrumā. Laiku, kurā signāls paliek augsts, sauc par “ieslēgšanas laiku” un laiku, kurā signāls paliek zems, - par izslēgšanas laiku. PWM ir divi svarīgi parametri, kas apspriesti turpmāk:
PWM darba cikls:
Laika procentuālo daļu, kurā PWM signāls paliek AUGSTS (laikā), sauc par darba ciklu. Ja signāls vienmēr ir ieslēgts, tas ir 100% darba ciklā un, ja tas vienmēr ir izslēgts, tas ir 0% darba cikls.
Darba cikls = Ieslēgšanas laiks / (Ieslēgšanas laiks + Izslēgšanas laiks)
PWM biežums:
PWM signāla biežums nosaka, cik ātri PWM pabeidz vienu periodu. Viens periods ir pabeigts PWM signāla ieslēgšanai un izslēgšanai, kā parādīts iepriekšējā attēlā. Mūsu apmācībā mēs iestatīsim frekvenci 5KHz.
PWM, izmantojot PIC16F877A:
PWM signālus var ģenerēt mūsu PIC mikrokontrollerī, izmantojot CCP (Compare Capture PWM) moduli. Mūsu PWM signāla izšķirtspēja ir 10 bitu, tas ir, 0 vērtībai būs 0% darba cikls un 1024 (2 ^ 10) vērtībai 100% darba cikls. Mūsu PIC MCU ir divi CCP moduļi (CCP1 un CCP2), tas nozīmē, ka mēs varam vienlaikus ģenerēt divus PWM signālus uz divām dažādām tapām (17. un 16. tapa), mūsu apmācībā mēs izmantojam CCP1, lai ģenerētu PWM signālus uz 17. kontakta.
Šādi reģistri tiek izmantoti, lai ģenerētu PWM signālus, izmantojot mūsu PIC MCU:
- CCP1CON (CCP1 kontroles reģistrs)
- T2CON (2. taimera vadības reģistrs)
- PR2 (2. taimera moduļi, periodu reģistrs)
- CCPR1L (zems CCP reģistrs 1)
PIC programmēšana PWM signālu ģenerēšanai:
Mūsu programmā mēs nolasīsim analogo spriegumu 0-5v no potenciometra un piesaistīsim to 0-1024, izmantojot mūsu ADC moduli. Tad mēs ģenerējam PWM signālu ar frekvenci 5000Hz un mainām tā darbības ciklu, pamatojoties uz ieejas analogo spriegumu. Tas ir 0-1024 tiks pārvērsts par 0% -100% darba ciklu. Šajā apmācībā tiek pieņemts, ka jūs jau esat iemācījies izmantot ADC PIC, ja nē, izlasiet to šeit, jo šajā apmācībā mēs izlaidīsim sīkāku informāciju par to.
Tātad, kad konfigurācijas biti ir iestatīti un programma ir uzrakstīta, lai nolasītu analogo vērtību, mēs varam turpināt PWM.
Konfigurējot CCP moduli PWM darbībai, jāveic šādas darbības:
- Iestatiet PWM periodu, rakstot PR2 reģistrā.
- Iestatiet PWM darba ciklu, ierakstot CCPR1L reģistrā un CCP1CON <5: 4> bitus.
- Padariet CCP1 tapu izvadi, notīrot TRISC <2> bitu.
- Iestatiet TMR2 pirmsskolas vērtību un iespējojiet taimeri2, rakstot uz T2CON.
- Konfigurējiet CCP1 moduli PWM darbībai.
Šajā programmā ir divas svarīgas funkcijas, lai ģenerētu PWM signālus. Viena ir funkcija PWM_Initialize (), kas inicializēs reģistrus, kas nepieciešami PWM moduļa iestatīšanai, un pēc tam iestatīs frekvenci, kādā PWM jādarbojas, otra funkcija ir funkcija PWM_Duty (), kas iestatīs PWM signāla darba ciklu nepieciešamie reģistri.
PWM_Initialize () {PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1; // PR2 formulu iestatīšana, izmantojot datu lapu // Liek PWM darboties 5KHZ CCP1M3 = 1; CCP1M2 = 1; // Konfigurēt CCP1 moduli T2CKPS0 = 1; T2CKPS1 = 0; TMR2ON = 1; // Konfigurēt taimera moduli TRISC2 = 0; // izveidojiet porta tapu C kā izvadi}
Iepriekš minētā funkcija ir PWM inicializācijas funkcija, šajā funkcijā CCP1 modulis ir iestatīts izmantot PWM, padarot bitus CCP1M3 un CCP1M2 tikpat augstus.
Taimera moduļa priekšskaleris tiek iestatīts, padarot bitu T2CKPS0 par augstu un T2CKPS1 par zemu, lai iestatītu taimeri, ir iestatīts bits TMR2ON.
Tagad mums ir jāiestata PWM signāla frekvence. Frekvences vērtība ir jāieraksta PR2 reģistrā. Vēlamo frekvenci var iestatīt, izmantojot šādas formulas
PWM periods = * 4 * TOSC * (TMR2 pirmsskolas vērtība)
Šo formulu pārkārtošana, lai iegūtu PR2, dos
PR2 = (Periods / (4 * Tosc * TMR2 Prescale)) - 1
Mēs zinām, ka periods = (1 / PWM_freq) un Tosc = (1 / _XTAL_FREQ). Tāpēc…..
PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1;
Kad frekvence ir iestatīta, šī funkcija vairs nav jāizsauc, ja vien mums vēlreiz nav jāmaina frekvence. Mūsu apmācībā esmu piešķīris PWM_freq = 5000; lai mēs varētu iegūt 5 KHz darbības frekvenci mūsu PWM signālam.
Tagad ļaujiet mums iestatīt PWM darba ciklu, izmantojot zemāk esošo funkciju
PWM_Duty (neparakstīts iekšējais nodoklis) {if (nodoklis <1023) {nodoklis = ((peldošais) nodoklis / 1023) * (_ XTAL_FREQ / (PWM_freq * TMR2PRESCALE)); // Par samazināšanu // nodoklis = (((float) nodoklis / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE); CCP1X = pienākums & 1; // Uzglabāt 1. bitu CCP1Y = nodoklis & 2; // Saglabāt 0. bitu CCPR1L = duty >> 2; // Saglabāt pārējo 8 bitu}}
Mūsu PWM signālam ir 10 bitu izšķirtspēja, tāpēc šo vērtību nevar saglabāt vienā reģistrā, jo mūsu PIC ir tikai 8 bitu datu līnijas. Tātad mums ir jāizmanto citi divi CCP1CON biti <5: 4> (CCP1X un CCP1Y), lai saglabātu pēdējos divus LSB un pēc tam saglabātu atlikušos 8 bitus CCPR1L reģistrā.
PWM darba cikla laiku var aprēķināt, izmantojot šādas formulas:
PWM darba cikls = (CCPRIL: CCP1CON <5: 4>) * Tosc * (TMR2 Prescale Value)
Pārkārtojot šīs formulas, lai iegūtu CCPR1L un CCP1CON vērtību, tiks iegūta:
CCPRIL: CCP1Con <5: 4> = PWM darba cikls / (Tosc * TMR2 Prescale Value)
Mūsu ADC vērtība būs 0-1024, tāpēc mums jābūt 0% -100%, līdz ar to PWM Duty Cycle = duty / 1023. Lai pārveidotu šo darba ciklu laika periodā, mums tas ir jāreizina ar periodu (1 / PWM_freq)
Mēs arī zinām, ka Tosc = (1 / PWM_freq), līdz ar to..
Nodoklis = (((pludiņš) nodoklis / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE);
Atrisinot iepriekšējo vienādojumu, mēs iegūsim:
Nodoklis = ((pludiņš) nodoklis / 1023) * (_XTAL_FREQ / (PWM_freq * TMR2PRESCALE));
Jūs varat pārbaudīt visu programmu zemāk esošajā sadaļā Kods, kā arī detalizētu video.
Shēmas un testēšana:
Kā parasti, pārbaudīsim produkciju, izmantojot Proteus simulāciju. Circuit diagramma ir parādīts zemāk.
Pievienojiet potenciometrs 7 th pin barot ar spriegumu 0-5. CCP1 modulis ir ar tapu 17 (RC2), šeit tiks ģenerēts PWM, kuru var pārbaudīt, izmantojot digitālo osciloskopu. Lai to pārveidotu mainīgā spriegumā, mēs izmantojām RC filtru un LED, lai pārbaudītu izeju bez darbības jomas.
Kas ir RC filtrs?
RC filtru vai zema caurlaidības filtrs ir vienkārša shēma ar diviem pasīviem elementiem, proti rezistoru un kondensatoru. Šīs divas sastāvdaļas tiek izmantotas, lai filtrētu mūsu PWM signāla frekvenci un padarītu to mainīgu līdzstrāvas spriegumu.
Ja mēs pārbaudām ķēdi, kad R ieejai tiek piemērots mainīgs spriegums, kondensators C sāks uzlādēt. Tagad, pamatojoties uz kondensatora vērtību, kondensatoram būs vajadzīgs zināms laiks, līdz tas tiks pilnībā uzlādēts. Pēc uzlādes tas bloķēs līdzstrāvu (atcerieties, ka kondensatori bloķē līdzstrāvu, bet pieļauj maiņstrāvu), līdz ar to izejā parādīsies ieejas līdzstrāvas spriegums. Augstas frekvences PWM (maiņstrāvas signāls) tiks iezemēts caur kondensatoru. Tādējādi visā kondensatorā iegūst tīru līdzstrāvu. Tika konstatēts, ka 1000Ohm un 1uf vērtība ir piemērota šim projektam. R un C vērtību aprēķināšana ietver ķēdes analīzi, izmantojot pārsūtīšanas funkciju, kas ir ārpus šīs apmācības darbības jomas.
Programmas izvadi var pārbaudīt, izmantojot digitālo osciloskopu, kā parādīts zemāk, mainiet potenciometru un PWM darbības ciklam vajadzētu mainīties. Izmantojot Voltmetru, mēs varam pamanīt arī RC ķēdes izejas spriegumu. Ja viss darbojas kā paredzēts, mēs varam turpināt savu aparatūru. Lai pārbaudītu visu procesu, pārbaudiet videoklipu beigās.
Darbs ar aparatūru:
Projekta aparatūras iestatīšana ir ļoti vienkārša, mēs tikai atkārtoti izmantosim mūsu zemāk redzamo PIC Perf plāksni.
Mums būs nepieciešams arī potenciometrs, lai ievadītu analogo spriegumu, es esmu pievienojis dažus sieviešu gala vadus pie sava katla (parādīts zemāk), lai mēs varētu tos tieši savienot ar PIC Perf plāksni.
Visbeidzot, lai pārbaudītu izeju, mums ir nepieciešama RC ķēde un LED, lai redzētu, kā darbojas PWM signāls, es vienkārši esmu izmantojis nelielu perf plāksni un pielodējis RC ķēdi un LED (lai kontrolētu spilgtumu), kā parādīts zemāk
Mēs varam izmantot vienkāršus sieviešu un sieviešu savienojošos vadus un savienot tos saskaņā ar iepriekš parādītajām shēmām. Kad savienojums ir izveidots, augšupielādējiet programmu PIC, izmantojot mūsu pickit3, un jums vajadzētu būt iespējai iegūt mainīgu spriegumu, pamatojoties uz jūsu potenciometra ievadi. Mainīgo izeju izmanto, lai šeit kontrolētu LED spilgtumu.
Es izmantoju savu multimetru, lai izmērītu mainīgās izejas, mēs varam arī pamanīt LED spilgtuma mainīšanos dažādiem sprieguma līmeņiem.
Tas ir tas, ka mēs esam ieprogrammējuši nolasīt analogo spriegumu no POT un pārveidot par PWM signāliem, kas savukārt ir pārveidoti par mainīgu spriegumu, izmantojot RC filtru, un rezultāts tiek pārbaudīts, izmantojot mūsu aparatūru. Ja jums ir kādas šaubas vai kaut kur iestrēgstat, lūdzu, izmantojiet zemāk esošo komentāru sadaļu, mēs labprāt jums palīdzēsim. Pilnīga darba strādā šajā videoklipā.
Pārbaudiet arī citas mūsu PWM apmācības par citiem mikrokontrolleriem:
- Aveņu Pi PWM apmācība
- PWM ar Arduino Due
- Arduino bāzes LED regulators, izmantojot PWM
- Ieslēdziet LED gaismas regulatoru, izmantojot mikrokontrolleru ATmega32