Der Sprung von Arduino-basierter Hardware zum Erstellen Ihrer eigenen PCBs mit Mikrocontrollern scheint zunächst ein unglaublich entmutigender Prozess zu sein. Diese Fähigkeiten zu erlernen eröffnet jedoch eine Vielzahl von Projektmöglichkeiten und vermittelt Ihnen brauchbare praktische Elektronikkenntnisse.
In diesem Artikel erfahren Sie alles, was Sie brauchen, um Ihre eigenen maßgeschneiderten, auf Mikrocontrollern basierenden Hardware-Designs zu erstellen. Sie werden sehen, dass das eigentlich gar nicht so schwer ist, da die Hersteller von Mikrocontrollern im Laufe der Jahre versucht haben, die Lernkurve weniger steil und ihre Geräte leichter zugänglich zu machen. Dies sowohl aus elektrischer Sicht als auch – ebenso wichtig – aus programmiertechnischer Sicht.
Beim nächsten Mal werden wir dann untersuchen, wie man den Mikrocontroller und die unterstützenden Schaltungen mit Altium Designer auf einer Leiterplatte anordnet.
So wie bei fast jeder Art von integriertem Schaltkreis gibt es eine unglaublich große Anzahl von Mikrocontrollern, aus denen man wählen kann.
Es gibt viele verschiedene Hersteller (z. B. Texas Instruments, STMicroelectronics, Espressif – um nur ein paar zu nennen), Pakete (z. B. BGA, QFN, LQFP), Flash- und RAM-Größen, Kerngeschwindigkeiten und viele weitere Parameter, die zu entscheiden sind.
Um ganz ehrlich zu sein, wenn Ihre Anforderungen nicht unglaublich spezifisch sind, gibt es zwischen den verfügbaren Optionen der Hersteller keine allzu großen Unterschiede, was die Schnittstellenfunktionen und die Leistung betrifft. Sich für eine der großen Marken zu entscheiden ist eine ziemlich sichere Sache.
Für den Großteil meiner Projekte verwende ich die STM32-Mikrocontroller von STMicrolectronics (Haftungsausschluss: Ich habe keine Verbindung oder Vereinbarung mit STMicroelectronics - ich mag einfach ihre Produkte).
Die Gründe für diese Wahl liegen in der sehr benutzerfreundlichen Toolchain (STM32CubeIDE), die eine Planung der Pinbelegung ermöglicht, in der Lieferung mit einer Hardware-Abstraktionsschicht (HAL) für eine unkomplizierte Firmware-Entwicklung und in der großen Auswahl an Mikrocontrollern mit unterschiedlichen Fähigkeiten. Darüber hinaus ist ihr Debugger (STLink) kostengünstig und einfach zu bedienen.
Ich würde dringend empfehlen, die Websites der Großhändler und Hersteller zu durchstöbern, eine - für Sie - geeignete Mikrocontroller-Familie zu finden und dann bei diesen Bauteilen zu bleiben. Auf diese Weise benötigen Sie nur eine Art von Debugger, die Hardware-Designs sind von Projekt zu Projekt sehr ähnlich, und Ihr Firmware-Entwicklungsprozess wird immer vertrauter - anstatt zwischen verschiedenen Toolchains hin- und herspringen zu müssen.
Ein zusätzlicher Vorteil, wenn man von Arduino-basierten Designs abweicht, ist die Möglichkeit, Debugger zu verwenden. Debugger sind spezielle Programmierschnittstellen, die das Hochladen von Code und die Fehlerbehebung in Programmen in Echtzeit ermöglichen. Zum Beispiel Haltepunkte setzen, Variablen überwachen und so weiter – alles ohne auf einer seriellen Konsole drucken zu müssen.
Es gibt Allzweck-Debugger, die mit einer Vielzahl von Produkten verschiedener Hersteller kompatibel sind. Allerdings bietet jeder Hersteller normalerweise den spezifischen Debugger für seine Mikrocontroller an. Für STM32-Geräte ist dies beispielsweise der ST-Link-Debugger.
Der Debugger wird in der Regel über einen PCB-Header mit dem Mikrocontroller verbunden, der dedizierte Debugging- und Programmier-Pins freigibt. Diese Schnittstelle ist entweder Serial Wire Debug (SWD) oder JTAG - beide sind ein Muss für eine ernsthafte Firmware-Entwicklung.
Sobald Sie sich für eine geeignete Mikrocontroller-Familie mit einem kompatiblen Debugger entschieden haben, wollen Sie bestimmt gleich loslegen mit der Erstellung der eigentlichen Hardware für ein benutzerdefiniertes Projekt.
Das Erstellen des Schaltplans und der typischen erforderlichen Verbindungen für einen Mikrocontroller ist normalerweise ein unkomplizierter, standardisierter Vorgang.
Strom
Zuerst müssen wir den Mikrocontroller mit Strom versorgen. Üblicherweise benötigt ein Mikrocontroller nur eine einzige Versorgungsschiene – und in den meisten Fällen wird diese bei +3,3 V liegen.
Schauen Sie sich das Bild oben an, das den Stromversorgungsbereich eines leistungsstarken STM32H7-Mikrocontrollers zeigt. Stromversorgungseingangspins zum Mikrocontroller werden als VDD (sowie VBAT) bezeichnet, womit die digitale Spannungsschiene gemeint ist. Für jeden VDD-Pin ist ein 100nF-Entkopplungskondensator erforderlich, der in der Nähe der entsprechenden VDD- und VSS- (oder GND-) Pins platziert wird.
Darüber hinaus verfügt der Mikrocontroller Ihrer Wahl möglicherweise über analoge Peripheriegeräte, wie zum Beispiel einen Analog-Digital-Wandler, der ebenfalls Strom benötigt. Für diesen Versorgungseingang (VDDA und VREF+) müssen wir eine Filterung in Form eines PI-Filters durchführen, da der analoge Bereich empfindlicher gegenüber Rauschen ist, als der digitale Teil des Mikrocontrollers. Dies ist im Bild oben mit C216, FB200 (einer Ferritperle) und C216 gezeigt.
Ihr Mikrocontroller verfügt möglicherweise über interne Regler, die extern mit weiteren Entkopplungskondensatoren umgangen werden müssen. Für diesen speziellen STM32H7 IC werden diese Pins als VCAP bezeichnet. Der Wert von 2,2 uF pro Pin wurde aus dem entsprechenden Datenblatt entnommen.
Konfiguration und Fehlersuche
Es gibt zwei Hauptmethoden, um Code auf den Mikrocontroller hochzuladen. Die erste erfolgt über eine Debug-Sonde und SWD oder JTAG, die zweite über einen Bootloader. Bei STM32-Mikrocontrollern ermöglicht der Bootloader dem Benutzer das Hochladen von Code über UART, I2C, USB und ähnliche Schnittstellen (geräteabhängig!), ohne einen Debugger zu benötigen.
Um den Bootloader zu aktivieren, müssen wir den BOOT0-Pin auf High ziehen, bevor wir den Mikrocontroller einschalten.
Um das Programm dann auszuführen, müssen wir BOOT0 auf Low ziehen, bevor wir das Gerät erneut einschalten. Daher bietet es sich an, den Zustand von BOOT0 beispielsweise über einen Schalter umschaltbar zu machen.
Wenn der Mikrocontroller ausschließlich über einen Debugger programmiert wird, können Sie BOOT0 dauerhaft auf Low (Masse) legen.
Als Debug-Schnittstelle habe ich mich für dieses Design für SWD entschieden, bei dem es sich um eine Zweidrahtschnittstelle handelt (Daten: SWDIO und Uhr: SWCLK). Außerdem lege ich das SWO-Signal (Leiterbahn) frei, mit dem ich Variablen in Echtzeit aufzeichnen kann, und die NRST-Leitung (Reset, invertierte Logik), die, wenn sie auf Low gezogen wird, einen Hardware-Reset des Mikrocontrollers durchführt.
Die Signale werden an einen Debug-Header mit optionalem, aber dringend empfohlenem ESD-Schutz in Form von TVS-Dioden angeschlossen.
Quarz
Während die meisten Mikrocontroller einen internen Oszillator enthalten, der für eine große Anzahl von Designs ausreichend ist, zahlt es sich in der Regel aus, einen externen Quarz (oder Oszillator) an den Mikrocontroller anzuschließen.
Insbesondere für STM32-Geräte gibt es zwei Arten von Oszillatoren. External High-Speed (HSE, für allgemeine Timing-Zwecke) und External Low-Speed (LSE, für die Echtzeituhr). Für die meisten meiner Projekte reicht der HSE-Oszillator.
Das Bild oben zeigt die bewährte Methode zum Anschließen eines externen Quarzes an den Mikrocontroller. Die maximal und minimal zulässige Frequenz des Quarzes ist im Datenblatt des Mikrocontrollers angegeben.
Sie müssen Belastungskondensatoren (in diesem Beispiel C200 und C201) hinzufügen, die von der im Datenblatt des Quarzes angegebenen Lastkapazität abhängen. Sobald Sie die Lastkapazität des Quarzes haben, subtrahieren Sie 3 bis 5 pf Streukapazität und multiplizieren diese Zahl schließlich mit zwei, um den erforderlichen Kapazitätswert zu erhalten.
Die Aufgabe des Feed-Widerstands (in diesem Fall R214) besteht darin, eine Übersteuerung des Quarzes zu verhindern, was zu unerwünschten Oberschwingungen führen kann. Ein Wert in der Größenordnung von 10 s Ohm ist normalerweise ausreichend.
Mit diesen Anschlüssen, und natürlich mit einer geeigneten Stromversorgung für die VDD-Schiene, hat der Mikrocontroller alles, was er zum Hochfahren und für die Programmierung braucht. In diesem Zustand ist er jedoch etwas nutzlos, da wir ihn an kein Peripheriegerät angeschlossen haben.
Für STM32-Geräte können Sie entweder das Datenblatt verwenden, um zu sehen, welche Pins welche erforderliche Funktion (I2C, UART usw.) ausführen können, oder die sehr praktische und kostenlose STM32CubeIDE-Toolchain von STMicroelectronics. Auf diese Weise können Sie schnell erkennen, welche Peripheriegeräte verfügbar sind, und eine Pinbelegung für Ihre Hardware einrichten.
Da die Planung der Pinbelegung sehr projektspezifisch ist, werden wir in diesem Artikel nicht auf die Details eingehen. Wenn Sie mehr erfahren möchten, sehen Sie sich unbedingt dieses Video an, in dem alle erforderlichen Schritte gezeigt werden.
Im nächsten Blogbeitrag erstellen wir eine einfache Pinbelegung und gehen dann optimale Vorgehensweisen für das PCB-Design mit Mikrocontrollern durch. Zum Beispiel die beste Platzierung der Entkopplungskondensatoren, des Quarz-Oszillators und des Debug-Headers.