- IC PT2258
- Hvordan fungerer PT2258 IC
- Skjematisk
- Komponenter kreves
- Arduino-kode
- Testing av digital lydvolumkontrollkrets
- Ytterligere forbedring
Et potensiometer er et mekanisk apparat som bruker en til å sette motstanden i henhold til ønsket verdi, og dermed endre strømmen som går gjennom den. Det finnes mange applikasjoner for et potensiometer, men stort sett brukes et potensiometer som en volumkontroller for lydforsterkere.
Et potensiometer styrer ikke signalets forsterkning, men det danner en spenningsdeler, og det blir derfor inngangssignalet dempes. Så i dette prosjektet skal jeg vise deg hvordan du bygger din Digital Volume Controller med IC PT2258 og grensesnitt den med en Arduino for å kontrollere volumet på en forsterkerkrets. Du kan også sjekke forskjellige lydrelaterte kretser her, inkludert VU-meter, tonekontrollkrets osv.
IC PT2258
Som jeg har nevnt tidligere, er PT2258 en IC laget for å bruke som en 6- kanals elektronisk volumkontroller, denne IC bruker CMOS-teknologi spesielt designet for flerkanals lyd-videoapplikasjoner.
Denne IC gir et I2C-kontrollgrensesnitt med et dempningsområde fra 0 til -79 dB ved 1 dB / trinn og kommer i en 20-pinners DIP- eller SOP-pakke.
Noen av de grunnleggende funksjonene inkluderer,
- 6-inngangs- og utgangskanaler (for 5.1 hjemmelydsystemer)
- Valgbar I2C-adresse (for applikasjon av Daisy-chain)
- Separasjon med høy kanal (for applikasjon med lite støy)
- S / N-forhold på> 100 dB
- Driftsspenning er 5 til 9V
Hvordan fungerer PT2258 IC
Denne IC overfører og mottar data fra mikrokontrolleren via SCL- og SDA-linjer. SDA og SCL utgjør bussgrensesnittet. Disse linjene må trekkes høyt av to 4,7K motstander for å sikre stabil drift.
Før vi går til den faktiske maskinvaredriften, er det en detaljert funksjonell beskrivelse av IC. Hvis du ikke vil vite alt dette, kan du hoppe over denne delen fordi hele den funksjonelle delen administreres av Arduino-biblioteket.
Datavalidering
- Dataene på SDA-linjen anses å være stabile når SCL-signalet er HØYT.
- HIGH og LOW-tilstandene til SDA-linjen endres bare når SCL er LOW.
Start og stopp tilstand
En starttilstand aktiveres når
- SCL er satt til HIGH og
- SDA skifter fra HIGH til LOW State.
Stopptilstanden er aktivert når
- SCL er satt til HØY og
- SDA skifter fra LAV til HØY tilstand
Merk! Denne informasjonen er veldig nyttig for feilsøking av signalene.
Dataformat
Hver byte som overføres til SDA Line består av 8 bits, som danner en byte. Hver byte må følges av en kvitteringsbit.
Bekreftelse
Bekreftelse sikrer stabil og riktig drift. Under kvitteringsklokkepulsen trekker mikrokontrolleren SDA-pinnen HØYT i akkurat dette øyeblikket den eksterne enheten (lydprosessor) trekker ned (LAV) SDA-linjen.
Den perifere enheten (PT2258) er nå adressert, og den må generere en bekreftelse etter å ha mottatt en byte, ellers vil SDA-linjen forbli på høyt nivå under den niende (9.) klokkepulsen. Hvis dette skjer, vil hovedsenderen generere STOP-informasjon for å avbryte overføringen.
Dette fjerner ikke behovet for å være på plass for en gyldig dataoverføring.
Adressevalg
I2C-adressen til denne IC avhenger av tilstanden til CODE1 (pin nr. 17) og CODE2 (pin nr. 4).
KODE1 (PIN-kode 17) |
KODE2 (PIN-kode 4) |
HEKS ADRESSE |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logikk høy = 1
Logikk lav = 0
Grensesnittprotokoll
Grensesnittprotokollen består av følgende:
- En startbit
- En chipadressebyte
- ACK = Bekreft bit
- En databyte
- En stoppbit
Litt rengjøring
Etter at IC-en er slått på, må den vente minst 200 ms før den første databiten overføres, ellers kan dataoverføringen mislykkes.
Etter forsinkelsen er det første å gjøre å tømme registeret ved å sende “0XC0” vi I2C-linjen, dette sikrer riktig drift.
Ovennevnte trinn tømmer hele registeret, nå må vi sette en verdi til registeret, ellers lagrer registeret søppelverdi, og vi får en fregnet utgang.
For å sikre riktige volumjusteringer er det nødvendig å sende et multiplum av 10dB etterfulgt av en 1dB-kode til demperen i rekkefølge, ellers kan ICen oppføre seg unormalt. Diagrammet nedenfor klargjør det mer.
Begge de ovennevnte metodene vil fungere skikkelig.
For å sikre riktig drift, må du sørge for at I2C-dataoverføringshastigheten aldri overstiger 100 KHz.
Slik kan du overføre en byte til IC og dempe inngangssignalet. Ovennevnte avsnitt er å lære hvordan IC fungerer, men som jeg har sagt tidligere, skal vi bruke et Arduino-bibliotek til å kommunisere med IC som administrerer all hardkoden, og vi trenger bare å ringe noen funksjoner.
All den ovennevnte informasjonen er hentet fra databladet, se den for ytterligere informasjon.
Skjematisk
Ovenstående bilde viser testskjemaet til den PT2258-baserte volumkontrollkretsen. Det er hentet fra databladet og endret etter behov.
For demonstrasjonen er kretsen konstruert på et loddfritt brødbrett ved hjelp av skjemaet vist ovenfor.
Merk! Alle komponentene er plassert så tett som mulig for å redusere parasittisk kapasitansinduktans og motstand.
Komponenter kreves
- PT2258 IC - 1
- Arduino Nano Controller - 1
- Generisk brødbrett - 1
- Skruterminal 5mm x 3-1
- Trykknapp - 1
- 4.7K motstand, 5% - 2
- 150K motstand, 5% - 4
- 10k motstand, 5% - 2
- 10uF kondensator - 6
- 0.1uF kondensator - 1
- Jumper Wires - 10
Arduino-kode
For enkelhets skyld skal jeg bruke et PT2258-bibliotek fra GitHub, som er laget av sunrutcon.
Dette er et veldig godt skrevet bibliotek, det er derfor jeg har bestemt meg for å bruke det, men siden det er veldig gammelt, er det litt buggy, og vi må fikse det før vi kan bruke det.
Først laster du ned og trekker ut biblioteket fra GitHub-depotet.
Du får de to ovennevnte filene etter ekstraksjon.
# inkluderer # inkluderer
Deretter åpner du PT2258.cpp- filen med din favoritt Teksteditor , jeg bruker Notepad ++.
Du kan se at "w" i trådbiblioteket er med små bokstaver, noe som er inkompatibelt med de nyeste Arduino-versjonene.
Komplett kode for PT2258 volumkontroller finner du på slutten av denne delen. Her blir viktige deler av programmet forklart.
Vi starter koden med å inkludere alle nødvendige biblioteksfiler. Wire-biblioteket brukes til å kommunisere mellom Arduino og PT2258. PT2258-biblioteket inneholder all kritisk I2C-tidsinformasjon og bekreftelser. Den ezButton biblioteket brukes til å samhandle med trykknappene.
I stedet for å bruke kodebildene nedenfor, kopier alle kodeforekomstene fra kodefilen og lag dem som vi pleide å gjøre i andre prosjekter
#inkludere
Deretter lager du objektene til de to knappene og selve PT2258-biblioteket.
PT2258 pt2258; ezButton button_1 (2); ezButton-knapp_2 (4);
Deretter definerer du volumnivået. Dette er standard volumnivå som denne IC begynner med.
Int volum = 40;
Deretter starter du UART, og still inn klokkefrekvensen for I2C-bussen.
Serial.begin (9600); Wire.setClock (100000);
Det er veldig viktig å stille inn I2C-klokken, ellers vil ikke IC fungere fordi den maksimale klokkefrekvensen som støttes av denne IC er 100 KHz.
Deretter gjør vi litt rengjøring med en hvis annet uttalelse for å sikre at IC kommuniserer riktig med I2C-bussen.
Hvis (! Pt2258.init ()) Serial.printIn (“PT2258 startet vellykket”); Else Serial.printIn (“Kunne ikke starte PT2258”);
Deretter setter vi utsettelsesforsinkelsen for trykknappene.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Til slutt, start PT2258 IC ved å sette den opp med standard kanalvolum og pin-nummer.
/ * Iniciating PT med standard volum og Pin * / Pt2258.setChannelVolume (volum, 4); Pt2258.setChannelVolume (volum, 5);
Dette markerer slutten på Void Setup () -delen.
I Loop- delen må vi ringe loop-funksjonen fra knappeklassen; det er en biblioteksnorm.
Button_1.loop (); // Biblioteksnormer Button_2.loop (); // Biblioteksnormer
Nedenfor hvis avsnittet skal redusere volumet.
/ * hvis knapp 1 trykkes inn hvis tilstanden er oppfylt * / If (button_1.ispressed ()) {Volume ++; // Øke volumtelleren. // Dette hvis uttalelsen sikrer at volumet ikke går over 79 If (volum> = 79) {Volum = 79; } Serial.print (“volum:“); // skrive ut volumnivået Serial.printIn (volum); / * still volumet for kanal 4 som er i PIN 9 i PT2558 IC * / Pt2558.setChannelVolume (volum, 4); / * still volumet for kanal 5 Hvilken er PIN 10 for PT2558 IC * / Pt2558.setChannelVolume (volum, 5); }
Nedenfor hvis avsnittet skal øke volumet.
// Det samme skjer for knapp 2 Hvis (button_2.isPressed ()) {Volum--; // dette hvis uttalelsen sikrer at volumnivået ikke går under null. Hvis (volum <= 0) Volum = 0; Serial.print (“volum:“); Serial.printIn (volum); Pt2258.setChannelVolume (volum, 4); Pt2558.setChannelVolume (volum, 5); }
Testing av digital lydvolumkontrollkrets
For å teste kretsen ble følgende apparat brukt
- En transformator som har en 13-0-13 trykk
- 2 4Ω 20W høyttaler som belastning.
- Lydkilde (telefon)
I en tidligere artikkel har jeg vist deg hvordan du lager en enkel 2x32 Watt lydforsterker med TDA2050 IC, jeg skal også bruke den til denne demonstrasjonen.
Jeg har forstyrret det mekaniske potensiometeret og kortsluttet to ledninger med to små jumperkabler.
Nå, ved hjelp av to trykknapper, kan volumet på forsterkeren styres.
Ytterligere forbedring
Kretsen kan modifiseres ytterligere for å forbedre ytelsen. Forbedringer som kretsen kan gjøres på et PCB for ytterligere å eliminere støyen som genereres av den digitale delen av IC. Vi kan også legge til et ekstra filter for å avvise høyfrekvente lyder. Ta også en titt på andre lydforsterkerkretser og andre lydrelaterte prosjekter.
Jeg håper du likte denne artikkelen og lærte noe nytt ut av den. Hvis du er i tvil, kan du spørre i kommentarene nedenfor eller bruke forumene våre for detaljert diskusjon.