PWM: analogo tapu atdarināšana ar Arduino dēli

PWM signāli

Izmantojot digitālās un analogās tapas, kuras varat izmantot savā Arduino dēlī, jūs varat saņemt vai nosūtīt elektriskos signālus, lai kontrolētu vai iegūtu datus no saviem elektroniskajiem projektiem. Turklāt šāda veida plāksnēs ir arī citi ļoti interesanti signāli, un tie ir PWM, kas var atdarināt analogo signālu, patiesībā neesot analogs. Tas ir, tie ir digitālie tapas, kas var darboties līdzīgi (nevis vienādi) kā analogais signāls.

Šāda veida signāli ir ļoti praktiski, ja vēlaties ne tikai izmantot digitālos HIGH un LOW signālus, tas ir, 1 vai 0, ON un OFF, bet vēlaties iet tālāk un aprakstīt nedaudz sarežģītāki signāli. Piemēram, ir iespējams modulēt a ātrumu motora līdzstrāva, vai gaismas gaismas intensitāte, elektromagnētam utt.

Analogs pret digitālo sistēmu

Analogs pret digitālo signālu

Elektroniskās shēmas var iedalīt divās lielās ģimenēs vai kategorijās: digitālais un analogais. Runājot par digitālo elektroniku, mēs izmantojam lielumus ar diskrētām vērtībām, tas ir, bināro sistēmu, ko attēlo zema vai augsta sprieguma elektriskie signāli, lai interpretētu to bitu stāvokli, ar kuriem rīkojas. No otras puses, ja tā ir analogā ķēde, tiek izmantoti lielumi ar nepārtrauktām vērtībām.

Digitālās sistēmās var atrast pēc kārtas kombinēta tipa un secīgā tipa. Tas ir, pirmie ir tie, kuros sistēmas izeja ir atkarīga tikai no ieeju stāvokļa. No otras puses, secīgajos tiek iekļauti atmiņas elementi, un izeja būs atkarīga no ieeju pašreizējā stāvokļa un iepriekš saglabātā stāvokļa.

Analogu gadījumā nav šo divu lielo grupu vai variantu, jo šeit tie ir nepārtraukti signāli, no kuriem vienmēr būs atkarīgs signāls pašreizējā sistēma. Piemēram, skaļrunī tam piegādātais signāls būs atkarīgs no skaņas, kuru vēlaties reproducēt. Tas pats ar mikrofonu, kas ģenerēs analogo signālu atkarībā no tā, kādu skaņu tas saņem. Protams, jūs to esat redzējis arī ar daudziem citiem sensoriem, kurus esam aprakstījuši šajā emuārā un kas darbojas ar analogajiem signāliem (un tāpēc bija jāizveido formula, lai vēlāk vērtības varētu aprēķināt vai nosacīt Arduino IDE skicēs ) ...

Šīs vienas un otras īpašības liek dažiem būt savam priekšrocības un trūkumi, kā tas ir ierasts gandrīz visā. Piemēram, digitālās mēdz būt lētākas, ātrākas, vieglāk izstrādājamas, informāciju var vieglāk uzglabāt, tām ir lielāka precizitāte, tās var ieprogrammēt, tās nav tik neaizsargātas pret trokšņa sekām utt. Bet taisnība ir arī tā, ka ar analogiem jūs varat darboties ar sarežģītākiem signāliem.

Ar ejemplo, digitālā tipa Hall efekta sensors var noteikt tikai tuvumā esoša magnētiskā lauka klātbūtni vai neesamību. Tā vietā analogais Hall efekta sensors to var izdarīt, kā arī noteikt minētā magnētiskā lauka blīvumu, pateicoties analogajam signālam, ko tas ģenerē izejā. Zinot, kā labi interpretēt šo lielāku vai mazāku sprieguma signālu, jūs varat viegli zināt šo lielumu. Citi piemēri jums ir daudzos dabas lielumos, kurus varat kvantitatīvi izmērīt, izmantojot analogo sistēmu, piemēram, temperatūru, laiku, spiedienu, attālumu, skaņu utt.

