PWM: oponašanje analognih pinova s ​​vašom Arduino pločom

PWM signali

Pomoću digitalnih i analognih pinova koje možete koristiti na svojoj ploči Arduino možete primati ili slati električne signale za kontrolu ili dobivanje podataka iz svojih elektroničkih projekata. Osim toga, u ovoj vrsti ploča postoje i drugi vrlo zanimljivi signali, a to su PWM, koji mogu oponašati analogni signal a da zapravo nisu analogni. Odnosno, to su digitalne iglice koje mogu djelovati na sličan način (ne isto) kao analogni signal.

Ove su vrste signala vrlo praktične kada ne želite koristiti samo digitalne VISOKE i NISKE signale, to jest 1 ili 0, UKLJUČENO I ISKLJUČENO, nego želite ići dalje i opisati nešto složeniji signali. Na primjer, moguće je modulirati brzinu a Istosmjerni motor, ili intenzitet svjetlosti svjetla, za solenoid itd.

Analogni vs digitalni sustav

Analogni vs digitalni signal

Elektronički sklopovi mogu se podijeliti u dvije velike obitelji ili kategorije: digitalni i analogni. Kada govorimo o digitalnoj elektronici, koristimo veličine s diskretnim vrijednostima, odnosno binarni sustav predstavljen električnim signalima niskog ili visokog napona za tumačenje stanja onih bitova kojima se rukuje. S druge strane, kada se radi o analognom krugu, koriste se veličine s kontinuiranim vrijednostima.

Unutar digitalnih sustava mogu se pronaći redom one kombinacijskog tipa i one sekvencijalnog tipa. Odnosno, prvi su oni kod kojih izlaz sustava ovisi samo o stanju ulaza. S druge strane, u sekvencijalne su uključeni memorijski elementi, a izlaz će ovisiti o trenutnom stanju ulaza i prethodnom spremljenom stanju.

U slučaju analoga ne postoje ove dvije velike skupine ili varijante, jer su ovdje riječ o kontinuiranim signalima o kojima će uvijek ovisiti signal trenutni sustav. Na primjer, u zvučniku će signal koji mu se isporučuje ovisiti o zvuku koji želite reproducirati. Isto s mikrofonom koji će generirati analogni signal ovisno o zvuku koji prima. Sigurno ste to vidjeli i s mnogim drugim senzorima koje smo opisali na ovom blogu i koji djeluju s analognim signalima (i zato je trebalo stvoriti formulu kako bi se kasnije vrijednosti mogle izračunati ili uvjetovati u Arduino IDE skicama ) ...

Ove osobine jednih i drugih čine da neki imaju svoje prednosti i nedostatci, kao što je uobičajeno u gotovo svemu. Primjerice, digitalni su obično jeftiniji, brži, lakši za razvoj, informacije se mogu lakše pohraniti, imaju veću točnost, mogu se programirati, nisu toliko osjetljivi na učinke buke itd. No istina je i da je s analognim moguće raditi sa složenijim signalima.

Po ejemplo, senzor Hallovog efekta digitalnog tipa može otkriti samo prisutnost ili odsutnost obližnjeg magnetskog polja. Umjesto toga, analogni Hallov senzor efekta to može učiniti i također odrediti gustoću spomenutog magnetskog polja zahvaljujući analognom signalu koji generira na njegovom izlazu. Znajući kako dobro protumačiti taj signal višeg ili nižeg napona, lako možete znati tu veličinu. Imate i druge primjere u mnogim veličinama prirode koje možete kvantitativno izmjeriti analognim sustavom, poput temperature, vremena, tlaka, udaljenosti, zvuka itd.

Analogni vs digitalni signal

To je rečeno, a analogni signal To će biti napon ili električna struja koja se mijenja s vremenom i kontinuirano. Ako se shvati, analogni signal bio bi jednofrekventni sinusni val.

Kao digitalni signal, je napon koji postupno varira s obzirom na vrijeme. Odnosno, ako je predstavljen na grafikonu, to će biti signal koraka koji se ne mijenja kontinuirano, već se mijenja u koracima ili diskretnim koracima.

Trebali biste znati da postoje sklopovi za prelazak s analognog signala na digitalni ili obrnuto. Ovi pretvarači poznati su kao DAC (digitalno-analogni pretvarač) i ADC (analogno-digitalni pretvarač). I vrlo su česti u mnogim uređajima koje danas koristimo, poput televizora, računala itd. Pomoću njih možete pretvoriti digitalne signale koje koristi ova oprema u elektroničku razinu za rad s drugim perifernim uređajima ili dijelovima koji rade analogno.

Po ejemplo, zvučnik ili mikrofon s analognim signalima koji radi sa zvučnom karticom ili digitalne grafičke kartice koje su imale poznati RAMDAC čip za priključke analognih monitora ... U Arduinu se ova vrsta pretvarača također koristi za više projekata, kao što ćemo vidjeti ...

