Mixed-Signal-PCB-Layout für PSoC

Ich entwickle eine Leiterplatte für eine analoge Sensoranwendung. Es verwendet den internen ADC auf einem PSoC3. Wie üblich ist die Anwendung sehr platzbeschränkt (11 mm x 21 mm), so dass ich beim PCB-Layout einige Kompromisse eingehen musste, die ich bei einer größeren PCB nicht gemacht hätte.

PSoC-Leiterplatte

Die Platine wird mit geregelten 6V versorgt und enthält zwei 5V-Linearregler. Ein MCP1702 für die digitale Versorgung und ein MIC5205 für die analoge Versorgung. Das Board erfasst fünf A1324 Hall-Effekt-Sensoren. Jedes Hall-Effekt-Ausgangssignal wird durch einen 100nF + 1k RC-Filter gefiltert. Ein Sensor befindet sich auf der Platine selbst (unten rechts). Die anderen 4 stecken Sie in den rechten 6-poligen Stecker.

Der Chip fungiert als SPI-Slave, aber ADC-Samples werden immer zwischen SPI-Transaktionen genommen, sodass der SPI die analogen Signale nicht stören sollte.

Leider sehe ich immer noch ein gewisses Rauschen (etwa 1,5 LSB bei 12 Bit) in den analogen Signalen, und ich frage mich, ob ich im Layout etwas hätte anders machen können, um es zu verbessern.

PSoC-Layout

Bitte öffnen Sie das Bild in einem neuen Tab, um es in höherer Auflösung anzuzeigen.


Hinzugefügt:

Andere PCB-Designs, die ich mit dem MCP3208 erstellt habe , und die gleichen dualen 5-V-Versorgungen, die gleichen Sensoren und die gleichen RC-Filter haben bei 12 Bit kein merkliches Rauschen erzielt.

Der ADC auf dem PSoC3 ist ein Delta-Sigma-Typ. Diese Version des PSoC ist auf 12 Bit begrenzt, aber eine andere Teilenummer hat einen 16-Bit-ADC (allerdings mit einer niedrigeren Abtastrate).

Ich mache mir Sorgen um das Rauschen und würde es wirklich gerne ein bisschen weiter in Richtung 12 ENOB treiben. Der Grund ist nicht die Genauigkeit, sondern die Geschwindigkeitsmessung. Gegenwärtig macht es dieser Geräuschpegel unmöglich, eine genaue Positions- und Geschwindigkeitssteuerung an einem Roboter durchzuführen.


Hinzugefügt:

Schema. Leider ist es etwas eng, aber man kann gerade noch die Werte ablesen.

PSoC-Schema

