Obsah:
Video: Generátor priebehov Arduino: 5 krokov (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Aktualizácia z februára 2021: pozrite sa na novú verziu s 300 -násobnou vzorkovacou frekvenciou na základe Raspberry Pi Pico
V laboratóriu človek často potrebuje opakujúci sa signál určitej frekvencie, tvaru a amplitúdy. Môže to byť test zosilňovača, kontrola obvodu, komponentu alebo akčného člena. Výkonné generátory priebehov sú komerčne dostupné, ale je relatívne jednoduché urobiť si užitočný generátor sami pomocou Arduino Uno alebo Arduino Nano, pozri napríklad:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Tu je popis ďalšej s nasledujúcimi funkciami:
* Presné priebehy: 8-bitový výstup s použitím R2R DAC, tvar 256 vzoriek
* Rýchly: vzorkovacia frekvencia 381 kHz
* Presné: frekvenčný rozsah krokovania 1 mHz. Presné ako kryštál Arduino.
* Jednoduché ovládanie: tvar vlny a frekvenciu je možné nastaviť pomocou jedného rotačného snímača
* Široký rozsah amplitúd: milivolty až 20V
* 20 preddefinovaných priebehov. Jednoducho pridajte ďalšie.
* Jednoduchá výroba: štandardné komponenty Arduino Uno alebo Nano plus
Krok 1: Technické úvahy
Vytváranie analógového signálu
Jedným z nedostatkov Arduino Uno a Nano je, že nemá prevodník digitálneho signálu na analógový (DAC), takže nie je možné dosiahnuť, aby na výstupoch bol analógové napätie. Jedným z riešení je rebrík R2R: 8 digitálnych pinov je pripojených k sieti odporov, takže je možné dosiahnuť 256 úrovní výstupu. Prostredníctvom priameho prístupu k portu môže Arduino nastaviť 8 pinov súčasne jediným príkazom. Pre odporovú sieť je potrebných 9 odporov s hodnotou R a 8 s hodnotou 2R. Použil som 10 kOhm ako hodnotu pre R, ktorá udržuje prúd z kolíkov na 0,5 mA alebo menej. Myslím, že R = 1 kOhm by tiež mohlo fungovať, pretože Arduino môže ľahko dodávať 5mA na pin, 40mA na port. Je dôležité, aby pomer medzi odpormi R a 2R bol skutočne 2. To sa dá najľahšie dosiahnuť zapojením 2 odporov hodnoty R do série, celkom 25 odporov.
Fázový akumulátor
Generovanie tvaru vlny potom spočíva v opakovanom odosielaní sekvencie 8-bitových čísel na piny Arduino. Tvar vlny je uložený v poli 256 bajtov a toto pole je vzorkované a odoslané na piny. Frekvencia výstupného signálu je určená tým, ako rýchlo človek postupuje poľom. Robustný, presný a elegantný spôsob, ako to dosiahnuť, je fázový akumulátor: 32-bitové číslo sa v pravidelných intervaloch zvyšuje a ako index poľa používame 8 najvýznamnejších bitov.
Rýchle vzorkovanie
Prerušenia umožňujú vzorkovať v presne definovaných časoch, ale réžia prerušenia obmedzuje vzorkovaciu frekvenciu na ~ 100 kHz. Nekonečná slučka na aktualizáciu fázy, vzorkovanie priebehu a nastavenie pinov trvá 42 hodinových cyklov, čím sa dosiahne vzorkovacia frekvencia 16 MHz/42 = 381 kHz. Otáčanie alebo tlačenie rotačného enkodéra spôsobuje zmenu pinov a prerušenie, ktoré sa dostane von zo slučky, za účelom zmeny nastavenia (priebeh alebo frekvencia). V tejto fáze sa 256 čísel v poli prepočíta, takže v hlavnej slučke nie je potrebné vykonávať žiadne skutočné výpočty tvaru vlny. Absolútna maximálna frekvencia, ktorú je možné vygenerovať, je 190 kHz (polovica vzorkovacej frekvencie), ale potom existujú iba dve vzorky za obdobie, takže tvar nie je veľmi ovládateľný. Rozhranie teda neumožňuje nastaviť frekvenciu nad 100 kHz. Pri 50 kHz je k dispozícii 7 až 8 vzoriek za periódu a pri 1,5 kHz a nižšie sa vzorkuje každú 256 číslic uložených v poli. Pre krivky, kde sa signál plynule mení, napríklad pre sínusovú vlnu, nie je preskočenie vzoriek žiadny problém. Ale pre krivky s úzkymi hrotmi, napríklad pre štvorcovú vlnu s malým pracovným cyklom, existuje nebezpečenstvo, že pri frekvenciách nad 1,5 kHz chýba jedna vzorka, čo môže mať za následok, že sa priebeh vlny nechová podľa očakávania.
Presnosť frekvencie
Počet, o ktoré sa fáza zvyšuje pri každej vzorke, je úmerný frekvencii. Frekvenciu je tak možné nastaviť s presnosťou 381kHz/2^32 = 0,089mHz. V praxi je taká presnosť takmer nikdy potrebná, takže rozhranie obmedzuje nastavenie frekvencie v krokoch po 1 mHz. Absolútna presnosť frekvencie je určená presnosťou hodinovej frekvencie Arduino. To závisí od typu Arduino, ale väčšina udáva frekvenciu 16 000 MHz, takže presnosť ~ 10^-4. Kód umožňuje upraviť pomer frekvencie a fázového prírastku tak, aby boli korigované malé odchýlky od predpokladu 16 MHz.
Vyrovnávacia pamäť a zosilnenie
Sieť rezistorov má vysokú výstupnú impedanciu, takže ak je k nemu pripojené zaťaženie, jeho výstupné napätie rýchlo klesá. To sa dá vyriešiť vyrovnávacou pamäťou alebo zosilnením výstupu. Tu sa ukladanie do vyrovnávacej pamäte a zosilnenie vykonáva pomocou operačného zosilňovača. Použil som LM358, pretože som nejaké mal. Je to pomalý operačný zosilňovač (rýchlosť prebehu 0,5 V za mikrosekundu), takže pri vysokej frekvencii a vysokej amplitúde je signál skreslený. Dobrá vec je, že dokáže zvládnuť napätie veľmi blízke 0V. Výstupné napätie je však obmedzené na ~ 2 V pod koľajnicou, takže použitie napájania +5 V obmedzuje výstupné napätie na 3 V. Zosilňovacie moduly sú kompaktné a lacné. Napájanie +20V na operačný zosilňovač môže generovať signály s napätím až 18V. (Poznámka: v schéme je LTC3105, pretože to bol jediný krok, ktorý som vo Fritzing našiel. V skutočnosti som použil modul MT3608, pozri obrázky v ďalších krokoch). Rozhodol som sa použiť premenlivý útlm na výstup R2R DAC a potom použiť jeden z operačných zosilňovačov na vyrovnanie signálu bez zosilnenia a druhý na zosilnenie o 5,7, aby signál mohol dosiahnuť maximálny výstup asi 20V. Výstupný prúd je dosť obmedzený, ~ 10 mA, takže ak má signál poháňať veľký reproduktor alebo elektromagnet, môže byť potrebný silnejší zosilňovač.
Krok 2: Požadované súčasti
Pre generátor jadrových priebehov
Arduino Uno alebo Nano
16x2 LCD displej + 20kOhm trimer a rezistor 100Ohm pre podsvietenie
5-kolíkový rotačný snímač (s integrovaným tlačidlom)
25 odporov 10 kOhm
Pre nárazník/zosilňovač
LM358 alebo iný duálny operačný zosilňovač
krokový modul založený na MT3608
50 kOhm variabilný odpor
Rezistor 10 kOhm
Odpor 47 kOhm
1 mF kondenzátor
Krok 3: Konštrukcia
Všetko som spájkoval na prototypovú dosku 7 x 9 cm, ako je znázornené na obrázku. Pretože sa to so všetkými vodičmi trochu zamotalo, pokúsil som sa zafarbiť vodiče, ktoré nesú kladné napätie, na červenú a tie, ktoré nesú uzemnenie, na čiernu.
Kodér, ktorý som použil, má 5 pinov, 3 na jednej strane, 2 na druhej strane. Strana s 3 kolíkmi je skutočným snímačom, strana s 2 kolíkmi je integrované tlačidlo. Na 3-pólovej strane by mal byť stredový kolík spojený so zemou, ďalšie dva kolíky na D10 a D11. Na 2-pólovej strane by mal byť jeden kolík pripojený k zemi a druhý k D12.
Je to najškaredšia vec, akú som kedy urobil, ale funguje to. Bolo by pekné vložiť kryt, ale zatiaľ to práca navyše a náklady v skutočnosti neospravedlňujú. Nano a displej sú pripevnené kolíkovými hlavičkami. Už by som to neurobil, keby som postavil nový. Na dosku som neumiestňoval konektory na zachytenie signálov. Namiesto toho ich vyberám krokodílími zvodmi z vyčnievajúcich kúskov medeného drôtu, ktoré sú označené nasledovne:
R - surový signál z R2R DAC
B - signál s vyrovnávacou pamäťou
A - zosilnený signál
T - signál časovača z pinu 9
G - zem
+ - kladné „vysoké“napätie zo zosilňovacieho modulu
Krok 4: Kód
Kód, náčrt Arduina, je priložený a mal by byť nahraný do Arduina.
Preddefinovaných bolo 20 priebehov. Pridanie akejkoľvek ďalšej vlny by malo byť jednoduché. Všimnite si toho, že náhodné vlny zapĺňajú 256-hodnotové pole náhodnými hodnotami, ale rovnaký vzor sa opakuje každé obdobie. Skutočné náhodné signály znejú ako šum, ale tento priebeh znie oveľa viac ako píšťalka.
Kód nastavuje signál 1 kHz na kolíku D9 s TIMER1. To je užitočné na kontrolu načasovania analógového signálu. Takto som zistil, že počet hodinových cyklov je 42: Ak predpokladám buď 41 alebo 43 a vygenerujem signál 1 kHz, má jasne inú frekvenciu ako signál na kolíku D9. S hodnotou 42 sa perfektne zhodujú.
Arduino bežne prerušuje každú milisekundu, aby sledoval čas s funkciou millis (). To by narušilo presné generovanie signálu, takže konkrétne prerušenie je deaktivované.
Kompilátor hovorí: "Skica používa 7254 bajtov (23%) úložného priestoru programu. Maximum je 30720 bajtov. Globálne premenné používajú 483 bajtov (23%) dynamickej pamäte, pričom pre lokálne premenné zostáva 1565 bajtov. Maximum je 2048 bajtov." Existuje teda dostatok priestoru pre sofistikovanejší kód. Dávajte si pozor, že na úspešné nahranie do Nano budete možno musieť zvoliť „ATmega328P (starý bootloader)“.
Krok 5: Použitie
Generátor signálu je možné napájať jednoducho pomocou mini-USB kábla Arduino Nano. Najlepšie sa to robí s napájacou bankou, aby s prístrojom nedošlo k žiadnej náhodnej uzemňovacej slučke, s ktorou by bolo možné ho pripojiť.
Po zapnutí generuje sínusovú vlnu 100 Hz. Otáčaním gombíka je možné zvoliť jeden z ďalších 20 typov vĺn. Otáčaním pri zatlačení je možné kurzor nastaviť na ľubovoľnú z číslic frekvencie, ktorú je potom možné zmeniť na požadovanú hodnotu.
Amplitúdu je možné regulovať potenciometrom a je možné použiť buď medzipamäťový alebo zosilnený signál.
Je skutočne užitočné použiť osciloskop na kontrolu amplitúdy signálu, najmä keď signál dodáva prúd inému zariadeniu. Ak je odobratý príliš veľký prúd, signál sa vypne a signál je silne skreslený
Pre veľmi nízke frekvencie je možné výstup vizualizovať pomocou LED diódy v sérii s odporom 10 kOhm. Zvukové frekvencie je možné počúvať pomocou reproduktora. Signál nastavte na veľmi malý ~ 0,5 V, inak bude prúd príliš vysoký a signál sa začne orezávať.
Odporúča:
Generátor funkcií: 12 krokov (s obrázkami)
Generátor funkcií: Tento návod popisuje návrh generátora funkcií na základe analógového integrovaného obvodu MAX038 spoločnosti Maxims. Generátor funkcií je veľmi užitočný nástroj pre šialených elektronikov. Je potrebný na ladenie rezonančných obvodov, testovanie aud
Generátor náhodných čísel: 5 krokov (s obrázkami)
Generátor náhodných čísel: Tento článok vám ukáže analógový generátor náhodných čísel. Tento obvod začne generovať náhodný výstup, keď sa človek dotkne vstupného terminálu. Výstup obvodu je zosilnený, integrovaný a ďalej zosilňuje hluk od človeka, ktorý funguje ako
Bubblebot: Gigantic Bubble Generator: 9 krokov (s obrázkami)
Bubblebot: Gigantický generátor bublín: Vitajte Tu je jeden veľký víkendový projekt! Vytvorte si tento úžasný Bubble Bot: Aj keď je trochu zdĺhavý a vyžaduje si skúsenosti s Arduinom, táto pomôcka vám zaručí nekonečnú slávu medzi vašimi priateľmi, batoľatami aj dospelými! Avast, t
LED generátor náhodných čísel: 5 krokov (s obrázkami)
LED generátor náhodných čísel: Jedná sa o veľmi jednoduchý projekt Arduino. Výrobok používa diódy LED na zobrazenie náhodných čísel. Keď stlačíte (a podržíte) tlačidlo, diódy LED sa budú pohybovať tam a späť a potom nechajú rozsvietiť náhodnú sadu diód LED, ktoré budú predstavovať číslo. Toto je Ardu
Generátor hudby podľa počasia (midi generátor založený na ESP8266): 4 kroky (s obrázkami)
Generátor hudby podľa počasia (Midi generátor založený na ESP8266): Ahoj, dnes vám vysvetlím, ako si vytvoriť vlastný malý generátor hudby podľa počasia. Je založený na ESP8266, ktorý je niečo ako Arduino a reaguje na teplotu, dážď a intenzita svetla. Nečakajte, že z neho budú celé skladby alebo akordové programy