Мазмұны:

Arduino толқындық генераторы: 5 қадам (суреттермен)
Arduino толқындық генераторы: 5 қадам (суреттермен)

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

Бейне: Arduino толқындық генераторы: 5 қадам (суреттермен)
Бейне: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Шілде
Anonim
Arduino толқындық генераторы
Arduino толқындық генераторы

2021 ж. Ақпан жаңарту: Raspberry Pi Pico негізіндегі іріктеу жылдамдығы 300 есе жаңа нұсқаны тексеріңіз

Зертханада көбінесе белгілі бір жиіліктегі, пішіндегі және амплитудадағы қайталанатын сигнал қажет. Бұл күшейткішті тексеру, тізбекті, компонентті немесе жетекті тексеру болуы мүмкін. Толқын түріндегі қуатты генераторлар коммерциялық түрде қол жетімді, бірақ Arduino Uno немесе Arduino Nano көмегімен пайдалы генераторды өзіңіз жасау оңай, мысалы:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

Міне, келесі сипаттамалары бар екіншісінің сипаттамасы:

* Толқынның дәл формасы: R2R DAC көмегімен 8-разрядты шығару, 256-үлгі пішіні

* Жылдам: 381 кГц іріктеу жиілігі

* Дәл: 1мГц қадамдық жиілік диапазоны. Ардуино кристалы сияқты дәл.

* Оңай жұмыс: толқын пішіні мен жиілікті бір айналмалы кодермен реттеуге болады

* Амплитудасының кең диапазоны: 20В дейін милливольт

* 20 алдын ала анықталған толқын пішіні. Көбірек қосу үшін қарапайым.

* Оңай жасау: Arduino Uno немесе Nano plus стандартты компоненттер

1 -қадам: Техникалық ескертулер

Аналогты сигнал жасау

Arduino Uno мен Nano-ның бір кемшілігі-оның цифрлық-аналогты (DAC) түрлендіргіші жоқ, сондықтан оны аналогтық кернеуді тікелей түйреуіштерге шығаруға болмайды. Бір шешім - бұл R2R баспалдағы: резисторлық желіге 8 цифрлық түйреуіш қосылады, осылайша 256 шығарылым деңгейіне жетуге болады. Портқа тікелей кіру арқылы Arduino бір пәрменмен бір уақытта 8 түйреуішті орната алады. Резисторлық желі үшін R мәні бар 9 және 2R мәні бар 8 резистор қажет. Мен R үшін 10kOhm мәнін қолдандым, ол токты түйреуіштерден 0,5 мА немесе одан төменге дейін сақтайды. Менің ойымша, R = 1kOhm де жұмыс істей алады, өйткені Arduino бір істікке 5 мА, портқа 40 мА жеткізе алады. R мен 2R резисторларының арақатынасы шын мәнінде 2 болуы маңызды. Бұған R резервті 2 резисторды 25 резисторды тізбектей қою арқылы қол жеткізуге болады.

Фазалық аккумулятор

Толқындық пішінді құру Arduino түйреуіштеріне 8-разрядты сандар тізбегін қайталап жіберуге әкеледі. Толқын формасы 256 байт массивінде сақталады және бұл массив іріктеледі және түйреуіштерге жіберіледі. Шығу сигналының жиілігі оның массив арқылы қаншалықты жылдам өтетіндігімен анықталады. Мұны істеудің сенімді, дәл және талғампаз тәсілі-фазалық аккумулятор: 32-разрядты жүйелі түрде көбейтіп отырады, ал біз массивтің индексі ретінде 8 маңызды биттерді қолданамыз.

Жылдам іріктеу

