Proiectul consta in realizarea unui tuner de chitara rece. In general, este destul de greu pentru o persoana lipsita de experienta sa isi acordeze chitara dupa ureche, asa ca un tuner ar fi de ajutor. Totodata, un tuner costa destul de mult, iar daca vrei sa folosesti un soft ca GuitarPro, ai nevoie de un microfon destul de puternic.
Exista 6 butoane de selectie, fiecare pentru una din cele 6 corzi ale chitarei. Utilizatorul apasa unul dintre aceste butoane in functie de coarda pe care vrea sa o acordeze si loveste coarda. In functie de diferenta dintre frecventa actuala si frecventa normala a corzii, se aprinde unul dintre cele trei leduri: ledurile rosii in triunghi care indica o crestere sau o scadere a tensionarii corzii sau ledul galben care indica faptul ca acordajul este bun.
Cerintele principale care trebuie indeplinite de preamplificatorul de microfon sunt adaptarea impendantei sursei de semnal si asigurarea unei amplificari de tensiune ridicate, in conditii de zgomot propriu si distorsiuni mici, intr-o gama dinamica suficient de extinsa.
In schema realizata de mine este vorba de un preamplificator pentru microfon cu o rezistenta de intrare de 500Kohmi, iar cea de iesire de 250 ohmi, realizat cu doua tranzistoare cu siliciu (unul npn si celalalt pnp) cuplate galvanic si un comparator, fara histerezis, realizat cu un amplificator operational. Amplificarea in tensiune a acestui preamplificator este 30. Amplitudinea maxima a tensiunii de iesire este de 6.6 V varf la varf.
Condensatorul de intrare realizeaza separarea galvanica fata de microfon. Polarizarea primului tranzistor se realizeaza cu rezistentele R1,R2 si R6. Rezistenta R3 impreuna cu condensatorul C2, realizeaza o filtrare suplimentara a tensiunii de polarizare a tranzistorului Q1, iar rezistenta R12 impreuna cu C7 realizeaza polarizarea microfonului, respectiv filtrarea tensiunii de polarizare.
Conectarea lui C3 in emitor si rezistentele R2,R3 ajuta la obtinerea impendantei mari de intrare a tranzistorului. Aceasta configuratie este cunoscuta sub numele de Bootstrap.
Rezistenta R4 in paralel cu impendanta de intrare in tranzistorul Q2 formeaza sarcina tranzistorului Q1. Rezistenta R5 stabilizeaza punctul static de functionare al tranzistorului Q1, dar reprezinta si calea de reactie negativa globala (de tip paralel-serie).
Rezistenta R7 din colectorul tranzistorului Q2, impreuna cu R4 si curentul de colector al tranzistorului Q1, determina punctul de functionare pentru tranzistorul Q2. Condensatorul C4 realizeaza separarea galvanica intre preamlificator si sarcina de iesire. Banda preamplificatorului de microfon este cuprinsa intre 10Hz si 100 Hz.
Semnalul sinusoidal obtinut la iesirea preamplificatorului de microfon cu amplitudinea de maxim 6.6 V varf la varf reprezinta intrarea unui aplificator operational, AO1, care are functia, in acest caz, de comparator. Chiar daca este folosit ca un comparator, integratul 741 detecteaza semnalele slabe astfel încat acestea sa poata fi recunoscute mai usor.
Un comparator este un circuit care compara doua tensiuni de intrare. Una se numeste tensiune de referinta (VREF), iar cealalta se numeste tensiune de intrare (VIN). Cand tensiunea de intrare (Vin) se ridica mai sus sau scade sub tensiunea de referinta( VREF) polaritatea iesirii se modifica.
Tensiunea de referinta se modifica cu ajutorul unei rezistente variabile RS1, astfel incat semnalul de iesire din comparator sa aiba o forma dreptunghiulara cuprinsa intr-o banda de frecventa de 10Hz si 100 de Hz necesara intrarii microcontrolerului.
Pentru a adapta nivelul semnalului de iesire din comparator cu intrarea microcontrolerului am folosit tranzistorul Q3. Acest tranzistor cat si comparatorul au fost alimentate cu o tensiune de +5V care alimenteaza si microcontrolerul. Output-ul este legat la pinii PA.
Cele 6 butoane folosite sunt setate ca input la pinii PD ai microcontrolerului, iar cele 2 leduri sunt setate ca output la pinii PB.
Se initializeaza pinii microcontrolerului ca intrare sau iesire si se seteaza un timer pentru intreruperile de esantionare.
Se realizeaza sampling in functie de intervalul de sampling stabilit in modulul anterior. Pentru a simplifica determinarea frecventei semnalului, vom alege o frecventa de referinta la care se vor raporta frecventele celor 6 corzi. Determinarea valorii relative a frecventei unei corzi se va face numarand semnalele de 5V pe unitate de timp. Daca acest contor este mai mare decat frecventa relativa a corzii de acordat, atunci coarda trebuie detensionata, iar daca este mai mic, coarda trebuie tensionata.
Se determina frecventa semnalului si in functie de butonul apasat se compara cu un anumit prag de frecventa.
In functie de diferenta dintre frecventa esantionata si frecventa normala, se aprind ledurile.
Urmatoarele piese sunt necesare pentru realizarea modulelor hardware prezentate anterior:
Schema a fost realizata in Electronics Workbench Student Edition si difera putin de varianta functionala deoarece aplicatia nu suporta componenta microfon. Pentru a putea rula simularea, am inlocuit microfonul cu o sursa de semnal si am legat iesirea circuitului la un osciloscop pentru a putea vizualiza forma de unda dreptunghiulara.
Atasez in sectiunea Downloads simularea functionala, precum si un kit de Electronics Workbench Student Edition.
Pentru usurinta, modulul de microcontroler, leduri si butoane l-am proiectat in Eagle pornind de la Laboratorul 2.
Aplicatia este realizata in AVR Studio.
Se initializeaza pinii de intrare pentru cele 6 butoane, pinii de iesire pentru cele 3 leduri si pinul de input semnal. Totodata, se definesc frecventele standard pentru cele 6 corzi cu care se va compara frecventa semnalului provenit de la microfon.
#define REFERENCE_FREQ 1200.00 #define APROX_ERROR 10.00
#define _EL_ 164.81
#define _A_ 220.00
#define _D_ 293.66
#define _G_ 391.99
#define _B_ 493.88
#define _EH_ 659.26
Acest vector retine frecventa relativa a fiecarei corzi (practic numarul de semnale de 5V in unitatea de timp stabilita de mine).
unsigned int reference_count[] = {
REFERENCE_FREQ/_EH_,
REFERENCE_FREQ/_B_,
REFERENCE_FREQ/_G_,
REFERENCE_FREQ/_D_,
REFERENCE_FREQ/_A_,
REFERENCE_FREQ/_EL_,
};
if (interrupt)
then { if (check_pressed_button) { result = compare (count, reference_count) if (result == equal) light_yellow_led (LED3) else if (result == smaller) light_red_led (LED1) else light_red_led (LED2) } }
Se foloseste un timer care sa faca o intrerupere la fiecare 0,2 ms. In momentul intreruperii se verifica daca unul dintre cele 6 butoane este ON. Daca da, se determina butonul respectiv si se asociaza frecventei relative a corzii.
Se compara frecventa relativa determinata inainte de intrerupere cu aceasta frecventa de referinta. Daca este mai mare inseamna ca aceasta coarda este acordata prea sus si trebuie detensionata. Daca este mai mica, inseamna ca aceasta coarda este acordata prea jos si trebuie tensionata. Daca diferenta dintre cele de frecvente este mai mica decat o eroare prestabilita, inseamna ca aceasta coarda este acordata corespunzator.
In functie de relatia intre frecventa de referinta si frecventa obtinuta dupa esantionare, se da o comanda la unul dintre cele 3 leduri legate la microcontroler.
Se realizeaza doua simulari.
Prima simulare va transforma semnalul provenit de la generator intr-un semnal treapta intre 0-5V cu frecventa diferita (in functie de cea setata la generator). Practic microfonul este simulat utilizand un generator de semnal sinusoidal cu diverse frecvente.
Cea de-a doua consta in simularea semnalului treapta 0-5V de intrare in microcontroler. Acesta esantioneaza semnalul si da comanda spre leduri.
Mai jos este un exemplu de moficare a frecventei la iesire in functie de semnalul generatorului:
Determinarea frecventei exacte (in valoare numerica) a unui semnal este o problema destul de complicata. Pe langa nevoia de a folosi niste mecanisme hardware sau software de reducere a noise-ul, apare nevoia utilizarii unui sampler avansat (eventual cu memorie pentru a putea inregistra niste masuratori si prelua media acestora).
Pentru extensie, am folosit o placa de test cu extensie pe 3 gauri. Din nefericire, dimensiunea in lungime a fost cam mica, asa ca a trebuit sa aranjez circuitul pe doua siruri, ceea ce a ingreunat putin lipirea componentelor si depanarea placutei (a fost nevoie de un numar destul de mare de fire pentru a conecta componentele).
http://www.technologystudent.com/elec1/opamp3.htm
http://www.techitoutuk.com/knowledge/electronics/buildingblocks/opamp/index.html
Amplificatoare audio si sisteme muzicale, editura Dacia. L.Festila, E.Simion, C.Miron
Datasheets pentru UA741, BC109, BC177 si BC107