- IC PT2258
- Sådan fungerer PT2258 IC
- Skematisk
- Komponenter, der kræves
- Arduino-kode
- Test af Digital Audio Volume Control Circuit
- Yderligere forbedring
Et potentiometer er en mekanisk enhed, hvor man kan indstille modstanden efter den ønskede værdi og dermed ændre strømmen, der passerer gennem den. Der findes mange applikationer til et potentiometer, men for det meste bruges et potentiometer som lydstyrkeregulering til lydforstærkere.
Et potentiometer styrer ikke signalets forstærkning, men det danner en spændingsdeler, og derfor dæmpes indgangssignalet. Så i dette projekt vil jeg vise dig, hvordan du bygger din Digital Volume Controller med IC PT2258 og interface den med en Arduino til at styre lydstyrken på et forstærkerkredsløb. Du kan også kontrollere forskellige lydrelaterede kredsløb her inklusive VU-måler, tonestyringskredsløb osv.
IC PT2258
Som jeg har nævnt tidligere, er PT2258 en IC, der er lavet til brug som en 6- kanals elektronisk volumenkontrol, denne IC bruger CMOS-teknologi specielt designet til flerkanals lyd-video applikationer.
Denne IC giver et I2C-kontrolinterface med et dæmpningsområde fra 0 til -79 dB ved 1 dB / trin og kommer i en 20-benet DIP- eller SOP-pakke.
Nogle af de grundlæggende funktioner inkluderer,
- 6-input- og outputkanaler (til 5.1 hjemmelydsystemer)
- Valgbar I2C-adresse (til Daisy-chain-applikation)
- Højkanalseparation (til anvendelse med lav støj)
- S / N-forhold på> 100 dB
- Driftsspænding er 5 til 9V
Sådan fungerer PT2258 IC
Denne IC overfører og modtager data fra mikrocontrolleren via SCL- og SDA-linjer. SDA og SCL udgør busgrænsefladen. Disse linjer skal trækkes højt af to 4,7K modstande for at sikre stabil drift.
Før vi går til den egentlige hardwaredrift, her er den detaljerede funktionelle beskrivelse af IC. Hvis du ikke vil vide alt dette, kan du springe denne del over, fordi al den funktionelle del administreres af Arduino-biblioteket.
Data validering
- Dataene på SDA-linjen betragtes som stabile, når SCL-signalet er HIGH.
- Høj- og lavtilstandene på SDA-linjen ændres kun, når SCL er LAV.
Start og stop-tilstand
En starttilstand aktiveres, når
- SCL er indstillet til HIGH og
- SDA skifter fra HIGH til LOW State.
Stoptilstanden er aktiveret, når
- SCL er indstillet til HIGH og
- SDA skifter fra LAV til HIGH-tilstand
Bemærk! Denne information er meget nyttig til fejlretning af signalerne.
Dataformat
Hver byte, der transmitteres til SDA Line, består af 8 bit, der danner en byte. Hver byte skal efterfølges af en kvitteringsbit.
Anerkendelse
Bekræftelse sikrer stabil og korrekt drift. Under kvitteringsurimpulsen trækker mikrokontrolleren SDA-stiften HIGH i dette nøjagtige øjeblik, hvor den perifere enhed (lydprocessor) trækker ned (LAV) SDA-linjen.
Den perifere enhed (PT2258) er nu adresseret, og den skal generere en kvittering efter modtagelse af en byte, ellers forbliver SDA-linjen på højt niveau under den niende (9.) urpuls. Hvis dette sker, genererer hovedsenderen STOP-information for at afbryde overførslen.
Det fjerner, at der ikke er behov for en gyldig dataoverførsel.
Adressevalg
I2C-adressen på denne IC afhænger af tilstanden for CODE1 (pin nr. 17) og CODE2 (pin nr. 4).
KODE1 (PIN-kode 17) |
KODE2 (PIN-kode 4) |
HEX-ADRESSE |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logik høj = 1
Logik lav = 0
Interface protokol
Interfaceprotokollen består af følgende:
- En startbit
- En chipadressebyte
- ACK = Bekræft bit
- En databyte
- En stopbit
Lidt husholdning
Når IC'en er tændt, skal den vente mindst 200 ms, før den første databit transmitteres, ellers kan dataoverførslen mislykkes.
Efter forsinkelsen er den første ting at gøre, at rydde registeret ved at sende “0XC0” via I2C-linjen, dette sikrer korrekt drift.
Ovenstående trin rydder hele registeret, nu skal vi indstille en værdi til registret, ellers gemmer registret skraldværdi, og vi får en fregnet output.
For at sikre korrekt lydstyrkejustering er det nødvendigt at sende et multiplum af 10dB efterfulgt af en 1dB-kode til dæmperen i rækkefølge, ellers kan ICen opføre sig unormalt. Diagrammet nedenfor tydeliggør det mere.
Begge ovenstående metoder fungerer korrekt.
For at sikre korrekt drift skal du sørge for, at I2C-dataoverførselshastigheden aldrig overstiger 100 KHz.
Sådan kan du sende en byte til IC og dæmpe indgangssignalet. Ovenstående afsnit er at lære, hvordan IC fungerer, men som jeg har sagt tidligere, skal vi bruge et Arduino-bibliotek til at kommunikere med IC'en, der administrerer al den hårde kode, og vi skal bare foretage nogle funktionsopkald.
Alle ovenstående oplysninger er hentet fra databladet. Se det for yderligere information.
Skematisk
Ovenstående billede viser testskemaet for det PT2258-baserede volumenkontrolkredsløb. Det er taget fra databladet og ændret efter behov.
Til demonstrationen er kredsløbet konstrueret på et loddet brødbræt ved hjælp af skematisk vist ovenfor.
Bemærk! Alle komponenter er placeret så tæt som muligt for at reducere parasitisk kapacitansinduktans og modstand.
Komponenter, der kræves
- PT2258 IC - 1
- Arduino Nano Controller - 1
- Generisk brødplade - 1
- Skrueterminal 5mm x 3-1
- Trykknap - 1
- 4.7K modstand, 5% - 2
- 150K modstand, 5% - 4
- 10k modstand, 5% - 2
- 10uF kondensator - 6
- 0,1 uF kondensator - 1
- Jumper Wires - 10
Arduino-kode
For nemheds skyld skal jeg bruge et PT2258-bibliotek fra GitHub, som er lavet af sunrutcon.
Dette er et meget velskrevet bibliotek, hvorfor jeg har besluttet at bruge det, men da det er meget gammelt, er det lidt buggy, og vi er nødt til at ordne det, før vi kan bruge det.
Først skal du downloade og udtrække biblioteket fra GitHub-arkivet.
Du får de ovennævnte to filer efter ekstraktion.
# inkluderer # inkluderer
Åbn derefter PT2258.cpp- filen med din yndlings Teksteditor, jeg bruger Notepad ++.
Du kan se, at "w" i ledningsbiblioteket er med små bogstaver, hvilket er uforeneligt med de nyeste Arduino-versioner, og du skal udskifte det med et låg "W", det er det.
Komplet kode til PT2258 Volume Controller findes i slutningen af dette afsnit. Her forklares vigtige dele af programmet.
Vi starter koden med at inkludere alle de nødvendige biblioteksfiler. Wire-biblioteket bruges til at kommunikere mellem Arduino og PT2258. PT2258-biblioteket indeholder alle de kritiske I2C-timingoplysninger og kvitteringer. Den ezButton biblioteket bruges til at interface med trykknapper.
I stedet for at bruge nedenstående kodebilleder skal du kopiere alle kodeinstanser fra kodefilen og gøre dem formaterede som vi plejede at gøre i andre projekter
#omfatte
Lav derefter objekterne til de to knapper og selve PT2258-biblioteket.
PT2258 pt2258; ezButton-knap_1 (2); ezButton-knap_2 (4);
Dernæst definerer lydstyrken. Dette er standardvolumeniveauet, som denne IC starter med.
Int volumen = 40;
Start derefter UART, og indstil urfrekvensen for I2C-bussen.
Serial.begin (9600); Wire.setClock (100000);
Det er meget vigtigt at indstille I2C-uret, ellers fungerer IC'en ikke, fordi den maksimale urfrekvens, der understøttes af denne IC, er 100KHz.
Dernæst gør vi lidt husholdning med en hvis ellers erklæring for at sikre, at IC'en kommunikerer ordentligt med I2C-bussen.
Hvis (! Pt2258.init ()) Serial.printIn (“PT2258 startet korrekt”); Else Serial.printIn (“Kunne ikke starte PT2258”);
Dernæst indstiller vi forsinkelsen for afvisning af trykknapperne.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Endelig skal du starte PT2258 IC ved at indstille den med standardkanalvolumen og pin-nummer.
/ * Inicierer PT med standardvolumen og Pin * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volumen, 5);
Dette markerer afslutningen af Void Setup () -afsnittet.
I sektionen Loop skal vi kalde loop-funktionen fra knapklassen; det er en biblioteksnorm.
Button_1.loop (); // Biblioteksnormer Button_2.loop (); // Biblioteksnormer
Nedenstående, hvis sektionen skal sænke lydstyrken.
/ * hvis der trykkes på knap 1, hvis betingelsen er sand * / If (button_1.ispressed ()) {Volume ++; // Forøgelse af lydstyrketælleren. // Dette hvis udsagn sikrer, at lydstyrken ikke går over 79 Hvis (lydstyrke> = 79) {Volumen = 79; } Serial.print (“volume:“); // udskrivning af lydstyrkeniveau Serial.printIn (lydstyrke); / * indstil lydstyrken for kanal 4, som er i PIN 9 i PT2558 IC * / Pt2558.setChannelVolume (lydstyrke, 4); / * indstil lydstyrken for kanal 5, som er PIN 10 for PT2558 IC * / Pt2558.setChannelVolume (lydstyrke, 5); }
Nedenstående hvis afsnit skal øge lydstyrken.
// Det samme sker for knappen 2 Hvis (button_2.isPressed ()) {Volume--; // dette hvis udsagn sikrer, at lydstyrkeniveauet ikke går under nul. Hvis (volumen <= 0) Volumen = 0; Serial.print (“volume:“); Serial.printIn (volumen); Pt2258.setChannelVolume (volumen, 4); Pt2558.setChannelVolume (volumen, 5); }
Test af Digital Audio Volume Control Circuit
For at teste kredsløbet blev følgende apparat brugt
- En transformer, der har en 13-0-13 tap
- 2 4Ω 20W højttaler som belastning.
- Lydkilde (telefon)
I en tidligere artikel har jeg vist dig, hvordan du laver en simpel 2x32 Watt lydforstærker med TDA2050 IC, jeg vil også bruge det til denne demonstration.
Jeg har forstyrret det mekaniske potentiometer og kortsluttet to ledninger med to små jumperkabler.
Nu, ved hjælp af to trykknapper, kan forstærkerens lydstyrke styres.
Yderligere forbedring
Kredsløbet kan ændres yderligere for at forbedre dets ydeevne. Forbedringer som kredsløbet kan foretages til et printkort for yderligere at eliminere støj genereret af den digitale sektion af IC. Vi kan også tilføje et ekstra filter for at afvise højfrekvente lyde. Tjek også andre lydforstærkerkredsløb og andre lydrelaterede projekter.
Jeg håber, du kunne lide denne artikel og lærte noget nyt ud af den. Hvis du er i tvivl, kan du spørge i kommentarerne nedenfor eller bruge vores fora til detaljeret diskussion.