Բովանդակություն:

Arduino ալիքի գեներատոր. 5 քայլ (նկարներով)
Arduino ալիքի գեներատոր. 5 քայլ (նկարներով)

Video: Arduino ալիքի գեներատոր. 5 քայլ (նկարներով)

Video: Arduino ալիքի գեներատոր. 5 քայլ (նկարներով)
Video: How to Make Story Video for YouTube | AI & ChatGPT | Earn Money 2024, Հուլիսի
Anonim
Arduino ալիքի ձևի գեներատոր
Arduino ալիքի ձևի գեներատոր

2021 թ. Փետրվարի թարմացում. Ստուգեք նոր տարբերակը `300 անգամ ընտրանքի տոկոսադրույքով, որը հիմնված է Raspberry Pi Pico- ի վրա:

Լաբորատորիայում հաճախ անհրաժեշտ է որոշակի հաճախականության, ձևի և ամպլիտուդայի կրկնվող ազդանշան: Դա կարող է լինել ուժեղացուցիչի փորձարկում, միացում, բաղադրիչ կամ գործարկիչ ստուգելը: Առևտրային առումով հասանելի են հզոր ալիքի գեներատորներ, բայց համեմատաբար հեշտ է ինքնուրույն օգտակար սարք պատրաստել Arduino Uno- ով կամ Arduino Nano- ով, տե՛ս օրինակ.

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

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

Ահա ևս մեկի նկարագրությունը հետևյալ հատկանիշներով.

* Waveշգրիտ ալիքի ձևեր. 8-բիթանոց ելք ՝ օգտագործելով R2R DAC, 256 նմուշի ձև

* Արագ ՝ 381 կՀց նմուշառման արագություն

* Cշգրիտ ՝ 1 մՀց քայլերի հաճախականությունների տիրույթ: Նույնքան ճշգրիտ, որքան Arduino բյուրեղը:

* Հեշտ շահագործում. Ալիքի ձևի և հաճախականության կարգավորելի մեկ պտտվող կոդավորիչով

* Ամպլիտուդների լայն տեսականի ՝ միլիվոլտ մինչև 20 Վ

* 20 նախապես սահմանված ալիքի ձև: Ուղղակի ավելացնելու համար:

* Հեշտ է պատրաստել. Arduino Uno կամ Nano գումարած ստանդարտ բաղադրիչներ

Քայլ 1: Տեխնիկական նկատառումներ

Անալոգային ազդանշանի պատրաստում

Arduino Uno- ի և Nano- ի թերություններից մեկն այն է, որ այն չունի թվային-անալոգային (DAC) փոխարկիչ, ուստի հնարավոր չէ այն դարձնել անալոգային լարման ուղղակիորեն կապանքների վրա: Լուծումներից մեկը R2R սանդուղքն է. 8 թվային կապում միացված է ռեզիստորների ցանցին, որպեսզի հնարավոր լինի հասնել 256 մակարդակի ելքի: Անմիջական նավահանգստի մուտքի միջոցով Arduino- ն կարող է մի հրամանի հետ միաժամանակ սահմանել 8 կապում: Ռեզիստորների ցանցի համար անհրաժեշտ է 9 արժեք ունեցող R և 8R ՝ 2R արժեքով: Ես օգտագործել եմ 10kOhm որպես արժեք R- ի համար, որը պահում է հոսանքը կապումներից մինչև 0.5mA կամ ավելի քիչ: Ես ենթադրում եմ, որ R = 1kOhm- ը նույնպես կարող է աշխատել, քանի որ Arduino- ն կարող է հեշտությամբ մատուցել 5 մԱ մեկ պին, 40 մԱ մեկ նավահանգստի համար: Կարևոր է, որ R- ի և 2R ռեզիստորների հարաբերակցությունը իրոք 2 -ի լինի: Դա առավել հեշտությամբ կարելի է ձեռք բերել R արժեքով 2 ռեզիստոր սերիա շարելով ՝ ընդհանուր 25 դիմադրության դիմաց:

Ֆազային կուտակիչ

Ալիքի ձևի ստեղծումն իջնում է ՝ կրկնակի ուղարկելով 8-բիթանոց թվերի հաջորդականություն Arduino- ի կապումներին: Ալիքի ձևը պահվում է 256 բայթ զանգվածում և այս զանգվածը վերցվում է նմուշառման միջոցով և ուղարկվում է կապում: Ելքային ազդանշանի հաճախականությունը որոշվում է նրանով, թե ինչ արագությամբ է առաջ շարժվում զանգվածը: Դա անելու հզոր, ճշգրիտ և էլեգանտ միջոց է փուլային կուտակիչը. 32-բիթանոց թիվը կանոնավոր ընդմիջումներով ավելանում է, և մենք օգտագործում ենք 8 ամենանշանակալի բիթերը որպես զանգվածի ինդեքս:

Արագ նմուշառում

Ընդհատումները թույլ են տալիս նմուշառել հստակ սահմանված ժամանակներում, սակայն ընդհատումների ընդհանուր արժեքը սահմանափակում է ընտրանքի հաճախականությունը մինչև k 100kHz: Ֆազը թարմացնելու, ալիքի ձևը վերցնելու և կապումներն անսահմանափակ օղակ տևում է ժամացույցի 42 ցիկլ, դրանով իսկ հասնելով նմուշառման արագության 16 ՄՀց/42 = 381 կՀց: Պտտվող կոդավորիչը պտտելը կամ հրելը առաջացնում է քորոցի փոփոխություն և ընդմիջում, որը դուրս է գալիս օղակից `կարգավորումը փոխելու համար (ալիքի ձև կամ հաճախականություն): Այս փուլում զանգվածի 256 համարները վերահաշվարկվում են այնպես, որ հիմնական օղակում ալիքի ձևի ոչ մի իրական հաշվարկ անհրաժեշտ չէ կատարել: Բացարձակ առավելագույն հաճախականությունը, որը կարող է ստեղծվել, 190 կՀց է (նմուշառման արագության կեսը), բայց հետո միայն երկու նմուշ է ընկնում մեկ ժամանակահատվածում, ուստի ձևի շատ հսկողություն չկա: Այսպիսով, ինտերֆեյսը թույլ չի տալիս 100kHz- ից բարձր հաճախականություն սահմանել: 50 կՀց հաճախականությամբ կան 7-8 նմուշներ մեկ ժամանակահատվածում, իսկ 1.5 կՀց հաճախականությամբ և ներքևում `զանգվածում պահվող բոլոր 256 համարները վերցվում են յուրաքանչյուր ժամանակաշրջանից: Ալիքի ձևերի դեպքում, որտեղ ազդանշանը սահուն փոխվում է, օրինակ ՝ սինուսային ալիքը, նմուշները բաց թողնելը խնդիր չէ: Բայց նեղ բծերով ալիքների ձևերի դեպքում, օրինակ ՝ փոքր աշխատանքային ցիկլով քառակուսի ալիք, վտանգ կա, որ 1.5 կՀց -ից բարձր հաճախականությունների դեպքում մեկ նմուշ բաց թողնելը կարող է հանգեցնել նրան, որ ալիքի ձևը չպահի իրեն սպասվածի պես:

Հաճախականության ճշգրտություն

Թիվը, որով փուլը ավելանում է յուրաքանչյուր նմուշում, համաչափ է հաճախականությանը: Այսպիսով, հաճախականությունը կարող է սահմանվել 381kHz/2^32 = 0.089mHz ճշգրտության: Գործնականում նման ճշգրտություն հազիվ թե երբևէ անհրաժեշտ լինի, ուստի ինտերֆեյսը սահմանափակում է հաճախականությունը 1 մՀց քայլերով սահմանելու համար: Հաճախականության բացարձակ ճշգրտությունը որոշվում է Arduino ժամացույցի հաճախականության ճշգրտությամբ: Սա կախված է Arduino- ի տեսակից, բայց շատերը նշում են 16.000 ՄՀց հաճախականություն, ուստի ~ 10^-4 ճշգրտություն: Կոդը թույլ է տալիս փոփոխել հաճախականության և փուլային ավելացման հարաբերակցությունը `16 ՄՀց ենթադրության փոքր շեղումները շտկելու համար:

