/de1_project_sinus

project for DE1 team assignment (D. Caban, I. Dovicak, M. Kováč, L. Kudrna)

Primary LanguageVHDL

Generace signálů a monofonních zvuků
pomocí pulzně šířkové modulace
vytvořené na multifunkční desce Nexys A7-50T

Členové týmu

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)

Obsah

Cíle projektu

  • 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).

Popis Hardwaru

Nexys A7-50T

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

Zesilovač

  • 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)
278620852_1021410442135136_7154315500152959101_n 278885036_353535676806500_6518462935903523547_n
3D Model desky zesilovače
(Boční pohled)
Layoutový pohled desky zesilovače
(Spodní pohled)
TOP_LR_VIEW BOT_LR_VIEW

0001

Schéma desky zesilovače

Popis a simulace modulů psané ve VHDL

Modul Sin_gen

  • 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.

Odkaz na kód modulu Sin-gen

https://github.com/DominikCaban/de1_project_sinus/blob/main/projectdir/de1_projekt.srcs/sources_1/new/sin_generator.vhd

Modul SW handler

  • 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.

Odkaz na kód modulu SW handler

https://github.com/DominikCaban/de1_project_sinus/blob/main/projectdir/de1_projekt.srcs/sources_1/new/switch_handler.vhd

Modul PWM_gen

  • 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.

Odkaz na kód modulu PWM_gen

https://github.com/DominikCaban/de1_project_sinus/blob/main/projectdir/de1_projekt.srcs/sources_1/new/pwm_generator.vhd

Modul Driver-7seg

  • 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.

Odkaz na kód modulu Driver-7seg

https://github.com/DominikCaban/de1_project_sinus/blob/main/projectdir/de1_projekt.srcs/sources_1/new/driver_7seg_4digits.vhd

Výsledek testbench z prostředí Vivada

Střed Průchod nulou
MIDDLE PrechodNulouFIN

Popis a simulace TOP vrstvy ve VHDL

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)

Odkaz na kód TOP modulu

https://github.com/DominikCaban/de1_project_sinus/blob/main/projectdir/de1_projekt.srcs/sources_1/new/top.vhd

TOP_Schema
Schéma Top modulu

Příklad výstupních signálů (noty) zobrazených osciloskopicky

Nota C4
frekvence = ~261 Hz (Min)
Nota C5
frekvence = ~523 Hz (Max)
C4 C5

Nota C5: Min, Max, Střed a Spektrum sinusového signálu (oscilogramy)

Minimum sinusoidy Maximum sinusoidy
C5_MIN C5_MAX
Střed sinusoidy Spektrum sinusoidy
C5_MID C5_Spektrum

Video

https://youtu.be/nLSVV8CweyI

Diskuze o výsledcích projektu

  • 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í.

Literatura

  1. Nexys A7 Reference Manual:
  1. Github:
  1. Sine wave generator using PWM:
  1. Datasheet of operational amplifier:
  1. Nexys A7-50T References:
  1. Výsledné Altium soubory + Gerber