Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Hallo jongens, Dit is het tweede deel van mijn andere instructable (dat was veel moeilijk). In dit project heb ik de ADC en TIMERS op mijn Arduino gebruikt om het audiosignaal om te zetten in een PWM-signaal.
Dit is veel gemakkelijker dan mijn vorige Instructable, hier is de link van mijn eerste Instructable als je het wilt zien. koppeling
Om de theorie van audiosignaal, bitsnelheid, bitdiepte, bemonsteringssnelheid te begrijpen, kun je de theorie lezen in mijn laatste tutorial over Instructable. De link staat hierboven.
Stap 1: Dingen die we nodig hebben voor dit project (vereisten)
1. Arduino-bord (we kunnen elk bord (328, 2560) gebruiken, d.w.z. Mega, Uno, Mini, enz. Maar met specifieke verschillende pinnen)
2. PC met Arduino Studio.
3. Breadboard of Perfboard
4. Draden aansluiten
5. TC4420 (Mosfet-stuurprogramma of iets dergelijks)
6. Power Mosfet (N- of P-kanaal, bedraad dan dienovereenkomstig) (ik heb N-kanaal gebruikt)
7. Luidspreker of Flyback Transformer (Ja, je leest het goed!!)
8. Geschikte voeding (0-12V) (ik heb mijn eigen ATX-voeding gebruikt)
9. Koellichaam (ik heb het van mijn oude pc gehaald).
10. Een versterker (normale muziekversterker) of versterkercircuit.
Stap 2: Theorie van ADC naar PWM
Dus in dit project heb ik de ingebouwde ADC van Arduino gebruikt om gegevensbemonstering van een audiosignaal te doen.
ADC (Analog-To-Digital Converter) zoals de naam definieert, ADC zet analoog signaal om in digitale samples. En voor Arduino met een maximale diepte van 10 bit. Maar voor dit project gebruiken we 8-bits Sampling.
Bij het gebruik van de ADC van Arduino moeten we rekening houden met de ADC_reference Voltage.
Arduino Uno biedt 1.1V, 5V (interne referentie, die gedefinieerd kan worden in code) of een externe referentie (die we extern moeten toepassen op de AREF-pin).
Volgens mijn ervaring moet een minimum van 2,0 V worden gebruikt als referentiespanning om een goed resultaat van ADC te krijgen. Aangezien 1.1V niet goed ging, althans voor mij. (Persoonlijke ervaring)
*BELANGRIJK* *BELANGRIJK**BELANGRIJK**BELANGRIJK**BELANGRIJK*
We moeten een versterkt audiosignaal gebruiken van een versterker of een versterkercircuit met een piekspanning (max. spanning) van 5V
Omdat ik de interne spanningsreferentie van 5V heb ingesteld voor ons project. En ik gebruik een versterkt signaal met een normale versterker (muziekversterker), die meestal beschikbaar is in ons huishouden of je kunt er zelf een bouwen.
Dus nu het hoofdgedeelte. Sampling Rate, dat is hoeveel samples onze ADC per seconde neemt, meer is de conversieratio, beter zal het outputresultaat zijn, meer gelijkaardig zal de outputgolf zijn in vergelijking met input.
Dus we zullen in dit project een bemonsteringsfrequentie van 33,33 Khz gebruiken door de ADC-klok in te stellen op 500 Khz. Om te begrijpen hoe dit zo is, moeten we de ADC-timingpagina in de datasheet van de Atmega (328p) -chip zien.
We kunnen zien dat we 13,5 ADC-klokcycli nodig hebben om één monster te voltooien met automatische bemonstering. Met een frequentie van 500 Khz betekent dit 1/500 Khz=2uS voor één ADC-cyclus, wat betekent dat 13,5*2uS=27uS nodig is om een sample te voltooien wanneer autosampling wordt gebruikt. Door 3uS meer aan de microcontroller te geven (voor de zekerheid), waardoor een totaal van 30uS in totaal voor één monster wordt gemaakt.
Dus 1 Sample bij 30uS betekent 1/30uS=33,33 KSamples/S.
Om de Sampling-snelheid in te stellen, die afhankelijk is van TIMER0 van Arduino, omdat ADC auto-sampling-trigger daarvan afhankelijk is in ons geval, zoals je ook kunt zien in de code en datasheet, hebben we de waarde van OCR0A=60 gemaakt (Waarom zo ???)
Want volgens de formule in de datasheet.
frequentie (of hier Sample Rate)=Klokfrequentie van Arduino/Prescaler*Waarde van OCR0A (in ons geval)
Frequentie of bemonsteringsfrequentie die we willen = 33.33 KHz
Klokfrequentie = 16 MHz
Prescaler-waarde = 8 (in ons geval)
Waarde van OCR0A=wij willen vinden??
wat simpelweg OCR0A=60 geeft, ook in onze Arduino-code.
TIMER1 wordt gebruikt voor de draaggolf van een audiosignaal, en ik zal daar niet zoveel details op geven.
Dus dat was de korte theorie van het concept van ADC naar PWM met Arduino.
Stap 3: Schematisch:
Sluit alle componenten aan zoals weergegeven in het schema. Dus je hebt hier twee opties: -
1. Sluit een luidspreker aan (verbonden met 5V)
2. Sluit een Flyback-transformator aan (verbonden met 12V)
Ik heb beide geprobeerd. En beide werken redelijk goed.
*BELANGRIJK* *BELANGRIJK**BELANGRIJK**BELANGRIJK**BELANGRIJK*We moeten een versterkt audiosignaal gebruiken van een versterker of een versterkercircuit met een piekspanning (max. spanning) van 5V
Vrijwaring:-
*Ik raad aan om Flyback Transformer met voorzorg te gebruiken, omdat het gevaarlijk kan zijn omdat het hoge spanningen produceert. En ik ben niet aansprakelijk voor enige schade.*
Stap 4: Laatste test
Dus upload de gegeven code naar je Arduino en sluit het Amplified Signaal aan op de A0-pin.
En vergeet niet alle aardpennen op een gemeenschappelijke aarde aan te sluiten.
En geniet gewoon van het luisteren naar muziek.