Što je PWM?

grafički radni ciklus

Iako PWM (modulacija širine impulsa) ili modulacija širine impulsa, ima digitalnu bazu, oblik signala podsjeća na donekle "kvadratni" analogni signal. Omogućuje pomoću digitalnih impulsa da variraju signal za oponašanje analognog sustava kao što sam već spomenuo. Zapravo, ako pogledate ime, ono vam već daje tragove onoga što čini, kroz širinu digitalnih impulsa.

Ovo je korisno za Arduino budući da postoje mnogi automatizmi ili elektroničke komponente koje možete dodati svojim projektima i to nisu sposobni pružiti pravi analogni signal, ali koriste ovaj PWM za rad. Oni također ne mogu koristiti diskretizirani analogni signal, odnosno koji ide do skokova napona da bi nalikovao digitalnom. Ono što mogu učiniti je koristiti digitalni izlaz -Vcc ili Vcc digitalnog tipa za generiranje ovog neobičnog signala ...

Stoga je PWM svojevrsni "trik" s kojim Arduino i drugi sustavi mogu surađivati ​​s ovom vrstom signala koji nisu sasvim analogni niti su konvencionalni digitalni. Da bi to omogućili, digitalni izlaz drže aktivan određeno vrijeme ili isključeno, ovisno o interesu u svakom trenutku. To je daleko od onoga što bi bio signal digitalnog sata ili binarnog koda, čiji impulsi imaju istu širinu.

U svojim projektima s Arduinom možete provjeriti ovu vrstu PWM signala u kojima se s vremenom održava konstantna frekvencija impulsnih okidača, ali širina ovih impulsa je različita. U stvari, naziva se radni ciklus kada se signal drži na visokom nivou s obzirom na ukupni ciklus. Stoga se radni ciklus daje u%.

Imajte na umu da u PWM-u ne radite kao u analognom signalu, između različitih vrijednosti napona i on fluktuira između njih. U slučaju PWM-a to je kvadratni signal u digitalnom stilu i čija je maksimalna vrijednost Vcc. Na primjer, ako radite s napajanjem od 3 V, možete davati impulse od 3 V ili 0 V, ali ne 1 V ili bilo koju drugu međuvrijednost kao što bi se to dogodilo u stvarnom analogu. Ono što bi u tom slučaju variralo je širina impulsa, koju možemo zadržati 30% na toj visokoj Vcc vrijednosti, ili 60% da bismo joj dali veću snagu itd.

Ali budite oprezni, jer ako uređaj podržava Vcc ograničenje i premaši ga PWM, može se oštetiti. Stoga bi uvijek bilo potrebno poštivati ​​vrijednosti podatkovnih listova koje pružaju proizvođači. Također, u nekim uređajima kao što su istosmjerni motori, releji, elektromagneti, itd., povlačenje napona nakon radnog ciklusa može značiti da induktivna opterećenja mogu prouzročiti štetu. Zato je zaštita pravovremeno.

PWM na Arduinu

Arduino I2C sabirnica

Sad kad znate kako to funkcionira, pogledajmo specifični slučaj PWM-a u svijetu Arduina ...

PWM: pinout na Arduinu

Na Arduino pločama možete pronaći nekoliko pinova koji implementiraju hardverski PWM. Možete ih prepoznati na samoj PCB-u jer imaju simbol ~ (mala glava) zajedno s numeriranjem pin-a. To bi mogao učiniti i softver u Arduino kodu, ali to bi mikrokontrolera preopteretilo radom, nešto apsurdno kad se to može raditi nativno i hardverski ...

  • Arduino UNO, Mini i Nano- Imate 6 8-bitnih PWM izlaza na pinovima 3, 5, 6, 9, 10 i 11, koji će to imati ~ točno ispred broja.
  • arduino mega- Na ovoj najmoćnijoj Arduino ploči imate 15 8-bitnih PWM izlaza. Nalaze se na iglama od 2 do 13 i od 44 do 46.
  • Arduino zbog: u ovom slučaju postoji 13 8-bitnih PWM izlaza. Nalaze se na pinovima 2 do 13, plus dva druga analogna izlaza diskretizirana DAC-om s 12-bitnom rezolucijom.

Kada govorite o 8-bitnoj ili 12-bitnoj razlučivosti, itd., U ovoj vrsti PWM izlaza, mislite na manevarski prostor koji imate. S 8 bitova ima 256 razina između kojih se možete razlikovati, a 12 bitova ide do 4096 razina.

Kontrola pomoću tajmera

Za hardversku PWM kontrolu, Arduino upotrijebit će tajmere za to. Svaki prisutni timer može poslužiti 2 ili 3 PWM izlaza. Registar za usporedbu za svaki izlaz nadopunjuje ovaj sustav, tako da kada vrijeme dosegne vrijednost registra, stanje ili vrijednost izlaza se mijenjaju kako bi se zaustavili ti radni ciklusi. Iako postoje dva izlaza kojima upravlja isti timer, oba mogu imati različite radne cikluse, iako dijele istu frekvenciju.

