- IC PT2258
- Hoe PT2258 IC werkt
- Het schema
- Componenten vereist
- Arduino-code
- Testen van het digitale audiovolumeregeling circuit
- Verdere verbetering
Een potentiometer is een mechanisch apparaat waarmee men de weerstand kan instellen op de gewenste waarde, waardoor de stroom die er doorheen gaat, verandert. Er zijn veel toepassingen voor een potentiometer, maar meestal wordt een potentiometer gebruikt als volumeregelaar voor audioversterkers.
Een potentiometer regelt niet de versterking van het signaal, maar vormt een spanningsdeler en daarom wordt het ingangssignaal verzwakt. Dus in dit project ga ik je laten zien hoe je je digitale volumeregelaar kunt bouwen met de IC PT2258 en deze kunt koppelen met een Arduino om het volume van een versterkercircuit te regelen. U kunt hier ook verschillende audiogerelateerde circuits controleren, waaronder VU-meter, toonregelcircuit, enz.
IC PT2258
Zoals ik eerder heb vermeld, is de PT2258 een IC die is gemaakt om te gebruiken als een 6- kanaals elektronische volumeregelaar, deze IC gebruikt CMOS-technologie die speciaal is ontworpen voor meerkanaals audio-videotoepassingen.
Dit IC biedt een I2C-besturingsinterface met een dempingsbereik van 0 tot -79dB bij 1dB / stap en wordt geleverd in een 20-pins DIP- of SOP-pakket.
Enkele van de basisfuncties zijn:
- 6-ingangs- en uitgangskanalen (voor 5.1 Home Audio-systemen)
- Selecteerbaar I2C-adres (voor Daisy-Chain-toepassing)
- Hoge kanaalscheiding (voor toepassing met weinig ruis)
- S / R-verhouding van> 100dB
- Bedrijfsspanning is 5 tot 9V
Hoe PT2258 IC werkt
Dit IC verzendt en ontvangt gegevens van de microcontroller via SCL- en SDA-lijnen. De SDA en SCL vormen de businterface. Deze lijnen moeten hoog worden getrokken door twee 4.7K weerstanden om een stabiele werking te garanderen.
Voordat we naar de daadwerkelijke hardwarebewerking gaan, is hier de gedetailleerde functionele beschrijving van de IC. Als je dit allemaal niet wilt weten, kun je dit deel overslaan, omdat het hele functionele deel wordt beheerd door de Arduino-bibliotheek.
Gegevensvalidatie
- De gegevens op de SDA-lijn worden als stabiel beschouwd wanneer het SCL-signaal HOOG is.
- De HOOG- en LAAG-toestanden van de SDA-lijn veranderen alleen wanneer de SCL LAAG is.
Start- en stopvoorwaarde
Een startvoorwaarde wordt geactiveerd wanneer
- de SCL is ingesteld op HIGH en
- SDA verschuift van HIGH naar LOW State.
De stopvoorwaarde wordt geactiveerd wanneer
- SCL is ingesteld op HIGH en
- SDA verschuift van LOW naar HIGH State
Notitie! Deze informatie is erg handig voor het debuggen van de signalen.
Data formaat
Elke byte die naar de SDA-lijn wordt verzonden, bestaat uit 8 bits die een byte vormen. Elke byte moet worden gevolgd door een bevestigingsbit.
Erkenning
Erkenning zorgt voor een stabiele en correcte werking. Tijdens de Bevestigingsklokpuls trekt de microcontroller de SDA-pin HIGH op precies dit moment dat het randapparaat (audioprocessor) de SDA-lijn naar beneden trekt (LOW).
Het randapparaat (PT2258) is nu geadresseerd en het moet een bevestiging genereren na ontvangst van een byte, anders blijft de SDA-lijn op hoog niveau tijdens de negende (9e) klokpuls. Als dit gebeurt, zal de masterzender STOP-informatie genereren om de overdracht af te breken.
Dat maakt het niet nodig om aanwezig te zijn voor een geldige gegevensoverdracht.
Adresselectie
Het I2C-adres van deze IC is afhankelijk van de status van CODE1 (pin nr. 17) en CODE2 (pin nr. 4).
CODE1 (pincode nr. 17) |
CODE2 (PIN nr. 4) |
HEX ADRES |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logica hoog = 1
Logisch laag = 0
Interface-protocol
Het interfaceprotocol bestaat uit het volgende:
- Een startbit
- Een chipadresbyte
- ACK = Bevestigingsbit
- A Gegevensbyte
- Een tussenstop
Een beetje huishouding
Nadat de IC is ingeschakeld, moet deze ten minste 200 ms wachten voordat de eerste databit wordt verzonden, anders kan de gegevensoverdracht mislukken.
Na de vertraging is het eerste wat u moet doen het register leegmaken door "0XC0" te verzenden via de I2C-lijn, dit zorgt voor een goede werking.
De bovenstaande stap wist het hele register, nu moeten we een waarde voor het register instellen, anders slaat het register de afvalwaarde op en krijgen we een sproeterige uitvoer.
Om een juiste volumeaanpassing te garanderen, is het noodzakelijk om een veelvoud van 10dB gevolgd door een 1dB-code achtereenvolgens naar de verzwakker te sturen, anders kan de IC zich abnormaal gedragen. Het onderstaande diagram verduidelijkt het meer.
Beide bovenstaande methoden zullen correct werken.
Om een goede werking te garanderen, moet u ervoor zorgen dat de I2C-gegevensoverdrachtsnelheid nooit hoger is dan 100 KHz.
Zo kun je een byte naar de IC sturen en het ingangssignaal verzwakken. Het bovenstaande gedeelte is om te leren hoe de IC werkt, maar zoals ik al eerder zei, gaan we een Arduino-bibliotheek gebruiken om te communiceren met de IC die alle harde code beheert, en we hoeven alleen maar een aantal functieaanroepen te doen.
Alle bovenstaande informatie is afkomstig uit de datasheet, raadpleeg deze voor meer informatie.
Het schema
De bovenstaande afbeelding toont het testschema van het op PT2258 gebaseerde volumeregelingcircuit. Het is uit het gegevensblad gehaald en naar behoefte aangepast.
Voor de demonstratie is het circuit geconstrueerd op een soldeerloos breadboard met behulp van het bovenstaande schema.
Notitie! Alle componenten zijn zo dicht mogelijk geplaatst om de inductantie en weerstand van de parasitaire capaciteit te verminderen.
Componenten vereist
- PT2258 IC - 1
- Arduino Nano-controller - 1
- Generieke Breadboard - 1
- Schroefaansluiting 5 mm x 3 - 1
- Drukknop - 1
- 4.7K weerstand, 5% - 2
- 150K weerstand, 5% - 4
- 10k weerstand, 5% - 2
- 10uF condensator - 6
- 0.1uF condensator - 1
- Doorverbindingsdraden - 10
Arduino-code
Voor de eenvoud ga ik een PT2258-bibliotheek van GitHub gebruiken, die is gemaakt door sunrutcon.
Dit is een zeer goed geschreven bibliotheek, daarom heb ik besloten om het te gebruiken, maar aangezien het erg oud is, is het een kleine bug en moeten we het repareren voordat we het kunnen gebruiken.
Download en pak eerst de bibliotheek uit de GitHub-repository.
U krijgt de bovenstaande twee bestanden na het uitpakken.
#include #include
Open vervolgens het PT2258.cpp- bestand met uw favoriete teksteditor, ik gebruik Notepad ++.
Je kunt zien dat de "w" van de draadbibliotheek in kleine letters staat, wat niet compatibel is met de nieuwste Arduino-versies, en je moet het vervangen door een hoofdletter "W", dat is alles.
De volledige code voor de PT2258-volumeregelaar vindt u aan het einde van dit gedeelte. Hier worden belangrijke onderdelen van het programma uitgelegd.
We starten de code door alle vereiste bibliothekenbestanden op te nemen. De Wire-bibliotheek wordt gebruikt om te communiceren tussen de Arduino en de PT2258. De PT2258-bibliotheek bevat alle kritieke I2C-timinginformatie en bevestigingen. De ezButton- bibliotheek wordt gebruikt om te communiceren met de drukknoppen.
In plaats van onderstaande codeafbeeldingen te gebruiken, kopieert u alle code-instanties uit het codebestand en maakt u ze opgemaakt zoals we dat vroeger in andere projecten deden
# omvatten
Maak vervolgens de objecten voor de twee knoppen en de PT2258-bibliotheek zelf.
PT2258 pt2258; ezButton-knop_1 (2); ezButton-knop_2 (4);
Definieer vervolgens het volumeniveau. Dit is het standaard volumeniveau waarmee deze IC begint.
Int volume = 40;
Start vervolgens de UART en stel de klokfrequentie in voor de I2C-bus.
Serial.begin (9600); Wire.setClock (100000);
Het is erg belangrijk om de I2C-klok in te stellen, anders werkt de IC niet omdat de maximale klokfrequentie die door deze IC wordt ondersteund 100 KHz is.
Vervolgens doen we een beetje huishouding met een if else- verklaring om ervoor te zorgen dat de IC correct communiceert met de I2C-bus.
If (! Pt2258.init ()) Serial.printIn ("PT2258 succesvol geïnitieerd"); Else Serial.printIn ("Kan PT2258 niet starten");
Vervolgens stellen we de debounce-vertraging voor de drukknoppen in.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Start ten slotte de PT2258 IC door deze in te stellen met het standaard kanaalvolume en pincode.
/ * PT starten met standaardvolume en Pin * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volume, 5);
Dit markeert het einde van de sectie Void Setup () .
In de Loop- sectie moeten we de loop-functie aanroepen vanuit de button class; het is een bibliotheeknorm.
Button_1.loop (); // Bibliotheeknormen Button_2.loop (); // Bibliotheeknormen
De onderstaande if- sectie is om het volume te verlagen.
/ * als knop 1 wordt ingedrukt als voorwaarde waar is * / If (button_1.ispressed ()) {Volume ++; // Verhogen van de volumeteller. // Deze if-instructie zorgt ervoor dat het volume niet hoger wordt dan 79 If (volume> = 79) {Volume = 79; } Serial.print ("volume:"); // afdrukken van het volumeniveau Serial.printIn (volume); / * stel het volume in voor kanaal 4 Dit is in PIN 9 van de PT2558 IC * / Pt2558.setChannelVolume (volume, 4); / * stel het volume in voor kanaal 5 Dit is de PIN 10 van de PT2558 IC * / Pt2558.setChannelVolume (volume, 5); }
De onderstaande if- sectie is om het volume te verhogen.
// Hetzelfde gebeurt voor de knop 2 If (button_2.isPressed ()) {Volume--; // this if statement zorgt ervoor dat het volumeniveau niet onder nul komt. If (volume <= 0) Volume = 0; Serial.print ("volume:"); Serial.printIn (volume); Pt2258.setChannelVolume (volume, 4); Pt2558.setChannelVolume (volume, 5); }
Testen van het digitale audiovolumeregeling circuit
Om de schakeling te testen, werd het volgende apparaat gebruikt
- Een transformator met een 13-0-13 Tap
- 2 4Ω 20W luidspreker als belasting.
- Audiobron (telefoon)
In een vorig artikel heb ik je laten zien hoe je een Simple 2x32 Watt Audio Amplifier maakt met TDA2050 IC, die ga ik ook voor deze demonstratie gebruiken.
Ik heb de mechanische potentiometer ontregeld en twee draden kortgesloten met twee kleine startkabels.
Nu kan met behulp van twee druktoetsen het volume van de versterker worden geregeld.
Verdere verbetering
Het circuit kan verder worden aangepast om de prestaties te verbeteren. Verbeteringen zoals het circuit kunnen worden aangebracht op een PCB om de ruis die wordt gegenereerd door het digitale gedeelte van de IC verder te elimineren. We kunnen ook een extra filter toevoegen om hoogfrequente geluiden te onderdrukken. Bekijk ook andere audioversterkercircuits en andere audiogerelateerde projecten.
Ik hoop dat je dit artikel leuk vond en er iets nieuws van hebt geleerd. Als u twijfelt, kunt u dit in de onderstaande opmerkingen stellen of onze forums gebruiken voor een gedetailleerde discussie.