PWM: Arduino тактаңыз менен аналогдук төөнөгүчтөрдү туурап

PWM сигналдары

Arduino тактаңызда колдоно турган санариптик жана аналогдук төөнөгүчтөр менен электрондук долбоорлоруңуздан маалыматтарды көзөмөлдөө же алуу үчүн электр сигналдарын кабыл алсаңыз же жөнөтсөңүз болот. Мындан тышкары, табактын бул түрүндө дагы башка абдан кызыктуу сигналдар бар, жана алар PWM, ал чындыгында аналогсуз эле аналогдук сигналды туурай алат. Башкача айтканда, алар аналогдук сигналга окшош (бирдей эмес) иштей алган санарип төөнөгүчтөр.

Бул типтеги сигналдар санариптик ЖОГОРУ жана ТӨМӨН сигналдарын, башкача айтканда, 1 же 0, КҮЙҮК жана ӨЧҮРҮҮ сигналдарын колдонуп гана тим болбостон, андан ары барып сүрөттөп бергиңиз келген учурларда абдан пайдалуу. бир аз татаал сигналдар. Мисалы, а ылдамдыгын модуляциялоого болот DC мотор, же электромагнит үчүн жарыктын интенсивдүүлүгү ж.б.

Аналог жана санарип тутуму

Аналог жана санарип сигналы

Электрондук схемаларды эки чоң үй-бүлөгө же категорияга бөлүүгө болот: санарип жана аналог. Санарип электроникасы жөнүндө сөз кылганда, дискреттик мааниси бар чоңдуктарды, башкача айтканда, төмөнкү же жогорку чыңалуудагы электрдик сигналдар менен көрсөтүлгөн экилик тутумду, ошол биттердин абалын чечмелөө үчүн колдонобуз. Экинчи жагынан, аналогдук схемага келгенде, үзгүлтүксүз мааниси бар чоңдуктар колдонулуп жатат.

Санариптик тутумдарды өз кезегинде табууга болот комбинативдик типтегилер жана ырааттуу типтегилер. Башкача айтканда, биринчиси, тутумдун чыгышы кириштердин абалына гана көз каранды. Экинчи жагынан, ырааттуу болгондордо эс тутум элементтери камтылган, ал эми чыгарылыш учурдагы абалына жана сакталган мурунку абалына жараша болот.

Аналогдордо бул эки чоң топ же вариант жок, анткени бул жерде алар ар дайым көз каранды болуп турган үзгүлтүксүз сигналдар. сигнал учурдагы тутум. Мисалы, катуу сүйлөткүчтө, ага берилген сигнал сиз чыгарууну каалаган үнгө жараша болот. Микрофон менен бирдей, ал алган үнүнө жараша аналогдук сигнал берет. Албетте, сиз бул блогдо сүрөттөгөн жана аналогдук сигналдар менен иштеген башка көптөгөн сенсорлор менен көргөнсүз (демек, кийин Arduino IDE эскиздеринде баалуулуктарды эсептеп же кондициялаштыра турган формула түзүлүшү керек болчу. ) ...

Биринин жана экинчисинин мындай мүнөздөмөлөрү кээ бирлеринде бар артыкчылыктары жана кемчиликтери, дээрлик баардык нерседе кадимкидей. Мисалы, санариптики арзаныраак, ылдамыраак, өнүгүүсү жеңил, маалыматты оңой сактоого болот, тактыгы жогору, программаланган, ызы-чуунун таасирине анчалык алсыз эмес ж.б. Бирок аналогдор менен бир кыйла татаал сигналдар менен иштей турганыңыз дагы чын.

Por Ejemplo, санарип түрүндөгү Hall эффект сенсору жакын жердеги магнит талаасынын бар же жок экендигин гана аныктай алат. Тескерисинче, аналогдук Холл эффект сенсору муну аткара алат жана анын магнит талаасынын тыгыздыгын ал чыгарган аналогдук сигналдын жардамы менен аныктай алат. Бул чоң же кичине чыңалуунун сигналын кантип чечмелөөнү билүү менен, анын чоңдугун оңой эле биле аласыз. Сизде табигый чоңдуктардын башка мисалдары бар, мисалы, температура, убакыт, басым, аралык, үн ж.б.

Аналог жана санарип сигналы

Айтып жаткан нерсе, а аналогдук сигнал Бул убакыт жана үзгүлтүксүз өзгөрүлүп турган чыңалуу же электр тогу болот. Эгерде графикке тартылса, аналогдук сигнал бир жыштык синус толкуну болмок.

карата абал боюнча санариптик сигнал, убакытка карата баскычтуу түрдө өзгөрүлүп турган чыңалуу. Башкача айтканда, эгерде ал графикте чагылдырылса, анда ал тынымсыз өзгөрүлбөй турган, бирок кадамдардагы же дискреттүү өсүштөрдөгү өзгөрүлмө кадам сигнал болот.

Аналогдук сигналдан санарипке өтүү же тескерисинче схемалар бар экендигин билишиңиз керек. Булар конвертер алар DAC (Санариптен Аналогго Конвертер) жана ADC (Аналогдон Санарипке Конвертер) деп аталат. Жана алар бүгүнкү күндө колдонулуп жаткан көптөгөн түзмөктөрдө, мисалы, сыналгы, компьютер ж.б. Алардын жардамы менен ушул жабдуу колдонгон санариптик сигналдарды башка перифериялык түзүлүштөр же аналог менен иштеген бөлүктөр менен иштөө үчүн электрондук деңгээлге өткөрсө болот.

Por Ejemplo, үн картасы менен иштеген аналогдук сигналдары бар динамик же микрофон, же аналогдук монитор порттору үчүн белгилүү RAMDAC чипи болгон санариптик графикалык карталар ... Arduinoдо бул түрдөгү конвертер дагы бир нече долбоорлордо колдонулат, биз көрө тургандай. ...

PWM деген эмне?

графикалык милдет цикли

карабастан PWM (Pulse-Width Modulation), же импульстун туурасы модуляциясы, санарип базасы бар, анын сигналынын формасы бир аз "квадрат" аналогдук сигналга окшош. Санариптик импульстардын жардамы менен мен буга чейин комментарий берип келгендей, аналогдук тутумду тууроо үчүн сигналды өзгөртө алам. Чындыгында, аталышын карасаңыз, ал буга чейин эмне кылып жаткандыгы жөнүндө, санариптик импульстардын туурасы аркылуу берет.

Бул үчүн пайдалуу Ардуино анткени сиз долбоорлорго кошо турган көптөгөн автоматизмдер же электрондук компоненттер бар чыныгы аналогдук сигналды бере албайт, бирок алар ушул PWMди иштетүү үчүн колдонушат. Ошондой эле алар дискреттелген аналогдук сигналды колдоно алышпайт, башкача айтканда, чыңалуунун секирүүсүнө өтүп, санариптик сигналга окшошот. Алар эмне кыла алышат - бул өзгөчө сигналды жаратуу үчүн санариптик типтеги санариптик -Vcc же Vcc чыгымдарды колдонуу ...

Демек, PWM бул Arduino жана башка тутумдар ушул типтеги сигналдар менен иштей турган "амалкөйлүк" түрү. алар анчалык окшош эмес жана кадимки санарип эмес. Мүмкүн болушун камсыз кылуу үчүн, алар санариптик чыгууну ар дайым кызыгуусуна жараша белгилүү бир убакытка чейин же өчүрүп турушат. Бул санариптик сааттан же экилик код сигналынан алыс, анын импульсу бирдей кеңдикке ээ.

Arduino менен болгон долбоорлоруңузда убакыттын өтүшү менен импульс триггерлеринин туруктуу жыштыгы сакталып турган PWM сигналдарынын бул түрүн текшере аласыз, бирок бул импульстардын туурасы ар кандай. Чындыгында, ал циклдин жалпы көлөмүнө карата сигнал жогору турганда, ал Duty Cycle деп аталат. Демек, Duty Cycle% менен берилет.

Эсиңизде болсун, PWMде сиз бир нече чыңалуу маанилеринин ортосунда аналогдук сигналдагыдай иштебейсиз жана ал алардын ортосунда өзгөрүлүп турат. PWM учурда бул санариптик стилдеги квадраттык сигнал жана анын максималдуу мааниси Vcc. Мисалы, 3V кубаттагыч менен иштесеңиз, 3V же 0V импульстарын бере аласыз, бирок 1V же чыныгы аналогдо пайда боло турган башка кандайдыр бир ортоңку мааниге ээ эмес. Мындай учурда, импульстун туурасы кандай болот, биз аны 30% жогору Vcc мааниде сактай алабыз, же ага көбүрөөк кубаттуулук берүү үчүн 60% ж.б.

Бирок этият болуңуз, анткени шайман Vcc чегин колдоп, PWM менен ашып кетсе, ал бузулуп калышы мүмкүн. Ошентип, өндүрүүчүлөр тарабынан берилген маалымат баракчаларынын баалуулуктарын ар дайым сыйлоо керек болот. Ошондой эле, кээ бир шаймандарда, мисалы, DC кыймылдаткычтарында, реле, электромагниттер ж.б., кызмат циклинен кийин чыңалуунун алынышы индуктивдүү жүктөмдүн бузулушуна алып келиши мүмкүн. Ошондуктан коргоо өз убагында.

Arduino боюнча PWM

Arduino I2C автобус

Эми анын кандай иштээрин билгенден кийин, Arduino дүйнөсүндөгү PWM конкреттүү окуясын карап көрөлү ...

PWM: Arduino боюнча pinout

Arduino тактасынан PWM жабдыктарын ишке ашыруучу бир нече казыкты таба аласыз. Аларды PCB өзү аркылуу аныктай аласыз, анткени аларда а символ ~ (кичинекей баш) пин номерлөө менен бирге. Муну Arduino кодундагы программалык камсыздоо аркылуу жасаса да болот, бирок микроконтроллерди жумушка ашыкча жүктөйт, муну табигый жол менен жана аппараттык жабдыктар менен жасоого болот ...

  • Arduino UNO, Mini жана Nano- Сизде 6, 8, 3, 5, 6 жана 9 төөнөгүчтөрдө 10-биттик PWM чыгышы бар, алар ~ номердин алдында турат.
  • Ардуино Мега- Бул эң күчтүү Arduino тактасынан сизде 15 8 биттик PWM чыгышы бар. Алар 2ден 13кө чейин жана 44төн 46га чейин.
  • Arduino Due: бул учурда 13 8-биттик PWM чыгышы бар. Алар 2ден 13кө чейинки казыктарда, ошондой эле DAC тарабынан 12-разряддуу дискреттелген дагы эки аналогдук чыгарылышта.

Ушул типтеги PWM чыгууларында 8-бит же 12-биттик ажыратуу ж.б. жөнүндө сөз кылганда, сизде болгон маневр бөлмөсү жөнүндө сөз болот. Менен 8 бит 256 деңгээлге ээ ар кандай болушу мүмкүн, ал эми 12 бит 4096 деңгээлине чейин көтөрүлөт.

Таймерлер менен башкаруу

Аппараттык PWM башкаруу үчүн, Arduino таймерлерди колдонот ал үчүн. Ар бир учурдагы Таймер 2 же 3 PWM чыгарылышын тейлей алат. Ар бир чыгарылыш үчүн салыштыруу регистр ушул системаны толуктайт, ошондуктан убакыт регистрдин маанисине жеткенде, ошол Duty Cycles токтотуу үчүн чыгарылыштын абалы же мааниси өзгөрүлөт. Бир эле Таймер тарабынан башкарылуучу эки жыйынтык бар болсо дагы, экөө тең ар кандай Duty Cycles болушу мүмкүн, бирок алар бирдей жыштыкта ​​болушат.

Ар бир PWM пин менен байланышкан Таймерлерге байланыштуу, ал ар кандай болот Arduino тактасынын түрүнө жараша сизде:

  • Arduino UNO, Mini жана Nano:
    • Timer0 - 5 жана 6
    • Timer1 - 9 жана 10
    • Timer2 - 3 жана 11
  • Ардуино Мега:
    • Timer0 - 4 жана 13
    • Timer1 - 11 жана 12
    • Timer2 - 9 жана 10
    • Таймер3 - 2, 3 жана 5
    • Таймер4 - 6, 7 жана 8
    • Таймер5 - 44, 45 жана 46

Алдын ала эсептелген регистр убакытты бүтүн санга бөлөт, ал эми Таймер калган ар бир байланышкан PWM чыгарылышын көзөмөлдөө үчүн кылат. Реестрдин маанисин өзгөртүү жыштыкты өзгөртүшү мүмкүн. The жыштыгы Алар Таймерге жана табакка жараша ар кандай болот:

  • Arduino UNO, Mini жана Nano:
    • Timer0: 1, 8, 64, 256 жана 1024 чейинки масштабдарды өзгөртүүгө мүмкүнчүлүк берет. Жыштыгы 62.5 кГц.
    • Timer1: 1, 8, 64, 256 жана 1024 алдын-ала орнотуулары менен. 31.25 кГц жыштыкта.
    • Timer2: Timer1ге тең, ошондо гана мурункуларына кошумча 32 жана 128 прескалированиесин кошот.
  • Ардуино Мега:
    • Timer0, 1, 2: жогорудагыдай.
    • Таймер3, 4 жана 5: жыштыгы 31.25 кГц жана алдын-ала 1, 8, 64, 256 жана 1024.

Ылайыксыздыктар жана чыр-чатактар

Таймер натыйжалары менен байланыштуу гана эмес, ошол эле функция, ошондой эле башкалар тарабынан колдонулат. Ошондуктан, эгерде аларды башка функция колдонуп жатса, тигил же бул бирин тандап алышыңыз керек, экөөнү бир эле учурда колдоно албайсыз. Мисалы, долбоорлордон тапкан кээ бир дал келбестиктер:

  • Серво китепканасы: Серво кыймылдаткычтарын колдонгондо, таймерлер интенсивдүү колдонулат, бул чыр-чатакка алып келиши мүмкүн. Тактап айтканда UNO, Nano жана Mini үчүн Timer1ди колдонуңуз, башкача айтканда, ошол китепкана менен эскизди колдонуп жатканда 9 жана 10 төөнөгүчтөрдү колдоно албайсыз. Мегада бул серволордун санына жараша болот ...
  • Элиза: Эгерде Arduino тактасында SPI байланышы колдонулса, MOSI функциясы үчүн 11-пин колдонулат. Ошол себептен ал PWM пин колдонууга болбойт.
  • түс: бул функция иштөө үчүн Timer2 колдонот. Демек, ал колдонулган болсо, сиз 3 жана 11 (же Mega үчүн 9 жана 10) казыктарын пайдасыз кылып жатасыз.

Arduino менен практикалык тест

LED менен Arduino PWM схемасы

Эгерде сиз PWM Arduinoдо кандай иштээрин жеринен көргүңүз келсе, анда эң жакшы нерсе бул вольтметр же мультиметр (чыңалууну өлчөө функциясы менен) сиз тандаган PWM пин менен Arduino тактасынын жер пин же GND ортосунда. Ошентип, өлчөөчү шаймандын экранында ушул PWM трюкунун жардамы менен санариптик көрсөткүч менен чыңалуунун кандайча өзгөрүп жаткандыгын көрө аласыз.

Вольтметрди / мультиметрди жарык диодуна алмаштырып, жарыктын интенсивдүүлүгү кандай өзгөрөрүн, туруктуу ток кыймылдаткычынын жардамы менен же сиз каалаган башка элементтер менен алмаштырсаңыз болот. Мен аны LED менен Fritzing менен диаграммада жөнөкөйлөтүп койдум, бирок ал мультиметрдин учтарын да чагылдыра алаарын билесиз ...

Эгерде сиз светодиод колдонсоңуз, анда катоддогу жана GND каршылыгын эсиңизден чыгарбаңыз.

Para баштапкы код Баарын иштеши үчүн Arduino тактасынын микроконтроллерин башкаруу үчүн, муну Arduino IDEге киргизишиңиз керек (бул учурда мен PWM пин 6 колдонгом 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  
   } 
} 
Мен баалуулуктар менен ойноп, көрө билүүгө кеңеш берем жарыктагы же вольтметрдеги натыйжалар. Программа 0дөн 9га чейинки баалуулуктарды кабыл алса болот, ошондо бардыгы кандайча өзгөрүп тургандыгын көрө аласыз. Көбүрөөк маалымат алуу үчүн, мен сизге кеңеш берем ардуино курсу бизде акысыз жүктөө бар ...

Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

Комментарий, өзүңүз калтырыңыз

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.

  1.   Хосе ал мындай деди:

    Салам, жакшы күн. Биринчиден, мен сизге эң акыркы түшүндүрүүгө арналган убакыт үчүн рахмат айтам.
    Мен сизге суроо бергим келет. Мен Arguino Mega үчүн протеус 8 эмуляторундагы кодду иштеткенге аракет кылып жатам. Мен вольтметрди 6-пинге туташтырам, Proteus сериялык портко туташтырылган, бирок ар кандай чыңалуу чыгышы үчүн кандайча же эмне менен айырмаланганымды билбейм. Аны түзүү үчүн кодго анча-мынча түзөтүүлөрдү киргизишим керек болчу. Жардамыңыз үчүн чоң рахмат