U slučaju tajmera povezanih sa svakim PWM pinom, oni će se razlikovati ovisno o vrsti Arduino ploče da imate:

  • Arduino UNO, Mini i Nano:
    • Odbrojavanje0 - 5 i 6
    • Odbrojavanje1 - 9 i 10
    • Odbrojavanje2 - 3 i 11
  • arduino mega:
    • Odbrojavanje0 - 4 i 13
    • Odbrojavanje1 - 11 i 12
    • Odbrojavanje2 - 9 i 10
    • Odbrojavanje3 - 2, 3 i 5
    • Odbrojavanje4 - 6, 7 i 8
    • Odbrojavanje5 - 44, 45 i 46

Predkalcirani registar podijelit će vrijeme s cijelim brojem, a odbrojavanje će učiniti sve za upravljanje svakim pridruženim PWM izlazima. Izmjena vrijednosti registra može promijeniti učestalost. The frekvencija Također će se razlikovati ovisno o timeru i pločici:

  • Arduino UNO, Mini i Nano:
    • Timer0: omogućuje predkalkaliranje 1, 8, 64, 256 i 1024. Frekvencija je 62.5 Khz.
    • Timer1: s unaprijed postavljenim postavkama 1, 8, 64, 256 i 1024. S frekvencijom od 31.25 Khz.
    • Timer2: jednak Timer1, samo što uz prethodne dodaje i preskaliranje 32 i 128.
  • arduino mega:
    • Odbrojavanje0, 1, 2: isto kao gore.
    • Mjerač vremena 3, 4 i 5: s frekvencijom od 31.25 Khz i unaprijed određenim na 1, 8, 64, 256 i 1024.

Nespojivosti i sukobi

Tajmer povezan s izlazima nije samo za tu funkciju, koriste i drugi. Stoga, ako ih koristi neka druga funkcija, morate birati između jedne ili druge, ne možete istovremeno koristiti obje. Na primjer, ovo su neke od nekompatibilnosti koje možete pronaći u svojim projektima:

  • Servoteka: Kada koristite servo motore, odbrojavanje se intenzivno koristi, što može dovesti do sukoba. Konkretno upotrijebite Timer1 za UNO, Nano i Mini, to jest ne možete koristiti igle 9 i 10 dok s tom bibliotekom koristite skicu. U Megi će to ovisiti o broju servo upravljača ...
  • SPI: Ako se na ploči Arduino koristi SPI komunikacija, za funkciju MOSI koristi se pin 11. Zbog toga se taj PWM pin ne može koristiti.
  • Ton: ova funkcija koristi Timer2 za rad. Dakle, ako se koristi, činite igle 3 i 11 (ili 9 i 10 za Mega) beskorisnima.

Praktični test s Arduinom

Shema Arduino PWM-a sa LED

Ako na licu mjesta želite vidjeti kako PWM radi na Arduinu, najbolje što možete učiniti je povezati mjerne vodove voltmetar ili multimetar (u funkciji mjerenja napona) između PWM pina koji ste odabrali koristiti i uzemljenja ili GND arduino ploče. Na taj ćete način na zaslonu mjernog uređaja moći vidjeti kako se mijenja napon s digitalnim izlazom zahvaljujući ovom PWM triku.

Voltmetar / multimetar možete zamijeniti LED-om kako biste vidjeli kako varira intenzitet svjetlosti, s istosmjernim motorom ili bilo kojim drugim elementom koji želite. Pojednostavio sam ga na dijagramu s Fritzingom s LED-om bez više, ali znate da može predstavljati i savjete multimetra ...

Ako koristite LED, sjetite se otpora na katodi i GND-a.

u izvorni kod Da biste upravljali mikrokontrolerom ploče Arduino kako bi sve funkcioniralo, trebali biste ga umetnuti u Arduino IDE (u ovom sam slučaju koristio PWM pin 6 od 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  
   } 
} 
Savjetujem vam da se poigrate vrijednostima i vidite rezultati na svjetlu ili voltmetru. Program može primati vrijednosti od 0 do 9, tako da možete vidjeti kako sve varira. Za više informacija savjetujem vam tečaj arduina koje imamo u besplatnom preuzimanju ...

Komentar, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Jose dijo

    Zdravo dobar dan. Prije svega želim vam zahvaliti na vremenu posvećenom ovom objašnjenju za najnovije.
    Želio bih vam postaviti upit. Pokušavam pokrenuti kod na proteus 8 emulatoru za Arguino Mega. Spojim voltmetar na pin 6, Proteus je spojen na serijski priključak, ali ne znam kako i što varirati tako da se izlaze različiti naponi. Morao sam napraviti manja prilagođavanja koda da bi se preveo. Puno ti hvala na pomoći