Meinst du MCP3208?? Das hat einen 72dB SINAD oder ENOB=11,7
Hoppla. Ja. Korrigiert.
Vergessen zu fragen: Kannst du einen Schaltplan posten?
@stevenvh - Hinzugefügt.
Bitte, bitte, bitte hören Sie auf, Ihre schematischen Entitäten so zu zeichnen, dass sie wie der physische Chip aussehen. Der ganze Sinn des Schaltplans besteht darin, die Funktion der Schaltung visuell zu definieren . Indem Sie Ihren Schaltplan wie das physische Chip-Layout zeichnen, verhindern Sie im Grunde, dass dies mit Erfolg geschieht.
Hören Sie auch auf, Netzetiketten zu verwenden! Ihre Schaltung ist bei weitem nicht komplex genug, um sie zu erfordern, und indem Sie die Verbindungen nicht wirklich zeigen, machen Sie es viel schwieriger, Verbindungen zu verfolgen. Auch hier besteht der Zweck des Schaltplans darin, die beabsichtigte Funktion und Funktionalität der Schaltung visuell deutlich zu machen . Anschließend lassen Sie den Computer die visuelle Darstellung in das tatsächliche physische Layout der Geräte übersetzen (was Computer sehr gut können).
Andere Beschwerden wären, dass Sie viele seitliche Masse- und Stromanschlüsse haben. Versuchen Sie, sie vertikal zu platzieren (es erleichtert die visuelle Unterscheidung). Indem Sie Ihre schematischen Entitäten reparieren, sollten Sie in der Lage sein, sie alle ohne Probleme vertikal zu platzieren. Es ist nur das seltsame schematische Entity-Layout, das Sie dazu zwingt, sie seitlich zu platzieren, damit die Dinge passen.
@FakeName - Ich stimme Ihren Kommentaren zum schematischen Layout zu. Und ich mache all diese Dinge tatsächlich für einige Schaltpläne, und ich würde sie auch anderen Leuten empfehlen, es sei denn , sie legen eine verzweifelt begrenzte Leiterplatte wie diese an. In diesem Fall beginnt der Rat gegen Sie zu arbeiten. Wenn der Platz Ihre Nummer 1 ist, dann ist Ihr Arbeitsablauf anders und die Art und Weise, wie Sie einen Schaltplan verwenden, ist anders.
Wenn Sie einen Schaltkreis prototypisieren, entwerfen Sie normalerweise einen schönen großen Schaltkreis, um zu sehen, ob er funktioniert, und helfen beim Debuggen. Aber wenn der Platz die größte Einschränkung ist, hat Ihr Prototyp die reale Größe, um zu sehen, ob es überhaupt möglich ist.
Ich finde Netzetiketten sehr hilfreich, und sie erleichtern mir das Lesen und Bearbeiten des Schaltplans. Das Platinenlayout beschränkt, welche Signale an welche Pins gelangen können, und ich muss oft Dinge verschieben, damit alles passt. Das Trennen und erneute Anschließen von Kabeln ist wesentlich mehr PITA als das Verschieben der Etiketten.
@Rocketmagnet - Sie sind sicherlich hilfreich für die Person, die die Schaltung zeichnet . Sie sind für alle anderen absolut abscheulich .
Wenn Sie aus Platzgründen Probleme mit dem Verlegen von Kabeln haben, müssen Sie sich dringend mit den Pin-Swapping- Funktionen in Altium befassen. Grundsätzlich können Sie Pins angeben, die in der Komponentendefinition funktional austauschbar sind (dh verschiedene IO-Pins), und dann, wenn Sie die Leiterplatte routen, können Sie die Spuren zu jedem der Pins führen, die funktionieren würden, und nicht nur zu dem einen Sie haben im Schaltplan angegeben. Anschließend können Sie das Routing, das Sie im PCB ausgewählt haben, mit dem Schaltplan synchronisieren.
Grundsätzlich sind Netz-Labels wie gotoin schematischer Form. Sie machen Ihre Arbeit ein bisschen einfacher, aber sie machen jeden anderen, der an Ihrem Schaltplan arbeiten oder lesen muss, viel schwerer.
Zu guter Letzt: Kennen Sie ctrl+Drag? Es verschiebt Bauteile unter Beibehaltung der Verbindungen (nur Schaltplan-Editor). Es funktioniert nicht immer, aber es ist sehr nützlich.
@FakeName, während das Verbinden mit Etiketten es schwieriger machen könnte, einem Stromkreis zu folgen, könnte das Neuzeichnen jedes Symbols, um einen reinen und sauberen Schaltplan mit schönen geraden Linien zu erstellen, die Zeit für die Schaltplaneingabe leicht vervierfachen. Ich würde gerne einen perfekten Schaltplan sehen, ich bin mir nicht sicher, ob es realistisch ist, einen zu verlangen.
@Rocketmagnet, eine sehr kleine Leiterplattenfläche bedeutet nicht, dass Sie Ihren Schaltplan nicht auf Papier im D-Format zeichnen können.
@ThePhoton - Sie müssen das Symbol für jedes Gerät nur einmal neu zeichnen. Dann fügen Sie es einfach in Ihre Komponentenbibliothek ein.
Und ich zeichne Schaltpläne so weit wie möglich nach den Spezifikationen, die ich anderen frage. Ich verwende eigentlich keine Netzetiketten. Überhaupt . Es dauert ein bisschen mehr Zeit, aber diese Zeit lässt sich leicht sparen und mehr, wenn Sie die Entwürfe mit anderen Leuten besprechen.
Auch hier ist die Verwendung von Net-Labels sehr ähnlich wie goto. Es kann Ihnen Zeit sparen , aber wenn Sie mit anderen Leuten zusammenarbeiten (und ich arbeite selbst sehr eng mit einem anderen Ingenieur zusammen), sind sie ein absoluter Zeitfresser, da Sie jedes Mal, wenn Sie etwas diskutieren, manuell vorgehen müssen über den gesamten Schaltplan, um herauszufinden, wohin es geht.
@FakeName - Tut mir leid, da muss ich dir einfach widersprechen. Ich bin froh, dass du eine Meinung hast.
@FakeName, in Altium ist es sehr schön, Netzetiketten zu verwenden, auch wenn Ihr Schaltplan vollständig grafisch verbunden ist, denn wenn Sie zum Layout gelangen, erhalten Sie Etiketten auf den Spuren, die Sie an die Funktion jedes Netzes erinnern.
@ThePhoton - Nun, ich benutze sie, um Drähte zu benennen, aber ich benutze sie überhaupt nicht, um Verbindungen herzustellen.
@Rocketmagnet - Wenn Sie anfangen, eng mit anderen Leuten an demselben Design zu arbeiten, werden Sie wahrscheinlich Ihre Meinung ändern.
Um es klar zu sagen, ich sage nicht, dass Sie niemals Net-Labels verwenden sollten, sondern nur, dass Sie einen guten Grund haben sollten, wenn Sie dies tun. Behandeln Sie sie wie jeden anderen mächtigen Programmiertrick, der die Ablaufsteuerung verändert. Sie entfernen die visuelle Unmittelbarkeit der Schaltungsfunktion, die ein Schaltplan bieten soll . Sie möchten sie nicht verwenden, es sei denn, Sie haben einen wirklich guten Grund dafür, und wenn Sie nicht sicher sind, ob Sie einen guten Grund haben, tun Sie es nicht.

Antworten (2)

Sie werden immer etwas Rauschen auf einem ADC haben, insbesondere SA-Typen (Successive Approximation) auf dem Mikrocontroller-Die. Sigma-Delta funktionieren besser für Gaußsches Rauschen, da sie es integrieren. Erwarten Sie nicht 12 ENOB von einem 12-Bit-ADC.

Das Rauschen des Controllers ist ein Grund, warum die meisten Mikrocontroller keine höhere Auflösung als 10 Bit liefern, und der AVR bietet die Möglichkeit, den Mikrocontroller während der ADC-Erfassung zu stoppen, was bestätigen sollte, dass zumindest ein Teil des Rauschens vom Controller kommt .

Aber die Frage ist: Interessiert es dich? 1,5 Bit Rauschen auf einem 12-Bit-ADC lassen immer noch mehr als 10 Bit oder besser als 0,1 % übrig. Wie genau ist dein Hallsensor? Andere Komponenten in der Schaltung?

Bearbeiten
Sie scheinen den internen Oszillator des PSoC zu verwenden, da ich auf dem Schaltplan keinen Kristall sehe. Es sieht OK aus: Sie haben die richtige Entkopplung. Abgesehen von der internen Uhr scheint der einzige Hochgeschwindigkeitsteil in der Schaltung der SPI zu sein, aber Sie sagen, dass dieser während der Messungen schweigen wird. Der Rest der Platine ist Gleichstrom oder wahrscheinlich relativ niederfrequent wie die Hall-Effekt-Sensoren. Und es ist ein Damn Small™, was auch hilft: Kürzere Spuren nehmen weniger Rauschen auf. Sicherlich könnte ich beim MCP1702 pingelig sein, den ich um 90 ° gegen den Uhrzeigersinn drehen würde, damit der Ausgangskondensator noch näher an den Pins platziert werden kann, aber das wird die Probleme nicht lösen.

Ich sehe nur eine Änderung im Layout, die Ihr S/N-Verhältnis verbessern könnte:

Geben Sie hier die Bildbeschreibung ein

Im Datenblatt werden geteilte analoge und digitale Masseebenen für „Optimale analoge Leistung“ (Seite 10) vorgeschlagen.