Բուֆերացում և ուժեղացում

Ռեզիստորների ցանցը ունի ելքային բարձր դիմադրություն, ուստի դրա ելքային լարումը արագորեն նվազում է, եթե բեռ է կցվում: Դա կարող է լուծվել ՝ ելքը բուֆերացնելով կամ ուժեղացնելով: Այստեղ բուֆերացումը և ուժեղացումը կատարվում է օպամպով: Ես օգտագործեցի LM358- ը, քանի որ ունեի մի քանիսը: Դա դանդաղ գործողություն է (հարվածի արագությունը 0.5 Վ / վրկ), այնպես որ բարձր հաճախականության և բարձր ամպլիտուդի դեպքում ազդանշանը խեղաթյուրվում է: Լավն այն է, որ այն կարող է գործածել 0V- ին շատ մոտ լարումներ: Այնուամենայնիվ, ելքային լարումը սահմանափակված է ~ 2V- ից ներքև երկաթուղով, այնպես որ +5V հզորության օգտագործումը սահմանափակում է ելքային լարումը մինչև 3V: Խթանման մոդուլները կոմպակտ են և էժան: Սնուցելով +20V օպամպին, այն կարող է առաջացնել մինչև 18V լարման ազդանշաններ: (NB, սխեման ասում է LTC3105, քանի որ դա միակ քայլն էր, որը ես գտա Fritzing- ում: Իրականում ես օգտագործել եմ MT3608 մոդուլը, նկարները տես հաջորդ քայլերում): Ես ընտրում եմ փոփոխական թուլացում կիրառել R2R DAC- ի ելքի վրա, այնուհետև օգտագործել օպամպերից մեկը `ազդանշանն առանց ուժեղացնելու բուֆերացնելու համար, իսկ մյուսը` 5,7 -ով, որպեսզի ազդանշանը հասնի առավելագույն ելքի մոտ 20 Վ -ի: Ելքային հոսանքը բավականին սահմանափակ է ՝ m 10 մԱ, ուստի ավելի ուժեղացուցիչ կարող է անհրաժեշտ լինել, եթե ազդանշանը պետք է քշի մեծ բարձրախոս կամ էլեկտրամագնիս:

Քայլ 2: Պահանջվող բաղադրիչներ

Հիմնական ալիքի ձևի գեներատորի համար

Արդուինո Ունո կամ Նանո

16x2 LCD էկրան + 20kOhm հարմարվողական և 100 Օմ շարքի դիմադրություն ՝ լուսավորության համար

5-պտտվող պտտվող կոդավորիչ (ինտեգրված կոճակով)

25 կոսմետր ՝ 10 կՕմ հզորությամբ

Բուֆերի/ուժեղացուցիչի համար

LM358 կամ այլ երկակի opamp

խթանման մոդուլ, որը հիմնված է MT3608- ի վրա

50kOhm փոփոխական ռեզիստոր

10kOhm դիմադրություն

47kOhm դիմադրություն

1muF կոնդենսատոր

Քայլ 3: Շինարարություն

Շինարարություն
Շինարարություն
Շինարարություն
Շինարարություն

Ես ամեն ինչ զոդեցի 7x9 սմ նախատիպի տախտակի վրա, ինչպես ցույց է տրված նկարում: Քանի որ այն մի փոքր խառնաշփոթ էր բոլոր լարերի հետ, ես փորձեցի գունավորել կարմիր լարերը, որոնք կրում են դրական լարման կարմիր և նրանք, որոնք գետնին սև են տանում:

Իմ օգտագործած կոդավորողն ունի 5 կապ, 3 -ը մի կողմից, 2 -ը ՝ մյուս կողմից: 3 կապող կողմը փաստացի կոդավորողն է, 2 կապով կողմը `ինտեգրված կոճակը: 3-փին կողմում կենտրոնական կապը պետք է միացված լինի գետնին, մյուս երկու կապում ՝ D10- ին և D11- ին: 2-փին կողմում, մեկ կապը պետք է միացված լինի գետնին, իսկ մյուսը ՝ D12- ին:

Դա ամենատգեղ բանն է, որ ես երբևէ պատրաստել եմ, բայց աշխատում է: Լավ կլիներ պարիսպ դնել, բայց առայժմ լրացուցիչ աշխատանքը և ծախսերը դա իրականում չեն արդարացնում: Nano- ն և էկրանը կցված են քորոց-վերնագրերով: Ես դա չէի անի, եթե նորը կառուցեի: Ազդանշանները վերցնելու համար ես միակցիչներ չեմ դրել տախտակի վրա: Փոխարենը, ես դրանք վերցնում եմ պղնձե մետաղալարերի դուրս ցցված կոկորդիլոսի կապանքներով ՝ պիտակավորված հետևյալ կերպ.

R - R2R DAC- ի հում ազդանշան

B - բուֆերային ազդանշան

A - ուժեղացված ազդանշան

T - ժամաչափի ազդանշան 9 -րդ կապից

G - գետնին

+ - դրական «բարձր» լարումը բարձրացման մոդուլից

Քայլ 4: Կոդ

Կոդը ՝ Arduino- ի էսքիզը, կցված է և պետք է վերբեռնվի Arduino- ում:

20 ալիքի ձևերը նախապես սահմանվել են: Պետք է պարզ լինի ցանկացած այլ ալիք ավելացնել: Նկատի ունեցեք, որ պատահական ալիքները 256-արժեքի զանգվածը լրացնում են պատահական արժեքներով, բայց նույն օրինակը կրկնվում է ամեն պարբերությամբ: Իրական պատահական ազդանշանները հնչում են որպես աղմուկ, բայց այս ալիքի ձևը շատ ավելի նման է սուլիչի:

Կոդը սահմանում է 1kHz ազդանշան D9 փինում ՝ TIMER1- ով: Սա օգտակար է անալոգային ազդանշանի ժամանակը ստուգելու համար: Այդպես ես հասկացա, որ ժամացույցների ցիկլերի քանակը 42 է: Եթե ես ընդունում եմ 41 կամ 43, և առաջացնում եմ 1 կՀց ազդանշան, ապա այն ակնհայտորեն տարբերվում է D9 կապի ազդանշանից: 42 արժեքով նրանք հիանալի կերպով համընկնում են:

Սովորաբար, Arduino- ն ընդհատում է յուրաքանչյուր միլիվայրկյան `միլիս () գործառույթով ժամանակը հետևելու համար: Սա կխանգարի ազդանշանի ճշգրիտ առաջացմանը, ուստի որոշակի ընդհատումը անջատված է:

Կազմողը ասում է. Այսպիսով, ավելի շատ տարածք կա ավելի բարդ կոդերի համար: Ewգուշացեք, որ հնարավոր է ստիպված լինեք ընտրել «ATmega328P (հին բեռնիչ)» ՝ Nano- ում հաջողությամբ վերբեռնելու համար:

Քայլ 5: Օգտագործում

Ազդանշանի գեներատորը կարող է սնուցվել պարզապես Arduino Nano- ի մինի-USB մալուխի միջոցով: Դա լավագույնս արվում է հզորության բանկի միջոցով, որպեսզի սարքի հետ պատահական հողային հանգույց չլինի, որի հետ այն կարող է կապված լինել:

Միացնելիս այն կստեղծի 100 Հց սինուս ալիք: Կոճակը պտտելով ՝ կարելի է ընտրել ալիքի մյուս 20 տեսակներից մեկը: Հրելիս պտտվելով ՝ կուրսորը կարող է սահմանվել հաճախականության ցանկացած թվանշանի վրա, որն այնուհետև կարող է փոխվել ցանկալի արժեքի:

Ամպլիտուդը կարող է կարգավորվել պոտենցիոմետրով և կարող է օգտագործվել կամ բուֆերային կամ ուժեղացված ազդանշանը:

Իրոք, օգտակար է օսլիլոսկոպ օգտագործել ազդանշանի ամպլիտուդը ստուգելու համար, մասնավորապես, երբ ազդանշանը հոսանք է հաղորդում մեկ այլ սարքի: Եթե չափազանց շատ հոսանք է քաշվում, ազդանշանը կպչվի, և ազդանշանը մեծապես աղավաղված է

Շատ ցածր հաճախականությունների դեպքում ելքը կարելի է պատկերացնել LED- ով 10kOhm ռեզիստորային շարքով: Աուդիո հաճախականությունները կարելի է լսել բարձրախոսով: Համոզվեք, որ ազդանշանը դնում եք շատ փոքր ~ 0.5 Վ, հակառակ դեպքում հոսանքը չափազանց բարձր է դառնում, և ազդանշանը սկսում է կտրել:

Խորհուրդ ենք տալիս: