PWM: pagsundog sa mga analog pin sa imong Arduino board

Mga signal sa PWM

Sa mga digital ug analog pin, nga mahimo nimong magamit sa imong Arduino board, mahimo ka makadawat o makapadala mga signal sa elektrisidad aron makontrol o makakuha og datos gikan sa imong mga elektronik nga proyekto. Ingon kadugangan, adunay uban pa nga makaikag nga mga signal sa kini nga klase nga plato, ug kana ang PWM, nga mahimong sundogon ang usa ka analog signal nga wala gyud analog. Kana mao, sila mga digital pin nga mahimong molihok sa parehas nga paagi (dili parehas) ingon usa ka analog signal.

Kini nga mga klase nga signal praktikal kaayo kung dili nimo gusto nga mogamit mga digital nga HATAAS ug GAMAY nga signal, kana mao ang 1 o 0, ON ug OFF, apan gusto nimo nga moadto pa ug ihulagway medyo labi ka komplikado nga mga signal. Pananglitan, posible nga ma-modulate ang katulin sa a DC motor, o ang hayag sa kahayag sa usa ka suga, alang sa usa ka solenoid, ubp.

Analog vs digital nga sistema

Analog vs digital signal

Ang elektronik nga mga sirkito mahimong bahinon sa duha ka dagko nga pamilya o mga kategorya: digital ug analog. Kung naghisgot bahin sa digital electronics, naggamit kami mga gidaghanon nga adunay mga discrete nga kantidad, kana, usa ka binary nga sistema nga girepresenta sa mga signal sa elektrisidad nga usa ka gamay o taas nga boltahe aron mahubad ang estado sa mga gamay nga pagdumala. Sa laing bahin, kung kini usa ka analog circuit, gigamit ang gidaghanon nga adunay padayon nga kantidad.

Sulod sa mga digital nga sistema makit-an nga magpulipuli ang mga adunay kombinasyon nga tipo ug kadtong adunay sunud-sunod nga tipo. Kana mao, ang nauna mao ang diin ang output sa sistema nagsalig ra sa estado sa mga input. Sa pikas nga bahin, sa sunod-sunod nga mga, ang mga elemento sa memorya gilakip, ug ang output magsalig sa karon nga kahimtang sa mga input ug sa naunang estado nga gitipigan.

Sa kaso sa mga analog wala dinhi ang duha nga dagko nga mga grupo o lainlain, tungod kay dinhi kini nagpadayon nga mga signal nga kanunay magsalig ang signal karon nga sistema. Pananglitan, sa usa ka loudspeaker, ang signal nga imong gitagana nagsalig sa tunog nga gusto nimong buhaton. Parehas sa usa ka mikropono, nga makahimo usa ka analog signal sama sa tunog nga madawat. Sigurado nga nakita usab nimo kini sa daghang uban pang mga sensor nga among gihulagway sa kini nga blog ug nga naglihok nga adunay mga analog signal (ug busa, usa ka pormula ang kinahanglan buhaton aron sa ulahi ang mga kantidad makalkula o makondisyon sa mga sketch sa Arduino IDE ) ...

Kini nga mga kinaiyahan sa usa ug uban pa naghimo sa pipila nga adunay bentaha ug disbentaha, sama sa naandan sa hapit tanan. Pananglitan, ang mga digital hilig nga mahimong mas barato, mas paspas, dali buhaton, dali nga matipigan ang kasayuran, sila adunay labi ka katukma, mahimo kini maprograma, dili sila dali maapektuhan sa mga sangputanan sa kasaba, ubp. Apan tinuod usab nga sa mga analogs mahimo ka magpalihok nga adunay labi ka komplikado nga mga signal.

por ejemplo, ang usa ka digital type sensor nga epekto sa Hall makamatikod lamang sa pagkaanaa o pagkawala sa usa ka duol nga magnetiko nga natad. Hinuon, mahimo kana sa usa ka sensor sa epekto sa Hall Hall ug mahibal-an usab ang gibag-on sa giingon nga magnet nga natad salamat sa usa ka analog signal nga gihimo niini sa iyang output. Nahibal-an kung unsaon paghubad ang kana nga signal sa labi ka daghan o gamay nga boltahe nga maayo, dali nimo mahibal-an ang kana nga kadako. Ang uban pang mga pananglitan nga naa kanimo sa daghang mga kadako sa kinaiyahan nga mahimo nimo sukdon sa kadaghan sa usa ka analog system, sama sa temperatura, oras, presyur, distansya, tunog, ug uban pa.

Analog vs digital signal

Giingon na, a signal sa analog Kini mahimong usa ka boltahe o kuryente nga karon nga magkalainlain sa oras ug padayon. Kung naglaraw sa us aka grap, ang analog signal us aka us aka frequency sine wave.

Sama sa digital signal, usa ka boltahe nga magkalainlain sa us aka lakang nga pamaagi nga adunay pagtahod sa oras. Kana mao, kung girepresenta kini sa usa ka grapiko, kini mahimong usa ka lakang signal nga dili padayon nga magkalainlain, apan mga pagbag-o sa mga lakang o discrete nga pagdugang.

Kinahanglan nimo mahibal-an nga adunay mga sirkito nga moadto gikan sa usa ka analog signal ngadto sa usa ka digital o vice versa. Kini sila mga nagbag-o nailhan sila nga DAC (Digital-to-Analog Converter) ug ADC (Analog-to-Digital Converter). Ug kanunay sila kanunay sa daghang mga aparato nga gigamit namon karon, sama sa TV, computer, ug uban pa. Uban kanila mahimo nimo mabag-o ang mga digital signal nga gigamit sa kini nga kagamitan sa usa ka elektronik nga lebel aron magtrabaho kauban ang ubang mga peripheral o bahin nga nagtrabaho sa analog.

por ejemplo, usa ka speaker o mikropono nga adunay mga analog signal nga magamit uban ang usa ka sound card, o digital graphics card nga adunay bantog nga RAMDAC chip alang sa mga analog monitor port ... Sa Arduino gigamit usab kini nga klase sa mga converter alang sa daghang mga proyekto, ingon sa makita naton ...

Unsa ang PWM?

siklo sa graphic duty

Bisan pa PWM (Pulso-Width Modulation), o modulo sa gilapdon sa pulso, adunay usa ka digital nga sukaranan, ang dagway sa signal niini nahisama sa usa ka medyo "square" nga analog signal. Gitugotan kini pinaagi sa mga digital nga pulso nga magkalainlain ang signal aron masundog ang usa ka analog system ingon nga ako na ang nagkomento kaniadto. Sa tinuud, kung imong tan-awon ang ngalan, hatagan ka na niini mga timailhan kung unsa ang gihimo niini, pinaagi sa gilapdon sa mga digital nga pulso.

Kini mapuslanon alang sa Arduino tungod kay daghang mga automatismo o elektronik nga sangkap nga mahimo nimong idugang sa imong mga proyekto ug kana dili makahimo sa paghatag usa ka tinuud nga analog signal, apan gigamit nila kini nga PWM aron magamit. Dili usab sila makagamit us aka us aka tibuuk nga signal sa analog, sa ato pa, moadto sa boltahe nga mga paglukso aron mahisama sa usa nga digital. Ang mahimo nila mao ang paggamit sa usa ka digital output -Vcc o Vcc sa usa ka digital nga tipo aron makamugna kini nga katingad-an nga signal ...

Tungod niini, ang PWM usa ka klase nga "limbong" diin ang Arduino ug uban pang mga sistema mahimo’g makigtambayayong sa kini nga klase nga mga signal nga dili sila nahimo nga tibuuk nga analog o naandan nga digital. Aron mahimo kini nga posible, gipadayon nila ang usa ka digital nga output nga aktibo alang sa usa ka piho nga oras o off, depende sa interes sa tanan nga mga oras. Layo kini sa usa ka digital nga orasan o signal sa binary code, nga ang pulso adunay parehas nga gilapdon.

Sa imong mga proyekto uban ang Arduino mahimo nimong susihon ang kini nga lahi nga mga signal sa PWM diin ang kanunay nga kanunay nga pagpugong sa pulso gipadayon sa paglabay sa panahon, apan lainlain ang gilapdon sa kini nga mga pulso. Sa tinuud, gitawag kini nga Siklo sa Katungdanan kung ang usa ka signal gipadayon sa taas nga bahin sa kinatibuk-ang siklo. Busa, gihatag ang Duty Cycle sa%.

Hinumdomi nga ang usa ka PWM dili molihok sama sa usa ka analog signal, taliwala sa lainlaing mga kantidad nga boltahe ug kini nag-usab-usab. Sa kaso sa PWM kini usa ka square signal sa digital style ug kansang labing kadaghan nga kantidad mao ang Vcc. Pananglitan, kung nagtrabaho ka sa us aka 3V nga suplay sa kuryente, mahimo ka makahatag 3V o 0V nga pulso, apan dili 1V o bisan unsang uban nga tunga nga kantidad sama sa mahitabo sa usa ka tinuud nga analog. Unsa ang magkalainlain sa kana nga kaso mao ang gilapdon sa pulso, nga mahimo namon mapadayon ang 30% sa taas nga kantidad nga Vcc, o 60% aron mahatagan kini daghang gahum, ug uban pa.

Apan pag-amping, tungod kay kung ang usa ka aparato nagsuporta sa utlanan sa Vcc ug milapas sa PWM, mahimo’g madaot. Mao nga kanunay kinahanglan nga tahuron ang mga kantidad sa mga datasheet nga gihatag sa mga naghimo. Ingon usab, sa pipila nga mga aparato sama sa DC motor, relay, electromagnets, ug uban pa, usa ka pag-atras sa boltahe pagkahuman sa usa ka Siklo sa Katungdanan mahimong magpasabut nga ang mga inductive load mahimong hinungdan sa kadaot. Mao nga ang pagpanalipod tukma sa panahon

PWM sa Arduino

Arduino I2C bus

Karon nga nahibal-an nimo kung giunsa kini molihok, tan-awon naton ang piho nga kaso sa PWM sa sulud sa kalibutan sa Arduino ...

PWM: pinout sa Arduino

Sa mga board sa Arduino makit-an nimo ang daghang mga pin nga nagpatuman sa hardware PWM. Mahimo nimo silang maila sa PCB mismo tungod kay adunay sila simbolo ~ (gamay nga ulo) kauban ang pag-ihap sa pin. Mahimo usab kini buhaton pinaagi sa software sa Arduino code, apan kana mag-overload sa microcontroller, usa ka butang nga wala’y pulos kung mahimo kini buhaton sa natural ug sa hardware ...

  • Arduino UNO, Mini ug Nano- Adunay ka 6 8-bit PWM output sa mga pin 3, 5, 6, 9, 10, ug 11, nga adunay kana ~ sa atubangan mismo sa numero.
  • arduino mega- Sa kini nga labing kusug nga board sa Arduino adunay ka 15 8-bit PWM output. Naa sa pin 2 hangtod 13 ug 44 hangtod 46.
  • Arduino Tungod: sa kini nga kaso adunay 13 8-bit nga output sa PWM. Naa sila sa mga pin 2 hangtod 13, dugangan ang duha pa nga mga analog output nga gipanghimatuud sa DAC nga adunay 12-bit nga resolusyon.

Kung naghisgot ka bahin sa usa ka resolusyon nga 8 bits o 12 bits, ug uban pa, sa kini nga klase nga output sa PWM, nagpunting ka sa kwarto alang sa pagmaniobra nga anaa kanimo. Uban sa Ang 8 bit adunay 256 nga lebel Sa taliwala diin mahimo ka magkalainlain, ug ang 12 nga mga piraso moadto sa 4096 nga lebel.

Pagpugong sa mga Timer

Alang sa pagkontrol sa hardware PWM, Arduino mogamit sa mga timer alang niini. Ang matag karon nga Timer mahimong mag-alagad sa 2 o 3 nga output sa PWM. Ang usa ka pagrehistro sa pagtandi alang sa matag output nagpuno sa kini nga sistema aron kung moabut sa oras ang kantidad sa magparehistro, ang estado o kantidad sa output gibag-o aron mahunong ang mga Duty Cycle. Bisan kung adunay duha nga output nga gikontrol sa parehas nga Timer, parehas nga adunay lainlaing Mga Siklo sa Katungdanan, bisan kung managsama ang gibug-aton sa frequency.

Sa kaso sa mga Timer nga kauban sa matag PWM nga pin, magkalainlain kini depende sa klase sa Arduino board naa nimo:

  • Arduino UNO, Mini ug Nano:
    • Timer0 - 5 ug 6
    • Timer1 - 9 ug 10
    • Timer2 - 3 ug 11
  • arduino mega:
    • Timer0 - 4 ug 13
    • Timer1 - 11 ug 12
    • Timer2 - 9 ug 10
    • Timer3 - 2, 3 ug 5
    • Timer4 - 6, 7 ug 8
    • Timer5 - 44, 45 ug 46

Ang prescaled register magbahinbahin sa oras sa usa ka integer ug buhaton sa Timer ang pahulay aron makontrol ang matag usa sa mga kauban nga output sa PWM. Ang pagbag-o sa kantidad sa rehistro mahimong mag-usab sa kasubsob. Ang mga frequency Maglahi usab sila depende sa Timer ug sa plato:

  • Arduino UNO, Mini ug Nano:
    • Ang Timer0: nagtugot sa prescaling sa 1, 8, 64, 256 ug 1024. Ang frequency mao ang 62.5 Khz.
    • Timer1: nga adunay mga preset nga 1, 8, 64, 256 ug 1024. Nga adunay frequency nga 31.25 Khz.
    • Timer2: katumbas sa Timer1, kini ra ang nagdugang usa ka prescaling nga 32 ug 128 dugang sa mga nauna.
  • arduino mega:
    • Timer0, 1, 2: parehas sa taas.
    • Timer3, 4, ug 5: nga adunay frequency nga 31.25 Khz ug prescaled sa 1, 8, 64, 256 ug 1024.

Dili pagkauyon ug mga panagsumpaki

Ang Timer nakig-uban sa mga output dili lamang alang sa nga function, gigamit usab sa uban. Busa, kung gigamit sila sa usa pa nga kalihokan, kinahanglan ka nga mopili taliwala sa usa o sa lain, dili nimo mahimo ang parehas nga managsama. Pananglitan, kini ang pipila ka mga kakulangan nga mahimo nimong makit-an sa imong mga proyekto:

  • Servo librarya: Kung mogamit ka og mga motor nga servo, gigamit kini nga maabtik nga paggamit sa Mga Timer, aron makahimo kini mga panagsumpaki. Partikular nga gigamit ang Timer1 alang sa UNO, Nano ug Mini, kana mao, dili ka makagamit mga pin 9 ug 10 samtang naggamit ka usa ka sketch sa librarya nga kana. Sa Mega magsalig kini sa ihap sa mga servos ...
  • SPI: Kung ang komunikasyon sa SPI gigamit sa Arduino board, gigamit ang pin 11 alang sa pagpaandar sa MOSI. Mao nga dili magamit ang PWM pin nga kana.
  • tono: kini nga pag-andar naggamit Timer2 aron mag-operate. Kung gigamit kini, gihimo nimo nga wala’y pulos ang mga pin nga 3 ug 11 (o 9 ug 10 alang sa Mega).

Pagsulay sa kamut kauban si Arduino

Skema sa Arduino PWM nga adunay LED

Kung gusto nimo nga makit-an kung giunsa ang PWM molihok sa Arduino, ang labing kaayo nga butang nga mahimo nimo buhaton mao ang pagkonektar sa mga timaan sa pagsukot sa usa ka voltmeter o multimeter (sa pagpaandar aron sukdon ang boltahe) taliwala sa PWM pin nga imong gipili nga gamiton ug ang ground pin o GND sa Arduino board. Sa kini nga paagi, sa screen sa aparato sa pagsukol makita nimo kung giunsa ang boltahe nagbag-o sa usa ka output nga digital salamat sa kini nga limbong sa PWM.

Mahimo nimo ilisan ang voltmeter / multimeter sa usa ka LED aron makita kung giunsa magkalainlain ang kusog sa suga, nga adunay DC motor, o sa bisan unsang uban nga elemento nga gusto nimo. Gipasayon ​​nako kini sa diagram nga adunay Fritzing nga adunay usa ka LED nga wala’y daghan, apan nahibal-an nimo nga mahimo usab kini magrepresentar sa mga tip sa usa ka multimeter ...

Kung mogamit ka usa ka LED, hinumdomi ang resistensya sa cathode ug GND.

sa ang source code Aron makontrol ang Arduino board microcontroller aron magamit ang tanan, kinahanglan nimo kini isulud sa Arduino IDE (sa kini nga kaso gigamit nako ang PWM pin 6 sa 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  
   } 
} 
Gitambagan ko ikaw nga magdula sa mga kantidad ug makita ang mga sangputanan sa kahayag o voltmeter. Makadawat ang programa og mga kantidad gikan sa 0 hangtod 9 aron makita nimo kung giunsa magkalainlain ang tanan. Alang sa dugang nga kasayuran, tambag ko kanimo ang kurso nga arduino nga kita adunay libre nga pag-download ...

Ang sulud sa artikulo nagsunod sa among mga prinsipyo sa pamatasan sa editoryal. Aron magreport usa ka pag-klik sa sayup dinhi.

Usa ka komento, biyai ang imoha

Biyai ang imong komentaryo

Ang imong email address dili nga gipatik. Gikinahanglan kaumahan mga gimarkahan sa *

*

*

  1. Responsable sa datos: Miguel Ángel Gatón
  2. Katuyoan sa datos: Kontrolaha ang SPAM, pagdumala sa komento.
  3. Legitimation: Ang imong pagtugot
  4. Komunikasyon sa datos: Ang datos dili ipahibalo sa mga ikatulong partido gawas sa ligal nga obligasyon.
  5. Pagtipig sa datos: Ang database nga gidumala sa Occentus Networks (EU)
  6. Mga Katungod: Sa bisan unsang oras mahimo nimong limitahan, bawion ug tanggalon ang imong kasayuran.

  1.   Jose dijo

    Kumusta maayong adlaw. Una sa tanan gusto ko nga pasalamatan ka sa oras nga gipahinungod sa kini nga pagpatin-aw sa labing kabag-o.
    Gusto ko ikaw pangutan-on. Gisulayan nako ang pagpadagan sa code sa usa ka proteus 8 emulator alang sa Arguino Mega. Gikonektar nako ang usa ka voltmeter sa pin 6, ang Proteus konektado sa usa ka serial port, apan wala ako mahibal-an kung giunsa o kung unsa ang magkalainlain aron ang lainlaing mga voltage mogawas. Kinahanglan nakong buhaton ang gagmay nga mga pag-ayo sa code aron kini maipon. Salamat kaayo sa imong tabang