This is an old revision of the document!


Sintetizator Audio

Introducere

Voi realiza un sintetizator audio care va avea circuite digitale, cat si analogice.

Claviatura este realizata din mai multe butoane. Dispozitiviul va avea si butoane pentru a modifica gama si pentru functie de record/playback.

Microcontrollerul va genera o nota muzicala, care apoi va fi prelucrata de un filtru comandat in tensiune (VCF - Voltage Controlled Filter), amplificator comandat in tensiune (VCA - Voltage Controlled Amplifier), avand disponibil un generator de anvelopa Attack/Release pe post de tensiune de comanda.

Semnalul prelucrat va fi apoi amplificat de un amplificator audio si ne va binecuvanta (sper) urechile printr-un difuzor.

Scopul sau este de a fi un instrument muzical unic, iar din moment ce fiecare componenta este diferita si exista mai multe metode de a aranja piesele, putem obtine diverse sunete.

Este si o buna metoda de a invata concepte despre prelucrarea semnalelor analogice.

Prima data am facut un sequencer simplu folosind un CD4017, un decade counter IC pe care l-am configurat sa numere pana la 8, asadar aveam o secventa de 8 note. Aveam si niste circuite simple de VCF, VCA.

Pentru mine este util deoarece pot aprofunda notiuni de audio si electronica analogica, si imi doresc ca dupa ce dezvolt suficient de mult instrumentul, sa il fac cadou unui prieten pasionat de muzica electronica.

Descriere generală

Claviatura este realizata din mai multe pushbuttons, care alaturi de o retea de rezistente, creeaza mai multe praguri de tensiune ce sunt citite de ADC-ul uC, asadar se poate diferentia notele una de alta sau de un semnal de comanda.

Apasarea pe o nota modifica frecventa semnalului PWM generat de timer. Dispozitivul este in mod implicit in gama 4. Notele sunt stocate intr-un struct, avand numele notei si frecventa corespunzatoare. Apasarea pe gama sus/jos va inmulti/imparti frecventa cu 2. Apasarea pe butonul de recording va inregistra notele cantate, inca o apasare va seta dispozitivul in modul de playback pentru a reda secventa memorata, iar inca o apasare il va seta in modul standard de free play.

Cat timp o clapa corespunzatoare unei note este apasata, este generat si un semnal de gate pentru generatorul de anvelopa. Se pot controla parametrii generatorului (timpul de Attack respectiv Release) folosind potentiometre.

Nota noastra muzicala este un semnal dreptunghiular, asa ca o vom trece prima data printr-un VCF pentru a netezi tranzitiile abrupte si a obtine un sunet mai cald.

Hardware Design

Listă de componente

Reference Qty Value
A1 1 Arduino_Nano_v2.x
BT1 1 12.7
C1,C5,C6,C7,C8,C9 6 100n
C2 1 220uf
C3 1 1000uf
C4 1 0.22u
C10 1 4.7u
C11 1 10n
C12,C15 2 10u
C13 1 1n
C14 1 2.2n
D4,D5,D6 3 D
D7,D8,D9 3 LED
LS1 1 Speaker
Q1 1 NPN
R1-R26,R27,R29,R30,R32,R41 31 1k
R36,R37,R38,R39,R47,RV1,RV2,RV5,RV6,RV7 10 100k
R40 1 560
R42,R43,R45,R51 4 10k
R44,R46 2 5.1k
R48,R49,R50 3 R_Photo
R52,R53 2 470k
SW1-SW15 15 SW_Push
U1 1 uA7812
U3 1 LM358
U4,U5 2 TL072
U6 1 Modul Amplificator Audio TPA3110D2

Butoane → (Semnal Analogic prin divizor rezistiv) → ADC Microcontroller

Microcontroller → (Semnal Digital PWM) → VCF

Microcontroller → (Semnal Digital Gate) → Generator Anvelopă

Generator Anvelopă → (Semnal Analogic de Control - CV) → VCA

VCF → (Semnal Audio Analogic Netezit) → VCA

VCA → (Semnal Audio Final) → TPA3110D2 (Amplificator) → Difuzor

Software Design

Proiectul a fost dezvoltat folosind mediul PlatformIO.

Arhitectura aplicației este de tip Interrupt-Driven (bazată pe întreruperi) și folosește Mașini de Stări (State Machines) pentru logica principală. Sistemul este împărțit în următoarele module cheie:

  • Managementul Timpului: Timer0 este configurat să genereze o întrerupere la exact 1 milisecundă. Aici se incrementează un contor global (systicks), folosit ulterior pentru calculul BPM-ului din sequencer și pentru debouncing-ul clapelor.
  • Generarea Audio (Hardware PWM): Sunetul este generat folosind Timer1 setat în modul Fast PWM. Frecvența notelor este calculată dinamic pe baza butoanelor apăsate, ajustând regiștrii ICR1 și OCR1A pentru a obține nota dorită direct pe pinul de output, fără intervenția procesorului.
  • Citirea Senzorilor (ADC non-blocant): Conversia analog-digitală pentru butoane și potențiometre se face prin întreruperi (ADC_vect). ADC-ul scanează ciclic canalele și salvează valorile într-un buffer, lăsând bucla principală (main) liberă să proceseze doar logica.
  • Logica Sintetizatorului și Sequencer-ului:
    • Clapele: Fiecare “canal” analogic trece prin stările IDLE, SETTLING și PLAYING pentru a elimina zgomotul (noise floor) și a stabiliza nota.
    • Sequencer-ul: Implementează stările FREE_PLAY, RECORDING și PLAYBACK. Permite înregistrarea unei secvențe de note într-un array și redarea acestora pe baza unui BPM ajustabil în timp real printr-un potențiometru.

Codul sursă complet și detaliile de implementare pot fi găsite pe repository-ul de GitHub asociat proiectului.

Cod sursă și alte resurse ce trebuie să existe pe GitHub

https://github.com/strugariu/proiect-pm/tree/main

<note important>Structurați-vă pagina de GitHub a proiectului pe mai multe directoare. De exemplu, creați un director numit src în care țineți tot codul sursă. Alt director hardware în care să țineți schemele și diagramele și alt director numit images în care să puneți toate fotografiile cu proiectul vostru, pe care le link-ați în README.md

Bibliografie/Resurse

pm/prj2026/florin.stancu/cosmin.strugariu.1779747405.txt.gz · Last modified: 2026/05/26 01:16 by cosmin.strugariu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0