- IC PT2258
- Cum funcționează PT2258 IC
- Schema
- Componente necesare
- Cod Arduino
- Testarea circuitului de control al volumului audio digital
- Îmbunătățire suplimentară
Un potențiometru este un dispozitiv mecanic cu ajutorul căruia se poate seta rezistența în funcție de valoarea dorită, schimbând astfel curentul care trece prin el. Există multe aplicații pentru un potențiometru, dar mai ales un potențiometru este utilizat ca controler de volum pentru amplificatoare audio.
Un potențiometru nu controlează câștigul semnalului, dar formează un divizor de tensiune și de aceea semnalul de intrare se atenuează. Deci, în acest proiect, vă voi arăta cum să vă construiți controlerul digital de volum cu IC PT2258 și să îl interfațați cu un Arduino pentru a controla volumul unui circuit de amplificare. De asemenea, puteți verifica aici diverse circuite audio, inclusiv VU meter, circuit de control al tonului etc.
IC PT2258
După cum am menționat mai devreme, PT2258 este un IC conceput pentru a fi utilizat ca un controler electronic de volum cu 6 canale , acest IC utilizează tehnologia CMOS special concepută pentru aplicații audio-video multi-canal.
Acest IC oferă o interfață de control I2C cu un domeniu de atenuare de la 0 la -79dB la 1dB / pas și vine într-un pachet DIP sau SOP cu 20 de pini.
Unele dintre caracteristicile de bază includ,
- 6 canale de intrare și ieșire (pentru sisteme audio 5.1 de acasă)
- Adresă I2C selectabilă (pentru aplicația Daisy-chain)
- Separare canal mare (pentru aplicații cu zgomot redus)
- Raport S / N> 100dB
- Tensiunea de funcționare este de 5 până la 9V
Cum funcționează PT2258 IC
Acest IC transmite și primește date de la microcontroler prin linii SCL și SDA. SDA și SCL alcătuiesc interfața magistralei. Aceste linii trebuie trase de două rezistențe de 4,7K pentru a asigura o funcționare stabilă.
Înainte de a merge la operațiunea hardware reală, iată descrierea detaliată funcțională a CI. dacă nu doriți să știți toate acestea, puteți sări peste această parte, deoarece toată partea funcțională este gestionată de biblioteca Arduino.
Data validarii
- Datele de pe linia SDA sunt considerate stabile atunci când semnalul SCL este ÎNALT.
- Stările HIGH și LOW ale liniei SDA se schimbă numai atunci când SCL este LOW.
Stare de pornire și oprire
O condiție de pornire este activată când
- SCL este setat la HIGH și
- SDA trece de la statul HIGH la LOW.
Condiția de oprire este activată când
- SCL este setat la HIGH și
- SDA trece de la statul LOW la HIGH
Notă! Aceste informații sunt foarte utile pentru depanarea semnalelor.
Format date
Fiecare octet transmis liniei SDA este format din 8 biți, care formează un octet. Fiecare octet trebuie să fie urmat de un bit de confirmare.
Confirmare
Recunoașterea asigură o funcționare stabilă și corectă. În timpul impulsului de confirmare a ceasului, microcontrolerul trage pinul SDA HIGH în acest moment exact, dispozitivul periferic (procesorul audio) trage în jos (LOW) linia SDA.
Dispozitivul periferic (PT2258) este acum adresat și trebuie să genereze o confirmare după primirea unui octet, în caz contrar, linia SDA va rămâne la nivel înalt în timpul celui de-al nouălea (al 9-lea) impuls de ceas. Dacă se întâmplă acest lucru, transmițătorul principal va genera informații STOP pentru a întrerupe transferul.
Acest lucru clarifică necesitatea de a fi în loc pentru un transfer de date valid.
Selectarea adresei
Adresa I2C a acestui IC depinde de starea CODE1 (Pin nr.17) și CODE2 (Pin nr.4).
COD 1 (PIN nr. 17) |
COD 2 (PIN nr. 4) |
ADRESA HEX |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logică înaltă = 1
Logică scăzută = 0
Protocol de interfață
Protocolul de interfață constă din următoarele:
- Un bit Start
- Un octet de adresă a cipului
- ACK = Bit de recunoaștere
- Un octet de date
- Un bit Stop
Puțină menaj
După ce IC este pornit, trebuie să aștepte cel puțin 200 ms înainte de a transmite primul bit de date, în caz contrar, transferul de date poate eșua.
După întârziere, primul lucru de făcut este să ștergeți registrul trimițând „0XC0” vi pe linia I2C, acest lucru asigurând funcționarea corectă.
Pasul de mai sus șterge întregul registru, acum trebuie să setăm o valoare la registru, în caz contrar, registrul stochează valoarea gunoiului și obținem o ieșire pistruiată.
Pentru a asigura ajustări adecvate ale volumului, este necesar să trimiteți un multiplu de 10 dB urmat de un cod de 1 dB către atenuator în ordine, în caz contrar, IC-ul se poate comporta anormal. Diagrama de mai jos o clarifică mai mult.
Ambele metode de mai sus vor funcționa corect.
Pentru a asigura funcționarea corectă, asigurați-vă că viteza de transfer de date I2C nu depășește niciodată 100KHz.
Așa puteți transmite un octet către IC și atenua semnalul de intrare. Secțiunea de mai sus este pentru a afla cum funcționează IC-ul, dar, așa cum am spus mai devreme, vom folosi o bibliotecă Arduino pentru a comunica cu IC-ul care gestionează tot codul dur și trebuie doar să facem câteva apeluri de funcții.
Toate informațiile de mai sus sunt preluate din foaia tehnică, vă rugăm să o consultați pentru informații suplimentare.
Schema
Imaginea de mai sus arată schema de testare a circuitului de control al volumului bazat pe PT2258. Este preluat din foaia tehnică și modificat în funcție de necesități.
Pentru demonstrație, circuitul este construit pe o placă fără sudură cu ajutorul schemei prezentate mai sus.
Notă! Toate componentele sunt așezate cât mai aproape posibil pentru a reduce inductanța și rezistența capacității parazite.
Componente necesare
- PT2258 IC - 1
- Controller Arduino Nano - 1
- Breadboard generic - 1
- Borna cu șurub 5 mm x 3 - 1
- Buton de apăsare - 1
- Rezistor 4.7K, 5% - 2
- Rezistor 150K, 5% - 4
- Rezistor 10k, 5% - 2
- Condensator 10uF - 6
- Condensator 0.1uF - 1
- Sârme jumper - 10
Cod Arduino
Pentru simplitate, voi folosi o bibliotecă PT2258 de la GitHub, care este realizată de sunrutcon.
Aceasta este o bibliotecă foarte bine scrisă, de aceea am decis să o folosesc, dar, din moment ce este foarte veche, este un mic buggy și trebuie să o remediem înainte să o putem folosi.
Mai întâi, descărcați și extrageți biblioteca din depozitul GitHub.
Veți obține cele două fișiere de mai sus după extragere.
#include #include
Apoi, deschideți fișierul PT2258.cpp cu Editorul de text preferat, folosesc Notepad ++.
Puteți vedea că „w” din biblioteca de fire este cu litere mici, ceea ce este incompatibil cu cele mai recente versiuni Arduino și trebuie să-l înlocuiți cu majuscule „W”, asta este.
Codul complet pentru controlerul de volum PT2258 poate fi găsit la sfârșitul acestei secțiuni. Aici sunt explicate părți importante ale programului.
Începem codul prin includerea tuturor fișierelor biblioteci necesare. Biblioteca Wire este utilizată pentru a comunica între Arduino și PT2258. Biblioteca PT2258 conține toate informațiile critice de sincronizare I2C și confirmările. EzButton Biblioteca este folosit pentru a interfața cu push-butoane.
În loc să utilizați imagini de cod de mai jos, copiați toate instanțele de cod din fișierul de cod și faceți-le formatate așa cum făceam în alte proiecte
#include
Apoi, creați obiectele pentru cele două butoane și biblioteca PT2258 în sine.
PT2258 pt2258; ezButton button_1 (2); ezButton button_2 (4);
Apoi, definiți nivelul volumului. Acesta este nivelul implicit al volumului cu care va începe acest IC.
Volumul int = 40;
Apoi, inițiați UART și setați frecvența de ceas pentru magistrala I2C.
Serial.begin (9600); Wire.setClock (100000);
Este foarte important să setați ceasul I2C, în caz contrar, IC-ul nu va funcționa, deoarece frecvența maximă a ceasului acceptată de acest IC este de 100KHz.
Apoi, facem un pic de menaj cu o declarație if else pentru a ne asigura că IC comunică corect cu magistrala I2C.
If (! Pt2258.init ()) Serial.printIn („PT2258 Inițiat cu succes”); Else Serial.printIn („Nu a putut iniția PT2258”);
Apoi, setăm întârzierea de retragere pentru butoane.
Buton_1.setDebounceTime (50); Buton_2.setDebounceTime (50);
În cele din urmă, inițiați PT2258 IC configurându-l cu volumul implicit al canalului și numărul Pin.
/ * Inițierea PT cu volumul implicit și Pin * / Pt2258.setChannelVolume (volum, 4); Pt2258.setChannelVolume (volum, 5);
Aceasta marchează sfârșitul secțiunii Void Setup () .
În secțiunea Buclă , trebuie să apelăm funcția buclă din clasa butonului; este o normă de bibliotecă.
Buton_1.loop (); // Normele bibliotecii Button_2.loop (); // Normele bibliotecii
Secțiunea de mai jos dacă urmează să scadă volumul.
/ * dacă butonul 1 este apăsat dacă condiția este adevărată * / Dacă (butonul_1.ispressed ()) {Volum ++; // Mărirea contorului de volum. // Această instrucțiune if asigură că volumul nu depășește 79 If (volum> = 79) {Volume = 79; } Serial.print („volum:“); // imprimarea nivelului de volum Serial.printIn (volum); / * setați volumul pentru canalul 4 care se află în codul PIN 9 al PT2558 IC * / Pt2558.setChannelVolume (volum, 4); / * setați volumul pentru canalul 5 Care este codul PIN 10 al PT2558 IC * / Pt2558.setChannelVolume (volum, 5); }
Secțiunea de mai jos dacă va crește volumul.
// La fel se întâmplă și pentru butonul 2 If (button_2.isPressed ()) {Volume--; // această instrucțiune if asigură faptul că nivelul volumului nu coboară sub zero. Dacă (volum <= 0) Volum = 0; Serial.print („volum:“); Serial.printIn (volum); Pt2258.setChannelVolume (volum, 4); Pt2558.setChannelVolume (volum, 5); }
Testarea circuitului de control al volumului audio digital
Pentru a testa circuitul, a fost utilizat următorul aparat
- Un transformator care are un 13-0-13 Tap
- 2 difuzoare de 4Ω 20W ca sarcină.
- Sursă audio (telefon)
Într-un articol anterior, v-am arătat cum să faceți un amplificator audio simplu de 2x32 wați cu IC TDA2050, o voi folosi și pentru această demonstrație.
Am dezordonat potențiometrul mecanic și am scurtcircuitat două conductoare cu două cabluri jumper mici.
Acum, cu ajutorul a două butoane, volumul amplificatorului poate fi controlat.
Îmbunătățire suplimentară
Circuitul poate fi modificat în continuare pentru a-și îmbunătăți performanța. Îmbunătățiri precum circuitul pot fi aduse unui PCB pentru a elimina în continuare zgomotul generat de secțiunea digitală a CI. De asemenea, putem adăuga un filtru suplimentar pentru a respinge zgomotele de înaltă frecvență. De asemenea, verificați alte circuite de amplificare audio și alte proiecte legate de audio.
Sper că ți-a plăcut acest articol și ai învățat ceva nou din el. Dacă aveți vreo îndoială, puteți întreba în comentariile de mai jos sau puteți folosi forumurile noastre pentru discuții detaliate.