PWM: emulácia analógových pinov pomocou dosky Arduino

Signály PWM

S digitálnymi a analógovými kolíkmi, ktoré môžete použiť na doske Arduino, môžete prijímať alebo odosielať elektrické signály na riadenie alebo získavanie údajov z vašich elektronických projektov. Okrem toho sú v tomto type platne ďalšie veľmi zaujímavé signály, a to sú PWM, ktoré môžu emulovať analógový signál bez toho, aby boli skutočne analógové. To znamená, že ide o digitálne piny, ktoré môžu pôsobiť podobným spôsobom (nie rovnako) ako analógový signál.

Tieto typy signálov sú veľmi praktické, keď chcete nielen používať digitálne VYSOKÉ a NÍZKE signály, tj. 1 alebo 0, ZAPNÚŤ a VYPNÚŤ, ale chcete ísť ďalej a popísať o niečo zložitejšie signály. Napríklad je možné modulovať rýchlosť a jednosmerný motor, alebo intenzita svetla, pre solenoid atď.

Analógový vs digitálny systém

Analógový vs digitálny signál

Elektronické obvody možno rozdeliť do dvoch veľkých skupín alebo kategórií: digitálne a analógové. Keď hovoríme o digitálnej elektronike, používame veličiny s diskrétnymi hodnotami, to znamená binárny systém predstavovaný elektrickými signálmi nízkeho alebo vysokého napätia na interpretáciu stavu tých bitov, s ktorými sa narába. Na druhej strane, pokiaľ ide o analógový obvod, používajú sa veličiny so spojitými hodnotami.

V rámci digitálnych systémov sa nachádzajú postupne kombinovaného typu a sekvenčného typu. To znamená, že prvé sú tie, v ktorých výstup systému závisí iba od stavu vstupov. Na druhej strane, v postupných sú zahrnuté pamäťové prvky a výstup bude závisieť od aktuálneho stavu vstupov a uloženého predchádzajúceho stavu.

V prípade analógov neexistujú tieto dve veľké skupiny alebo varianty, pretože tu ide o spojité signály, od ktorých bude vždy závisieť signál súčasný systém. Napríklad v reproduktore závisí dodávaný signál od zvuku, ktorý chcete reprodukovať. To isté s mikrofónom, ktorý bude generovať analógový signál v závislosti od zvuku, ktorý prijíma. Určite ste to videli aj s mnohými ďalšími senzormi, ktoré sme popísali v tomto blogu a ktoré pôsobia na analógové signály (a preto bolo treba vytvoriť vzorec, aby bolo možné neskôr hodnoty vypočítať alebo upraviť v náčrtoch Arduino IDE ) ...

Tieto vlastnosti jedného a druhého spôsobujú, že niektoré majú svoje výhody a nevýhody, ako to už býva takmer vo všetkom. Napríklad digitálne bývajú lacnejšie, rýchlejšie, ľahšie sa vyvíjajú, informácie sa dajú ľahšie ukladať, majú väčšiu presnosť, dajú sa programovať, nie sú tak zraniteľné voči účinkom hluku atď. Ale je tiež pravda, že s analógmi môžete pracovať so zložitejšími signálmi.

Podľa ejemplo, snímač Hallovho digitálneho typu dokáže detekovať iba prítomnosť alebo neprítomnosť blízkeho magnetického poľa. Namiesto toho to dokáže analógový snímač s Hallovým efektom a tiež určiť hustotu uvedeného magnetického poľa vďaka analógovému signálu, ktorý generuje na svojom výstupe. Ak budete vedieť, ako dobre interpretovať signál väčšieho alebo menšieho napätia, môžete ľahko zistiť túto veľkosť. Ďalšie príklady, ktoré máte v množstve prírodných veličín, ktoré môžete kvantitatívne merať pomocou analógového systému, ako sú teplota, čas, tlak, vzdialenosť, zvuk atď.

Analógový vs digitálny signál

To je povedané, a analógový signál Bude to napätie alebo elektrický prúd, ktoré sa menia s časom a nepretržite. Ak by bol graf znázornený, analógovým signálom by bola jedna sínusová vlna s jednou frekvenciou.

Vzhľadom k tomu, digitálny signál, je napätie, ktoré sa postupne mení s ohľadom na čas. To znamená, že ak je to znázornené v grafe, bude to krokový signál, ktorý sa nemení kontinuálne, ale zmeny v krokoch alebo diskrétnych prírastkoch.

Mali by ste vedieť, že existujú obvody na prechod z analógového signálu na digitálny alebo naopak. Títo prevádzače sú známe ako DAC (digitálno-analógový prevodník) a ADC (analógovo-digitálny prevodník). A sú veľmi časté v mnohých zariadeniach, ktoré dnes používame, napríklad v televízii, počítačoch atď. Pomocou nich môžete prevádzať digitálne signály používané týmto zariadením na elektronickú úroveň, aby mohli pracovať s inými perifériami alebo súčasťami, ktoré pracujú analógovo.

Podľa ejemplo, reproduktor alebo mikrofón s analógovými signálmi, ktorý pracuje so zvukovou kartou, alebo digitálne grafické karty, ktoré mali slávny čip RAMDAC pre analógové porty monitora ... V Arduine sa tento typ prevodníkov používa aj na rôzne projekty, ako uvidíme. ..

Čo je to PWM?

grafický pracovný cyklus

Hoci PWM (modulácia šírky impulzu) alebo modulácia šírky impulzu, má digitálnu základňu, tvar jeho signálu pripomína trochu „štvorcový“ analógový signál. Umožňuje to pomocou digitálnych impulzov meniť signál tak, aby emuloval analógový systém, ako som už uviedol skôr. V skutočnosti, ak sa pozriete na meno, cez šírku digitálnych impulzov vám už poskytne informácie o tom, čo robí.

To je prospešné pre Arduino pretože existuje veľa automatizmov alebo elektronických komponentov, ktoré môžete pridať do svojich projektov a podobne nie sú schopné poskytnúť pravý analógový signál, ale na svoju činnosť používajú tento PWM. Nemôžu tiež použiť diskretizovaný analógový signál, to znamená, že ide o skoky napätia, aby sa podobali na digitálny. To, čo môžu urobiť, je použiť digitálny výstup -Vcc alebo Vcc digitálneho typu na generovanie tohto zvláštneho signálu ...

Preto je PWM akýmsi „trikom“, s ktorým môže Arduino a ďalšie systémy spolupracovať s týmto typom signálov, ktoré nie sú celkom analógové ani konvenčné digitálne. Aby to bolo možné, udržujú digitálny výstup aktívny po konkrétny čas alebo vypnutý, vždy podľa záujmu. To zďaleka nie je to, čo by boli digitálne hodiny alebo signál binárneho kódu, ktorého impulzy majú rovnakú šírku.

Vo vašich projektoch s Arduinom môžete skontrolovať tento typ PWM signálov, pri ktorých sa v priebehu času udržuje konštantná frekvencia impulzných spúšťačov, ale šírka týchto impulzov je rôzna. V skutočnosti sa tomu hovorí pracovný cyklus, keď je signál udržiavaný na vysokej hodnote vzhľadom na celkový cyklus. Pracovný cyklus je preto uvedený v%.

Pamätajte, že v PWM nepracujete ako v analógovom signáli, medzi niekoľkými hodnotami napätia a medzi nimi kolíše. V prípade PWM ide o štvorcový signál v digitálnom štýle a ktorých maximálna hodnota je Vcc. Napríklad, ak pracujete s napájaním 3V, môžete dávať impulzy 3V alebo 0V, ale nie 1V alebo inú strednú hodnotu, ako by sa vyskytovala v skutočnom analógovom režime. V takom prípade by sa líšila šírka impulzu, ktorú môžeme udržiavať na 30% pri tejto vysokej hodnote Vcc alebo 60%, aby sme jej dodali väčší výkon, atď.

Ale buďte opatrní, pretože ak zariadenie podporuje limit Vcc a je prekročený pomocou PWM, môže sa poškodiť. Vždy by bolo preto potrebné rešpektovať hodnoty údajových listov poskytovaných výrobcami. V niektorých zariadeniach, napríklad jednosmerných motoroch, relé, elektromagnety atď., Odpojenie napätia po pracovnom cykle môže znamenať, že indukčné záťaže môžu spôsobiť poškodenie. Preto ochrany včas.

PWM na Arduine

Zbernica Arduino I2C

Teraz, keď viete, ako to funguje, pozrime sa na konkrétny prípad PWM vo svete Arduino ...

PWM: pinout na Arduine

Na doskách Arduino nájdete niekoľko pinov, ktoré implementujú hardvérové ​​PWM. Môžete ich identifikovať na samotnej doske plošných spojov, pretože majú a symbol ~ (malá hlava) spolu s číslovaním pinov. Dalo by sa to urobiť aj softvérom v kóde Arduino, ale to by preťažilo mikrokontrolér prácou, čo je absurdné, keď sa to dá urobiť natívne a hardvérom ...

  • Arduino UNO, Mini a Nano- Máte 6 8-bitových PWM výstupov na pinoch 3, 5, 6, 9, 10 a 11, ktoré budú mať ~ priamo pred číslom.
  • Mega Arduino- Na tejto najsilnejšej doske Arduino máte 15 8-bitových PWM výstupov. Sú na pinoch 2 až 13 a 44 až 46.
  • Arduino splatné: v tomto prípade existuje 13 8-bitových výstupov PWM. Sú na pinoch 2 až 13, plus dva ďalšie analógové výstupy diskretizované DAC s 12-bitovým rozlíšením.

Keď hovoríte o rozlíšení 8 bitov alebo 12 bitov atď., V tomto type výstupov PWM máte na mysli manévrovací priestor, ktorý máte. S 8 bitov má 256 úrovní Medzi ktorými sa môžete líšiť a 12 bitov ide až na 4096 úrovní.

Ovládanie pomocou časovačov

