PWM: analoognõelte jäljendamine teie Arduino lauaga

PWM signaalid

Digitaalsete ja analoognõeltega, mida saate kasutada oma Arduino plaadil, saate vastu võtta või saata elektrilisi signaale oma elektrooniliste projektide andmete juhtimiseks või hankimiseks. Lisaks on seda tüüpi plaatidel muid väga huvitavaid signaale ja need on PWM, mis suudab jäljendada analoogsignaali ilma, et oleks tegelikult analoog. See tähendab, et need on digitaalsed tihvtid, mis võivad toimida analoogsignaaliga sarnaselt (mitte samamoodi).

Seda tüüpi signaalid on väga praktilised, kui soovite mitte ainult kasutada digitaalseid HIGH ja LOW signaale, st 1 või 0, ON ja OFF, vaid soovite minna kaugemale ja kirjeldada mõnevõrra keerulisemad signaalid. Näiteks on võimalik moduleerida a kiirust Alalisvoolumootorvõi valguse valgustugevus solenoidi jaoks jne.

Analoog vs digitaalne süsteem

Analoog vs digitaalne signaal

Elektroonilisi vooluringe võib jagada kahte suurde perekonda või kategooriasse: digitaalne ja analoog. Digitaalelektroonikast rääkides kasutame käsitletavate bitide oleku tõlgendamiseks diskreetsete väärtustega koguseid, see tähendab binaarsüsteemi, mida esindavad madala või kõrgepinge elektrisignaalid. Teiselt poolt, kui tegemist on analoogahelaga, kasutatakse pidevate väärtustega suurusi.

Digitaalsüsteeme võib leida kordamööda kombineeritud ja järjestikused. See tähendab, et esimesed on sellised, kus süsteemi väljund sõltub ainult sisendite olekust. Teisest küljest on järjestikustes mäluelemendid kaasatud ja väljund sõltub sisendite hetkeseisust ja eelmisest salvestatud olekust.

Analoogide puhul pole neid kahte suurt rühma ega varianti, kuna siin on need pidevad signaalid, millest alati sõltub signaali praegune süsteem. Näiteks sõltub valjuhääldis edastatav signaal heli, mida soovite taasesitada. Sama mikrofoniga, mis genereerib analoogsignaali sõltuvalt vastuvõetavast helist. Kindlasti olete seda näinud ka paljude teiste sensoritega, mida oleme siin blogis kirjeldanud ja mis toimivad analoogsignaalidega (ja seetõttu tuli luua valem, et hiljem saaks Arduino IDE visandites väärtusi arvutada või tingida ) ...

Need ühe ja teise omadused panevad mõnel oma eelised ja puudused, nagu peaaegu kõiges tavaline. Näiteks digitaalsed on tavaliselt odavamad, kiiremad, neid on lihtsam arendada, teavet saab hõlpsamini salvestada, nende täpsus on suurem, neid saab programmeerida, nad pole müra mõjude suhtes nii haavatavad jne Kuid on ka tõsi, et analoogide abil saate töötada keerukamate signaalidega.

Por ejemplo, digitaalse tüüpi Halli efekti andur suudab tuvastada ainult läheduses oleva magnetvälja olemasolu või puudumist. Selle asemel saab analoog Hall-efekti andur seda teha ja määrata ka nimetatud magnetvälja tiheduse tänu analoogsignaalile, mille see tekitab oma väljundis. Teades, kuidas seda suurema või väiksema pingega signaali hästi tõlgendada, saate selle suuruse hõlpsasti teada. Teised näited, mis teil on looduse suurustes, mida saate analoogsüsteemiga kvantitatiivselt mõõta, näiteks temperatuur, aeg, rõhk, kaugus, heli jne.

Analoog vs digitaalne signaal

Nagu öeldud, a analoogsignaal See on pinge või elektrivool, mis varieerub aja jooksul ja pidevalt. Graafiliselt oleks analoogsignaal ühe sagedusega siinuslaine.

Nagu digitaalsignaal, on pinge, mis varieerub järk-järgult aja suhtes. See tähendab, et kui see on graafikul kujutatud, on see astmesignaal, mis ei varieeru pidevalt, vaid muutub sammude kaupa või diskreetse sammuna.

Peaksite teadma, et analoogsignaalist digitaalseks liikumiseks või vastupidi on olemas vooluringid. Need muundurid neid tuntakse kui DAC (digitaal-analoog muundur) ja ADC (analoog-digitaal muundur). Ja need on väga levinud paljudes seadmetes, mida me täna kasutame, näiteks teler, arvutid jne. Nendega saate teisendada nende seadmete kasutatavad digitaalsignaalid elektroonilisele tasemele, et töötada teiste välisseadmete või analoogselt töötavate osadega.

Por ejemplo, analoogsignaalidega kõlar või mikrofon, mis töötab helikaardiga, või digitaalsed graafikakaardid, millel oli analoogmonitori portide jaoks kuulus RAMDAC-kiip ... Arduinos kasutatakse seda tüüpi muundureid ka mitme projekti jaoks, nagu näeme ...

