Generace signálů a monofonních zvuků
pomocí pulzně šířkové modulace
vytvořené na multifunkční desce Nexys A7-50T
Dominik Caban
- návrh zesilovače a vytváření signálu (SIN, PWM, BLOCK SCHEMATIC), proslov u videa
Ivo Dovičák
- generování signálů a zvuků (SIN, PWM, TEST BENCH)
Martin Kováč
- střih a finální úprava videa a uživatelské rozhraní (Switch)
Lukáš Kudrna
- finální dokumentace projektu (README.md) a uživatelské rozhraní (displej)
- Cíle projektu
- Popis Hardwaru
- Popis a simulace modulů psané ve VHDL
- Popis a simulace TOP vrstvy ve VHDL
- Video
- Literatura
- využít desku Nexys A7-50 pro PWM generování zvuku základních signálů.
- využít desku Nexys A7-50 pro ovládání 7segmentového displeje a zobrazení frekvence PWM modulace pro sinusový signál.
- vytvořit kód a simulace v prostředí Vivada.
- vytořit schému a návrh desky v prostředí Altia (PCB Design Software).
Deska Nexys A7 je kompletní platforma pro vývoj digitálních obvodů, založená na nejnovějším Artix-7™ Field Programmable Gate Array (FPGA) od Xilinx®. Díky velkému, vysokokapacitnímu FPGA, velkorysým externím pamětem a nabídce spousty portů - USB, Ethernet a dalších, může Nexys A7 hostit návrhy od úvodních kombinačních obvodů až po výkonné vestavěné procesory. Několik vestavěných periferních zařízení, včetně akcelerometru, teplotního senzoru, digitálního mikrofonu MEM, zesilovače reproduktorů a několika I/O zařízení, umožňuje využít vývojovou desku Nexys A7-50T pro širokou škálu návrhů, bez nutnosti připojení externího hardwaru.
Nexys A7-50T
- Do našeho studentského projektu jsme zakomponovali také vývojový kit - výstupní zesilovač s nastavitelným ziskem. Hlavní smysl našeho zesilovače je v rámci výuky přiblížit studentům samotný HW (ovšem vývojový kit od XILINX v našem případě deska Nexys A7-50T naprosto stačí).
- Tento zesilovač by v případě realizace (GERBERY sú uvedené v prílohách projektu, ten QR kód funguje :)) sloužil na nastavení výstupní amplitudy signálu tj. větší zesílení zvuku.
- Na vstupu zesilovače je zavedena ochrana proti nesprávnému zapojení napájecího napětí (polaritě),TVS dioda proti přesáhnutí maximálního napětí přivedeného na zesilovač a Low-pass filter pro potlačení rušení.
- Např. při napájení zesilovače z USB notebooku, můžeme dostat nasuperponované vysokofrekvenční rušení a tento filtr nám dokáže tyto složky potlačit.
- Návrh zesilovače je realizovaný pomocí aplikace Altium Designer, kde po návrhnutí schématu se vytvořila DPS viz. obrázky níže.
3D Model desky zesilovače (Vrchní pohled) |
Layoutový pohled desky zesilovače (Vrchní pohled) |
---|---|
3D Model desky zesilovače (Boční pohled) |
Layoutový pohled desky zesilovače (Spodní pohled) |
---|---|
Schéma desky zesilovače
- Modul sin_gen slúži na generáciu jednotlivých úrovní striedy, ktorou sa riadi PWM generátor. Vstupom sin generátora je výstupná frekvencia zo sw_handlera
- Sínus sme rozdelili na 36 častí, ktoré sme vytvorili pomocou excelu a pomocou signálu s_data_cnt volíme správnu hodnotu pre časový okamžik. Signálom s_treshold, ktorý je riadený vstupom FREQ ovládame periódu každého PWM pulzu a tým pádom aj frekvenciu výslednej sínusoidy.
- Switch handler slúži na spravcovanie vstupu z prepínačov a jeho výstupom je frekvencia jednotlivých tónov. Jeho ďalším výstupom sú hodnoty data0_i a data1_i, ktoré slúžia na zobrzovanie aktuálne znejúceho tónu.
- Modul PWM_GEN slúži na generáciu šírkovo modulovaného signálu. Vhodným postupným volením striedy vieme dostať rôzne typy signálov. V našom prípade ide o harmonický signál sínus.
- Generovanie PWM signálov je jednoduché. Vedieme signál s_cnt, ktorým počítame časové impulzy a kontrolujeme či sme nedosiahli požadovanú striedu porovnávaním so signálom s_duty_old.
- Modul driver_seg4 je upravenou verziou ovládača 7-segmentových displejov, ktoré sme využili z cvičení. Úprava spočívala v použití nového prevodníka z BCD na výstupy katód hex_7seg_letters , ktorý miesto čísiel zobrazoval tóny. Išlo o improvizovanú špeciálnu úpravu prevodníku hex_7seg, ktorý bol navrhnutý na cvičení DE1.
Střed | Průchod nulou |
---|---|
TOP modul v sobě "skrývá" všechny moduly a umožnuje je připojit k hardwarových komponentům (v našem ppřípadě deska Nexys A7-50T)
Schéma Top modulu |
Nota C4 frekvence = ~261 Hz (Min) |
Nota C5 frekvence = ~523 Hz (Max) |
---|---|
Minimum sinusoidy | Maximum sinusoidy |
---|---|
Střed sinusoidy | Spektrum sinusoidy |
---|---|
- Na snímkoch z ociloskopu možme pozorovať, že výsledna sínusoida nie je hladká, ale má "schodovitý tvar". Je to dané metódou, ktorú používame na generovanie sínusu, kedy si sínusoidu rozdelíme na 36 častí a každá z nich má istú úroveň. Hladšiu sínusoidu by sme dosiahli, ak by sme použili viacero častí, ale 36 častí pre naše účely postačuje.
- Jeden z problémov, ktorý sme riešili, bol, že sme nevedeli vypočítať periódu PWM pulzov, pre ktoré by sme dosiahli požadovanú frekvenciu audio signálu. Po mnoha nevydarených výpočtoch sme použili experimentálnu metódu, kedy sme s pomocu osciloskopu prišli na periódu pwm pulzov, kedy má audio signál 1 kHz (bolo to 27770 ns). Zvyšné frekvencie sme dopočítali podľa vzorca p = (2777/(f/1000)), dané riešenie fungovalo.
- Ideálnější variantou by bylo využití VGA zesilovače, který by byl řiditelný přes vývojový kit, ovšem realizace v tomto konkrétním případě by byla komplikovaná a projekt by jen zkomplikovala.
- Projekt nám přinesl vela nových skúseností, a naučili jsme se mnoho nových věcí.
- Nexys A7 Reference Manual:
- Github:
- Sine wave generator using PWM:
- Datasheet of operational amplifier:
- Nexys A7-50T References:
- https://digilent.com/reference/_media/reference/programmable-logic/nexys-a7/nexys-a7-sch.pdf
- https://digilent.com/reference/_media/reference/programmable-logic/nexys-a7/nexys-a7_rm.pdf
- Výsledné Altium soubory + Gerber