Analogs pret digitālo signālu

To sakot, a analogais signāls Tas būs spriegums vai elektriskā strāva, kas mainās atkarībā no laika un nepārtraukti. Ja to uzzīmē grafikā, analogais signāls ir vienas frekvences sinusoidāls.

ciparu signāls, ir spriegums, kas pakāpeniski mainās attiecībā pret laiku. Tas ir, ja tas tiek attēlots grafikā, tas būs pakāpiena signāls, kas nemainās nepārtraukti, bet mainās pakāpēs vai atsevišķos pieaugumos.

Jums jāzina, ka ir ķēdes, no kurām pāriet no analogā signāla uz ciparu vai otrādi. Šie pārveidotāji tie ir pazīstami kā DAC (Digital-to-Analog Converter) un ADC (Analog-to-Digital Converter). Un tie ir ļoti bieži daudzās ierīcēs, kuras mēs šodien izmantojam, piemēram, televizorā, datoros utt. Ar tiem jūs varat pārveidot digitālos signālus, ko izmanto šīs iekārtas, elektroniskā līmenī, lai strādātu ar citām perifērijas ierīcēm vai detaļām, kas darbojas analogā režīmā.

Ar ejemplo, skaļrunis vai mikrofons ar analogiem signāliem, kas darbojas ar skaņas karti, vai digitālās grafikas kartes, kurām bija slavenā RAMDAC mikroshēma analogo monitoru ostām ... Arduino šāda veida pārveidotāji tiek izmantoti arī vairākiem projektiem, kā mēs redzēsim ...

Kas ir PWM?

grafiskais darba cikls

Kaut gan PWM (impulsa platuma modulācija) vai impulsa platuma modulācija, ir digitāla bāze, tā signāla forma atgādina nedaudz "kvadrātveida" analogo signālu. Tas ļauj, izmantojot digitālos impulsus, mainīt signālu, lai atdarinātu analogo sistēmu, kā es jau iepriekš komentēju. Patiesībā, ja paskatās uz vārdu, tas jau dod digitālo impulsu platumā norādes par tā darbību.

Tas ir izdevīgi Arduino jo ir daudz automātismu vai elektronisko komponentu, kurus varat pievienot saviem projektiem un tamlīdzīgi nespēj nodrošināt patiesu analogo signālu, bet viņi izmanto šo PWM darbībai. Viņi arī nevar izmantot diskretizētu analogo signālu, tas ir, kas iet uz sprieguma lēcieniem, lai atgādinātu digitālo. Tas, ko viņi var darīt, ir izmantot ciparu digitālo izvadi - Vcc vai Vcc, lai radītu šo savdabīgo signālu ...

Tāpēc PWM ir sava veida "triks", ar kuru Arduino un citas sistēmas var mijiedarboties ar šāda veida signāliem, kas tie nekļūst pilnīgi analogie vai parastie digitālie. Lai tas būtu iespējams, viņi saglabā digitālo izvadi aktīvu noteiktu laiku vai izslēgtu, atkarībā no visu laiku intereses. Tas ir tālu no tā, kāds būtu digitālais pulkstenis vai binārā koda signāls, kura impulsi ir vienāda platuma.

Projektos ar Arduino jūs varat pārbaudīt šāda veida PWM signālus, kuros laika gaitā tiek uzturēta nemainīga impulsa izraisītāju frekvence, bet šo impulsu platums ir dažāds. Patiesībā Duty Cycle tiek saukts par laiku, kad signāls tiek uzturēts augstu attiecībā pret cikla kopējo daudzumu. Tāpēc darba cikls tiek norādīts%.

Atcerieties, ka PWM jūs nedarbojaties kā analogā signālā, starp dažādām sprieguma vērtībām un tas starp tām svārstās. PWM gadījumā tas ir kvadrātveida signāls digitālā stilā un kura maksimālā vērtība ir Vcc. Piemēram, ja jūs strādājat ar 3V barošanas avotu, varat dot 3V vai 0V impulsus, bet ne 1V vai kādu citu starpvērtību, kāda būtu reālā analogā. Kas tādā gadījumā mainītos, ir impulsa platums, kuru mēs varam saglabāt 30% pie šīs augstās Vcc vērtības vai 60%, lai piešķirtu tai lielāku jaudu utt.