Mis on PWM?

graafiline töötsükkel

Kuigi PWM (impulsi laiuse modulatsioon) või impulsi laiuse modulatsioon, on digitaalse alusega, selle signaali kuju sarnaneb mõnevõrra "ruudukujulise" analoogsignaaliga. See võimaldab digitaalsete impulsside abil muuta signaali analoogsüsteemi jäljendamiseks, nagu ma juba varem kommenteerisin. Tegelikult, kui nime vaadata, annab see juba digitaalsete impulsside laiuse järgi vihjeid selle kohta, mida ta teeb.

See on kasulik Arduino kuna on palju automaatikaid või elektroonilisi komponente, mida saate oma projektidesse lisada ja seda ei ole võimelised andma tõelist analoogsignaali, kuid nad kasutavad seda PWM-i toimimiseks. Samuti ei saa nad kasutada diskreetset analoogsignaali, see tähendab, et see läheb pinge hüppeid, et sarnaneda digitaalsega. Mida nad saavad teha, on selle omapärase signaali genereerimiseks kasutada digitaalset väljundit -Vcc või Vcc ...

Seetõttu on PWM omamoodi "trikk", millega Arduino ja muud süsteemid saavad seda tüüpi signaalidega koostööd teha need pole päris analoogid ega ka tavapärased digitaalsed. Selle võimaldamiseks hoiavad nad digitaalse väljundi aktiivse teatud aja jooksul või välja lülitatud, sõltuvalt kogu aeg huvist. See pole kaugeltki see, mis oleks digitaalkell või kahendkoodisignaal, mille impulsside laius on sama.

Arduinoga tehtud projektides saate kontrollida seda tüüpi PWM-signaale, milles aja jooksul hoitakse püsivat impulsi käivitajate sagedust, kuid nende impulsside laius on erinev. Tegelikult nimetatakse seda töötsükliks, kui signaali hoitakse tsükli koguarvu suhtes kõrgel. Seetõttu on töötsükkel antud protsentides.

Pidage meeles, et PWM-is ei tööta te nagu analoogsignaalis, mitme pinge väärtuse vahel ja see kõigub nende vahel. PWM-i puhul on see ruuduline signaal digitaalses stiilis ja mille maksimaalne väärtus on Vcc. Näiteks kui töötate 3V toiteallikaga, võite anda 3V või 0V impulsse, kuid mitte 1V või mis tahes muud vahepealset väärtust, nagu see toimuks reaalses analoogis. Mis sel juhul varieeruks, on impulsi laius, mida saame selle kõrge Vcc väärtuse juures hoida 30% või suurema võimsuse saamiseks 60% jne.

Kuid olge ettevaatlik, sest kui seade toetab Vcc piiri ja seda ületatakse PWM-iga, võib see kahjustuda. Seega oleks alati vaja arvestada tootjate pakutavate andmelehtede väärtustega. Mõnes seadmes, näiteks alalisvoolumootorites, releed, elektromagnetid jne., pinge eemaldamine pärast töötsüklit võib tähendada, et induktiivsed koormused võivad kahjustada. Sellepärast kaitsed õigeaegne.

PWM Arduinos

Arduino I2C buss

Nüüd, kui teate, kuidas see töötab, vaatame PWM-i konkreetset juhtumit Arduino maailmas ...

PWM: pinout Arduinos

Arduino tahvlitelt leiate mitu tihvti, mis rakendavad riistvara PWM-i. Saate neid tuvastada PCB-l, kuna neil on sümbol ~ (väike pea) koos tihvtide numeratsiooniga. Seda võiks teha ka Arduino koodis olev tarkvara, kuid see koormaks mikrokontrolleri tööga üle, midagi absurdset, kui seda saab teha loomulikult ja riistvara abil ...

  • Arduino UNO, Mini ja Nano- Teil on tihvtidel 6, 8, 3, 5, 6 ja 9 10 11-bitist PWM-väljundit, millel on see ~ otse numbri ees.
  • arduino mega- Sellel kõige võimsamal Arduino plaadil on teil 15 8-bitist PWM-väljundit. Need on tihvtidel 2 kuni 13 ja 44 kuni 46.
  • Arduino duett: sel juhul on 13 8-bitist PWM-väljundit. Need on tihvtidel 2 kuni 13, lisaks veel kaks analoogväljundit, mille DAC on eraldanud 12-bitise eraldusvõimega.

Kui räägite seda tüüpi PWM-väljundites 8-bitistest või 12-bitistest eraldusvõimest jne, siis peate silmas teie käsutuses olevat manööverdamisruumi. Koos 8 bitil on 256 taset Nende vahel saate varieeruda ja 12 bitti tõuseb 4096 tasemele.

Juhtimine taimeritega

