Мазмұны:

Arduino супер жылдам аналогты кернеулер: 10 қадам (суреттермен)
Arduino супер жылдам аналогты кернеулер: 10 қадам (суреттермен)

Бейне: Arduino супер жылдам аналогты кернеулер: 10 қадам (суреттермен)

Бейне: Arduino супер жылдам аналогты кернеулер: 10 қадам (суреттермен)
Бейне: Lesson 10: Using Potentiometer reading voltage, Analog and Digital 2024, Шілде
Anonim
Image
Image

Бұл нұсқаулық Arduino мен қарапайым резистор мен конденсатор жұбынан аналогты кернеудің жылдам өзгеруін қалай жасау керектігін көрсетеді. Осциллографта графиканы құру пайдалы болатын қосымшалардың бірі. Мұны жүзеге асырған басқа да бірнеше жобалар бар. Johngineer импульстік ені модуляциясын (PWM) қолдана отырып, қарапайым шыршаны көрсетеді. Басқалары резисторлық баспалдақтың көмегімен немесе цифрлық-аналогтық түрлендіргіш микросхемасының көмегімен бұл жобаны жақсартты.

PWM пайдалану көп жыпылықтайды, ал резисторлық баспалдақты немесе цифрлық-аналогты түрлендіргішті пайдалану үшін қол жетімді емес шығыс түйреуіштері мен компоненттері қажет. Мен қолданатын схема Рождестволық шырша демонстрациясында қолданылатын қарапайым резистор мен конденсатордың жұбы, бірақ әлдеқайда аз жыпылықтаумен жұмыс істейді.

Біріншіден, мен сізге схеманы құру процесінде басшылық жасаймын. Содан кейін мен сізге өзіңіздің жеке суретіңізді қосуды үйретемін. Ақырында, мен теорияны не тездететіні туралы таныстырамын.

Егер сізге осы нұсқаулық ұнаған болса, оған дауыс беріңіз!:)

1 -қадам: Схеманы құру

Циклды құру
Циклды құру

Схеманы құру үшін сізге мыналар қажет:

а) Atmel 16MHz ATmega328P негізіндегі Arduino, мысалы Arduino Uno немесе Arduino Nano.

б) R мәні кемінде 150Ω екі резистор.

c) C мәнінің екі конденсаторы, C = 0.0015 / R, мысалдар:

  • R = 150Ω және C = 10µl
  • R = 1,5 кОм және С = 1 мкг
  • R = 15kΩ және C = 100nF
  • R = 150kΩ және C = 10nF

Бұл мәндерді таңдаудың себептері екі түрлі. Ең алдымен, біз Arduino түйреуіштеріндегі токты максималды номиналды токтан 40мА төмен ұстағымыз келеді. 150Ω мәнін пайдалану 5V Arduino кернеуімен пайдаланғанда токты 30мА шектейді. R үлкен мәндері токты төмендетеді, сондықтан қолайлы.

Екінші шектеу - біз R және C туындысы болып табылатын уақытты тұрақты күйде ұстағымыз келеді, шамамен 1,5 мс. Бағдарламалық қамтамасыз ету осы уақыт тұрақты үшін арнайы реттелген. Бағдарламалық жасақтамада R және C мәндерін реттеу мүмкін болса да, ол жұмыс істейтін тар диапазон бар, сондықтан ұсынылған қатынасқа мүмкіндігінше жақын компоненттерді таңдаңыз.

Мен сізге демонстрациялық схеманы қалай құрастыру керектігін көрсеткеннен кейін, RC тұрақты мәнінің маңыздылығы туралы егжей -тегжейлі түсінік теория бөлімінде беріледі.

2 -қадам: осциллографты орнату

Осциллографты орнату
Осциллографты орнату

Демонстрация X/Y режиміне орнатылған осциллографты қажет етеді. Сынақ сымдарын схемада көрсетілгендей қосу керек. Сіздің осциллограф менікінен өзгеше болады, бірақ мен құрылғыда X/Y режимін орнату үшін қажетті қадамдарды орындаймын:

а) Көлденең тазалауды В каналымен басқарылатын етіп орнатыңыз (X осі).

б) Осциллографты қос арналы режимге қойыңыз.

в) 0В -тан 5В -қа дейінгі кернеулерді көрсете алатындай етіп, екі каналда да вольтты/дивті орнатыңыз. Мен минимумды 0,5В/дивқа қойдым.

d) Қосылу режимін екі арнада да тұрақты токқа орнатыңыз.

e) Arduino сөндірілген кезде нүкте экранның төменгі сол жақ бұрышында болатындай X және Y позициясын реттеңіз.

