ШІМ: эмуляцыя аналагавых кантактаў з вашай платай Arduino

ШІМ-сігналы

З дапамогай лічбавых і аналагавых штыфтоў, якія вы можаце выкарыстоўваць на сваёй плаце Arduino, вы можаце атрымліваць і адпраўляць электрычныя сігналы для кіравання альбо атрымання дадзеных з вашых электронных праектаў. Акрамя таго, у гэтым тыпе пліты ёсць і іншыя вельмі цікавыя сігналы, і гэта ШІМ, які можа эмуляваць аналагавы сігнал, не будучы фактычна аналагавым. Гэта значыць, гэта лічбавыя кантакты, якія могуць дзейнічаць аналагічным чынам (не тое ж самае) у якасці аналагавага сігналу.

Гэтыя тыпы сігналаў вельмі практычныя, калі вы хочаце не толькі выкарыстоўваць лічбавыя ВЫСОКІЯ і НІЗКІЯ сігналы, гэта значыць 1 ці 0, уключыць і выключыць, але вы хочаце пайсці далей і апісаць некалькі больш складаныя сігналы. Напрыклад, можна мадуляваць хуткасць a рухавік пастаяннага току, альбо інтэнсіўнасць святла святла для саленоіда і г.д.

Аналагавая супраць лічбавай сістэмы

Аналагавы супраць лічбавага сігналу

Электронныя схемы можна падзяліць на дзве вялікія сям'і ці катэгорыі: лічбавы і аналагавы. Гаворачы пра лічбавую электроніку, мы выкарыстоўваем велічыні з дыскрэтнымі значэннямі, гэта значыць бінарную сістэму, прадстаўленую электрычнымі сігналамі нізкага ці высокага напружання, для інтэрпрэтацыі стану тых бітаў, якія апрацоўваюцца. З іншага боку, калі гэта аналагавая схема, выкарыстоўваюцца велічыні з бесперапыннымі значэннямі.

У лічбавых сістэмах можна знайсці па чарзе камбінацыйны тып і паслядоўны. Гэта значыць, першыя - гэта тыя, у якіх выхад сістэмы залежыць толькі ад стану ўваходаў. З іншага боку, у паслядоўныя ўключаны элементы памяці, і выхад будзе залежаць ад бягучага стану ўваходаў і папярэдняга захаванага стану.

У выпадку з аналагамі гэтых дзвюх вялікіх груп ці варыянтаў няма, паколькі тут гэта бесперапынныя сігналы, якія заўсёды будуць залежаць сігнал бягучая сістэма. Напрыклад, у гучнагаварыцелі сігнал, які вы падаеце, залежыць ад гуку, які вы хочаце прайграць. Тое самае і з мікрафонам, які будзе генераваць аналагавы сігнал у залежнасці ад гуку, які ён атрымлівае. Напэўна вы гэта бачылі і з многімі іншымі датчыкамі, якія мы апісалі ў гэтым блогу і якія дзейнічаюць з аналагавымі сігналамі (і, такім чынам, трэба было стварыць формулу, каб пазней значэнні маглі быць вылічаныя альбо абумоўлены ў эскізах IDE Arduino ) ...

Гэтыя характарыстыкі аднаго і іншага прымушаюць некаторых мець свае перавагі і недахопы, як звычайна амаль ва ўсім. Напрыклад, лічбавыя, як правіла, танней, хутчэй, прасцей у распрацоўцы, інфармацыя можа захоўвацца лягчэй, яны валодаюць большай дакладнасцю, іх можна запраграмаваць, яны не гэтак уразлівыя да ўздзеяння шуму і г.д. Але гэта таксама дакладна, што з аналагамі вы можаце працаваць з больш складанымі сігналамі.

Па EJEMPLO, датчык эфекту Хола лічбавага тыпу можа выяўляць толькі наяўнасць альбо адсутнасць побач магнітнага поля. Замест гэтага аналагавы датчык эфекту Хола можа гэта зрабіць, а таксама вызначыць шчыльнасць згаданага магнітнага поля дзякуючы аналагаваму сігналу, які ён генеруе на сваім выхадзе. Ведаючы, як добра інтэрпрэтаваць гэты сігнал большага ці меншага напружання, вы лёгка можаце даведацца гэтую велічыню. Іншыя прыклады ў вас ёсць у мностве велічынь прыроды, якія вы можаце вымераць колькасна з дапамогай аналагавай сістэмы, напрыклад, тэмпературы, часу, ціску, адлегласці, гуку і г.д.

Аналагавы супраць лічбавага сігналу

Гэта, як гаворыцца, а аналагавы сігнал Гэта будзе напружанне альбо электрычны ток, які змяняецца з цягам часу і бесперапынна. У графічным выглядзе аналагавы сігнал будзе ўяўляць сабой сінусоіду з адной частатой.

Што ж тычыцца лічбавы сігнал, - напружанне, якое паступова змяняецца ў залежнасці ад часу. Гэта значыць, калі ён прадстаўлены ў графіку, гэта будзе сігнал кроку, які не змяняецца бесперапынна, а змяняецца ў кроках альбо дыскрэтна.

Вы павінны ведаць, што існуюць схемы для пераходу ад аналагавага сігналу да лічбавага альбо наадварот. Гэтыя пераўтваральнікі яны вядомыя як ЦАП (лічбава-аналагавы пераўтваральнік) і АЦП (аналага-лічбавы пераўтваральнік). І яны вельмі часта сустракаюцца ў многіх прыладах, якімі мы сёння карыстаемся, напрыклад, у тэлевізары, кампутарах і г.д. З іх дапамогай вы можаце пераўтварыць лічбавыя сігналы, якія выкарыстоўваюцца гэтым абсталяваннем, у электронны ўзровень для працы з іншымі перыферыйнымі прыладамі або дэталямі, якія працуюць у аналагавым рэжыме.

Па EJEMPLO, дынамік альбо мікрафон з аналагавымі сігналамі, які працуе са гукавой картай, альбо лічбавыя відэакарты, якія мелі знакаміты чып RAMDAC для партоў аналагавага манітора ... У Arduino гэты тып пераўтваральнікаў таксама выкарыстоўваецца для некалькіх праектаў, як мы ўбачым ...

Што такое ШІМ?

графічны працоўны цыкл

Хоць ШІМ (мадуляцыя па шырыні імпульсу), альбо мадуляцыя па шырыні імпульсу, мае лічбавую базу, форма яго сігналу нагадвае некалькі "квадратны" аналагавы сігнал. Гэта дазваляе з дапамогай лічбавых імпульсаў вар'іраваць сігнал для эмуляцыі аналагавай сістэмы, як я ўжо каментаваў раней. На самай справе, калі вы паглядзіце на назву, яна ўжо дае вам падказкі пра тое, што яна робіць, праз шырыню лічбавых імпульсаў.

Гэта выгадна для Arduino паколькі існуе мноства аўтаматызмаў і электронных кампанентаў, якія можна дадаць да сваіх праектаў не здольныя падаваць сапраўдны аналагавы сігнал, але яны выкарыстоўваюць гэты ШІМ для працы. Яны таксама не могуць выкарыстоўваць дыскрэтызаваны аналагавы сігнал, гэта значыць, які ідзе да скачкоў напружання, каб нагадваць лічбавы. Што яны могуць зрабіць, гэта выкарыстаць лічбавы выхад - Vcc альбо Vcc лічбавага тыпу для генерацыі гэтага своеасаблівага сігналу ...

Такім чынам, ШІМ - гэта своеасаблівая "хітрасць", з якой Arduino і іншыя сістэмы могуць узаемадзейнічаць з тыпамі сігналаў, якія яны не зусім аналагавыя і не з'яўляюцца звычайнымі лічбавымі. Каб зрабіць гэта магчыма, яны падтрымліваюць лічбавы выхад актыўным на працягу пэўнага часу альбо выключэння, у залежнасці ад цікавасці. Гэта далёка не тое, што было б лічбавым гадзіннікам альбо сігналам двайковага кода, чые імпульсы маюць аднолькавую шырыню.

У сваіх праектах з Arduino вы можаце праверыць гэты тып ШІМ-сігналаў, у якіх з цягам часу падтрымліваецца пастаянная частата імпульсных трыгераў, але шырыня гэтых імпульсаў розная. На самай справе ён называецца працоўным цыклам, калі сігнал падтрымліваецца на высокім узроўні адносна агульнай колькасці цыкла. Такім чынам, працоўны цыкл дадзены ў%.

