Workbench

Datum

Verfasst von

Workbench

QSP32: Eine IoT-Entwicklungsplatine

Datum

Erstmals veröffentlicht

September 29, 2024

Angesichts der enormen Bandbreite des Elektronikdesigns konzentrieren wir Quilters kurzfristige Produktplanung auf die Platinentypen, die unsere Nutzer am häufigsten erstellen: hochdichte digitale Hochgeschwindigkeitsdesigns.

Wo könnte unser KI-Designer in der weiten Welt digitaler Elektronik besser Erfahrungen sammeln als an einem Internet-of-Things-Projekt (IoT)? Und welches IoT-Modul wäre bekannter als der ESP32?

Dieser Projektbericht dokumentiert mein erstes Quilter-Projekt: eine individuelle ESP32-Entwicklungsplatine, vollständig von Quilters KI-PCB-Designer entworfen, ohne menschliche Nachbearbeitung oder Änderungen.

Hier ist der QSP32, unsere ESP32-basierte Entwicklungsplatine

Image 1: Meet Quilter “candidate 11”, fresh off the PCBA line from Macrofab
Bild 1: Quilters „Kandidat 11“, frisch von Macrofab

Die von uns gebaute „QSP32“-Platine ist ein hervorragendes Beispiel für die IoT-Designs, an denen viele Ingenieure heute arbeiten und für die Quilter bereits gut geeignet ist.

Dieses QSP32-Design nutzt insbesondere das ESP32-WROOM-32E-Modul und bietet:

  • reichlich GPIO,
  • einen USB-zu-UART-Chip
  • und einen praktischen Versorgungs-IC für Spannungsregelung und Batterieladung.

Die Platine enthält außerdem Taster für Boot0 und Reset sowie eine I2C-Schnittstelle zum Anschluss eines externen LCD.

👏

Vorweggenommen!Quilter hat das Design hervorragend umgesetzt. Ich ließ es bei Macrofab fertigen, und es funktioniert! 😄

QSP32 lässt eine LED mit einem einfachen Arduino-Blinksketch blinken

Entwerfen mit Quilter

Die Einrichtung eines Auftrags in Quilter umfasst zwei wesentliche Schritte:

  1. Eingabedateien hochladen (Schaltplan und Platinendatei), die Netzliste, Bauteilfootprints, Platinenkontur und die Position vorplatzierter Bauteile definieren.
  2. Randbedingungen definieren, die die wichtigsten physikalischen Anforderungen festlegen, die Quilters KI-Designer beim Layout beachten soll.

Eingabedateien

Ich platzierte nur wenige Bauteile mit wichtigen Positionsanforderungen vor:

  • Das ESP32-Modul, weil die Leiterbahnantenne des ESP32 über den Platinenrand hinausragen sollte, um Signalstörungen zu reduzieren;
  • die USB-, JST- und Stiftleistenanschlüsse, damit sie gemeinsam entlang einer Kante lagen;
  • und die Drucktaster, damit sie zusammen und symmetrisch nahe am ESP32-Modul lagen.

Die übrigen Bauteile blieben unplatziert. Rechts sehen Sie insgesamt 57 Bauteile: 9 hatte ich vorplatziert, sodass Quilter noch 48 Bauteile mit 161 Pins platzieren und routen musste.

Image 2: Preview of my input board file to Quilter
Bild 2: Vorschau meiner Eingabe-Platinendatei für Quilter

Physikalische Randbedingungen

Beim QSP32 waren die wichtigsten physikalischen Aspekte:

  • Hochstromnetze für die USB-C-Stromversorgung und die Li-Po-Ladeschaltung,
  • Differenzpaare für schnelle USB-Signale zwischen USB-C-Anschluss und ESP32,
  • und Abblockkondensatoren für ausreichende Entkopplung
ℹ Als dieses Layout ursprünglich erstellt wurde (Juli 2024), unterstützte Quilter nur Hochstromnetze und noch keine Differenzpaare oder Randbedingungen für Abblockkondensatoren. Freuen Sie sich auf mein nächstes ESP32-Projekt, den QSP32 Solar Boost, mit Anpassungen für beide neuen Randbedingungstypen!

Wir entschieden uns unter anderem deshalb für das ESP32-WROOM-Modul, weil damit zusätzliche physikalische Randbedingungen wie Antennenabstimmung sowie Quarz- und Lastkondensatorplatzierung entfallen.

Der Screenshot unten zeigt die Hochstromnetz-Vorgaben, die ich vor dem Einreichen meines Layoutauftrags bei Quilter festgelegt habe:

Image 3: QSP32 high current net constraints
Bild 3: Hochstromnetz-Vorgaben für QSP32

Ausgabedatei

Nach anderthalb Stunden Kompilierungszeit und mehr als 200 Layoutkandidaten ist dies das Design, das ich schließlich zur Fertigung auswählte!

