PWM: efelychu pinnau analog gyda'ch bwrdd Arduino

Arwyddion PWM

Gyda'r pinnau digidol ac analog, y gallwch eu defnyddio ar eich bwrdd Arduino, gallwch dderbyn neu anfon signalau trydanol i reoli neu gael data o'ch prosiectau electronig. Yn ogystal, mae yna signalau diddorol iawn eraill yn y math hwn o blât, a dyna'r PWM, gall hynny efelychu signal analog heb fod yn analog mewn gwirionedd. Hynny yw, pinnau digidol ydyn nhw sy'n gallu gweithredu mewn ffordd debyg (nid yr un peth) â signal analog.

Mae'r mathau hyn o signalau yn ymarferol iawn ar gyfer pan rydych chi nid yn unig eisiau defnyddio signalau UCHEL ac ISEL digidol, hynny yw, 1 neu 0, ON a OFF, ond rydych chi am fynd ymhellach a disgrifio signalau ychydig yn fwy cymhleth. Er enghraifft, mae'n bosibl modiwleiddio cyflymder a modur DC, neu ddwyster golau goleuni, ar gyfer solenoid, ac ati.

System analog vs digidol

Signal analog vs digidol

Gellir rhannu cylchedau electronig yn ddau deulu neu gategori mawr: digidol ac analog. Wrth siarad am electroneg ddigidol, rydym yn defnyddio meintiau â gwerthoedd arwahanol, hynny yw, system ddeuaidd a gynrychiolir gan signalau trydanol o foltedd isel neu uchel i ddehongli cyflwr y darnau hynny sy'n cael eu trin. Ar y llaw arall, pan mae'n gylched analog, mae meintiau â gwerthoedd parhaus yn cael eu defnyddio.

Gellir dod o fewn systemau digidol yn eu tro y rhai o fath cyfun a'r rhai o fath dilyniannol. Hynny yw, y cyntaf yw'r rhai lle mae allbwn y system yn dibynnu ar gyflwr y mewnbynnau yn unig. Ar y llaw arall, yn y rhai dilyniannol, mae elfennau cof wedi'u cynnwys, a bydd yr allbwn yn dibynnu ar gyflwr cyfredol y mewnbynnau a'r wladwriaeth flaenorol a storiwyd.

Yn achos analogs nid yw'r ddau grŵp neu amrywiad mawr hyn, oherwydd yma maent yn signalau parhaus y bydd bob amser yn dibynnu arnynt y signal system gyfredol. Er enghraifft, mewn uchelseinydd, mae'r signal rydych chi'n ei gyflenwi yn dibynnu ar y sain rydych chi am ei hatgynhyrchu. Yr un peth â meicroffon, a fydd yn cynhyrchu signal analog yn dibynnu ar y sain y mae'n ei derbyn. Siawns eich bod hefyd wedi ei weld gyda llawer o synwyryddion eraill yr ydym wedi'u disgrifio yn y blog hwn ac sy'n gweithredu gyda signalau analog (ac felly, roedd yn rhaid creu fformiwla fel y gellid cyfrif neu gyflyru'r gwerthoedd yn frasluniau Arduino IDE yn ddiweddarach ) ...

Mae'r nodweddion hyn o'r naill a'r llall yn gwneud i rai gael eu manteision ac anfanteision, fel sy'n arferol ym mron popeth. Er enghraifft, mae rhai digidol yn tueddu i fod yn rhatach, yn gyflymach, yn haws eu datblygu, gellir storio gwybodaeth yn haws, mae ganddynt fwy o gywirdeb, gellir eu rhaglennu, nid ydynt mor agored i effeithiau sŵn, ac ati. Ond mae hefyd yn wir y gallwch chi, gydag analogs, weithredu gyda signalau mwy cymhleth.

Por ejemplo, dim ond presenoldeb neu absenoldeb maes magnetig cyfagos y gall synhwyrydd effaith Neuadd ddigidol ei ddarganfod. Yn lle, gall synhwyrydd effaith Neuadd analog wneud hynny a hefyd bennu dwysedd y maes magnetig dywededig diolch i signal analog y mae'n ei gynhyrchu wrth ei allbwn. Gan wybod sut i ddehongli'r signal hwnnw o foltedd mwy neu lai yn dda, gallwch chi wybod y maint hwnnw'n hawdd. Enghreifftiau eraill sydd gennych mewn llu o feintiau natur y gallwch eu mesur yn feintiol gyda system analog, megis tymheredd, amser, pwysau, pellter, sain, ac ati.

Signal analog vs digidol

Wedi dweud hynny, a signal analog Bydd yn gerrynt foltedd neu drydan sy'n amrywio gydag amser ac yn barhaus. Pe bai'n cael ei blotio ar graff, byddai'r signal analog yn don sine amledd sengl.

Gan fod y signal digidol, yn foltedd sy'n amrywio mewn modd cam wrth gam o ran amser. Hynny yw, os yw'n cael ei gynrychioli mewn graff, bydd yn signal cam nad yw'n amrywio'n barhaus, ond yn newid mewn camau neu'n gynyddrannau arwahanol.

Dylech wybod bod cylchedau i fynd o signal analog i un digidol neu i'r gwrthwyneb. Rhain trawsnewidwyr fe'u gelwir yn DAC (Converter Digidol-i-Analog) ac ADC (Analog-i-Ddigidol Converter). Ac maen nhw'n aml iawn mewn llawer o ddyfeisiau rydyn ni'n eu defnyddio heddiw, fel teledu, cyfrifiaduron, ac ati. Gyda nhw gallwch drosi'r signalau digidol a ddefnyddir gan yr offer hyn i lefel electronig i weithio gyda pherifferolion eraill neu rannau sy'n gweithio yn analog.

Por ejemplo, siaradwr neu feicroffon gyda signalau analog sy'n gweithio gyda cherdyn sain, neu gardiau graffeg digidol a oedd â'r sglodyn RAMDAC enwog ar gyfer y porthladdoedd monitor analog ... Yn Arduino defnyddir y math hwn o drawsnewidwyr hefyd ar gyfer prosiectau lluosog, fel y gwelwn ...

Beth yw PWM?

cylch dyletswydd graffig

Er bod PWM (Modiwleiddio Lled Pwls), neu fodiwleiddio lled pwls, mae ganddo sylfaen ddigidol, mae siâp ei signal yn debyg i signal analog braidd yn "sgwâr". Mae'n caniatáu trwy gyfrwng corbys digidol amrywio'r signal i efelychu system analog fel yr wyf eisoes wedi gwneud sylwadau o'r blaen. Mewn gwirionedd, os edrychwch ar yr enw, mae eisoes yn rhoi cliwiau i chi o'r hyn y mae'n ei wneud, trwy led y corbys digidol.

Mae hyn yn fuddiol ar gyfer Arduino gan fod yna lawer o awtomeiddiadau neu gydrannau electronig y gallwch eu hychwanegu at eich prosiectau a hynny yn methu â darparu signal analog go iawn, ond maen nhw'n defnyddio'r PWM hwn i weithredu. Ni allant ychwaith ddefnyddio signal analog anghysbell, hynny yw, sy'n mynd i neidiau foltedd i ymdebygu i un digidol. Yr hyn y gallant ei wneud yw defnyddio allbwn digidol -Vcc neu Vcc o fath digidol i gynhyrchu'r signal rhyfedd hwn ...

Felly, mae PWM yn fath o "dric" y gall Arduino a systemau eraill ryngweithio â'r math hwn o signalau sy'n nid ydynt yn dod yn ddigidol hollol analog neu gonfensiynol. Er mwyn ei gwneud yn bosibl, maent yn cadw allbwn digidol yn weithredol am amser penodol neu i ffwrdd, yn dibynnu ar y diddordeb bob amser. Mae hyn ymhell o'r hyn a fyddai yn gloc digidol neu signal cod deuaidd, y mae ei gorbys yr un lled.

Yn eich prosiectau gydag Arduino gallwch wirio'r math hwn o signalau PWM lle mae amledd cyson o sbardunau pwls yn cael eu cynnal dros amser, ond mae lled y corbys hyn yn amrywiol. Mewn gwirionedd, fe'i gelwir yn Beic Dyletswydd pan gedwir signal yn uchel mewn perthynas â chyfanswm y cylch. Felly, rhoddir Cylchred Dyletswydd mewn%.

Cofiwch nad yw PWM yn gweithio fel mewn signal analog, rhwng gwahanol werthoedd foltedd ac mae'n amrywio rhyngddynt. Yn achos PWM mae'n signal sgwâr yn yr arddull ddigidol a y mae ei werth uchaf yn Vcc. Er enghraifft, os ydych chi'n gweithio gyda chyflenwad pŵer 3V, gallwch chi roi corbys 3V neu 0V, ond nid 1V nac unrhyw werth canolraddol arall fel y byddai'n digwydd mewn analog go iawn. Yr hyn a fyddai’n amrywio yn yr achos hwnnw yw lled y pwls, y gallwn ei gadw 30% ar y gwerth Vcc uchel hwnnw, neu 60% i roi mwy o bwer iddo, ac ati.

Ond byddwch yn ofalus, oherwydd os yw dyfais yn cefnogi terfyn Vcc ac yn uwch na PWM gellir ei niweidio. Felly byddai bob amser yn angenrheidiol parchu gwerthoedd y taflenni data a ddarperir gan y gwneuthurwyr. Hefyd, mewn rhai dyfeisiau fel moduron DC, rasys cyfnewid, electromagnetau, ac ati, gall tynnu foltedd yn ôl ar ôl Cylch Dyletswydd olygu y gall llwythi anwythol achosi difrod. Dyna pam mae'r amddiffyniadau amserol.

PWM ar Arduino

Bws Arduino I2C

Nawr eich bod chi'n gwybod sut mae'n gweithio, gadewch i ni weld achos penodol PWM ym myd Arduino ...

PWM: pinout ar Arduino

Ar fyrddau Arduino gallwch ddod o hyd i sawl pin sy'n gweithredu PWM caledwedd. Gallwch eu hadnabod ar y PCB ei hun oherwydd bod ganddyn nhw symbol ~ (pen bach) ynghyd â'r rhifo pin. Gellid ei wneud hefyd gan feddalwedd yn y cod Arduino, ond byddai hynny'n gorlwytho'r microcontroller gyda gwaith, rhywbeth hurt pan ellir ei wneud yn frodorol a thrwy galedwedd ...

  • Arduino UNO, Mini a Nano- Mae gennych 6 allbwn PWM 8-did ar binnau 3, 5, 6, 9, 10, ac 11, a fydd â'r ~ iawn hwnnw o flaen y rhif.
  • arduino mega- Ar y bwrdd Arduino mwyaf pwerus hwn mae gennych 15 allbwn PWM 8-did. Maen nhw ar binnau 2 trwy 13 a 44 trwy 46.
  • Arduino Dyladwy: yn yr achos hwn mae 13 allbwn PWM 8-did. Maent ar binnau 2 i 13, ynghyd â dau allbwn analog arall a ddiffygiwyd gan DAC gyda datrysiad 12-did.

Pan fyddwch chi'n siarad am ddatrysiad o 8 darn neu 12 darn, ac ati, yn y math hwn o allbynnau PWM, rydych chi'n cyfeirio at yr ystafell ar gyfer symud sydd gennych chi. Gyda Mae gan 8 darn 256 lefel Rhwng y gallwch amrywio, ac mae'r 12 darn yn mynd i fyny i lefelau 4096.

Rheolaeth gydag Amseryddion

Ar gyfer rheolaeth PWM caledwedd, Arduino yn defnyddio'r amseryddion ar ei gyfer. Gall pob Amserydd presennol wasanaethu 2 neu 3 allbwn PWM. Mae cofrestr gymhariaeth ar gyfer pob allbwn yn ategu'r system hon fel bod cyflwr neu werth yr allbwn yn cael ei newid i atal y Cylchoedd Dyletswydd hynny pan fydd yr amser yn cyrraedd gwerth y gofrestr. Er bod dau allbwn yn cael eu rheoli gan yr un Amserydd, gall y ddau fod â Chylchoedd Dyletswydd gwahanol, er eu bod yn rhannu'r un amledd.

Yn achos yr Amseryddion sy'n gysylltiedig â phob pin PWM, bydd yn amrywio yn dibynnu ar y math o fwrdd Arduino bod gennych chi:

  • Arduino UNO, Mini a Nano:
    • Amserydd0 - 5 a 6
    • Amserydd1 - 9 a 10
    • Amserydd2 - 3 a 11
  • arduino mega:
    • Amserydd0 - 4 a 13
    • Amserydd1 - 11 a 12
    • Amserydd2 - 9 a 10
    • Amserydd3 - 2, 3 a 5
    • Amserydd4 - 6, 7 a 8
    • Amserydd5 - 44, 45 a 46

Bydd y gofrestr ragnodedig yn rhannu'r amser â chyfanrif ac mae'r Amserydd yn gwneud y gweddill i reoli pob un o'r allbynnau PWM cysylltiedig. Gall addasu gwerth y gofrestrfa newid yr amlder. Mae'r amleddau Byddant hefyd yn wahanol yn dibynnu ar yr Amserydd a'r plât:

  • Arduino UNO, Mini a Nano:
    • Amserydd0: yn caniatáu prescaling 1, 8, 64, 256 a 1024. Yr amledd yw 62.5 Khz.
    • Amserydd1: gyda rhagosodiadau 1, 8, 64, 256 a 1024. Gydag amledd o 31.25 Khz.
    • Amserydd2: yn hafal i Timer1, dim ond ei fod yn ychwanegu rhagdybiaeth o 32 a 128 yn ychwanegol at y rhai blaenorol.
  • arduino mega:
    • Amserydd0, 1, 2: yr un peth â'r uchod.
    • Amserydd3, 4, a 5: gydag amlder o 31.25 Khz a'i ragnodi o 1, 8, 64, 256 a 1024.

Anghydnawsedd a gwrthdaro

Yr Amserydd nid yn unig ar gyfer y swyddogaeth honno sy'n gysylltiedig â'r allbynnau, hefyd yn cael ei ddefnyddio gan eraill. Felly, os ydynt yn cael eu defnyddio gan swyddogaeth arall, rhaid i chi ddewis rhwng y naill neu'r llall, ni allwch fod yn defnyddio'r ddau ar yr un pryd. Er enghraifft, dyma rai o'r anghydnawsedd y gallwch chi ddod o hyd iddynt yn eich prosiectau:

  • Llyfrgell Servo: Pan fyddwch chi'n defnyddio moduron servo, mae'n gwneud defnydd dwys o Amseryddion, felly gallai greu gwrthdaro. Defnyddiwch Timer1 yn benodol ar gyfer UNO, Nano a Mini, hynny yw, ni allwch ddefnyddio pinnau 9 a 10 tra'ch bod chi'n defnyddio braslun gyda'r llyfrgell honno. Ym Mega bydd yn dibynnu ar nifer y servos ...
  • SPI: Os defnyddir cyfathrebu SPI ar fwrdd Arduino, mae pin 11 yn cael ei ddefnyddio ar gyfer swyddogaeth MOSI. Dyna pam na ellir defnyddio'r pin PWM hwnnw.
  • Tone: mae'r swyddogaeth hon yn defnyddio Timer2 i weithredu. Felly os yw'n cael ei ddefnyddio, rydych chi'n gwneud pinnau 3 ac 11 (neu 9 a 10 ar gyfer Mega) yn ddiwerth.

Prawf ymarferol gydag Arduino

Sgematig Arduino PWM gyda LED

Os ydych chi eisiau gweld ar y safle sut mae PWM yn gweithio ar Arduino, y peth gorau y gallwch chi ei wneud yw cysylltu arweinyddion mesur a foltmedr neu multimedr (mewn swyddogaeth i fesur foltedd) rhwng y pin PWM rydych chi wedi dewis ei ddefnyddio a pin daear neu GND bwrdd Arduino. Yn y modd hwn, ar sgrin y ddyfais fesur byddwch yn gallu gweld sut mae'r foltedd yn newid gydag allbwn sy'n ddigidol diolch i'r tric PWM hwn.

Gallwch chi ddisodli'r foltmedr / multimedr gyda LED i weld sut mae dwyster y golau yn amrywio, gyda modur DC, neu gydag unrhyw elfen arall rydych chi ei eisiau. Rwyf wedi ei symleiddio yn y diagram gyda Fritzing gyda LED heb fwy, ond gwyddoch y gall hefyd gynrychioli awgrymiadau multimedr ...

Os ydych chi'n defnyddio LED, cofiwch y gwrthiant yn y catod a'r GND.

i y cod ffynhonnell Er mwyn rheoli microcontroller bwrdd Arduino i wneud i bopeth weithio, dylech fewnosod hwn yn Arduino IDE (yn yr achos hwn rwyf wedi defnyddio pin 6 PWM XNUMX o 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  
   } 
} 
Rwy'n eich cynghori i chwarae gyda'r gwerthoedd a gweld y canlyniadau ar y golau neu'r foltmedr. Gall y rhaglen dderbyn gwerthoedd o 0 i 9 fel y gallwch weld sut mae popeth yn amrywio. Am fwy o wybodaeth, rwy'n eich cynghori y cwrs arduino sydd gennym i'w lawrlwytho am ddim ...