Ansonsten: kleine Platine wie gesagt, das bedeutet kurze Leiterbahnen und Entkopplung innerhalb weniger mm. Deshalb würde ich gerne noch einmal nach der Quelle des Rauschens suchen. Hauptverdächtiger ist die Uhr des PSoC. Der PSoC kann mit einer sehr niedrigen Versorgungsspannung betrieben werden, was sein Rauschen reduzieren würde. Natürlich würde es viel helfen, wenn VDDA auch gesenkt werden müsste, aber ich habe nirgendwo im Datenblatt gelesen, dass VDDA nicht höher als VDDD sein sollte.

Als nächstes der ADC. Auf Seite 55 des Datenblatts steht 66 dB SINAD, das sind 11 Bit, nahe an dem, was Sie jetzt bekommen. Das A1324-Datenblatt gibt uns 7 mVpp Rauschen bei einer Ruhespannung von 2,5 V. Das ist auch weit weniger als das 72-dB-S/N-Verhältnis, das Ihnen 12-Bit bieten könnte. Sie können dies durch zusätzliche Filterung ein wenig verbessern.

Sie erwähnen die bessere Leistung des MCP3208, aber das ist ein ADC vom Mikrocontroller entfernt, und das erklärt möglicherweise, warum ein SA-ADC bei gleicher Auflösung besser abschneiden kann als ein Sigma-Delta.

Also, die Optionen, die ich sehe: Senken Sie die digitale Versorgungsspannung und teilen Sie analoge und digitale Masse auf.

Das ist eine sehr interessante Idee, die digitale Versorgungsspannung des PSoC zu senken. VDDA kann sicherlich höher sein als VDDD.
Meinen Sie also, ich sollte VSSA vom Wärmeleitpad trennen? Ich habe dies tatsächlich als eine ganz neue Frage gepostet .

Ich stimme dem oben genannten zu. 1,5 LSB Rauschen ist ziemlich vernünftig. http://www.cypress.com/?docID=39346 zeigt einen minimalen SINAD von 66 dB im 12-Bit-Modus, was auf ENOB = 10,7 hindeutet.

Ich weiß, dass dies keine direkte Antwort auf Ihre Frage ist, aber ich werde die Frage interpretieren als "Wie behebe ich meine Probleme mit der Geschwindigkeitsregelung?" und nicht "Wie bekomme ich mehr als 10,5 ENOB?".

Wie differenzieren Sie? Haben Sie genug freie Takte, um etwas Glättenderes zu machen als eine Differenz von zwei Punkten in der Mitte? Vielleicht etwas 5 Samples breit ausarbeiten, optimiert in Matlab?

Auch dies mag etwas komisch klingen, aber das Geschwindigkeitsrauschen wird schlimmer, wenn Sie schneller sampeln

1 L S B Δ t
wird größer, wenn delta t kleiner wird). Versuchen Sie, die Probenahme nur so schnell wie nötig durchzuführen, nicht so schnell wie möglich.

Um nicht beleidigend zu sein, aber werfen Sie auch einen kurzen Blick, um sicherzustellen, dass in Ihrer Geschwindigkeitssteuerung nichts Dummes vor sich geht, wie z . Meine eigenen Steuergleichungen werden oft so kompliziert, dass ich manchmal jede Operation explizit umsetze.

Zu guter Letzt, obwohl vielleicht am wahrscheinlichsten, verlieren Sie effektive Bits von der Spitze, indem Sie nicht auf nahezu volle Skala verstärken? Wenn dies der Fall ist, können Sie Vref verstärken oder möglicherweise kleiner bereitstellen.

Wir berechnen Position und Geschwindigkeit mit einem Alpha-Beta-Filter . Ich verstehe, dass das Geschwindigkeitsrauschen mit zunehmender Abtastrate zunimmt, wenn es naiv gemacht wird. Ich bin mir sicher, dass das Geschwindigkeitsrauschen nicht auf einen Vorzeichenfehler zurückzuführen ist. Und wir sind bereits fast auf voller Skala, also kann ich keine Verstärkung mehr machen, ohne zu riskieren, den oberen oder unteren Bereich zu treffen.
Würden Sie sagen, dass es keine Verbesserungen gibt, die ich am Layout vornehmen kann?
Kann noch nichts sehen. Wie verstärken Sie die Hallsensoren? Haben Sie sich die Ausgabe der AB-Filter und Kontroll-Eqns tatsächlich als Realitätsprüfung angesehen? Haben Sie Rauschen an Ihren Reglerausgängen gesehen? Es könnte aufschlussreich sein, ein formelles Rauschbudget für das gesamte System zu erstellen
@Halls haben keine Verstärkung. Sie haben bereits eine Schwingung von 0 V - 5 V. Außer dem Filterkondensator gibt es keine Pufferung. Ich muss das Reglerrauschen noch messen, aber ich weiß, dass dieser Regler + Hall + Filter in einem anderen System 12 ENOB erreicht hat. Wir haben den letzten Monat damit verbracht, die Signale, das Rauschen und die Filter zu studieren. Ich bin mir sehr sicher, dass sie richtig funktionieren.
Es sieht so aus, als hätte der Sigma-Delta-ADC von Cypress einen Differenzmodus. Hast du das versucht? cypress.com/?docID=39346 scheint zu sagen (Seite 17), dass Sie ein paar dB gewinnen könnten, indem Sie die interne Vref umgehen. Das Fazit ist jedoch, dass die minimale SINAD dieses ADC nur 66 dB im 12-Bit-Modus beträgt, was ziemlich nahe an Ihrer Position liegt ((66-1,76) / 6,02), was ENOB = 10,67 ergibt (aber überprüfen Sie, ob meine Berechnungen richtig sind und das Ich schaue mir die Dokumentation für den ADC an, den Sie derzeit verwenden!) Ich denke, Ihre Auswahl ist ein anderer ADC, derselbe ADC mit mehr Bits oder ein Steueralgorithmus, der robuster im Rauschen ist.
Ärgerlicherweise gibt mir der Differentialmodus nur einen Spannungshub von 0 V ... 4,096 V, sodass ich ihn nicht verwenden kann. Ich könnte versuchen, die Signale in der nächsten Version des Boards zu dämpfen, damit ich dies ausnutzen kann. Als ich es jedoch versuchte, war das Rauschen geringfügig schlechter (wahrscheinlich aufgrund der verringerten Reichweite). Scheint also nicht geholfen zu haben.
Aber! Der andere Vorteil des Differentialmodus ist, dass ich die Abtastrate um das Vierfache erhöhen kann, sodass ich Oversampling durchführen kann. Das sollte den Lärm etwas dämpfen.
Das könnte dir gerade reichen. Wenn das Rauschen stationär ist, sollte es durch einen Mittelwert von vier Punkten um die Quadratwurzel von 4 reduziert werden, also gibt es Ihr zusätzliches Bit! Vielen Dank für Ihre Geduld mit meinen zufälligen Fragen, aber für mich war das immer eine großartige Methode, um kreative Wiederholungsbesuche zu erzwingen.
Aber meine Frage bleibt unbeantwortet. Gibt es etwas, das ich im PCB-Layout hätte besser machen können?
Vielleicht eine Bypass-Kappe auf Vref (nicht sicher, wie das geht, steht im Datenblatt). Abgesehen davon denke ich, dass Sie dem idealen ENOB für den PSOC 3 ADC bei 12 Bit sehr nahe kommen, wenn nicht gar, also haben Sie so gut wie möglich gearbeitet!
@Rocketmagnet: Anstatt den GND-Pin des integrierten Hallsensors durch eine lange dünne Spur auf der "roten" Schicht zu verbinden, bevor er durch ein Via zur GND-Ebene geht, sieht es so aus, als wäre es besser, diesen GND zu haben Pin direkt mit der GND-Ebene auf der GND-Ebenenschicht verbinden. Aber ich bezweifle, dass das einen großen Unterschied machen würde – wie Scott gesagt hat, es sieht so aus, als ob Sie bereits ungefähr das maximale ENOB bekommen, das Sie von diesem Chip erwarten können.
Der Grund für die lange dünne Leiterbahn war, die Stromversorgung und Masse zurück zum analogen Regler und ADC zu führen, ohne sie durch den Teil der Masseebene zu führen, der definitiv digitale Ströme enthält. Die beiden Spuren liegen übereinander, um die Schleifenfläche zu minimieren.