Памятаеце, што ў ШІМ вы працуеце не так, як у аналагавым сігнале, паміж рознымі значэннямі напружання, і ён вагаецца паміж імі. У выпадку ШІМ гэта квадратны сігнал у лічбавым стылі і чыё максімальнае значэнне - Vcc. Напрыклад, калі вы працуеце з крыніцай харчавання 3В, вы можаце даваць імпульсы 3В ці 0В, але не 1В ці іншае прамежкавае значэнне, як гэта можа адбыцца ў рэальным аналага. У гэтым выпадку вар'іруецца шырыня імпульсу, якую мы можам трымаць на 30% пры гэтым высокім значэнні Vcc, альбо 60%, каб надаць ёй больш магутнасці і г.д.

Але будзьце асцярожныя, бо калі прылада падтрымлівае абмежаванне Vcc і перавышаецца з ШІМ, гэта можа пашкодзіць. Таму заўсёды трэба было б паважаць значэнні табліц дадзеных, якія прадстаўляюцца вытворцамі. Акрамя таго, у некаторых прыладах, такіх як рухавікі пастаяннага току, рэле, электрамагніты і г.д., зняцце напружання пасля працоўнага цыклу можа азначаць, што індуктыўныя нагрузкі могуць нанесці шкоду. Вось чаму агароджы своечасова.

ШІМ на Arduino

Аўтобус Arduino I2C

Цяпер, калі вы ведаеце, як гэта працуе, давайце паглядзім канкрэтны выпадак ШІМ у свеце Arduino ...

ШІМ: распінаванне на Arduino

На платах Arduino можна знайсці некалькі кантактаў, якія рэалізуюць апаратны ШІМ. Ідэнтыфікаваць іх можна на самой друкаванай плаце, бо яны маюць сімвал ~ (маленькая галава) разам з нумарацыяй кантактаў. Гэта таксама можна зрабіць з дапамогай праграмнага забеспячэння ў кодзе Arduino, але гэта перагружае мікракантролер працай, што-небудзь недарэчна, калі гэта можна зрабіць уласна і апаратна ...

  • Arduino UNO, Mini і Nano- У вас ёсць 6 8-разрадных ШІМ-выхадаў на кантактах 3, 5, 6, 9, 10 і 11, якія будуць мець ~ прама перад нумарам.
  • Arduino Mega- На гэтай самай магутнай плаце Arduino у вас ёсць 15 8-бітных ШІМ-выхадаў. Яны знаходзяцца на шпільках з 2 па 13 і з 44 па 46.
  • Ардуіна з-за: у гэтым выпадку ёсць 13 8-бітных ШІМ-выхадаў. Яны знаходзяцца на кантактах ад 2 да 13, а таксама два іншыя аналагавыя выхады, дыскрэтызаваныя ЦАП з 12-бітным дазволам.

Калі вы кажаце пра 8-бітнае або 12-бітнае дазвол і г.д., у гэтым тыпе ШІМ-выхадаў вы маеце на ўвазе прастору для манеўру, якая ў вас ёсць. З 8 біт маюць 256 узроўняў Паміж якімі вы можаце вар'іравацца, і 12 біт даходзяць да 4096 узроўняў.

Кіраванне з дапамогай таймераў

Для апаратнага кіравання ШІМ, Arduino будзе выкарыстоўваць таймеры для яго. Кожны сапраўдны таймер можа абслугоўваць 2 ці 3 ШІМ-выхады. Рэгістр параўнання для кожнага выхаду дапаўняе гэтую сістэму, так што, калі час дасягае значэння рэгістра, стан альбо значэнне выхаду змяняецца, каб спыніць гэтыя працоўныя цыклы. Хоць ёсць два выхады, кіраваныя адным і тым жа таймерам, абодва могуць мець розныя працоўныя цыклы, хаця яны маюць аднолькавую частату.

У выпадку таймераў, звязаных з кожным ШІМ-кантактам, ён будзе мяняцца у залежнасці ад тыпу платы Arduino што ў вас ёсць:

  • Arduino UNO, Mini і Nano:
    • Таймер0 - 5 і 6
    • Таймер1 - 9 і 10
    • Таймер2 - 3 і 11
  • Arduino Mega:
    • Таймер0 - 4 і 13
    • Таймер1 - 11 і 12
    • Таймер2 - 9 і 10
    • Таймер3 - 2, 3 і 5
    • Таймер4 - 6, 7 і 8
    • Таймер5 - 44, 45 і 46