Pre hardvérové ​​riadenie PWM, Arduino použije časovače pre to. Každý prítomný časovač môže slúžiť 2 alebo 3 PWM výstupom. Porovnávací register pre každý výstup dopĺňa tento systém, takže keď čas dosiahne hodnotu registra, zmení sa stav alebo hodnota výstupu tak, aby sa zastavili tieto pracovné cykly. Aj keď existujú dva výstupy riadené rovnakým časovačom, oba môžu mať rozdielne pracovné cykly, hoci majú rovnakú frekvenciu.

V prípade časovačov spojených s každým pinom PWM sa to bude líšiť v závislosti od typu dosky Arduino že máte:

  • Arduino UNO, Mini a Nano:
    • Časovač 0-5 a 6
    • Časovač 1-9 a 10
    • Časovač 2-3 a 11
  • Mega Arduino:
    • Časovač 0-4 a 13
    • Časovač 1-11 a 12
    • Časovač 2-9 a 10
    • Časovač3 - 2, 3 a 5
    • Časovač4 - 6, 7 a 8
    • Časovač5 - 44, 45 a 46

Prednastavený register vydelí čas celým číslom a časovač urobí zvyšok na riadenie každého z priradených výstupov PWM. Úpravou hodnoty registra sa môže meniť frekvencia. The kmitočet Budú sa tiež líšiť v závislosti od časovača a štítku:

  • Arduino UNO, Mini a Nano:
    • Timer0: umožňuje prednastavenie na 1, 8, 64, 256 a 1024. Frekvencia je 62.5 Khz.
    • Timer1: s predvoľbami 1, 8, 64, 256 a 1024. S frekvenciou 31.25 Khz.
    • Timer2: rovnaký ako Timer1, ibaže k predchádzajúcim pridáva prednastavenie 32 a 128.
  • Mega Arduino:
    • Časovač0, 1, 2: rovnaký ako vyššie.
    • Časovač 3, 4 a 5: s frekvenciou 31.25 Khz a predvoľbou 1, 8, 64, 256 a 1024.

Nezlučiteľnosť a konflikty

Časovač spojené s výstupmi, nie je len pre túto funkciu, používajú aj iní. Preto, ak ich používa iná funkcia, musíte si vybrať medzi jednou alebo druhou, nemôžete používať obe súčasne. Napríklad sú to niektoré nekompatibility, ktoré môžete nájsť vo svojich projektoch:

  • Servo knižnica: Ak používate servomotory, intenzívne využíva časovače, takže by mohlo dôjsť ku konfliktom. Konkrétne použite Timer1 pre UNO, Nano a Mini, to znamená, že nemôžete používať piny 9 a 10, keď používate náčrt s touto knižnicou. V Mega to bude závisieť od počtu serv ...
  • SPI: Ak sa na doske Arduino používa komunikácia SPI, použije sa pin 11 pre funkciu MOSI. Preto sa tento pin PWM nedá použiť.
  • Tón: táto funkcia používa na svoju činnosť Timer2. Takže ak sa to použije, urobíte špendlíky 3 a 11 (alebo 9 a 10 pre Mega) zbytočnými.

Praktický test s Arduinom

Schéma Arduino PWM s LED

Ak chcete na mieste vidieť, ako funguje PWM na Arduine, najlepšie urobíte, ak pripojíte meracie káble voltmeter alebo multimetr (vo funkcii na meranie napätia) medzi pinom PWM, ktorý ste sa rozhodli použiť, a uzemňovacím pinom alebo GND dosky Arduino. Týmto spôsobom na obrazovke meracieho zariadenia uvidíte, ako sa mení napätie s digitálnym výstupom vďaka tomuto triku PWM.

Voltmetr / multimetr môžete nahradiť LED, aby ste videli, ako sa mení intenzita svetla, jednosmerným motorom alebo iným požadovaným prvkom. Zjednodušil som to na diagrame pomocou Fritzinga s LED bez ďalších, ale viete, že to môže predstavovať aj hroty multimetra ...

Ak používate LED, nezabudnite na odpor na katóde a GND.

na zdrojový kód Ak chcete ovládať mikrokontrolér na doske Arduino, aby všetko fungovalo, mali by ste ho vložiť do Arduino IDE (v tomto prípade som použil PWM pin 6 z 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  
   } 
} 
Radím vám, aby ste sa pohrali s hodnotami a videli výsledky na svetle alebo voltmetri. Program môže prijímať hodnoty od 0 do 9, aby ste videli, ako sa všetko líši. Pre viac informácií Vám radím kurz Arduino ktoré máme na stiahnutie zadarmo ...

Komentár, nechajte svoj

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Jose dijo

    Ahoj, dobrý deň. Najskôr by som sa chcel poďakovať za čas venovaný tomuto najnovšiemu vysvetleniu.
    Chcel by som sa vás opýtať. Snažím sa spustiť kód na emulátore proteus 8 pre Arguino Mega. Pripojím voltmeter na pin 6, Proteus je pripojený k sériovému portu, ale neviem, ako alebo čo sa má meniť, aby na výstupe bolo rôzne napätie. Musel som urobiť menšie úpravy kódu, aby sa dal kompilovať. Veľmi pekne ti ďakujem za tvoju pomoc