STM32 ADC Noise 2

8

Ich habe gerade mein zweites Design mit STM32F2 getestet, jetzt ist es STM32F207ZFT6. Das ADC-Verhalten ist das gleiche wie in meiner ersten Anwendung - starkes Rauschen im ADC.

Wesentlicher Bestandteil der Platinenschemata

Rauschen des Stromeingangs ohne angeschlossenes Signal:

Signal mit Floating Pin empfangen

Hinweis: In den obigen Signaldiagrammen ist die vertikale Achse in ADC-Bits und nicht in Volt!; Lassen Sie sich nicht von der Legende „[V]“ verwirren. Für diesen Test haben wir unser modifiziertes Programm verwendet, um grobe ADC-Daten anzuzeigen.

Das gleiche Rauschen tritt auch dann auf, wenn der analoge CPU-Pin mit GND kurzgeschlossen wird, wie hier gezeigt: Eingangssignal mit kurzgeschlossenem Pin gegen Masse

Das abgetastete Signal enthält permanente Spitzen über 30 LSBs und mehr, obwohl sie meiner Meinung nach 5-10 LSBs nicht überschreiten sollten.

Weitere Details:

  • 2-seitige Leiterplatte, auf der Unterseite befinden sich andere Anschlüsse, aber das meiste davon wird mit GND-Signal gegossen - sowohl für digitale als auch für analoge Verbindungen ist die analoge Masse nicht getrennt. Da der Board-Verbrauch unter 100 mA minimal ist, sollte er meiner Meinung nach kein solches Rauschen verursachen.

  • Spannungsreferenz VREF 3,3 V gepuffert durch Opamp, blockiert durch 100 nF und Tantall 10 uF parallel, das gleiche wie bei VREF / 2; Jeder Prozessor-Power-Pin ist mit einer 100-nF-Kappe blockiert

  • In unserer älteren Anwendung haben wir das gleiche Designkonzept verwendet, aber der verwendete Prozessor war AduC834. Es hat auch 12-Bit-ADC und das Signalrauschen war nur mehrere LSBs, es gab keine Probleme; Der Hauptunterschied bestand darin, dass die interne Spannungsreferenz des AduC verwendet wurde, keine externe

  • Wir haben getestet, den analogen Erdungsstift des Prozessors vom gemeinsamen GND der Platine zu trennen und ihn mit einem zusätzlichen Kabel direkt mit der VREF-Masse der Spannungsreferenz zu verbinden, ohne dass dies Auswirkungen hat

  • es ist ein dreiphasiges Netzwerkmessgerät, es gibt 3 analoge Spannungskanäle und drei Stromkanäle mit umschaltbarem Verstärkungsvorverstärker; Der CPU-Oszillator 25 MHz, der interne Takt 120 MHz per PLL, der ADC-Takt 30 MHz (gemäß den technischen Daten). Wir haben getestet, den internen Haupttakt (daher auch alle sekundären Takte) auf ein Viertel zu verlangsamen, jedoch ohne Auswirkungen

  • ADC tastet periodisch ein Eingangssignal mit einer Rate von 128 Umwandlungen pro 50-Hz-Netzwerkperiode ab, dh jeweils 156 usecs; Die Ergebnisse werden per DMA in den internen RAM übertragen. Daten aus dem RAM werden über isoliertes RS485 (auf einer anderen Karte) übertragen und in unserem Programm visualisiert. Wir haben versucht, die Konvertierungszeiten auf das Maximum zu verlängern, ohne Wirkung

  • Ohne CPU gibt es nur 3 Opams, 2 analoge Schalter, ein I2C-Thermometer und drei ULN-Schalter (während des Tests nicht verwendet), die von einem linearen LF33-Stabilisator gespeist werden, der normalerweise mit 5 V Gleichstrom vom Umschalter auf einer anderen Platine gespeist wird, aber während des Tests war der Umschalter Die Verbindung wurde getrennt und der LF33 wurde über eine klare 5-V-Gleichstromversorgung im Labor mit Strom versorgt. Ich bin sicher, nichts als der Prozessoroszillator kann auf der Platine schwingen.

  • Wenn Sie das Signal mit dem Oszilloskop überprüfen, erhalten Sie keine entscheidenden Ergebnisse. Das Signal ist zu schwach

Jemand mit dieser ADC-Leistungserfahrung dieser Prozessorfamilie?

In Bezug auf die Signalstärke: Selbst wenn der Analogeingang kurzgeschlossen ist, sehe ich am Oszilloskop ein Rauschen von 5-10 mV (Spitze-Spitze) - gemessen mit einem Koaxialkabel mit minimaler Erdungsdrahtlänge, die auf die Platine gelötet ist. Bei einer Standardsonde war das Rauschen wahrscheinlich aufgrund einer schlechteren Erdung etwa doppelt so hoch (allgemeines EMV-Rauschen?).

Dies ist ein Bild von meinem Board: Bild der zusammengebauten Platte

Und die Unterseite der Tafel: Bild der Unterseite der Tafel

Wie ich oben berichtet habe, bleibt das Rauschen von ungefähr 30 LSBs in den ADC-konvertierten Daten bestehen, selbst wenn das Signal geerdet ist.

Mailand
quelle
Sie sagen, das Signal ist zu schwach, wie schwach ist das?
Kortuk
Ich habe mein Problem auch im ST-Forum gemeldet. Dort gibt es alle Links (einschließlich Board-Foto): my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/…
Mailand,
2
Ich sehe nicht annähernd genug Bypass-Kappen auf diesem Board, um es mir bequem zu machen, und sie sind alle ziemlich weit vom Teil entfernt.
Connor Wolf
2
@Fake Name - Milan missbraucht den Begriff nicht. Der Verweis auf "x LSBs" bezieht sich auf das x-fache des linearen Werts des niedrigstwertigen Bits. "X Rauschbits" könnten sich jedoch auf 2 ^ x LSBs beziehen.
Chris Stratton
3
@ Chris Stratton - Ich bin anderer Meinung. "x Bit of Noise" ist gleichbedeutend mit "x LSBs". Als solches würde "x mal der LSB-Wert" x-mal den linearen Wert des niedrigstwertigen Bits bedeuten. X LSBs bedeuten jedoch die x niedrigstwertigen Bits oder einen linearen Bereich von 2 ^ x.
Connor Wolf

Antworten:

4

Ich würde argumentieren, dass der ADC zusätzlich zu den drei von Fred zitierten einen vierten Eingang hat: seine Uhr. Zumindest bei einigen Arten von ADCs kann Jitter oder Phasenrauschen auf der Uhr die ADC-Messungen beeinflussen.

Sie sagen, Sie haben einen 25-MHz-Oszillator, betreiben aber den ADC mit 30 MHz, sodass einige PLL an der Erzeugung des Takts beteiligt sind. Wenn dies nicht gut funktioniert, kann seine Unregelmäßigkeit eine Quelle für Umwandlungsrauschen sein. Können Sie versuchen, die Softwarekonfiguration (auch vorübergehend) so zu ändern, dass die PLL nicht verwendet wird und nur der Eingangstakt abläuft oder von diesem heruntergeteilt wird?

Ich glaube, einige Mikrocontroller haben auch einen Mechanismus, um den größten Teil der digitalen Schaltkreise während einer ADC-Messung auszusetzen, um das Rauschen zu reduzieren. Sie könnten prüfen, ob so etwas möglich ist.

Chris Stratton
quelle
2

Es gibt viele mögliche Gründe für das Geräusch, das Sie sehen. Es ist wichtig zu verstehen, dass ein ADC DREI Eingänge hat:

  1. Die Eingangsstifte (die als Signaleingang ausgelegt sind)
  2. Die Referenzeingabe (n) (Dout = 2 ^ n * Vin / Vref)
  3. Die Power Pins (Versorgung + Gnd)

Rauschen auf einem dieser Geräte kann das Rauschen verursachen, das Sie sehen. Wenn der ADC selbst nicht defekt ist, muss das Rauschen über einen dieser drei Pfade eingehen.

Es ist möglich, eine anständige ADC-Leistung bei gleicher Masse für Analog und Digital zu erzielen, aber Sie müssen die Platine sorgfältig auslegen, damit alle digitalen Schleifenströme von den analogen Schleifen isoliert sind.

In diesem Zusammenhang ist eine Schleife der gesamte Strompfad, den ein Signal oder eine Stromversorgungsleitung (die in diesem Zusammenhang als "Rausch" -Signal betrachtet werden sollte) auf der Leiterplatte nimmt. Bei einer Stromversorgungsleitung ist dies also der Ort, an dem die Energie entlang der Leiterbahn in die Platine eintritt, bis sie über alle Transistoren im IC zum Stromanschluss gelangt, aus dem Erdungsstift heraus und dann auf dem Weg des geringsten Widerstands zurück zu wo die Energie in die Platine eintritt. Das ist eine Stromversorgungsschleife.

Wenn Sie jedoch gute Arbeit mit der Umgehung der Versorgung leisten, wird in dieser Schleife nicht viel Wechselstrom vorhanden sein, da Sie eine viel kleinere, lokalere Schleife der Versorgungsseite der Bypasskappe zum Stromanschluss zum Erdungsstift und zurück zur Erde haben Seite der Bypasskappe. Wenn alle Ihre digitalen Netzteile eng umgangen sind, ist Ihre Stromversorgungsschleife größtenteils sauber und alle verrauschten digitalen Netzteile auf kurze Bypass-Kappenschleifen beschränkt.

Die Signalschleifen (einschließlich der Vref-Schleife) funktionieren auf die gleiche Weise - das Signal kommt herein, windet sich zum ADC, aus dem ADC GND und zurück zur Signalmasse (hoffentlich an derselben Stelle, an der das Signal gestartet wurde). Wenn diese Schleife eine digitale Schleife kreuzt, kann Rauschen injiziert werden. In der Regel bleibt bei einem guten Mixed-Signal-Design, bei dem ein GND für Analog und Digital verwendet wird, das Digital auf einer Seite und das Analog auf einer anderen Seite, wobei GND am Ende der Platine direkt am Trennpunkt liegt. Es ist normalerweise nicht so trocken, man muss Kompromisse eingehen, aber das ist die Idee.

Ihre Erwähnung "Da der Board-Verbrauch unter 100 mA minimal ist, sollte er meiner Meinung nach kein solches Rauschen verursachen." Es hängt mehr damit zusammen, wie gut das System umgangen wird. Ein 100-mA-System mit schlechter Umgehung weist in der Grundebene viel mehr digitales Rauschen auf als ein 1000-mA-System mit guter Umgehung.

Hoffe das hilft...

Fred Hamilton
quelle
1

Das Board-Design respektiert die empfohlenen allgemeinen Regeln wirklich nicht.

Wir haben es erneut getestet. Das typische Rauschen der Standardplatine ist in Abb. 1 unter http://imgur.com/a/TU9RQ zu sehen .

Um zu bestätigen, dass das Problem durch eine falsche Erdung verursacht wird, haben wir folgende Änderungen vorgenommen:

  • verstärkte gemeinsame Erdung (modifizierte Platine in Abb. 2 und entsprechendes Rauschen in Abb. 3)
  • Trennung der analogen von der digitalen Masse und deren gegenseitige Verbindung am VSSA-Prozessor-Pin (Abb. 4).

Keiner von ihnen half. Ich befürchte daher, dass das Problem auch nach der Neugestaltung auf eine 4-Schicht-Leiterplatte erneut auftreten kann.

Um den PLL-Einfluss zu testen, haben wir ihn ausgeschaltet und der Kern wurde nur mit einem externen 25-MHz-Kristall getaktet. Das Rauschen ist gesunken (Abb. 5), aber ich sehe, dass es nur durch einen niedrigeren Systemtakt verursacht wurde (normalerweise wird der Kern durch die 120 MHz der PLL getaktet), nicht durch eine gestoppte PLL, weil wir bei 25 wieder auf die PLL zurückgeschaltet haben MHz, das Rauschen war das gleiche wie ohne die laufende PLL.

Der einzige wahrnehmbare Effekt wurde erzielt, indem das VREF / 2-Signal über einen einzelnen Prozessor-Pin gleichzeitig mit jedem Spannungs- und Strompaar unter Verwendung des dritten Prozessor-ADC gemessen und von Spannungs- und Stromsignalen subtrahiert wurde - dann wird das modulierte Rauschen auf etwa die Hälfte reduziert (bei http) : //imgur.com/a/EeqUo , oberes rotes Diagramm = Standardsignal, unteres blaues Diagramm = Signal nach gemessener Rauschsubtraktion). Ich kann den dritten ADC jedoch nicht zur Rauschmessung verwenden. Ich benötige ihn für eine andere Aufgabe. Dies ist also keine Lösung für mich.

Mailand
quelle
1
Dies ist keine Antwort und sollte daher nicht als solche veröffentlicht werden. Das heißt, der PLL-Takteingang in den ADC bei 1: 1 des Eingangsoszillators ist wahrscheinlich viel sauberer als bei einem ungeraden Verhältnis davon. Wenn Sie Gleichtaktrauschen vermuten, müssen Sie sich die Dinge ansehen, die alle Kanäle gemeinsam haben ...
Chris Stratton
Normalerweise wird der externe Oszillator 25 MHz intern auf 1 MHz aufgeteilt, und diese Frequenz wird zur Steuerung der PLL verwendet. Der 120-MHz-Systemtakt wird durch 4 geteilt, um einen 30-MHz-ADC-Takt zu erhalten. Während des Tests betrug der Systemtakt 25 MHz (sowohl direkt von ext osc als auch unter Verwendung von PLL) und der ADC wurde direkt von ihm angesteuert (Prescaller auf 1 eingestellt), dh er lief mit denselben 25 MHz. In Bezug auf Ihre zweite Idee möchten Sie wahrscheinlich den Core während der ADC-Konvertierung in den Ruhemodus versetzen. ADCs werden von DMA bedient, die nicht einfach ausgeschaltet werden können. Obwohl dies in unserer Anwendung nicht verwendbar ist, stimme ich zu, dass es interessant wäre, es zu versuchen.
Mailand
Präziser mein vorheriger Kommentar: Ich habe vergessen, dass der PLL-Ausgang einen Teiler hat. Normalerweise läuft die PLL also mit 240 MHz und wird durch zwei geteilt, um den Systemtakt zu erhalten. Während des Tests wurde die PLL mit 200 MHz betrieben und durch acht geteilt, um einen Systemtakt von 25 MHz zu erhalten.
Mailand
@ ChrisStratton scheint es detailliert zu sein, wie er das Problem gelöst hat. Scheint das nicht eine Antwort zu sein?
Kortuk
2
@Kortuk "Keiner von ihnen hat geholfen. Daher befürchte ich, dass das Problem auch nach der Neugestaltung auf eine 4-lagige Leiterplatte erneut auftreten kann ..." Für mich sollte diese Antwort als Bearbeitung der ursprünglichen Frage hinzugefügt werden. Seine zweite Antwort scheint zu beschreiben, wie er das Problem gelöst hat.
m.Alin
1

Ich habe die Leiterplatte auf 4 Schichten umgestaltet. Und - was für eine Überraschung - der Lärm ist aus! Weitere Details hier .

Mailand
quelle
4
Du bist von Sinnen! Eine URI mit 319 (!) Zeichen, ohne auch nur richtig zu verlinken?
Stevenvh
1
Der Link ist kaputt, ich denke, es ist jetzt hier - community.st.com/thread/19850
ogurets
1
@ogurets Und es ist wieder kaputt. Ich hasse Linkantworten und Anbieterforen. "Die gesuchte Seite wurde verschoben oder existiert nicht."
Navin
1
@Navin Ich fühle so deinen Schmerz ... Googelt von "STM32F2 ADC Signal Noise", Post-Datum 28. Oktober 2011 (für das nächste Mal, wenn sie es bewegen): community.st.com/s/question/0D50X00009XkaFz/…
ogurets
@ogurets Danke! Ich war neugierig auf die Hintergrundgeschichte.
Navin vor