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

PWM signali

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

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

Analogni vs digitalni sistem

Analogni vs digitalni signal

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

Unutar digitalnih sistema mogu se naći redom one kombinacijskog tipa i one sekvencijalnog tipa. Odnosno, prvi su oni kod kojih izlaz sistema 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 grupe ili varijante, jer su ovdje riječ o kontinuiranim signalima o kojima će uvijek ovisiti signal trenutni sistem. Na primjer, u zvučniku signal koji isporučujete ovisi o zvuku koji želite reproducirati. Isto je 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 da bi se kasnije vrijednosti mogle izračunati ili uvjetovati u Arduino IDE skicama ) ...

Ove karakteristike jednog i drugog čine da neki imaju svoje prednosti i nedostaci, kao i obično u gotovo svemu. Na primjer, digitalni su obično jeftiniji, brži, lakši za razvoj, informacije se mogu lakše pohraniti, imaju veću preciznost, mogu se programirati, nisu toliko ranjivi na efekte buke itd. Tačno je i da s analogima možete raditi sa složenijim signalima.

por ejemplo, senzor Hallovog efekta digitalnog tipa može otkriti samo prisustvo ili odsustvo obližnjeg magnetskog polja. Umjesto toga, analogni senzor Hallovog 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 mnoštvu veličina prirode koje možete kvantitativno izmjeriti analognim sistemom, 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 varira s vremenom i kontinuirano. Ako se grafira, analogni signal bi bio sinusni val jedne frekvencije.

Što se tiče 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 sa analognog signala na digitalni ili obrnuto. Ove 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čunara itd. Pomoću njih možete pretvoriti digitalne signale koje koristi ova oprema u elektronički nivo za rad s drugim perifernim uređajima ili dijelovima koji rade analogno.

por 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 analogne priključke monitora ... U Arduinu se ova vrsta pretvarača također koristi za više projekata, kao što ćemo vidjeti. ..

Šta 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ćava pomoću digitalnih impulsa da variraju signal za emulaciju analognog sistema kao što sam već ranije komentirao. Zapravo, ako pogledate ime, ono vam već daje tragove onoga što čini, kroz širinu digitalnih impulsa.

Ovo je korisno za Arduino jer postoje mnogi automatizmi ili elektroničke komponente koje možete dodati svojim projektima i to nisu sposobni da pruže pravi analogni signal, ali oni koriste ovaj PWM za rad. Niti 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. Ovo je daleko od onoga što bi bio digitalni sat ili signal binarnog koda, čiji impulsi imaju istu širinu.

U svojim projektima s Arduinom možete provjeriti ovu vrstu PWM signala u kojima se 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 nekoliko 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 srednju vrijednost koja bi se dogodila u stvarnom analogu. Ono što bi u tom slučaju variralo je širina impulsa, koju možemo zadržati 30% pri 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 tehničkih listova koje pružaju proizvođači. Takođe, u nekim uređajima kao što su jednosmjerni motori, releji, elektromagneti, itd., povlačenje napona nakon radnog ciklusa može značiti da induktivna opterećenja mogu prouzročiti štetu. Zbog toga zaštite pravovremeno.

PWM na Arduinu

Arduino I2C autobus

Sad kad znate kako to funkcionira, pogledajmo konkretan slučaj PWM-a u Arduino svijetu ...

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 brojevima pinova. To bi mogao učiniti i softver u Arduino kodu, ali to bi mikrokrmilnik preopteretilo radom, nešto apsurdno kada 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 pinovima od 2 do 13 i od 44 do 46.
  • Arduino Duet: 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 sa 12-bitnom rezolucijom.

Kada govorite o rezoluciji od 8 bita ili 12 bita itd., U ovom tipu PWM izlaza, mislite na manevarski prostor koji imate. Sa 8 bitova ima 256 nivoa Između kojih možete varirati, a 12 bitova ide do 4096 nivoa.

Kontrola pomoću tajmera

Za hardversku PWM kontrolu, Arduino će koristiti tajmere za to. Svaki prisutni tajmer može poslužiti 2 ili 3 PWM izlaza. Registar za usporedbu za svaki izlaz dopunjuje ovaj sistem, 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 tajmer, oba mogu imati različite radne cikluse, iako dijele istu frekvenciju.

U slučaju tajmera pridruženih svakom PWM pinu, oni će se razlikovati ovisno o vrsti Arduino ploče da imate:

  • Arduino UNO, Mini i Nano:
    • Tajmer0 - 5 i 6
    • Tajmer1 - 9 i 10
    • Tajmer2 - 3 i 11
  • arduino mega:
    • Tajmer0 - 4 i 13
    • Tajmer1 - 11 i 12
    • Tajmer2 - 9 i 10
    • Tajmer3 - 2, 3 i 5
    • Tajmer4 - 6, 7 i 8
    • Tajmer5 - 44, 45 i 46

Predškolirani registar podijelit će vrijeme sa cijelim brojem, a tajmer će učiniti sve da kontrolira svaki od pridruženih PWM izlaza. Izmjena vrijednosti registra može promijeniti učestalost. The frekvencijama Oni će se također razlikovati ovisno o tajmeru i pločici:

  • Arduino UNO, Mini i Nano:
    • Tajmer0: omogućava predkaliranje 1, 8, 64, 256 i 1024. Frekvencija je 62.5 Khz.
    • Tajmer1: s unaprijed postavljenim postavkama od 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:
    • Tajmer0, 1, 2: isti kao gore.
    • Tajmer3, 4 i 5: s frekvencijom od 31.25 Khz i unaprijed podešenom na 1, 8, 64, 256 i 1024.

Nespojivosti i sukobi

Tajmer povezan sa 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:

  • Servo biblioteka: Kada koristite servo motore, tajmeri se intenzivno koriste, što može dovesti do sukoba. Konkretno koristite Timer1 za UNO, Nano i Mini, to jest, ne možete koristiti pinove 9 i 10 dok koristite skicu s tom bibliotekom. 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) beskorisnim.

Praktični test sa Arduinom

Šema 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 za upotrebu i uzemljenja ili GND arduino ploče. Na taj ćete način na ekranu 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, sa DC motorom ili bilo kojim drugim elementom koji želite. Pojednostavio sam ga na dijagramu sa Fritzingom sa LED-om bez više, ali znajte da može predstavljati i savjete multimetra ...

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

para izvorni kod Da biste upravljali mikrokontrolerom ploče Arduino kako bi sve funkcionisalo, trebali biste ga umetnuti u Arduino IDE (u ovom slučaju koristio sam 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 kurs arduino koje imamo u besplatnom preuzimanju ...

Komentar, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Jose rekao je

    Zdravo dobar dan. Prije svega želim vam zahvaliti na vremenu posvećenom ovom objašnjenju za najnovije.
    Želio bih da vas pitam. Pokušavam pokrenuti kod na proteus 8 emulatoru za Arguino Mega. Priključim voltmetar na pin 6, Proteus je povezan sa serijskim priključkom, ali ne znam kako ili šta da variram tako da se izlaze različiti naponi. Morao sam napraviti manja prilagođavanja koda kako bih ga kompajlirao. Hvala vam puno na pomoći