Riistvara PWM-i juhtimiseks Arduino kasutab taimereid selle eest. Iga praegune taimer võib teenida 2 või 3 PWM-väljundit. Iga väljundi võrdlusregister täiendab seda süsteemi nii, et kui aeg jõuab registri väärtuseni, muudetakse väljundi olekut või väärtust nende töötsüklite peatamiseks. Kuigi sama taimeri abil on kaks väljundit, võivad mõlemad olla erineva töötsükliga, ehkki neil on sama sagedus.

Iga PWM-tihvtiga seotud taimeri puhul on see erinev sõltuvalt Arduino plaadi tüübist et teil on:

  • Arduino UNO, Mini ja Nano:
    • Taimer 0 - 5 ja 6
    • Taimer 1 - 9 ja 10
    • Taimer 2 - 3 ja 11
  • arduino mega:
    • Taimer 0 - 4 ja 13
    • Taimer 1 - 11 ja 12
    • Taimer 2 - 9 ja 10
    • Taimer3 - 2, 3 ja 5
    • Taimer4 - 6, 7 ja 8
    • Taimer5 - 44, 45 ja 46

Eelskaalatud register jagab aja täisarvuga ja Taimer teeb ülejäänud, et kontrollida kõiki seotud PWM-väljundeid. Registriväärtuse muutmine võib muuta sagedust. The sagedused Need erinevad ka sõltuvalt taimerist ja plaadist:

  • Arduino UNO, Mini ja Nano:
    • Taimer0: võimaldab eelskaleerida 1, 8, 64, 256 ja 1024. Sagedus on 62.5 Khz.
    • Taimer1: eelseadistustega 1, 8, 64, 256 ja 1024. Sagedusega 31.25 Khz.
    • Taimer2: võrdne Taimer1-ga, ainult see lisab eelmistele lisaks eelkaalumise 32 ja 128.
  • arduino mega:
    • Taimer 0, 1, 2: sama mis ülal.
    • Taimer 3, 4 ja 5: sagedusega 31.25 Khz ja skaleeritud 1, 8, 64, 256 ja 1024.

Sobimatus ja konfliktid

Taimer väljunditega seotud mitte ainult selle funktsiooni jaoks, kasutavad ka teised. Seega, kui neid kasutab mõni teine ​​funktsioon, peate valima ühe või teise vahel, te ei saa mõlemat korraga kasutada. Näiteks on need mõned vastuolud, mida võite oma projektides leida:

  • Servoteek: Servomootorite kasutamisel kasutab see intensiivselt taimereid, nii et see võib tekitada konflikte. Kasutage konkreetselt Taimer1 UNO, Nano ja Mini jaoks, see tähendab, et te ei saa kasutada nööpnõelu 9 ja 10, kui kasutate selle teegiga visandit. Megas sõltub see servode arvust ...
  • SPI: Kui Arduino plaadil kasutatakse SPI-sidet, kasutatakse MOSI-funktsiooni jaoks kontakti 11. Sellepärast ei saa seda PWM-tihvti kasutada.
  • Toon: see funktsioon kasutab töötamiseks Taimer2. Nii et kui seda kasutatakse, muudate tihvtid 3 ja 11 (või Megale 9 ja 10) kasutuks.

Praktiline test Arduinoga

Arduino PWM skeem koos LED-iga

Kui soovite kohapeal näha, kuidas PWM Arduinol töötab, on parim asi, mida saate teha, ühendada voltmeeter või multimeeter (funktsioonina pinge mõõtmiseks) valitud PWM-tihvti ja Arduino plaadi maandustihvti või GND vahel. Nii saate mõõteseadme ekraanil näha, kuidas pinge muutub tänu digitaalsele väljundile tänu sellele PWM-i trikile.

Saate voltmeeter / multimeeter asendada LED-iga, et näha, kuidas valguse intensiivsus varieerub, alalisvoolumootori või mõne muu soovitud elemendiga. Olen seda lihtsustanud skeemil Fritzing with LED ilma rohkem, kuid teate, et see võib esindada ka multimeetri näpunäiteid ...

Kui kasutate LED-i, pidage meeles katoodi ja GND takistust.

et lähtekoodi Arduino parda mikrokontrolleri juhtimiseks, et kõik toimiks, peaksite selle sisestama Arduino IDE-sse (antud juhul olen kasutanud PWM-i 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  
   } 
} 
Soovitan teil mängida väärtustega ja näha tulemused valgus- või voltmeeteril. Programm võib vastu võtta väärtusi vahemikus 0 kuni 9, nii et näete, kuidas kõik varieerub. Lisateabe saamiseks soovitan teil arduino kursus et meil on tasuta allalaadimine ...

Kommentaar, jätke oma

Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   Jose DIJO

    Tere head päeva. Kõigepealt tahan tänada teid selle aja selgitamiseks pühendatud aja eest.
    Tahaksin teile päringu teha. Proovin koodi käivitada Arguino Mega proteus 8 emulaatoril. Ühendan voltmeetri pin 6-ga, Proteus on ühendatud jadapordiga, kuid ma ei tea, kuidas või mida muuta, et väljastataks erinevaid pingeid. Pidin koodis väiksemaid muudatusi tegema, et see kompileeriks. Tänan teid väga teie abi eest