3 -қадам: Бағдарламаны жүктеңіз және іске қосыңыз

Image
Image

Бағдарламалық жасақтаманы Arduino репозиторийіне арналған жылдам векторлық дисплейден жүктеп алыңыз. Бағдарламалық қамтамасыз ету GNU Affero Public License v3 лицензиясына ие және оны осы лицензия шарттары бойынша еркін қолдануға және өзгертуге болады.

Arduino IDE ішіндегі «fast-vector-display-arduino.ino» файлын ашып, Arduino-ға жүктеңіз. Бір сәтте сіз осциллограф экранында «Жаңа жылмен» анимациясын көресіз.

Мен бұл жобаны Рождество алдындағы апталарда жеке хакатон ретінде жасадым, сондықтан кодтағы PATTERN айнымалысын өзгерту арқылы көруге болатын Рождестволық және Жаңа жылдық тақырыптық хабарлама бар.

4 -қадам: Өзіңіздің жеке суретіңізді жасаңыз

PWM неге өте баяу екенін түсініңіз
PWM неге өте баяу екенін түсініңіз

Егер сіз өзіңіздің жеке сызбаңызды жасағыңыз келсе, нүкте координаттарын USER_PATTERN анықтайтын жолға Arduino нобайына қоюға болады.

Мен Inkscape - бұл жеке сурет салу үшін өте жақсы құрал екенін білдім:

  1. Impact сияқты үлкен, қалың қаріпті қолданып мәтін құрыңыз.
  2. Мәтіндік объектіні таңдап, «Жол» мәзірінен «Объектке жолды» таңдаңыз.
  3. Байланыстырылған пішін жасау үшін жеке әріптерді таңдап, оларды қабаттастырыңыз
  4. Оларды бір қисыққа біріктіру үшін «Path» мәзірінен «Union» таңдаңыз.
  5. Егер кез келген әріптерде тесіктер болса, тіктөртбұрыш құралының көмегімен тіктөртбұрыш салу арқылы кішкене ойықты кесіңіз және оны «Айырмашылық» құралының көмегімен контурдан шығарыңыз.
  6. Түйіндерді көрсету үшін жолды екі рет нұқыңыз.
  7. Төртбұрыш барлық түйіндерді таңдап, «Таңдалған түйіндер бұрышын жасау» құралын басыңыз.
  8. SVG файлын сақтаңыз.

Маңыздысы - сіздің суретіңізде бір ғана жабық жол және тесіктер болмауы керек. Сіздің дизайныңызда шамамен 130 ұпай аз екеніне көз жеткізіңіз.

5 -қадам: SVG файлынан Arduino IDE координаттарын қойыңыз

  1. SVG файлын ашыңыз және координаттарды көшіріңіз. Олар «жол» элементіне ендіріледі. Бірінші координаттар жұбын елемеуге болады; оларды 0, 0 -ге ауыстырыңыз.
  2. Координаттарды жақшаның ішіндегі Arduino эскизіне «USER_PATTERN» анықтаңыз.
  3. Барлық бос орындарды үтірмен ауыстырыңыз, әйтпесе компиляция қатесі пайда болады. «Ауыстыру және табу» құралы пайдалы болуы мүмкін.
  4. Құрастырыңыз және жүгіріңіз!
  5. Егер сізде проблемалар болса, қателік үшін сериялық консольді қараңыз. Атап айтқанда, сіздің үлгіде ішкі буфер үшін тым көп нүктелер болса, сіз хабарларды көресіз. Мұндай жағдайларда кескін шамадан тыс жыпылықтайды.

6 -қадам: PWM неге баяу екенін түсініңіз

Бастау үшін конденсатордың зарядталу кезіндегі әрекетін қарастырайық.

Vcc кернеу көзіне қосылған конденсатор экспоненциалды қисыққа сәйкес кернеуді жоғарылатады. Бұл қисық асимптотикалық, яғни ол кернеуге жақындағанда баяулайды. Барлық практикалық мақсаттар үшін кернеу 5 RC секундтан кейін «жеткілікті жақын». RC «уақыт тұрақтысы» деп аталады. Бұрын көргеніміздей, бұл сіздің тізбегіңіздегі резистор мен конденсатордың мәндерінің туындысы. Мәселе мынада, 5 RC - бұл графикалық дисплейдегі әр нүктені жаңартуға арналған ұзақ уақыт. Бұл көп жыпылықтауға әкеледі!

Конденсаторды зарядтау үшін импульстік ен модуляциясын (PWM) қолданған кезде, бізде жағдай жақсы емес. PWM көмегімен кернеу 0 В пен 5 В арасында тез ауысады. Іс жүзінде бұл дегеніміз, біз конденсаторға зарядты итеріп, оны аздап шығарып алудың арасында тез ауысамыз - бұл итеру мен тарту үлкен қадаммен алға, сосын сәл артқа қарай марафонға жүгіруге ұқсайды. қайта қайта.

Егер сіз бәрін орта есеппен есептесеңіз, PWM көмегімен конденсаторды зарядтау әрекеті, егер сіз конденсаторды зарядтау үшін Vpwm тұрақты кернеуін қолданғандай болсаңыз, дәл солай болады. Қажетті кернеуге «жеткілікті түрде жақындау» үшін шамамен 5 RC секунд қажет.

7 -қадам: а -дан В -ға дейін жылдамырақ

А -дан В -ға дейін тезірек алыңыз
А -дан В -ға дейін тезірек алыңыз

Мысалы, бізде Va дейін зарядталған конденсатор бар делік. B -ның жаңа мәнін жазу үшін analogWrite () қолданамыз делік. Vb кернеуіне жетуді күтуге болатын ең аз уақыт қанша?

Егер сіз 5 RC секундты болжасаңыз, бұл керемет! 5 RC секунд күту арқылы конденсатор шамамен Vb зарядталады. Бірақ егер біз қаласақ, біз аздап күте аламыз.

Заряд қисығына қараңыз. Көрдіңіз бе, біз бастаған кезде конденсатор Vaда болды. Бұл t_a уақытын күтудің қажеті жоқ дегенді білдіреді. Егер біз конденсаторды нөлден зарядтайтын болсақ, қажет болады.

Бұл уақытты күтпеу арқылы біз жақсаруды байқаймыз. T_ab уақыты шын мәнінде 5 RC -ден сәл қысқа.

Бірақ күте тұрыңыз, біз бұдан да жақсысын жасай аламыз! V_b үстіндегі бос орынның барлығын қараңыз. Бұл Vcc, біз үшін қол жетімді максималды кернеу мен Vb арасындағы айырмашылық. Сіз бұл қосымша кернеудің біз қалаған жерге тезірек жетуге қалай көмектесетінін көре аласыз ба?

8 -қадам: Турбо зарядтағышпен а -дан В -ге дейін жетіңіз

Турбо зарядтағышпен В -дан В -ге дейін алыңыз!
Турбо зарядтағышпен В -дан В -ге дейін алыңыз!

Дұрыс. PWM -ді мақсатты кернеуде V_b пайдаланудың орнына, біз оны тұрақты Vcc -те әлдеқайда қысқа уақыт ішінде ұстаймыз. Мен мұны Turbo Charger әдісі деп атаймын және ол бізді шынымен тез барғымыз келетін жерге әкеледі! Уақыт кідірісінен кейін (біз есептеуіміз керек), біз V_b бойынша PWM -ге ауысу арқылы тежегішті басамыз. Бұл кернеуді нысанаға асып кетуден сақтайды.

Бұл әдіспен конденсатордағы кернеуді PWM -ді қолданудан гөрі V_a -дан V_b -ге дейін өзгертуге болады. Сіз осылайша орын аласыз, балақай!

9 -қадам: Кодексті түсіну

Кодексті түсіну
Кодексті түсіну

Сурет мың сөзден тұрады, сондықтан диаграммада кодта орындалатын мәліметтер мен операциялар көрсетілген. Солдан оңға қарай:

  • Графикалық мәліметтер нүктелер тізімі ретінде PROGMEM -де (яғни флэш -жадта) сақталады.
  • Аудару, масштабтау және айналдыру операцияларының кез келген комбинациясы аффинді түрлендіру матрицасына біріктірілген. Бұл әр анимациялық кадрдың басында бір рет жасалады.
  • Ұпайлар графикалық мәліметтерден бір-бірлеп оқылады және олардың әрқайсысы сақталған трансформация матрицасына көбейтіледі.
  • Түрлендірілген нүктелер кез келген нүктені көрінетін аймақтың сыртына шығаратын қайшының алгоритмі арқылы беріледі.
  • RC кідірісін іздеу кестесінің көмегімен нүктелер қозғалыс кернеулеріне және уақыт кідірістеріне айналады. RC кідірісін іздеу кестесі EEPROM-де сақталады және кодты бірнеше рет орындау үшін оны қайта пайдалануға болады. Іске қосу кезінде RC іздеу кестесінің дәлдігі тексеріледі және қате мәндер жаңартылады. EEPROM пайдалану құнды жадты үнемдейді.
  • Айдау кернеулері мен кідірістер кадрлық буфердегі белсенді емес кадрға жазылады. Жақтау буферінде белсенді кадр мен белсенді емес кадрға арналған орын бар. Толық кадр жазылғаннан кейін белсенді емес кадр белсенді болады.
  • Үзіліс қызмет көрсету режимі кернеудің мәндері мен белсенді кадр буферінен кідірістерді оқу арқылы суретті үнемі қайта шығарады. Осы мәндерге сүйене отырып, ол шығыс түйреуіштердің жұмыс циклдерін реттейді. Таймер 1 уақыттың кешігуін бірнеше наносекундқа дейін дәлдікпен өлшеу үшін қолданылады, ал таймер 2 түйреуіштердің жұмыс циклін бақылау үшін қолданылады.
  • Кернеудің ең үлкен өзгеруі бар істік әрқашан нөлдік немесе 100%жұмыс циклімен «турбо зарядталған» болады, бұл ең жылдам зарядтауды немесе разрядтау уақытын қамтамасыз етеді. Кернеудің аз өзгеруі бар істік бірінші істіктің ауысу уақытына сәйкес келетін жұмыс циклімен басқарылады-бұл уақыттың сәйкес келуі сызықтардың осциллографта тікелей жүргізілуін қамтамасыз ету үшін маңызды.

10 -қадам: Үлкен жылдамдықпен үлкен жауапкершілік жүктеледі

Бұл әдіс PWM -ге қарағанда әлдеқайда жылдам болғандықтан, неге analogWrite () оны пайдаланбайды? Жақсы, өйткені тек PWM пайдалану көптеген бағдарламалар үшін жеткілікті жақсы және әлдеқайда кешірімді. «Турбо зарядтағыш» әдісі мұқият кодтауды қажет етеді және тек белгілі бір жағдайларда жарамды:

  1. Ол уақытқа өте сезімтал. Біз мақсатты кернеу деңгейіне жеткенде, мақсатты кернеудің асып кетуіне жол бермеу үшін қозғаушы түйреуішті дереу қалыпты PWM режиміне ауыстыру қажет.
  2. Ол RC тұрақтысын білуді талап етеді, сондықтан бұл мәндерді алдын ала енгізу керек. Дұрыс емес мәндерде уақыт дұрыс болмайды және кернеулер дұрыс болмайды. Тұрақты PWM көмегімен, егер тұрақты кернеу тұрақтылығы белгісіз болса да, біраз уақыттан кейін дұрыс кернеуге түсуге кепілдік бар.
  3. Конденсаторды зарядтау үшін нақты уақыт аралығын есептеу Arduino-да нақты уақытта есептеу үшін тым баяу логарифмдік теңдеулерді қажет етеді. Олар әр анимациялық кадр алдында алдын ала есептеліп, бір жерде жадта сақталуы керек.
  4. Бұл әдіспен айналысатын бағдарламалар кідірістер өте сызықты емес екендігімен (олар шын мәнінде экспоненциалды) күресу керек. Vcc немесе GND маңындағы мақсатты кернеулер орташа нүктеге жақын кернеулерге қарағанда үлкен мөлшердегі тапсырыстарға жетуге ұзақ уақыт алады.

Бұл шектеулерді жою үшін менің векторлық графикалық кодым келесі әрекеттерді орындайды:

  1. Ол 16 кГц жиіліктегі Таймер 1 -ді және дәл шығыс манипуляциясы мен уақытын анықтау үшін үзіліс қызмет көрсету тәртібін қолданады.
  2. Ол үшін конденсатор мен резистор мәндерін таңдауды шектейтін RC уақыт тұрақты мәнінің нақты мәні қажет.
  3. Ол жад буферінде анимация кадрындағы барлық нүктелердің кешігуін сақтайды. Бұл уақыттың кешігуін есептейтін тәртіп шығыс түйреуіштерін жаңартатын үзіліс қызметіне қарағанда әлдеқайда баяу жылдамдықта жұмыс істейтінін білдіреді. Кез келген берілген жақтауды келесі кадрға арналған кешігулердің жаңа жиынтығы дайын болғанға дейін бірнеше ондаған рет бояуға болады.
  4. Жад буферін қолдану кадрға түсіруге болатын нүктелер санына шектеу қояды. Мен қол жетімді жедел жадты барынша пайдалану үшін кеңістікті тиімді кодтауды қолданамын, бірақ ол әлі де шамамен 150 нүктемен шектелген. Жүзге жуық нүктеден асып кетсе де, дисплей жыпылықтай бастайды, сондықтан бұл маңызды мәселе!

Ұсынылған: