PWM: posnemanje analognih zatičev s ploščo Arduino

PWM signali

Z digitalnimi in analognimi nožicami, ki jih lahko uporabite na plošči Arduino, lahko prejemate ali pošiljate električne signale za nadzor ali pridobivanje podatkov iz svojih elektronskih projektov. Poleg tega so v tej vrsti plošč tudi drugi zelo zanimivi signali, in to so PWM, ki lahko posnema analogni signal, ne da bi bil dejansko analogen. To pomeni, da so digitalni zatiči, ki lahko delujejo na podoben način (ne enako) kot analogni signal.

Te vrste signalov so zelo praktične, kadar ne želite uporabljati samo digitalnih VISOKIH in NIZKIH signalov, to je 1 ali 0, VKLOP in IZKLOP, ampak želite nadaljevati in opisati nekoliko bolj zapleteni signali. Na primer, mogoče je modulirati hitrost a Enosmerni motor, ali jakost svetlobe za elektromagnet itd.

Analogni in digitalni sistem

Analogni in digitalni signal

Elektronska vezja lahko razdelimo v dve veliki družini ali kategoriji: digitalni in analogni. Ko govorimo o digitalni elektroniki, uporabljamo količine z diskretnimi vrednostmi, to je binarni sistem, ki ga predstavljajo električni signali nizke ali visoke napetosti, za razlago stanja tistih bitov, s katerimi se ravna. Po drugi strani pa se pri analognem vezju uporabljajo količine z neprekinjenimi vrednostmi.

V digitalnih sistemih je mogoče najti po vrsti kombinacijskega in zaporednega tipa. To pomeni, da so prve tiste, pri katerih je izhod sistema odvisen samo od stanja vhodov. Po drugi strani pa so v zaporednih vključeni pomnilniški elementi, izhod pa bo odvisen od trenutnega stanja vhodov in prejšnjega shranjenega stanja.

V primeru analogov teh dveh velikih skupin ali različic ni, saj gre tu za neprekinjene signale, ki bodo vedno odvisni signal trenutni sistem. Na primer, v zvočniku bo signal, ki ga dobimo, odvisen od zvoka, ki ga želite reproducirati. Enako z mikrofonom, ki bo generiral analogni signal, odvisno od zvoka, ki ga sprejema. Zagotovo ste ga videli tudi pri številnih drugih senzorjih, ki smo jih opisali v tem blogu in delujejo z analognimi signali (in zato je bilo treba ustvariti formulo, da bodo pozneje vrednosti lahko izračunane ali pogojene v skicah Arduino IDE ) ...

Zaradi teh značilnosti enega in drugega imajo nekateri svoje prednosti in slabosti, kot je običajno v skoraj vsem. Na primer, digitalni so običajno cenejši, hitrejši, lažji za razvoj, informacije je lažje shraniti, imajo večjo natančnost, jih je mogoče programirati, niso tako občutljivi na učinke hrupa itd. Res pa je tudi, da lahko z analogi operirate z bolj zapletenimi signali.

Z ejemplo, senzor Hallovega digitalnega tipa lahko zazna samo prisotnost ali odsotnost bližnjega magnetnega polja. Namesto tega lahko to stori analogni senzor Hallovega učinka in tudi določi gostoto omenjenega magnetnega polja zahvaljujoč analognemu signalu, ki ga ustvari na svojem izhodu. Če veste, kako dobro razlagati ta signal večje ali manjše napetosti, lahko to velikost zlahka poznate. Imate druge primere v množici naravnih velikosti, ki jih lahko kvantitativno izmerite z analognim sistemom, kot so temperatura, čas, tlak, razdalja, zvok itd.

Analogni in digitalni signal

Kot rečeno, a analogni signal To bo napetost ali električni tok, ki se spreminja s časom in neprekinjeno. Če bi bil analogni signal narisan na grafu, bi bil enofrekvenčni sinusni val.

Kot za digitalni signal, je napetost, ki se postopoma spreminja glede na čas. To pomeni, da če je predstavljen v grafu, bo signal koraka, ki se ne spreminja neprekinjeno, temveč se spreminja v korakih ali ločenih korakih.

Vedeti morate, da obstajajo tokokrogi, ki prehajajo iz analognega signala v digitalni ali obratno. Te pretvorniki znani so kot DAC (digitalno-analogni pretvornik) in ADC (analogno-digitalni pretvornik). In zelo pogosti so v mnogih napravah, ki jih danes uporabljamo, kot so televizor, računalniki itd. Z njimi lahko pretvorite digitalne signale, ki jih uporablja ta oprema, v elektronski nivo za delo z drugimi zunanjimi napravami ali deli, ki delujejo analogno.

Z ejemplo, zvočnik ali mikrofon z analognimi signali, ki deluje z zvočno kartico, ali digitalne grafične kartice, ki so imele znameniti čip RAMDAC za vrata analognih monitorjev ... V Arduinu se ta vrsta pretvornikov uporablja tudi za več projektov, kot bomo videli ...

Kaj je PWM?

grafični delovni cikel

Čeprav PWM (modulacija širine impulza) ali modulacija širine impulza, ima digitalno bazo, njegova oblika je podobna nekoliko "kvadratnemu" analognemu signalu. Z digitalnimi impulzi omogoča spreminjanje signala za posnemanje analognega sistema, kot sem že komentiral. Pravzaprav, če pogledate ime, vam že pokaže širino digitalnih impulzov, kaj počne.

To je koristno za Arduino saj obstaja veliko avtomatizmov ali elektronskih komponent, ki jih lahko dodate svojim projektom in to ne morejo oddajati pravega analognega signala, vendar za delovanje uporabljajo ta PWM. Prav tako ne morejo uporabiti diskretiranega analognega signala, to je, da gre do skokov napetosti, da bi bil podoben digitalnemu. Za ustvarjanje tega posebnega signala lahko uporabijo digitalni izhod -Vcc ali Vcc digitalnega tipa ...

Zato je PWM nekakšen "trik", s katerim lahko Arduino in drugi sistemi delujejo s tovrstnimi signali, ki ne postanejo povsem analogni ali običajni digitalni. Da bi to omogočili, ohranjajo digitalni izhod aktiven določen čas ali izklop, odvisno od zanimanja ves čas. To še zdaleč ni tisto, kar bi bil signal digitalne ure ali binarne kode, katerega impulzi imajo enako širino.

V svojih projektih z Arduinom lahko preverite to vrsto PWM signalov, pri katerih se sčasoma ohranja stalna frekvenca impulznih sprožilcev, vendar širina teh impulzov je različna. Pravzaprav se imenuje delovni cikel, kadar je signal na visoki ravni glede na celoten cikel. Zato je delovni cikel podan v%.

Ne pozabite, da PWM med različnimi vrednostmi napetosti ne deluje kot v analognem signalu in med njimi niha. V primeru PWM gre za kvadratni signal v digitalnem slogu in katerega največja vrednost je Vcc. Na primer, če delate z napajalnikom 3V, lahko oddate impulze 3V ali 0V, ne pa 1V ali katero koli drugo vmesno vrednost, kot bi se pojavila v resničnem analogu. V tem primeru bi se lahko spreminjala širina impulza, ki jo lahko držimo 30% pri tej visoki vrednosti Vcc ali 60%, da dobimo več moči itd.

Vendar bodite previdni, ker če naprava podpira mejo Vcc in je presežena s PWM, se lahko poškoduje. Zato bi bilo vedno treba spoštovati vrednosti obrazcev s strani proizvajalcev. V nekaterih napravah, kot so enosmerni motorji, releji, elektromagneti itd., umik napetosti po delovnem ciklu lahko pomeni, da lahko induktivne obremenitve povzročijo škodo. Zato zaščite pravočasno.

PWM na Arduinu

Avtobus Arduino I2C

Zdaj, ko veste, kako deluje, si oglejmo poseben primer PWM v svetu Arduino ...

PWM: pinout na Arduinu

Na ploščah Arduino lahko najdete več nožic, ki izvajajo strojni PWM. Lahko jih prepoznate na samem PCB-ju, ker imajo simbol ~ (majhna glava) skupaj s številčenjem pinov. To bi lahko storila tudi programska oprema v kodi Arduino, vendar bi to mikrokrmilnik preobremenilo z delom, kar je absurdno, ko je to mogoče izvesti nativno in s strojno opremo ...

  • Arduino UNO, Mini in Nano- Na zatičih 6, 8, 3, 5, 6 in 9 imate 10 11-bitnih izhodov PWM, ki bodo imeli ~ tik pred številko.
  • arduino mega- Na tej najmočnejši plošči Arduino imate 15 8-bitnih izhodov PWM. Nahajajo se na zatičih od 2 do 13 in od 44 do 46.
  • Arduino zaradi: v tem primeru obstaja 13 8-bitnih izhodov PWM. So na nožicah od 2 do 13, plus dva druga analogna izhoda, ki ju diskretira DAC z 12-bitno ločljivostjo.

Ko govorite o ločljivosti 8 bitov ali 12 bitov itd., Se pri tej vrsti izhodov PWM sklicujete na manevrski prostor, ki ga imate. S 8 bitov ima 256 stopenj Med katerimi se lahko spreminjate, 12 bitov pa doseže 4096 ravni.

Nadzor s časovniki

Za nadzor strojne PWM, Arduino bo uporabil časovnike za to. Vsak prisoten časovnik lahko streže 2 ali 3 izhode PWM. Primerjalni register za vsak izhod dopolnjuje ta sistem, tako da se, ko čas doseže vrednost registra, stanje ali vrednost izhoda spremeni, da se ustavijo ti delovni cikli. Čeprav obstajata dva izhoda, ki ju nadzoruje isti časovnik, imata lahko oba različna delovna cikla, čeprav imata enako frekvenco.

