- IC PT2258
- Hur PT2258 IC fungerar
- Schemat
- Komponenter krävs
- Arduino-kod
- Testa den digitala ljudvolymkontrollkretsen
- Ytterligare förbättring
En potentiometer är en mekanisk anordning med vilken man kan ställa in motståndet efter önskat värde och därmed ändra strömmen som passerar genom den. Det finns många applikationer för en potentiometer, men mest en potentiometer används som en volymkontroll för ljudförstärkare.
En potentiometer styr inte signalens förstärkning, men den bildar en spänningsdelare och därför dämpas ingångssignalen. Så i det här projektet ska jag visa dig hur du bygger din Digital Volume Controller med IC PT2258 och gränssnitt den med en Arduino för att styra volymen på en förstärkarkrets. Du kan också kontrollera olika ljudrelaterade kretsar här inklusive VU-mätare, tonstyrkrets etc.
IC PT2258
Som jag har nämnt tidigare är PT2258 en IC gjord för att användas som en 6- kanals elektronisk volymkontroll, denna IC använder CMOS-teknik speciellt utformad för flerkanaliga ljud-videoapplikationer.
Denna IC ger ett I2C-kontrollgränssnitt med ett dämpningsområde från 0 till -79 dB vid 1 dB / steg och kommer i ett 20-stifts DIP- eller SOP-paket.
Några av de grundläggande funktionerna inkluderar,
- 6-ingångs- och utgångskanaler (för 5.1-hemljudsystem)
- Valbar I2C-adress (för applikation med Daisy-chain)
- Högkanalseparation (för applikation med låg ljudnivå)
- S / N-förhållande> 100dB
- Driftspänningen är 5 till 9V
Hur PT2258 IC fungerar
Denna IC överför och tar emot data från mikrokontrollern via SCL- och SDA-linjer. SDA och SCL utgör bussgränssnittet. Dessa linjer måste dras högt av två 4,7K motstånd för att säkerställa stabil drift.
Innan vi går till den faktiska hårdvaruoperationen, här är den detaljerade funktionella beskrivningen av IC. om du inte vill veta allt detta kan du hoppa över den här delen eftersom hela den funktionella delen hanteras av Arduino-biblioteket.
Datavalidering
- Data på SDA-linjen anses vara stabil när SCL-signalen är HÖG.
- Lägena HÖG och LÅG på SDA-linjen ändras endast när SCL är LÅG.
Start- och stoppvillkor
Ett startvillkor aktiveras när
- SCL är inställt på HÖG och
- SDA skiftar från HIGH till LOW.
Stoppvillkoret är aktiverat när
- SCL är inställt på HÖG och
- SDA skiftar från LOW till HIGH State
Notera! Denna information är mycket användbar för felsökning av signalerna.
Dataformat
Varje byte som sänds till SDA-linjen består av 8 bitar som bildar en byte. Varje byte måste följas av en bekräftelsebit.
Bekräftelse
Bekräftelse säkerställer stabil och korrekt drift. Under bekräftelseklockpulsen drar mikrokontrollen SDA-stiftet HÖG i detta exakta ögonblick då den perifera enheten (ljudprocessor) drar ner (LÅG) SDA-linjen.
Den perifera enheten (PT2258) adresseras nu och den måste generera en bekräftelse efter mottagande av en byte, annars kommer SDA-linjen att förbli på hög nivå under den nionde (nionde) klockpulsen. Om detta händer genererar huvudsändaren STOP-information för att avbryta överföringen.
Det rensar behovet av att vara på plats för en giltig dataöverföring.
Adressval
I2C-adressen för denna IC beror på tillståndet för CODE1 (stift nr 17) och CODE2 (stift nr 4).
KOD1 (PIN-nr 17) |
CODE2 (PIN nr 4) |
HEX-ADRESS |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logik hög = 1
Logik låg = 0
Gränssnittsprotokoll
Gränssnittsprotokollet består av följande:
- En startbit
- En chipadressbyte
- ACK = Bekräfta bit
- En databytes
- En stoppbit
Lite städning
När IC: n är påslagen måste den vänta minst 200 ms innan den första databiten sänds, annars kan dataöverföringen misslyckas.
Efter förseningen är det första att göra att rensa registret genom att skicka “0XC0” via I2C-linjen, detta säkerställer korrekt drift.
Ovanstående steg rensar hela registret, nu måste vi ställa in ett värde i registret, annars lagrar registret skräpvärde och vi får en fräklig utdata.
För att säkerställa korrekt volymjustering är det nödvändigt att skicka en multipel av 10 dB följt av en 1 dB-kod till dämparen i sekvens, annars kan IC fungera onormalt. Diagrammet nedan klargör det mer.
Båda ovanstående metoder fungerar korrekt.
För att säkerställa korrekt drift, se till att I2C-dataöverföringshastigheten aldrig överstiger 100 kHz.
Det är så du kan överföra en byte till IC: n och dämpa insignalen. Ovanstående avsnitt är att lära sig hur IC fungerar, men som jag sa tidigare kommer vi att använda ett Arduino-bibliotek för att kommunicera med IC som hanterar all hård kod, och vi behöver bara ringa några funktionssamtal.
All ovanstående information hämtas från databladet, se den för mer information.
Schemat
Ovanstående bild visar testschemat för den PT2258-baserade volymkontrollkretsen. Det tas från databladet och modifieras efter behov.
För demonstrationen är kretsen konstruerad på ett lödfritt brädbräda med hjälp av den schematiska bilden ovan.
Notera! Alla komponenter är placerade så nära som möjligt för att reducera parasitisk kapacitansinduktans och motstånd.
Komponenter krävs
- PT2258 IC - 1
- Arduino Nano Controller - 1
- Generisk brödbräda - 1
- Skruvplint 5mm x 3-1
- Tryckknapp - 1
- 4.7K Motstånd, 5% - 2
- 150K motstånd, 5% - 4
- 10k motstånd, 5% - 2
- 10uF kondensator - 6
- 0.1uF kondensator - 1
- Bygeltrådar - 10
Arduino-kod
För enkelhetens skull ska jag använda ett PT2258-bibliotek från GitHub, som är tillverkat av sunrutcon.
Det här är ett mycket välskrivet bibliotek, det är därför jag har bestämt mig för att använda det, men eftersom det är väldigt gammalt är det lite buggy och vi måste fixa det innan vi kan använda det.
Ladda ned och extrahera först biblioteket från GitHub-arkivet.
Du får ovanstående två filer efter extraktion.
# inkludera # inkludera
Därefter öppnar PT2258.cpp fil med din favorit texteditor, jag använder Notepad ++.
Du kan se att "w" i trådbiblioteket är med små bokstäver, vilket är oförenligt med de senaste Arduino-versionerna, och du måste byta ut det med en keps "W", det är det.
Komplett kod för PT2258 Volymkontroll finns i slutet av detta avsnitt. Här förklaras viktiga delar av programmet.
Vi startar koden med att inkludera alla biblioteksfiler som krävs. Wire-biblioteket används för att kommunicera mellan Arduino och PT2258. PT2258-biblioteket innehåller all kritisk I2C-tidsinformation och bekräftelser. Den ezButton biblioteket används för att kommunicera med tryckknapparna.
Istället för att använda nedanstående kodbilder kopierar du alla kodinstanser från kodfilen och gör dem formaterade som vi brukade göra i andra projekt
#omfatta
Gör sedan objekten för de två knapparna och själva PT2258-biblioteket.
PT2258 pt2258; ezButton-knapp_1 (2); ezButton-knapp_2 (4);
Därefter definierar du volymnivån. Detta är standardvolymnivån som denna IC börjar med.
Int volym = 40;
Starta sedan UART och ställ in klockfrekvensen för I2C-bussen.
Serial.begin (9600); Wire.setClock (100000);
Det är väldigt viktigt att ställa in I2C-klockan, annars fungerar inte IC eftersom den maximala klockfrekvensen som stöds av denna IC är 100 KHz.
Därefter gör vi lite städning med ett if-annat uttalande för att säkerställa att IC kommunicerar ordentligt med I2C-bussen.
Om (! Pt2258.init ()) Serial.printIn (“PT2258 initierades framgångsrikt”); Annars Serial.printIn (“Det gick inte att initiera PT2258”);
Därefter ställer vi in avstängningsfördröjningen för tryckknapparna.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Slutligen, initiera PT2258 IC genom att ställa in den med standardkanalvolym och PIN-nummer.
/ * Inaktivera PT med standardvolym och Pin * / Pt2258.setChannelVolume (volym, 4); Pt2258.setChannelVolume (volym, 5);
Detta markerar slutet på Void Setup () .
I avsnittet Loop måste vi anropa loopfunktionen från knappklassen; det är en biblioteksnorm.
Button_1.loop (); // Biblioteksnormer Button_2.loop (); // Biblioteksnormer
Nedanstående om avsnitt är att sänka volymen.
/ * om knapp 1 trycks in om villkoret är sant * / If (button_1.ispressed ()) {Volume ++; // Öka volymräknaren. // Detta om uttalande säkerställer att volymen inte går över 79 If (volym> = 79) {Volym = 79; } Serial.print (“volym:“); // skriva ut volymnivån Serial.printIn (volym); / * ställa in volymen för kanal 4 som finns i PIN 9 i PT2558 IC * / Pt2558.setChannelVolume (volym, 4); / * ställa in volymen för kanal 5 Vilken är PIN 10 för PT2558 IC * / Pt2558.setChannelVolume (volym, 5); }
Nedanstående om avsnitt är att öka volymen.
// Detsamma händer för knappen 2 Om (button_2.isPressed ()) {Volym--; // detta om uttalande säkerställer att volymnivån inte går under noll. Om (volym <= 0) Volym = 0; Serial.print (“volym:“); Serial.printIn (volym); Pt2258.setChannelVolume (volym, 4); Pt2558.setChannelVolume (volym, 5); }
Testa den digitala ljudvolymkontrollkretsen
För att testa kretsen användes följande apparat
- En transformator som har en 13-0-13 Tap
- 2 4Ω 20W högtalare som belastning.
- Ljudkälla (telefon)
I en tidigare artikel har jag visat dig hur man gör en enkel 2x32 Watt ljudförstärkare med TDA2050 IC, jag kommer också att använda den för denna demonstration.
Jag har stört den mekaniska potentiometern och kortslutit två ledningar med två små bygelkablar.
Nu, med hjälp av två tryckknappar, kan förstärkarens volym kontrolleras.
Ytterligare förbättring
Kretsen kan modifieras ytterligare för att förbättra dess prestanda. Förbättringar som kretsen kan göras till ett kretskort för att ytterligare eliminera det brus som genereras av den digitala delen av IC. Vi kan också lägga till ett extra filter för att avvisa högfrekventa ljud. Kolla också in andra ljudförstärkarkretsar och andra ljudrelaterade projekt.
Jag hoppas att du gillade den här artikeln och lärde dig något nytt av den. Om du är osäker kan du fråga i kommentarerna nedan eller använda våra forum för detaljerad diskussion.