Bet esiet piesardzīgs, jo, ja ierīce atbalsta Vcc ierobežojumu un tiek pārsniegta ar PWM, tā var tikt sabojāta. Tāpēc vienmēr būtu jāievēro ražotāju sniegto datu lapu vērtības. Arī dažās ierīcēs, piemēram, līdzstrāvas motoros, releji, elektromagnēti utt., sprieguma atdalīšana pēc darba cikla var nozīmēt, ka induktīvās slodzes var izraisīt bojājumus. Tāpēc aizsardzības savlaicīgi.

PWM uz Arduino

Arduino I2C autobuss

Tagad, kad jūs zināt, kā tas darbojas, aplūkosim konkrēto PWM gadījumu Arduino pasaulē ...

PWM: pinout uz Arduino

Arduino dēļos varat atrast vairākus tapas, kas ievieš aparatūras PWM. Tos var identificēt pašā PCB, jo viņiem ir simbols ~ (maza galva) kopā ar tapu numerāciju. To varētu izdarīt arī programmatūra Arduino kodā, taču tas mikrokontrolleru pārslogotu ar darbu, kaut ko absurdu, ja to var izdarīt dabiski un ar aparatūru ...

  • Arduino UNO, Mini un Nano- Jums ir 6 8 bitu PWM izejas uz 3., 5., 6., 9., 10. un 11. tapas, kurām tas būs ~ tieši skaitļa priekšā.
  • Mega Arduino- Šajā jaudīgākajā Arduino dēlī jums ir 15 8 bitu PWM izejas. Viņi atrodas uz tapām no 2 līdz 13 un no 44 līdz 46.
  • Arduino duets: šajā gadījumā ir 13 8 bitu PWM izejas. Tie atrodas uz tapām no 2 līdz 13, kā arī diviem citiem analogajiem izvadiem, kurus DAC ir diskretizējis ar 12 bitu izšķirtspēju.

Kad jūs runājat par 8 bitu vai 12 bitu izšķirtspēju šāda veida PWM izvadēs, jūs atsaucaties uz jūsu rīcībā esošo manevru. Ar 8 bitiem ir 256 līmeņi Starp kuriem jūs varat mainīties, un 12 biti iet līdz 4096 līmenim.

Kontrole ar taimeri

Aparatūras PWM vadībai - Arduino izmantos taimerus par to. Katrs pašreizējais taimeris var apkalpot 2 vai 3 PWM izejas. Katras izejas salīdzināšanas reģistrs papildina šo sistēmu tā, ka, kad laiks sasniedz reģistra vērtību, izejas stāvoklis vai vērtība tiek mainīta, lai apturētu šos darba ciklus. Lai gan ir divas izejas, kuras kontrolē viens un tas pats taimeris, abiem var būt atšķirīgi darba cikli, lai gan tiem ir viena frekvence.

Taimeru gadījumā, kas saistīti ar katru PWM tapu, tas mainīsies atkarībā no Arduino dēļa veida ka jums ir:

  • Arduino UNO, Mini un Nano:
    • Taimeris 0 - 5 un 6
    • Taimeris 1 - 9 un 10
    • Taimeris 2 - 3 un 11
  • Mega Arduino:
    • Taimeris 0 - 4 un 13
    • Taimeris 1 - 11 un 12
    • Taimeris 2 - 9 un 10
    • Taimeris3 - 2, 3 un 5
    • Taimeris4 - 6, 7 un 8
    • Taimeris5 - 44, 45 un 46