V primeru časovnikov, povezanih z vsakim zatičem PWM, se ta razlikuje odvisno od vrste plošče Arduino da imate:

  • Arduino UNO, Mini in Nano:
    • Časovnik0 - 5 in 6
    • Časovnik1 - 9 in 10
    • Časovnik2 - 3 in 11
  • arduino mega:
    • Časovnik0 - 4 in 13
    • Časovnik1 - 11 in 12
    • Časovnik2 - 9 in 10
    • Časovnik3 - 2, 3 in 5
    • Časovnik4 - 6, 7 in 8
    • Časovnik5 - 44, 45 in 46

Vnaprej določen register bo čas delil s celim številom, časomer pa bo naredil ostalo za nadzor vsakega od povezanih izhodov PWM. Spreminjanje vrednosti registra lahko spremeni pogostost. The frekvence Prav tako se razlikujejo glede na časovnik in ploščo:

  • Arduino UNO, Mini in Nano:
    • Timer0: omogoča predkaliranje 1, 8, 64, 256 in 1024. Frekvenca je 62.5 Khz.
    • Časovnik1: s prednastavitvami 1, 8, 64, 256 in 1024. S frekvenco 31.25 kHz.
    • Timer2: enak Timer1, le da poleg predhodnih doda še predkaliranje 32 in 128.
  • arduino mega:
    • Timer0, 1, 2: enako kot zgoraj.
    • Časovnik 3, 4 in 5: s frekvenco 31.25 kHz in predštetjem 1, 8, 64, 256 in 1024.

Nezdružljivosti in konflikti

Časovnik povezan z izhodi ni samo za to funkcijo, uporabljajo tudi drugi. Če jih torej uporablja druga funkcija, morate izbrati eno ali drugo, hkrati ne morete uporabljati obeh. Tu je na primer nekaj nezdružljivosti, ki jih lahko najdete v svojih projektih:

  • Servo knjižnica: Ko uporabljate servo motorje, se časovniki intenzivno uporabljajo, kar lahko povzroči konflikte. Natančneje uporabite Timer1 za UNO, Nano in Mini, to pomeni, da med uporabo skice s to knjižnico ne morete uporabljati nožic 9 in 10. V Megi bo to odvisno od števila servomotorjev ...
  • SPI: Če se na plošči Arduino uporablja komunikacija SPI, se za funkcijo MOSI uporablja pin 11. Zato tega PWM zatiča ni mogoče uporabiti.
  • Tone: ta funkcija za delovanje uporablja Timer2. Torej, če se uporablja, zatiči 3 in 11 (ali 9 in 10 za Mega) postanejo neuporabni.

Praktični test z Arduinom

Shema Arduino PWM z LED

Če želite na mestu videti, kako deluje PWM na Arduinu, je najbolje, da povežete merilne vodnike voltmeter ali multimeter (v funkciji merjenja napetosti) med zatičem PWM, ki ste ga izbrali, in ozemljitvenim zatičem ali GND plošče Arduino. Na ta način boste na zaslonu merilne naprave videli, kako se napetost spreminja z digitalnim izhodom, zahvaljujoč temu triku PWM.

Voltmeter / multimeter lahko zamenjate z LED, da vidite, kako se spreminja jakost svetlobe, z enosmernim motorjem ali s katerim koli drugim elementom, ki ga želite. V diagramu sem ga poenostavil s Fritzingom z LED brez več, vendar veste, da lahko predstavlja tudi nasvete multimetra ...

Če uporabljate LED, si zapomnite upor na katodi in GND.

za izvorno kodo Če želite krmiliti mikrokrmilnik plošče Arduino, da bo vse delovalo, morate to vstaviti v Arduino IDE (v tem primeru sem uporabil 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  
   } 
} 
Svetujem vam, da se poigrate z vrednotami in si oglejte rezultate na svetlobi ali voltmetru. Program lahko prejme vrednosti od 0 do 9, tako da lahko vidite, kako se vse spreminja. Za več informacij vam svetujem tečaj arduino ki ga imamo v brezplačnem prenosu ...

Komentar, pusti svojega

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   jose je dejal

    Pozdravljeni dober dan. Najprej se vam želim zahvaliti za čas, namenjen tej razlagi za najnovejše.
    Rad bi vas vprašal. Poskušam zagnati kodo na emulatorju proteus 8 za Arguino Mega. Na pin 6 priklopim voltmeter, Proteus je priključen na serijska vrata, vendar ne vem, kako in kaj spremeniti, tako da izhajajo različne napetosti. Kodo sem moral nekoliko prilagoditi, da se je sestavila. Najlepša hvala za vašo pomoč