Прагназаваны рэгістра дзеліць час на цэлае лік, а астатняе выконвае таймер для кіравання кожным з звязаных выхадаў ШІМ. Змяненне значэння рэестра можа змяніць частату. частоты Яны таксама будуць адрознівацца ў залежнасці ад таймера і пласціны:

  • Arduino UNO, Mini і Nano:
    • Таймер0: дазваляе маштабаваць 1, 8, 64, 256 і 1024. Частата складае 62.5 кГц.
    • Таймер1: з перадустаноўкамі 1, 8, 64, 256 і 1024. З частатой 31.25 кГц.
    • Timer2: роўны Timer1, толькі ён дадае папярэдняе маштабаванне 32 і 128 у дадатак да папярэдніх.
  • Arduino Mega:
    • Таймер0, 1, 2: той самы, што і вышэй.
    • Таймер 3, 4 і 5: з частатой 31.25 кГц і з папярэднім маштабам 1, 8, 64, 256 і 1024.

Несумяшчальнасць і канфлікты

Таймер звязаны з выхадамі не толькі для гэтай функцыі, таксама выкарыстоўваецца іншымі. Такім чынам, калі яны выкарыстоўваюцца іншай функцыяй, вы павінны выбраць паміж тым ці іншым, вы не можаце выкарыстоўваць абедзве адначасова. Напрыклад, вось некаторыя несумяшчальнасці, якія вы можаце знайсці ў сваіх праектах:

  • Серватэка: Пры выкарыстанні серварухавікоў інтэнсіўна выкарыстоўваюцца таймеры, таму могуць узнікаць канфлікты. Канкрэтна выкарыстоўвайце Timer1 для UNO, Nano і Mini, гэта значыць вы не можаце выкарыстоўваць кантакты 9 і 10 падчас выкарыстання эскіза з гэтай бібліятэкай. У Mega гэта будзе залежаць ад колькасці сервоприводов ...
  • SPI: Калі на плаце Arduino выкарыстоўваецца сувязь SPI, для функцыі MOSI выкарыстоўваецца кантакт 11. Вось чаму гэты ШІМ-штыр нельга выкарыстоўваць.
  • Тон: гэтая функцыя выкарыстоўвае Timer2 для працы. Такім чынам, калі ён выкарыстоўваецца, вы робіце штыфты 3 і 11 (альбо 9 і 10 для Mega) бескарыснымі.

Практычны тэст з Arduino

Схема ШІМ Arduino са святлодыёдам

Калі вы хочаце ўбачыць на месцы, як працуе ШІМ на Arduino, лепш за ўсё падключыць вымяральныя адвязкі вальтметр ці мультиметр (у функцыі вымярэння напружання) паміж ШІМ-штырком, які вы абралі для выкарыстання, і штырьком зазямлення альбо GND платы Arduino. Такім чынам, на экране вымяральнага прыбора вы зможаце ўбачыць, як змяняецца напружанне з лічбавым выхадам дзякуючы гэтаму ШІМ-фокусу.

Вы можаце замяніць вальтметр / мультиметр святлодыёдам, каб убачыць, як змяняецца інтэнсіўнасць святла, рухавіком пастаяннага току альбо любым іншым элементам, які вы хочаце. Я спрасціў гэта на схеме з дапамогай Fritzing са святлодыёдам, але вы ведаеце, што ён таксама можа прадстаўляць парады мультиметра ...

Калі вы выкарыстоўваеце святлодыёд, памятайце пра супраціў катода і GND.

да зыходны код Каб кіраваць мікракантролерам платы Arduino, каб усё працавала, вы павінны ўставіць гэта ў IDE Arduino (у гэтым выпадку я выкарыстаў ШІМ-штыфт 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.   Хасэ сказаў

    Прывітанне добры дзень. Перш за ўсё я хачу падзякаваць вам за час, прысвечаны гэтаму тлумачэнню найноўшага.
    Я хацеў бы зрабіць вам запыт. Я спрабую запусціць код на эмулятары proteus 8 для Arguino Mega. Я падключаю вальтметр да кантакту 6, Proteus падлучаны да паслядоўнага порта, але я не ведаю, як і што змяняць, каб выводзіліся розныя напружання. Мне прыйшлося ўнесці невялікія карэктывы ў код, каб ён быў скампіляваны. Вялікі дзякуй за вашу дапамогу