Sylw, gadewch eich un chi

Gadewch eich sylw

Ni fydd eich cyfeiriad e-bost yn cael ei gyhoeddi. Meysydd gofynnol yn cael eu marcio â *

*

*

  1. Yn gyfrifol am y data: Miguel Ángel Gatón
  2. Pwrpas y data: Rheoli SPAM, rheoli sylwadau.
  3. Cyfreithlondeb: Eich caniatâd
  4. Cyfathrebu'r data: Ni fydd y data'n cael ei gyfleu i drydydd partïon ac eithrio trwy rwymedigaeth gyfreithiol.
  5. Storio data: Cronfa ddata wedi'i chynnal gan Occentus Networks (EU)
  6. Hawliau: Ar unrhyw adeg gallwch gyfyngu, adfer a dileu eich gwybodaeth.

  1.   Jose meddai

    Helo diwrnod da. Yn gyntaf oll, hoffwn ddiolch ichi am yr amser a neilltuwyd i'r esboniad hwn am y mwyaf newydd.
    Hoffwn wneud ymholiad ichi. Rwy'n ceisio rhedeg y cod ar efelychydd protews 8 ar gyfer Arguino Mega. Rwy'n cysylltu foltmedr â pin 6, mae Proteus wedi'i gysylltu â phorth cyfresol, ond nid wyf yn gwybod sut na beth i amrywio fel bod gwahanol folteddau'n allbwn. Roedd yn rhaid i mi wneud mân addasiadau i'r cod i'w wneud yn llunio. Diolch yn fawr iawn am eich cymorth