Image 4: Output file in Kicad from Quilter
Bild 4: Quilters Ausgabedatei in KiCad

Der native DRC in KiCAD meldete mehrere Warnungen zur Synchronisierung der Bauteilbibliothek und zur Beschriftungsstärke, aber keine DRC-Fehler. Super!

Image 5: Error-free DRC
Bild 5: Fehlerfreier DRC

Inbetriebnahme und Validierung

Nach Erhalt der bestückten Platine von MacroFab musste ich bei der Inbetriebnahme vor allem folgende Funktionen prüfen:

  1. Batterieladung einschließlich des Verhaltens der Benutzer- und Lade-LEDs auf der Platine
  2. I2C-Kommunikation über die herausgeführten Stiftleistenpins mit einem externen LCD
  3. Serielle Kommunikation über USB mit meinem Computer

LEDs und LiPo-Ladung

Image 6: QSP32 powers on and charges a single cell LiPo through power chip LTC3557
Bild 6: QSP32 wird eingeschaltet und lädt eine einzelne LiPo-Zelle über den Versorgungs-IC LTC3557
QSP32-Platine an USB-Stromversorgung und kleinem Lithium-Polymer-Akku mit leuchtender LED.

Ich prüfte die LEDs der Platine, indem ich ein einfaches Arduino-Blinkbeispiel programmierte. Damit zeigte sich auch, dass die Regelung von USB (5V) auf 3.3V für den MCU ausreichend funktionierte, um ihn über die USB-C-zu-UART-Schnittstelle zu programmieren.

Die aktive LED zeigt, dass eine Stromquelle angeschlossen ist und die LiPo-Batterie über den LTC3557-IC auf der Platine geladen wird. Die hier gezeigte Batterie hat 3.9V.

Alle LEDs funktionieren wie erwartet. Der 20Ω-Widerstand der RX- und TX-LEDs hätte allerdings kleiner sein können, um mehr Helligkeit zu erreichen. Quilter und Macrofab platzierten alle Dioden in der richtigen Orientierung. Ein Lob an Macrofab für die hervorragende Arbeit.

LCD über I2C

Image 7: LCD showing battery voltage over I2C
Bild 7: Das LCD zeigt die Batteriespannung über I2C

Hallo Welt!

Ich schrieb einen kurzen Arduino-Sketch, um die Batterieladespannung über I2C auf einem LCD anzuzeigen. Das für 5V ausgelegte LCD ist bei der 3.3V-Versorgung zwar etwas dunkel, zeigt die Daten aber trotzdem klar an.

Serielle Kommunikation

Image 8: Serial data debugging
Bild 8: Debugging serieller Daten

Mit Arduinos seriellem Monitor untersuche ich einen 12-Bit-Analog-Digital-Wandler (ADC) über die USB-zu-UART-Verbindung. Das Bild zeigt ADC-Werte bei angeschlossener Batterie und wenn der ADC (GPIO35) auf Masse gezogen wird (adcValue: 0).

Designvalidierung

Nachdem alle Funktionen geprüft sind, holen wir das Oszilloskop hervor und betrachten die Integrität der wichtigsten QSP32-Signale genauer.

Stromversorgung

Der Versorgungspfad des QSP32 beginnt am USB-C-Anschluss. Die USB-Spannung gelangt über die Schutzdiode D1 zum Spannungsregler U1. Der 3.3V-Ausgang von U1 führt durch eine Spule, einen Kondensator und ein Widerstandspaar zum ESP32 und zu einer etwas weiter entfernten Testpunkt-Stiftleiste.

Image 9: QSP32 Schematic snippet. 3.3V net highlighted in pink
Bild 9: Ausschnitt des QSP32-Schaltplans. Das 3.3V-Netz ist rosa markiert
Image 10: QSP32 voltage regulator component layout
Bild 10: Bauteillayout des QSP32-Spannungsreglers

Die blaue Linie zeigt den verrauschten Eingang vom USB-Anschluss meines Laptops. Die gelbe Linie zeigt das Signal auf der anderen Seite der Schutzdiode D1, das zugleich den Eingang von U1 bildet.

Image 11: Input to U1
Bild 11: Eingang von U1

Der 3.3V-Ausgang von U1 ist bemerkenswert sauber. Die rosa Linie auf dem Oszilloskop stellt ihn dar. Weitere Filterung durch eine Spule, zwei Kondensatoren und zwei Widerstände ergibt die endgültige 3.3V-Versorgung. Die gelbe Linie zeigt die Messung am Versorgungspin des ESP32 und verdeutlicht die Wirksamkeit dieser Filterung.

Image 12: 3.3V power supply. Pink at U1, yellow at ESP32
Bild 12: 3.3V-Versorgung. Rosa an U1, gelb am ESP32

Signalintegrität: I2C

Die I2C-Leitungen SDA (Daten) und SCL (Takt) sind mit einem generischen 16x2-LCD verbunden. Zur Analyse programmierte ich eine Datenaktualisierung im Sekundentakt. Das Oszilloskop zeigt den Takt gelb und die Daten rosa. Ich erfasste diese Signale direkt an den ESP32-Pins GPIO21 und GPIO22.

Image 13: SCL (yellow) / SDA (pink) signal integrity.
Bild 13: Signalintegrität von SCL (gelb) / SDA (rosa).

Hier dieselben Signale im Detail:

Image 14: SCL (yellow)/ SDA (pink) signal integrity.
Bild 14: Signalintegrität von SCL (gelb) / SDA (rosa).

Signalintegrität: USB

Zur Beurteilung der USB-Signalintegrität maß ich DP_N und DN_P an der USB-UART-Schnittstelle.

Die Signale DP und DN waren im Layout nicht gut aufeinander abgestimmt, weil sie nicht als Differenzpaare geroutet wurden. Ihre Eigenschaften sind zwar ähnlich, sie stimmen aber nicht exakt überein (Bild 16), was die Signalintegrität beeinträchtigen kann. Diese Abweichung kann die Störempfindlichkeit erhöhen und Phasenverschiebungen verursachen. Korrektes Differenzpaar-Routing wird in künftigen Iterationen die Signalzuverlässigkeit insgesamt verbessern.

Trotzdem funktioniert die Programmierung des QSP32 über den USB-C-Anschluss bemerkenswert beständig und zuverlässig. Ich ließ drei Platinen fertigen, und jede verbindet sich sofort.

Image 15: Schematic snippet
Bild 15: Schaltplanausschnitt
Image 16: DM / DP lines signals taken at U2
Bild 16: Signale der DM-/DP-Leitungen, gemessen an U2
Image 17: A zoomed in view of DM and DP
Bild 17: Vergrößerte Ansicht von DM und DP

Fazit

Ich wählte ein ESP32-WROOM-Modul, weil es wesentliche Bauteile wie Antenne, Quarz und Abblockkondensatoren integriert, für die das Quilter-Team noch physikalische Randbedingungen im Produkt ergänzt.

Künftig erstellen wir ein ESP32-Modul vollständig mit Quilter. Die kürzlich ergänzte Differenzpaar-Unterstützung soll in die nächste Revision dieses Designs einfließen.

Quilters automatische Platzierung und Routing funktionierten bei dieser Platine außerordentlich gut und sparten mir mehrere Tage manueller Designarbeit.

Designverbesserungen

  • Quilters Funktion für Differenzpaare nutzen
  • Pulldown-Widerstand an ADCs ergänzen
  • LTC3557 für Batteriebetrieb zusätzlich zur USB-Versorgung konfigurieren
  • TX-/RX-LEDs sind zu dunkel
  • Betriebsanzeige-LED ergänzen
  • Unnötigen EN-Schalter entfernen
  • Die mittlere Stiftleiste durch Testpunkte ersetzen
  • 5V-Ausgang für LCD ergänzen
  • Platine für den „Prototyp“ in Grün fertigen

Nächste Schritte

Auf der QSP32-Plattform möchte ich gemeinsam einen digitalen Audiomixer entwickeln. Das neue Design wird Drehschalter zur Lautstärkeregelung und einen analogen Multiplexer (74HC4051) für die Führung der Audiosignale enthalten.

Links und Ressourcen

Quilter selbst ausprobieren

Project Speedrun zeigte, wie autonomes Layout in der Praxis aussieht und welche Zeitersparnis Quilter ermöglicht. Erleben Sie es jetzt mit Ihrer eigenen Hardware.

Jetzt starten

Validierung des Designs

Nach der Nachbearbeitung bleibt die entscheidende Frage: Funktioniert die Hardware? Beim Einschalten zeigen sich die meisten elektrischen Fehler. Auf diesen Moment freuen sich Ingenieure ebenso, wie sie ihm nervös entgegenblicken.

Weiter zu Teil 4

Nachbearbeitung des Designs

Autonomes Layout liefert ein vollständiges, DRC-geprüftes Design. Die Nachbearbeitung ist ein kurzer Präzisionsdurchlauf, der es für die Fertigung finalisiert.

Weiter zu Teil 3

Kompilieren des Designs

Nach der Vorbereitung wird das Design an Quilter übergeben. In klassischen Abläufen klärt hier ein Ingenieur die Entwurfsabsicht mit einem Layoutspezialisten. Quilter ersetzt dieses Gespräch durch Schaltungsverständnis: Sie laden das Projekt hoch, prüfen die Interpretation der Randbedingungen und starten den Auftrag.

Weiter zu Teil 2