Obsah:
- Krok 1: Technická hlediska
- Krok 2: Požadované součásti
- Krok 3: Konstrukce
- Krok 4: Kód
- Krok 5: Použití
Video: Generátor průběhů Arduino: 5 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Aktualizace z února 2021: podívejte se na novou verzi s 300násobnou vzorkovací frekvencí na základě Raspberry Pi Pico
V laboratoři člověk často potřebuje opakující se signál o určité frekvenci, tvaru a amplitudě. Může to být test zesilovače, kontrola obvodu, součásti nebo aktuátoru. Výkonné generátory křivek jsou komerčně dostupné, ale je poměrně snadné vyrobit si užitečné sami pomocí Arduino Uno nebo Arduino Nano, viz například:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Zde je popis dalšího s následujícími funkcemi:
* Přesné průběhy: 8bitový výstup pomocí R2R DAC, tvar 256 vzorků
* Rychlý: vzorkovací frekvence 381 kHz
* Přesné: frekvenční rozsah kroků 1 mHz. Přesné jako krystal Arduino.
* Snadné ovládání: tvar vlny a frekvence nastavitelné pomocí jediného rotačního kodéru
* Široký rozsah amplitud: milivoltů až 20V
* 20 předdefinovaných průběhů. Přímo přidat další.
* Snadná výroba: Arduino Uno nebo Nano plus standardní komponenty
Krok 1: Technická hlediska
Vytváření analogového signálu
Jedním z nedostatků Arduino Uno a Nano je, že nemá převodník digitálního signálu na analogový (DAC), takže není možné přimět jej k výstupu analogového napětí přímo na piny. Jedním z řešení je žebřík R2R: 8 digitálních pinů je připojeno k odporové síti, takže lze dosáhnout 256 úrovní výstupu. Prostřednictvím přímého přístupu k portu může Arduino nastavit 8 pinů současně jediným příkazem. Pro síť odporů je zapotřebí 9 odporů s hodnotou R a 8 s hodnotou 2R. Použil jsem 10 kOhm jako hodnotu pro R, která udržuje proud z kolíků na 0,5 mA nebo méně. Myslím, že R = 1 kOhm by také mohlo fungovat, protože Arduino může snadno dodávat 5mA na pin, 40mA na port. Je důležité, aby poměr mezi rezistory R a 2R byl skutečně 2. Toho lze nejsnáze dosáhnout zapojením 2 rezistorů o hodnotě R do série, celkem tedy 25 rezistorů.
Fázový akumulátor
Generování průběhu pak přichází na opakované odesílání sekvence 8bitových čísel na piny Arduino. Tvar vlny je uložen v poli 256 bytů a toto pole je vzorkováno a odesláno na piny. Frekvence výstupního signálu je dána tím, jak rychle člověk postupuje polem. Robustní, přesný a elegantní způsob, jak toho dosáhnout, je pomocí fázového akumulátoru: 32bitové číslo se v pravidelných intervalech zvyšuje a jako index pole používáme 8 nejvýznamnějších bitů.
Rychlé vzorkování
Přerušení umožňují vzorkovat v přesně definovaných časech, ale režie přerušení omezuje vzorkovací frekvenci na ~ 100kHz. Nekonečná smyčka pro aktualizaci fáze, vzorkování průběhu a nastavení pinů trvá 42 hodinových cyklů, čímž se dosáhne vzorkovací frekvence 16 MHz/42 = 381 kHz. Otáčení nebo tlačení rotačního kodéru způsobí změnu pinů a přerušení, které se dostane ze smyčky, za účelem změny nastavení (křivky nebo frekvence). V této fázi je 256 čísel v poli přepočítáno, takže v hlavní smyčce není třeba provádět žádné skutečné výpočty průběhu. Absolutní maximální frekvence, kterou lze generovat, je 190 kHz (polovina vzorkovací frekvence), ale pak existují pouze dva vzorky za období, takže tvar není příliš ovládán. Rozhraní tedy neumožňuje nastavit frekvenci nad 100kHz. Při 50 kHz je 7-8 vzorků za periodu a při 1,5 kHz a níže všech 256 čísel uložených v poli bude vzorkováno každou periodu. U průběhů, kde se signál mění plynule, například u sinusových vln, není přeskakování vzorků žádný problém. Ale pro křivky s úzkými špičkami, například pro čtvercovou vlnu s malým pracovním cyklem, existuje nebezpečí, že pro frekvence nad 1,5 kHz chybí jeden vzorek, což může mít za následek, že se průběh nechová podle očekávání
Přesnost frekvence
Počet, o který se fáze zvyšuje u každého vzorku, je úměrný frekvenci. Kmitočet tak lze nastavit s přesností 381kHz/2^32 = 0,089mHz. V praxi je taková přesnost téměř nikdy zapotřebí, takže rozhraní omezuje nastavení frekvence v krocích po 1 mHz. Absolutní přesnost frekvence je dána přesností hodinové frekvence Arduino. To závisí na typu Arduino, ale většina udává frekvenci 16 000 MHz, takže přesnost ~ 10^-4. Kód umožňuje upravit poměr frekvence a fázového přírůstku tak, aby korigoval malé odchylky předpokladu 16 MHz.
Vyrovnávací paměť a zesílení
Rezistorová síť má vysokou výstupní impedanci, takže její výstupní napětí rychle klesá, pokud je připojena zátěž. To lze vyřešit vyrovnávací pamětí nebo zesílením výstupu. Zde se ukládání do vyrovnávací paměti a zesílení provádí pomocí operačního zesilovače. Použil jsem LM358, protože jsem nějaké měl. Je to pomalý operační zesilovač (rychlost přeběhu 0,5 V za mikrosekundu), takže při vysoké frekvenci a vysoké amplitudě je signál zkreslený. Dobrá věc je, že zvládne napětí velmi blízké 0V. Výstupní napětí je však omezeno na ~ 2V pod kolejnicí, takže použití +5V napájení omezuje výstupní napětí na 3V. Zesílené moduly jsou kompaktní a levné. Napájení +20V do operačního zesilovače může generovat signály s napětím až 18V. (Pozn., Schéma říká LTC3105, protože to byl jediný krok, který jsem ve Fritzing našel. Ve skutečnosti jsem použil modul MT3608, viz obrázky v dalších krocích). Rozhodl jsem se použít proměnný útlum na výstup R2R DAC a poté použít jeden z opampů k uložení signálu bez zesílení a druhý k zesílení o 5,7, takže signál může dosáhnout maximálního výkonu asi 20V. Výstupní proud je poměrně omezený, ~ 10 mA, takže pokud má signál pohánět velký reproduktor nebo elektromagnet, může být zapotřebí silnější zesilovač.
Krok 2: Požadované součásti
Pro generátor křivek jádra
Arduino Uno nebo Nano
16x2 LCD displej + 20kOhm trimr a odpor 100Ohm pro podsvícení
5kolíkový rotační snímač (s integrovaným tlačítkem)
25 odporů 10 kOhm
Pro pufr/zesilovač
LM358 nebo jiný duální operační zesilovač
rozšiřující modul založený na MT3608
50kOhm variabilní odpor
Rezistor 10 kOhm
Odpor 47 kOhm
1 mF kondenzátor
Krok 3: Konstrukce
Vše jsem připájel na prototypovou desku 7x9 cm, jak je znázorněno na obrázku. Protože se to se všemi dráty trochu zamotalo, zkusil jsem vybarvit vodiče, které nesou kladné napětí, červenou a ty, které nesou zem, černou.
Kodér, který jsem použil, má 5 pinů, 3 na jedné straně, 2 na druhé straně. Strana se 3 piny je skutečným kodérem, strana se 2 piny je integrované tlačítko. Na straně se 3 piny by měl být centrální kolík připojen k zemi, další dva piny k D10 a D11. Na straně se 2 piny by měl být jeden kolík připojen k zemi a druhý k D12.
Je to nejošklivější věc, kterou jsem kdy vyrobil, ale funguje. Bylo by hezké vložit do skříně, ale prozatím to práce navíc a náklady opravdu neospravedlňují. Nano a displej jsou připevněny hlavičkami. Neudělal bych to znovu, kdybych postavil nový. Na desku jsem neumístil konektory, abych zachytil signály. Místo toho je sbírám krokodýlími vývody z vyčnívajících kusů měděného drátu, které jsou označeny takto:
R - surový signál z R2R DAC
B - signál s vyrovnávací pamětí
A - zesílený signál
T - signál časovače z pinu 9
G - zem
+ - kladné „vysoké“napětí ze zvyšovacího modulu
Krok 4: Kód
Kód, skica Arduina, je přiložen a měl by být nahrán do Arduina.
Předdefinováno bylo 20 průběhů. Přidání jakékoli další vlny by mělo být jednoduché. Náhodné vlny zaplňují pole 256 hodnot náhodnými hodnotami, ale stejný vzor se opakuje každé období. Skutečné náhodné signály zní jako šum, ale tento průběh zní mnohem více jako píšťalka.
Kód nastavuje signál 1kHz na pin D9 s TIMER1. To je užitečné pro kontrolu načasování analogového signálu. Tak jsem zjistil, že počet hodinových cyklů je 42: Pokud předpokládám buď 41 nebo 43 a generuji signál 1 kHz, má jasně jinou frekvenci než signál na pinu D9. S hodnotou 42 se perfektně shodují.
Arduino obvykle každou milisekundu přeruší, aby sledoval čas pomocí funkce millis (). To by narušilo přesné generování signálu, takže konkrétní přerušení je deaktivováno.
Překladač říká: "Skica používá 7254 bytů (23%) úložného prostoru programu. Maximum je 30720 bytů. Globální proměnné využívají 483 bytů (23%) dynamické paměti, přičemž pro lokální proměnné zbývá 1565 bytů. Maximum je 2048 bytů." Existuje tedy dostatek místa pro sofistikovanější kód. Pamatujte, že možná budete muset zvolit „ATmega328P (starý zavaděč)“pro úspěšné nahrání do Nano.
Krok 5: Použití
Generátor signálu lze napájet jednoduše pomocí mini USB kabelu Arduino Nano. Nejlepší je to provést s powerbankou, aby s přístrojem nevznikla náhodná zemní smyčka, se kterou by mohl být spojen.
Po zapnutí generuje sinusovou vlnu 100 Hz. Otáčením knoflíku lze vybrat jeden z dalších 20 typů vln. Otáčením při tlačení lze kurzor nastavit na libovolnou číslici frekvence, kterou lze poté změnit na požadovanou hodnotu.
Amplitudu lze regulovat potenciometrem a lze použít buď pufrovaný nebo zesílený signál.
Je opravdu užitečné použít osciloskop ke kontrole amplitudy signálu, zvláště když signál dodává proud do jiného zařízení. Pokud je odebíráno příliš mnoho proudu, signál se vypne a signál je silně zkreslený
Pro velmi nízké frekvence lze výstup vizualizovat pomocí LED v sérii s odporem 10 kOhm. Zvukové frekvence lze slyšet pomocí reproduktoru. Ujistěte se, že je signál nastaven na velmi malý ~ 0,5 V, jinak bude proud příliš vysoký a signál začne ořezávat.
Doporučuje:
Generátor funkcí: 12 kroků (s obrázky)
Generátor funkcí: Tento návod popisuje návrh generátoru funkcí na základě analogového integrovaného obvodu MAX038 Maxims. Generátor funkcí je velmi užitečný nástroj pro podivíny v elektronice. Je to nutné pro ladění rezonančních obvodů, testování aud
DIY funkce/generátor průběhu: 6 kroků (s obrázky)
DIY generátor funkcí/průběhů: V tomto projektu se krátce podíváme na generátory komerčních funkcí/průběhů, abychom zjistili, jaké funkce jsou pro verzi pro kutily důležité. Poté vám ukážu, jak vytvořit jednoduchý generátor funkcí, analogový a číslicový
Weather Based Music Generator (ESP8266 Based Midi Generator): 4 kroky (s obrázky)
Weather Based Music Generator (ESP8266 Based Midi Generator): Ahoj, dnes vám vysvětlím, jak si vytvořit vlastní malý generátor hudby na základě počasí. Je založen na ESP8266, což je něco jako Arduino, a reaguje na teplotu, déšť a intenzita světla. Nečekejte, že to udělá celé písně nebo akordový program
ESP32 s oledem displeje - indikátor průběhu: 6 kroků
ESP32 s displejem Oled - indikátor průběhu: ESP32, o kterém si dnes povíme, je ten, který je již dodáván s integrovaným displejem Oled. Tato funkce nám velmi usnadňuje život, protože si můžeme udělat dojem o hodnotě proměnné, která se objeví. Nemáte ani
Brain Box: Sledování neurálního objemu v průběhu času: 20 kroků
Brain Box: Sledování neurálního objemu v průběhu času: Pokrok na hranici delšího lidského života přinesl vzestup nemocí, které civilizace neviděly dříve než ty naše. Mezi nimi Alzheimerova choroba postihla v roce 2017 přibližně 5,3 milionu žijících starších Američanů nebo přibližně 1 z 10 e