Үзілістер нақты уақыттарда сынама алуға мүмкіндік береді, бірақ үзілістердің үстеме бағасы іріктеу жиілігін ~ 100 кГц-ке дейін шектейді. Фазаны жаңарту, толқын формасын іріктеу және түйреуіштерді орнату үшін шексіз цикл 42 сағат циклін алады, осылайша 16 МГц/42 = 381 кГц іріктеу жылдамдығына жетеді. Айналмалы кодерді айналдыру немесе итеру түйреуіштің өзгеруіне әкеледі және үзіліс циклден шығады, ол параметрді өзгертеді (толқын пішіні немесе жиілік). Бұл кезеңде массивтегі 256 саны қайта есептеледі, осылайша негізгі циклде толқындық форманың нақты есептеулері қажет емес. Шығаруға болатын абсолюттік максималды жиілік - 190 кГц (іріктеу жылдамдығының жартысы), бірақ содан кейін әр кезеңде тек екі үлгі бар, сондықтан пішінді бақылау көп емес. Интерфейс 100 кГц -тен жоғары жиілікті орнатуға мүмкіндік бермейді. 50 кГц жиілігінде әр кезең үшін 7-8 сынама бар, ал 1,5 кГц жиіліктерде және одан төмен 256 нөмір сақталады. Сигнал біркелкі өзгеретін толқындық формалар үшін, мысалы, синусоиды, үлгілерді өткізіп жіберу қиын емес. Бірақ тар шыңы бар толқын пішіндері үшін, мысалы, кіші жұмыс циклі бар төртбұрышты толқындар үшін, бір үлгі жоғалатын 1,5 кГц жоғары жиіліктер толқын пішіні күтілгендей әрекет етпеуіне әкелуі мүмкін.

Жиілік дәлдігі

Әр үлгіде фазаны көбейтетін сан жиілікке пропорционал. Осылайша жиілікті 381 кГц/2^32 = 0,089 мГц дәлдікке орнатуға болады. Іс жүзінде мұндай дәлдік қажет емес, сондықтан интерфейс жиілікті 1 мГц қадаммен орнатуды шектейді. Жиіліктің абсолюттік дәлдігі Arduino сағат жиілігінің дәлдігімен анықталады. Бұл Arduino түріне байланысты, бірақ көпшілігі 16.000 МГц жиілігін көрсетеді, сондықтан ~ 10^-4 дәлдігі. Код 16 МГц болжамының шамалы ауытқуларын түзету үшін жиілік пен фазалық өсімдіктің арақатынасын өзгертуге мүмкіндік береді.

Буферлеу және күшейту

Резистор желісінің шығыс кедергісі жоғары, сондықтан жүктеме қосылған кезде оның шығыс кернеуі тез төмендейді. Мұны шығынды буферлеу немесе күшейту арқылы шешуге болады. Мұнда буферлеу мен күшейту опамп көмегімен жүзеге асады. Менде LM358 қолданылды, себебі менде біраз болды. Бұл баяу опампа (микросекундқа 0,5В айналу жылдамдығы), сондықтан жоғары жиілікте және жоғары амплитудада сигнал бұрмаланады. Жақсы нәрсе, ол 0В -қа жақын кернеуді басқара алады. Шығу кернеуі рельстен төмен ~ 2В шектеледі, сондықтан +5В қуатын қолдану шығыс кернеуін 3В дейін шектейді. Қадамдық модульдер ықшам және арзан. Опампқа +20В берсе, ол кернеуі 18В дейін сигналдарды шығара алады. (Ескерту, схемада LTC3105 жазылған, себебі бұл мен Фритзингтен тапқан жалғыз қадам болды. Шындығында мен MT3608 модулін қолдандым, келесі қадамдардағы суреттерді қараңыз). Мен R2R DAC шығысына айнымалы әлсіреуді қолдануды таңдаймын, содан кейін сигналдың максималды шығуына шамамен 20В жетуі үшін опампалардың бірін сигналды күшейтусіз буферлеу үшін, ал екіншісін 5,7 күшейту үшін қолданамын. Шығу тогы өте шектеулі, ~ 10мА, сондықтан егер сигнал үлкен динамикті немесе электромагнитті басқаратын болса, күшті күшейткіш қажет болуы мүмкін.

2 -қадам: Қажетті компоненттер

Негізгі толқын пішіні генераторы үшін

Arduino Uno немесе Nano

16х2 СКД дисплейі + 20км Ом қайшылығы мен 100 Ом сериялы резистор артқы жарыққа арналған

5 істікшелі айналмалы кодер (біріктірілген түймемен)

10 кОм болатын 25 резистор

Буфер/күшейткіш үшін

LM358 немесе басқа қос опамп

MT3608 негізіндегі модуль

50 кОм айнымалы резистор

10 кОм резистор

47 кОм резистор

1 мкФ конденсатор

3 -қадам: құрылыс

Құрылыс
Құрылыс
Құрылыс
Құрылыс

Мен бәрін суретте көрсетілгендей 7х9 см прототип тақтасына дәнекерледім. Ол барлық сымдармен біршама араласып кеткендіктен, мен оң кернеуі бар сымдарды қызылға және қара түсті өткізгіштерді бояуға тырыстым.

Мен қолданатын кодерде 5 түйреуіш бар, бір жағында 3, екінші жағында 2. 3 түйреуіші бар жақ - бұл нақты кодер, 2 түйреуіші бар жақ - біріктірілген түйме. 3 істікшелі жағында орталық түйреуіш жерге, қалған екі түйреуіш D10 мен D11-ге қосылуы керек. 2 істікшелі жағында бір істікті жерге, екіншісін D12-ге қосу керек.

Бұл мен жасаған ең жаман нәрсе, бірақ ол жұмыс істейді. Қоршауды салу жақсы болар еді, бірақ әзірше қосымша жұмыс пен шығын оны ақтамайды. Нано мен дисплей пин-тақырыптармен бекітілген. Егер мен жаңасын салатын болсам, мен бұлай жасамас едім. Мен сигналдарды алу үшін коннекторларды тақтаға қоймадым. Мен оның орнына мыс сымының шығыңқы бөліктерінен крокодил сымдарын алып жатырмын, олар келесідей белгіленген:

R - R2R DAC шикі сигналы

В - буферлік сигнал

A - күшейтілген сигнал

T - түйреуіш 9 -дан таймер сигналы

G - жер

+ - жоғарылату модулінен оң «жоғары» кернеу

4 -қадам: Кодекс

Код, Arduino эскизі қоса беріледі және оны Arduino -ға жүктеу керек.

20 толқын формасы алдын ала анықталған. Басқа толқындарды қосу оңай болуы керек. Кездейсоқ толқындар 256 мәнді массивті кездейсоқ мәндермен толтыратынын ескеріңіз, бірақ сол үлгі әр кезең сайын қайталанады. Нағыз кездейсоқ сигналдар шу сияқты естіледі, бірақ бұл толқын пішіні ысқырыққа ұқсайды.

Код D9 түйреуішінде TIMER1 көмегімен 1 кГц сигналды орнатады. Бұл аналогтық сигналдың уақытын тексеру үшін пайдалы. Осылайша мен сағат циклдерінің саны 42 екенін білдім: егер мен 41 немесе 43 деп есептесем және 1 кГц сигнал шығаратын болсам, оның D9 түйреуішіндегі сигналдан өзгеше жиілігі бар. 42 мәнімен олар керемет сәйкес келеді.

Әдетте, Arduino millis () функциясымен уақытты қадағалау үшін әр миллисекундты үзеді. Бұл сигналды дәл шығаруға кедергі келтіреді, сондықтан нақты үзіліс өшіріледі.

Компилятор былай дейді: «Sketch бағдарламада 7254 байтты (23%) сақтайды. Максимум - 30720 байт. Жаһандық айнымалылар жергілікті айнымалылар үшін 1565 байт қалдырып, 483 байтты (23%) қолданады. Ең көбі - 2048 байт.» Сондықтан күрделі код үшін кең орын бар. Наноға сәтті жүктеу үшін «ATmega328P (ескі жүктеуші)» таңдау қажет болуы мүмкін екенін ескеріңіз.

5 -қадам: Қолдану

Сигнал генераторын Arduino Nano шағын USB кабелі арқылы ғана қуаттандыруға болады. Мұны қуат банкімен жасаған дұрыс, осылайша оны қосуға болатын қондырғы кездейсоқ жерге тұйықталмайды.

Қосылған кезде 100 Гц синусоиды пайда болады. Тұтқаны айналдыру арқылы басқа 20 толқын түрінің бірін таңдауға болады. Итеру кезінде айналдыру арқылы курсорды жиіліктің кез келген цифрына орнатуға болады, содан кейін оны қажетті мәнге өзгертуге болады.

Амплитудасы потенциометрмен реттелуі мүмкін және буферлі немесе күшейтілген сигналды қолдануға болады.

Сигнал амплитудасын тексеру үшін осциллографты қолдану өте пайдалы, әсіресе сигнал басқа құрылғыға ток беретін кезде. Егер тым көп ток тартылса, сигнал үзіледі және сигнал қатты бұрмаланады

Өте төмен жиіліктер үшін шығуды 10 кОм резисторы бар сериялы жарық диодты жарықтандырумен көруге болады. Дыбыс жиілігін динамикпен естуге болады. Сигналды өте аз ~ 0,5 В орнатқаныңызға көз жеткізіңіз, әйтпесе ток тым жоғары болады және сигнал қиыла бастайды.

Ұсынылған: