Audiorauschen: ATMEGA328P, MCP4921 und LM386

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?

Adler-Schema

//"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);    
}
Welche Versorgungsspannung hat der LM386? Sie sind sich bewusst, dass der 386 viel Verstärkung hat, oder? Sie geben ihm ein Signal mit ziemlich hoher Amplitude und verstärken es im 386. Vielleicht haben Sie nur Verzerrungen durch extremes Clipping.
Ich versorge es mit 7 V, 0,1 A von einer Gleichstromversorgung. Ja, ich bin mir der hohen Verstärkung bewusst, aber ich habe nicht verstanden, wie sie das Signal tatsächlich verstärkt. Ich verstehe das jetzt aus der Antwort unten. Siehe meinen Kommentar zur Antwort unten für meine Anpassungen.

Antworten (2)

Sättigung.

Sie haben die Referenzspannung von MCP4921 an seine angeschlossen v D D , durch einen Filter. Das bedeutet, dass v R E F 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 10   μ F Kappe), erhalten Sie 100   v P P , was natürlich nicht erreicht werden kann, auch weil die maximale Betriebsspannung des LM386 12V beträgt.

Du kannst es versuchen:

  • Einfügen eines Widerstands parallel zu DEC_C6, um die Referenzspannung zu reduzieren (sie kann so niedrig wie 0,04 V sein). Trotzdem wird die Geräuschleistung sinken, denke ich.
  • Vout_A dämpfen. Aber auch hier sinkt nicht nur die Rauschleistung, sondern es wäre eine sehr ineffiziente Lösung: Sie dämpfen das Signal und verstärken es dann wieder.
  • oder verwenden Sie eine nicht verstärkende Lautsprechertreiberkonfiguration, damit sie nicht gesättigt wird.

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.

Ihre Antwort hat mir definitiv geholfen, eine bessere Ausgabequalität zu erzielen. Ich denke, es war kein Rauschen, sondern nur Clipping wegen der hohen Verstärkung. Ich habe einen Spannungsteiler verwendet, wie Sie vorgeschlagen haben, um 0,25 V bei Vref zu erhalten, und die Verstärkungsstifte des LM386 geöffnet, um die Standardverstärkung von 20 zu erhalten. Trotzdem klingt der Ausgang des Lautsprechers, den ich verwende, sehr leise. Ich bin mir nicht sicher, warum das so ist? Ich erhalte 5,2-5,6 V Spitze zu Spitze, wenn ich den Ausgang an der (+) Seite des Lautsprechers mit einem Oszilloskop messe.
Was ist der maximale Wert Ihrer Probe in meow.h?
197 (vorzeichenloses Zeichen)
Die maximale Spitze-zu-Spitze-Spannung, die Sie mit 7 V erreichen können, beträgt etwa 5 V bei 8 Ohm Last. (Abbildung 3 auf dem Datenblatt. In Übereinstimmung mit Ihrer Messung. Beachten Sie, dass Sie immer noch nahe an der Sättigung sind!). An 8 Ohm bedeutet dies eine maximale Leistung (unter Berücksichtigung einer Rechteckwelle!) von 0,78 W (Achtung: Ihr Lautsprecher hat 300 mW!!). Ihre "Miau"-Probe wird wahrscheinlich eine viel geringere Leistungsdichte haben, sodass Sie möglicherweise nur 200-300 mW oder sogar weniger erhalten, was als sehr niedrig erscheinen kann.
Könnten Sie bitte erklären, wie Sie auf 0,78 W gekommen sind? Und was würden Sie empfehlen, um die Leistung zu erhöhen?
Eine Rechteckwelle von 5 V Spitze zu Spitze bedeutet einen Effektivwert von 2,5 V (der Effektivwert in einer bipolaren Rechteckwelle ist gleich ihrer Amplitude). Daher ist die Macht v R M S / R , also 0,78W. Um die Ausgangsleistung zu erhöhen, sollten Sie eine größere Spannung verwenden (der LM386 kann bis zu 12 V laufen), die es ermöglicht, 1) alle Samples zu normalisieren, sodass der höchste Sample-Wert 255 und der niedrigste 0 ist (so dass Sie können die volle DAC-Spanne verwenden). 2) um die Verstärkung etwas zu erhöhen. Natürlich müssen Sie einen Lautsprecher verwenden, der die größere Ausgangsleistung aushalten kann.
Ich sehe jetzt, wie Sie 2,5 V RMS und 0,78 W erhalten haben, aber ich denke, Sie wollten schreiben, dass die Leistung V_RMS ^ 2 / R ist? Was die anderen Überlegungen betrifft, sie machen Sinn und ich habe eine gute Vorstellung davon, wie ich an dieser Stelle vorgehen soll, danke.
Ja, tut mir leid, ich habe das "^2" in der Formel verpasst, das hätte sein sollen v R M S 2 / R !!!

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.

Alles gute Punkte. Ich habe tatsächlich bessere Ergebnisse erzielt, als ich einen 9-V-Lithium-Ionen-Akku an die Stromversorgung angeschlossen habe, anstatt ein Gleichstromnetzteil zu verwenden. Danke Raj.
@ user2608147 - Wenn Sie bei angeschlossenem DC-Netzteil mehr Rauschen bekommen, überprüfen Sie das Erdungsschema Ihres Setups und überwachen Sie auch das Rauschen auf der positiven Schiene selbst, um festzustellen, ob es sich um eine Rauschquelle handelt. Dies kann auch darauf hindeuten, dass Sie anfällig für Rauschen an der Stromquelle sind, sodass das Hinzufügen einiger Filterkappen dort hilfreich sein könnte (übliche Werte: 10 uF, 1 uF, 100 nF alle parallel).