Ich versuche, eine einfache Audioschaltung zu bauen. Das Ziel besteht darin, .wav-Dateien in Form von Hex-Dateien im Flash-Speicher des ATMEGA328P zu speichern und das Audio mithilfe eines MCP4921-DAC und eines LM386N-1-Operationsverstärkers über einen kleinen Lautsprecher auszugeben.
Ich habe einen Teil meines EAGLE-Schemas hochgeladen. Der Wert von AMP_FIL_R beträgt tatsächlich 0,05 uF anstelle der im Eagle-Schema angegebenen 100 uF, und dies entspricht dem LM386-Datenblatt. Außerdem ist der Code, den ich ausführe, angehängt. Ich habe mit dem Code von hier angefangen und etwas Code hinzugefügt, um meine Hex-Datei abzuspielen.
Das Problem: Obwohl ich in der Lage bin, ein Miauen auszugeben, kommt es mit viel Rauschen heraus. Es klingt also so, als wäre der endgültige Klang, den ich eigentlich wünsche, vollständig vorhanden, aber es werden hochfrequente Geräusche hinzugefügt.
Die Frage: Was könnte dieses Geräusch verursachen? Ich habe gelesen, dass es mehrere Ursachen dafür geben kann. Erstens liegt der von mir verwendete Leistungsregler LTC1514-5 im Schaltfrequenzbereich von 650 kHz, also nicht sicher, ob er das Audio beeinflusst? Zweitens sollte der LM386-Operationsverstärker selbst weiter vom Lautsprecher entfernt sein? Unzuverlässige Verbindungen im Steckbrett? Nähe zu Tischgeräten wie Oszilloskop/Messgerät/DC-Netzteil?
//"meow.h" file is stored as PROGMEM, char type variable
#include "avr/io.h"
#include "util/delay.h"
#include "HRL_SPI.h"
#include "HRL_MCP492x.h"
#include "meow.h"
void setup() {
Serial.begin(9600);
// Initiate SPI in Mode 0 with MSB first, NO interrupts and a clock of F_CPU/4
setupSPI(SPI_MODE_0, SPI_MSB, SPI_NO_INTERRUPT, SPI_MASTER_CLK4);
SETUP_DAC;
_delay_us(100);
}
int config = 0x30; //Mono, unbuffered, 1xGain, SHDN off
word output = 0;
word a=0; //index for meow array
void loop() {
if(a==sizeof(meow)) {Serial.print("again!"); delay(2000); a=0;}
output = pgm_read_byte(&(meow[a++]))*16; //Multiplied by 16 to go from 8 to 12 bits
// Serial.print("index:");
// Serial.print(a,DEC);
// Serial.print('\n');
// Serial.print("output:");
// Serial.print(output,DEC);
// Serial.print('\n');
// Serial.print('\n');
writeMCP492x(output,config);
_delay_us(125);
}
Sättigung.
Sie haben die Referenzspannung von MCP4921 an seine angeschlossen , durch einen Filter. Das bedeutet, dass ist entweder 3,3 V oder 5 V (ich schätze 5 V, wegen Ihres LTC1514-5).
Das bedeutet, dass Ihr analoges Signal einen maximalen Spitze-zu-Spitze-Wert von 5 V hat. Der LM386 in dieser Konfiguration hat eine Verstärkung zwischen 20 und 200. Unter der Annahme einer Verstärkung von nur 20 (was ich bezweifle, da es eine Kappe), erhalten Sie , was natürlich nicht erreicht werden kann, auch weil die maximale Betriebsspannung des LM386 12V beträgt.
Du kannst es versuchen:
Halten Sie den 386 auf jeden Fall vom Schaltregler fern. Tatsächlich ist der 386 außerhalb seiner Bandbreite sehr nichtlinear, und daher könnte das 650-kHz-Rauschen aufgenommen und in das Band gebracht werden.
Posten einer neuen Antwort, um sie der akzeptierten Antwort hinzuzufügen, da ich nicht das Karma zum Kommentieren habe:
@next-hack hatte eine großartige Antwort bezüglich der Reparatur der Schaltung rund um den DAC, und es gibt auch Raum für Verbesserungen / Abstimmungen rund um den Verstärker.
Der Schlüssel liegt darin, an den Verbindungsstellen jedes Blocks der Kette zu messen/sondieren:
Signal zum DAC
Signal vom DAC, das Signal zum Verstärker ist
Signal vom Verstärker, das Signal zum Lautsprecher ist
...usw.
Ohne genauere Angaben zum Geräusch ist es schwer zu lokalisieren. Wie eine andere Frage zeigt (Link: LM386-Audioverstärker verstärkt nicht ) und @next-hack anspielt, haben Sie potenzielles Rauschen durch Ausbreitung von einer anderen Quelle (z. B. Stromversorgung) oder von einer anderen Kopplung. Wenn der Operationsverstärker und der DAC von einer Batterie oder einem Linearregler mit Strom versorgt werden, sind Sie wahrscheinlich in guter Verfassung. Wenn es von einer Schaltversorgung stammt oder von einer vorgespannt ist, kann sich Rauschen einschleichen.
JRE
Benutzer2608147