- Kas ir PWM signāls?
- Kā pārveidot PWM signālu uz analogo spriegumu?
- Ķēdes shēma:
- MSP programmēšana PWM signālam:
- LED spilgtuma kontrolēšana ar PWM:
Šī apmācība ir daļa no MSP430G2 LaunchPad apmācību sērijām, kurās mēs mācāmies izmantot Texas Instruments MSP430G2 LaunchPad. Līdz šim mēs esam iemācījušies tāfeles pamatus un aplūkojuši, kā lasīt analogo spriegumu, saskarnes LCD ar MSP430G2 utt. Tagad mēs turpinām nākamo soli, lai uzzinātu par PWM MSP430G2. Mēs to darīsim, kontrolējot LED spilgtumu, mainot potenciometru. Tātad potenciometrs tiks piestiprināts pie MSP430 analogās tapas, lai nolasītu tā analogo spriegumu, tāpēc pirms turpināt ieteicams zināt ADC apmācību.
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 (3.3v) 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ā frekvence ir 500Hz, jo tā ir noklusējuma vērtība, ko iestatījusi Energia IDE.
Reālā laikā ir daudz lietojumprogrammu PWM signāliem, taču, lai dotu jums priekšstatu, PWM signālu var izmantot servomotoru vadīšanai, un to var arī pārveidot par analogo spriegumu, kas var kontrolēt LED spilgtuma spilgtumu. Mācīsimies mazliet par to, kā to varētu izdarīt.
Šeit ir daži PWM piemēri ar citiem mikrokontrolleriem:
- PWM ģenerēšana, izmantojot PIC mikrokontrolleru ar MPLAB un XC8
- Servomotora vadība ar Raspberry Pi
- Arduino bāzes LED regulators, izmantojot PWM
Pārbaudiet visus ar PWM saistītos projektus šeit.
Kā pārveidot PWM signālu uz analogo spriegumu?
Lai PWM signālus uz analogo spriegumu varētu izmantot ķēdi, ko sauc par RC filtru. Šī ir vienkārša un šim nolūkam visbiežāk izmantotā shēma. Ķēdē ir tikai virkne rezistoru un kondensators, kā parādīts zemāk esošajā ķēdē.
Tātad, kas šeit notiek, ir tas, ka tad, kad, kad PWM signāls ir augsts, kondensators uzlādējas, izmantojot rezistoru, un, kad PWM signāls ir zems, kondensators izlādējas caur uzglabāto lādiņu. Tādā veidā pie izejas vienmēr būs nemainīgs spriegums, kas būs proporcionāls PWM darba ciklam.
Iepriekš parādītajā grafikā dzeltenā krāsa ir PWM signāls, bet zilā krāsa - izejas analogais spriegums. Kā redzat, izejas vilnis nebūs tīrs līdzstrāvas vilnis, taču tam vajadzētu ļoti labi darboties mūsu lietojumprogrammā. Ja jums ir nepieciešams tīrs līdzstrāvas vilnis cita veida lietojumam, jums vajadzētu izveidot komutācijas ķēdi.
Ķēdes shēma:
Shēmas shēma ir diezgan vienkārša; tam vienkārši ir potenciometrs, rezistors un kondensators, lai izveidotu RC ķēdi un pašu Led. Potenciometru izmanto, lai nodrošinātu analogo spriegumu, uz kura pamata var kontrolēt PWM signāla darba ciklu. Katla izeja ir savienota ar tapu P1.0, kas var nolasīt analogo spriegumu. Tad mums ir jāizveido PWM signāls, ko var izdarīt, izmantojot tapu P1.2, pēc tam šis PWM signāls tiek nosūtīts uz RC filtra ķēdi, lai pārveidotu PWM signālu analogajā spriegumā, kas pēc tam tiek dots LED.
Ir ļoti svarīgi saprast, ka ne visi MSP paneļa kontakti spēj nolasīt analogo spriegumu vai ģenerēt PWM tapas. Konkrētie tapas, ar kuriem var veikt konkrētus uzdevumus, ir parādīti zemāk redzamajā attēlā. Vienmēr izmantojiet to kā norādi, lai atlasītu tapas programmēšanai.
Salieciet visu ķēdi, kā parādīts iepriekš, jūs varat izmantot paneļu un dažus džemperu vadus un viegli izveidot savienojumus. Kad savienojumi ir izdarīti, mana dēlis izskatījās kā parādīts zemāk.
MSP programmēšana PWM signālam:
Kad aparatūra ir gatava, mēs varam sākt ar mūsu programmēšanu. Pirmā lieta programmā ir deklarēt tapas, kuras mēs izmantosim. Šeit mēs izmantosim tapas numuru 4 (P1.2) kā mūsu izejas tapu, jo tai ir iespēja ģenerēt PWM. Tāpēc mēs izveidojam mainīgo un piešķiram piespraudes vārdu tā, lai vēlāk būtu viegli uz to atsaukties programmā. Pabeigta programma ir dota beigās.
int PWMpin = 4; // Mēs izmantojam MSP moduļa 4. tapu kā PWM tapu
Tālāk mēs nonākam iestatīšanas funkcijā. Neatkarīgi kods ir rakstīts šeit tiks izpildīts tikai vienu reizi, šeit mēs paziņojam, ka mēs izmantojam šīs 4 th pin kā izejas pin, jo PWM ir izeja funkcionalitāti. Ņemiet vērā, ka šeit skaitļa 4 vietā mēs izmantojām mainīgo PWMpin, lai kods izskatās jēgpilnāks
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin ir iestatīts kā Outptut }
Beidzot mēs nokļūt cilpas funkciju. Lai ko mēs šeit rakstītu, tas tiek izpildīts atkal un atkal. Šajā programmā mums ir jālasa analogais spriegums un attiecīgi jāveido PWM signāls, un tam ir jānotiek atkal un atkal. Tātad vispirms sāksim nolasīt analogo spriegumu no tapas A0, jo mēs esam pievienojuši tam potenciometru.
Šeit mēs nolasām vērtību, izmantojot funkciju AanalogRead , šī funkcija atgriezīs vērtību no 0 līdz 1024, pamatojoties uz sprieguma vērtību, kas pielikta tapai. Pēc tam mēs saglabājam šo vērtību mainīgajam ar nosaukumu “val”, kā parādīts zemāk
int val = analogRead (A0); // nolasīt ADC vērtību no tapas A0
Mums ir jāpārvērš vērtības no 0 līdz 1024 no ADC uz vērtībām no 0 līdz 255, lai piešķirtu tai funkciju PWM. Kāpēc mums tas jāpārvērš? Es to pastāstīšu neilgi, bet tagad atcerieties, ka mums ir jākonvertē. Lai pārvērstu vienu vērtību kopu par citu vērtību kopu, Energia ir kartes funkcija, kas līdzīga Arduino. Tātad mēs konvertējam vērtības 0-1204 uz 0-255 un saglabājam to atpakaļ mainīgajā “val”.
val = karte (val , 0, 1023, 0, 255); // ADC piešķirs vērtību 0-1023, pārvēršot to par 0-255
Tagad mums ir mainīga vērtība 0–255, pamatojoties uz potenciometra pozīciju. Viss, kas mums jādara, ir izmantot šo vērtību PWM tapā. To var izdarīt, izmantojot šādu rindu.
analogWrite (PWMpin, val); // Uzrakstiet šo vērtību PWM tapai.
Atgriezīsimies pie jautājuma, kāpēc PWM tapā tiek ierakstīts 0–255. Šī vērtība 0–255 nosaka PWM signāla darba ciklu. Piemēram, ja signāla vērtība ir 0, tas nozīmē, ka darba cikls ir 0% 127, tas ir 50%, un 255 - 100%, tāpat kā tas, kas parādīts un izskaidrots šī raksta augšdaļā.
LED spilgtuma kontrolēšana ar PWM:
Kad esat sapratis aparatūru un kodu, ir pienācis laiks izklaidēties ar ķēdes darbību. Augšupielādējiet kodu MSP430G2 dēlī un pagrieziet potenciometra pogu. Pagriežot pogu, spraudnis uz tapas 2 mainīsies, ko nolasīs mikrokontrolleris, un atbilstoši spriegumam PWM signāli tiks ģenerēti uz tapas 4. Jo lielāks spriegums, jo lielāks būs darba cikls un otrādi.
Pēc tam šis PWM signāls tiek pārveidots par analogo spriegumu, lai mirdzētu LED. No LED spilgtums ir tieši proporcionāla PWM signālu ciklu. Bez paneļa diodes gaismas diodes jūs varat pamanīt arī smd LED (sarkanā krāsā), kas mainās tā spilgtumā, līdzīgi kā paneļa led. Tas ir LED ir savienots arī ar to pašu tapu, bet tam nav RC tīkla, tāpēc tas faktiski mirgo ļoti ātri. Jūs varat kratīt dēli tumšā telpā, lai pārbaudītu tā mirgojošo raksturu. Pilnīgu darbu var redzēt arī zemāk esošajā videoklipā.
Pagaidām tas ir viss, mēs esam iemācījušies izmantot PWM signālus MSP430G2 dēlī, mūsu nākamajā apmācībā uzzināsim, cik viegli ir vadīt servomotoru, izmantojot tos pašus PWM signālus. Ja jums ir kādas šaubas, ievietojiet tos komentāru sadaļā zemāk vai tehniskās palīdzības forumos.