Iepriekšskalētais reģistrs sadalīs laiku ar veselu skaitli, un taimeris visu pārējo kontrolēs katru saistīto PWM izeju. Mainot reģistra vērtību, var mainīt biežumu. The frekvences Tie būs arī atšķirīgi atkarībā no taimera un plāksnes:

  • Arduino UNO, Mini un Nano:
    • Taimeris0: ļauj veikt priekšskalošanu 1, 8, 64, 256 un 1024. Biežums ir 62.5 Khz.
    • Taimeris1: ar iestatījumiem 1, 8, 64, 256 un 1024. Ar frekvenci 31.25 Khz.
    • Taimeris2: vienāds ar Taimeri1, tikai tas pievieno iepriekšējo skalu 32 un 128.
  • Mega Arduino:
    • Taimeris 0, 1, 2: tāds pats kā iepriekš.
    • Taimeris3, 4 un 5: ar frekvenci 31.25 Khz un ar skalu 1, 8, 64, 256 un 1024.

Nesaderība un konflikti

Taimeris ar izvadiem saistīta ne tikai šai funkcijai, lieto arī citi. Tādēļ, ja tos izmanto cita funkcija, jums jāizvēlas starp vienu vai otru, jūs nevarat izmantot abus vienlaikus. Piemēram, šīs ir dažas nesaderības, kuras varat atrast savos projektos:

  • Servo bibliotēka: Ja izmantojat servomotorus, tas intensīvi izmanto taimerus, tāpēc tas var radīt konfliktus. Īpaši izmantojiet taimeri1 UNO, Nano un Mini, tas ir, jūs nevarat izmantot 9. un 10. tapu, kamēr izmantojat skici ar šo bibliotēku. Megā tas būs atkarīgs no servo skaita ...
  • SPI: Ja Arduino dēlī tiek izmantota SPI komunikācija, MOSI funkcijai tiek izmantots 11. kontakts. Tāpēc šo PWM tapu nevar izmantot.
  • Tonis: šī funkcija darbībai izmanto taimeri2. Tātad, ja tas tiek izmantots, jūs padarāt 3. un 11. tapu (vai Megai 9 un 10 tapas) bezjēdzīgas.

Praktisks tests ar Arduino

Arduino PWM shēma ar LED

Ja vēlaties redzēt, kā PWM darbojas ar Arduino, labākais, ko varat darīt, ir savienot voltmetrs vai multimetrs (funkcija sprieguma mērīšanai) starp PWM tapu, kuru esat izvēlējies izmantot, un Arduino dēļa zemes tapu vai GND. Tādā veidā mērīšanas ierīces ekrānā varēsit redzēt, kā mainās spriegums, izmantojot izeju, kas ir digitāla, pateicoties šim PWM trikam.

Varat nomainīt voltmetru / multimetru ar LED, lai redzētu, kā mainās gaismas intensitāte, ar līdzstrāvas motoru vai jebkuru citu vajadzīgo elementu. Esmu to vienkāršojis diagrammā ar Fritzing with LED bez vairāk, bet zinu, ka tas var attēlot arī multimetra padomus ...

Ja izmantojat LED, atcerieties pretestību pie katoda un GND.

līdz pirmkodu Lai kontrolētu Arduino dēļa mikrokontrolleru, lai viss darbotos, jums tas jāievieto Arduino IDE (šajā gadījumā esmu izmantojis PWM 6. kontaktu Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
Es iesaku jums spēlēt ar vērtībām un redzēt rezultāti uz gaismas vai voltmetra. Programma var saņemt vērtības no 0 līdz 9, lai jūs varētu redzēt, kā viss mainās. Lai iegūtu vairāk informācijas, es jums iesaku arduino kurss ka mums ir bezmaksas lejupielāde ...

Komentārs, atstāj savu

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Jose teica

    Sveika laba diena. Pirmkārt, es vēlos pateikties par laiku, kas veltīts šim jaunākajam skaidrojumam.
    Es gribētu uzdot jums vaicājumu. Mēģinu palaist kodu proteinu 8 emulatorā Arguino Mega. Es savienoju voltmetru ar 6. kontaktu, Proteus ir savienots ar seriālo portu, bet es nezinu, kā un ko mainīt, lai tiktu izvadīti dažādi spriegumi. Man bija jāveic nelielas korekcijas kodā, lai tas būtu kompilēts. Liels paldies par jūsu palīdzību