KI-Peripherie: Erste Schritte mit dem MAX78000FTHR von Maxim Integrated
Außerdem sollen solche Zusatzeinheiten nicht viel Energie verbrauchen, weshalb der MAX78000 für den Ultra-Low-Power-Betrieb konzipiert wurde. Da ein MAX78000 energieeffizient und dennoch leistungsfähig ist, kann er laut Hersteller KI-Inferenzen (d.h. die Beantwortung von Fragen wie „Wer ist auf diesem Bild?“ oder „Welches Geräusch war das?") mit weniger als einem Hundertstel der Energie anderer Embedded-Lösungen durchführen.
Ein Convolutional Neural Network
Ein CNN ist eine spezielle Art von neuronalem Netzwerk, das sich an biologische Prozesse anlehnt. Eine Faltung ist eine mathematische Operation, die häufig in der Bild- und Signalverarbeitung anzutreffen ist, und man kann sie sich als eine Art (angepasste) Filterung vorstellen. Ein CNN ist ein Satz von Filtern, die das Eingangssignal auf bestimmte Merkmale hin untersuchen. CNNs sind besonders in der Ton- und Bildverarbeitung nützlich. Daher ist es nicht verwunderlich, dass im MAX78000 auch ein Kamera-Interface und I2S für Audio-Streaming integriert sind. Sein CNN ist für 1D- (Ton) und 2D-Verarbeitung (Bild und Video) optimiert.Neben den bereits erwähnten Modulen und Peripheriegeräten enthält ein MAX78000 die meisten gängigen Peripheriefunktionen, die typischerweise in einem Mikrocontroller zu finden sind. Hinzu kommen einige spezielle Funktionen, die mit IoT-Sicherheit zu tun haben, wie einen Zufallszahlengenerator (RNG) und eine AES-Verschlüsselungs-Engine (Bild 1).
Was ist an Board?
Der MAX78000FTHR (Bild 2) ist ein kleines Modul mit nur 66 × 23 mm Kantenlänge. Bestückt ist es mit einem MAX78000, einer winzigen VGA-Kamera, einem digitalen Mikrofon, Stereo-Audio-I/O, einem microSD-Kartenslot, 1 MB QSPI-RAM, einem SWD-Debugger/Programmer-Port via USB und einem LiPo-Lader. Außerdem gibt es zwei frei verwendbare RGB-LEDs und zwei Taster sowie Erweiterungsanschlüsse, die mit dem Feather-Formfaktor von Adafruit kompatibel sind. Ein separater JTAG-Anschluss ist für die Programmierung und das Debugging des RISC-V-Kerns gedacht.
Was kann man damit machen?
Standardmäßig erkennt die Demo die englischen Wörter „Zero“ bis „Nine“, „Go“, „Stop“, „Left“, „Right“, „Up“, „Down“, „On“ und „Off“. Wenn es das Wort „Go“ erkennt, geht das Demo in den Zahlenerkennungsmodus über, in dem es eine LED so oft blinken lässt, wie das vom Sprecher befohlen wird. Mit anderen Worten: Wenn Sie „Six“ sagen, blinkt die LED sechs Mal. Mit „Stop“ kehrt es in den normalen Modus zurück. Der serielle Monitor gibt Informationen darüber, wie sicher sich die Demo ist.Um über die vorinstallierte Demo-Anwendung hinauszugehen (z.B. um eine Systemsteuerung zu implementieren, wie das Umschalten eines GPIOs oder das Übertragen von Daten über eine andere Schnittstelle), ist eine Entwicklungsumgebung erforderlich. Hierfür hat Maxim das Micros SDK vorbereitet, das Sie kostenlos von dieser Website herunterladen können.
Das SDK besteht aus einer Eclipse-basierten Toolchain, die auch mit anderen ARM-basierten MCUs von Maxim verwendet werden kann. Es enthält die Eclipse IDE, MinGW, GCC-Toolchains für ARM- und RISC-V-Prozessoren, OpenOCD und einige andere Utilities. Darüber hinaus enthält das SDK Bibliotheken, Beispiele und Dokumentation. Mit anderen Worten: Es ist alles dabei, was Sie brauchen, um unter Windows loszulegen.
Los geht's
Starten Sie Eclipse MaximSDK und wählen oder definieren Sie einen Arbeitsbereich. Stellen Sie sicher, dass der Pfad keine Leerzeichen enthält. Wenn dies der Fall ist, kann Eclipse entweder keine Projekte kompilieren oder Ihr Workspace befindet sich nicht dort, wo er sein sollte.
Wenn sich die IDE öffnet, sehen Sie einen Begrüungsbildschirm, den Sie ignorieren und schließen können. Sie können nun entweder ein neues Projekt erstellen oder ein bestehendes Projekt importieren.
Um ein neues Projekt zu erstellen, erweitern Sie die Zeile C/C++ und wählen Sie den Maxim Microcontrollers Wizard, klicken Sie auf Next und geben Sie einen Namen für das Projekt ein. Klicken Sie erneut auf Next und stellen Sie in dem sich öffnenden Dialog den Chip type auf MAX78000, den Board typeauf FTHR_RevA und den Adapter type auf CMSIS-DAP ein. Wählen Sie als Beispieltyp etwas, das dem, was Sie vorhaben, am ähnlichsten ist, und klicken Sie auf Finish, um das Projekt zu erstellen (Bild 3).
Das richtige Board wählen
Nun müssen Sie zunächst das Projekt korrigieren, denn obwohl Sie das Board MAX78000FTHR ausgewählt haben, wird sonst das Projekt für das MAX78000EVKIT erstellt. Dies sollten Sie wirklich beachten, da fast alles im SDK auf dieses Kit voreingestellt ist. Es gibt zwei Möglichkeiten zur Auswahl des richtigen Boards (Sie können sogar beides machen, aber es wird dadurch nicht besser):
- Im Abschnitt Specify the board used des Makefiles das Board FTHR_RevA und EvKit_V1 auskommentieren (Bild 4). Anschließend die Datei speichern.
- Editieren Sie den Build-Befehl, erreichbar über den Properties-Dialog des Projekts im Abschnitt C/C++ Build. Fügen Sie BOARD=FTHR_RevA in das Feld für den Build-Befehl ein (Bild 5) und klicken Sie auf die Schaltfläche Apply and Close.
Zur Sicherheit sollten Sie das Projekt bereinigen, bevor Sie fortfahren. Clean ist über das Projektmenü oder per rechtm Mausklick auf das Projekt im Fenster Project Explorer verfügbar.
Erstellen Sie nun das Projekt und führen Sie es aus oder testen Sie es. Wenn Sie auf run (der grüne Punkt mit dem weißen Dreieck) oder debug (den kleine Bug) klicken, wird möglicherweise ein Fenster mit dem Titel Create, manage and run configurations angezeigt. In diesem Fall erweitern Sie die Zeile GDB OpenOCD Debugging und wählen Sie Ihr Projekt aus, bevor Sie fortfahren.
Wenn Sie im Debug-Modus gestartet haben, wird das Programm am Anfang von main angehalten. Verwenden Sie die im Menü Run verfügbaren Befehle, um das Programm zu durchlaufen und Variablen zu überprüfen.
Importieren eines Beispiels
Klicken Sie im Menü Datei auf Import... um ein Beispiel zu importieren. Expandieren Sie die erste Zeile General und wählen Sie den Wizard Existing Projects into Workspace. Geben Sie das Stammverzeichnis ein. Für die SDK-Beispiele ist dies MaximSDK\Examples\MAX78000. Daraufhin erhalten Sie eine Liste von Beispielen, aus der Sie die zu importierenden auswählen können. Sie können sogar alle Beispiele importieren, wenn Sie möchten.
Um die vorhin begonnene Reise rund um Keywords wieder aufzunehmen, wählen Sie Deselect All und markieren dann kws20_demo. Aktivieren Sie außerdem Copy projects into workspace, da das Beispiel modifiziert werden und das Original erhalten bleiben soll.
Es gibt ein paar Projekte, die Dateien benötigen, die sich nicht in ihrem enthaltenen Ordner befinden. Diese Dateien werden nicht kopiert, wenn Sie ein Projekt kopieren, und die Kompilierung schlägt daher fehl. Sie müssen diese Dateien entweder selbst kopieren oder das Makefile bearbeiten, um den Pfad zu diesen Dateien zu reparieren. Das Projekt cats-dogs_demo zum Beispiel benötigt den Ordner Common - also kopieren Sie auch diesen Ordner (anstatt das Originalbeispiel zu verwenden oder noch schlimmer: den Beispielordner zu Ihrem Arbeitsbereich zu machen).
Nachdem dem Import des Beispielprojekts ändern Sie dessen Target-Board wie oben beschrieben. Dann kommt ein Build des Beispiels und Sie können es ausprobieren. Wenn alles gut funktioniert, können Sie es modifizieren.
Ich habe die KWS-Demo so verändert, dass es den Pin P2.3 high macht, wenn es das Wort „On“ hört und den Pin löscht, wenn es das Wort „Off“ erkennt. Je nach Wort leuchtet die LED entweder grün (Ein) oder rot (Aus). Wenn ein anderes Schlüsselwort erkannt wurde, leuchtet die LED blau, aber der Pin ändert seinen Zustand nicht. Pin P2.4 zeigt die Konfidenz an. Wenn die Inferenzkonfidenz zu niedrig ist (≤95%), geht dieser Pin auf Low.
Schließlich habe ich UART2 zum Mix hinzugefügt. Diese serielle Schnittstelle ist auf den Erweiterungs-Header verfügbar und kann so mit einem anderen System verbunden werden, um auf die Daten zu reagieren, die über diese Verbindung eingehen. Alle Keywords, die mit einer Wahrscheinlichkeit von mehr als 95% erkannt werden, werden über diese Verbindung gesendet. Den Schlüsselwörtern „On“ und „Off“ wird ein „Y,“ vorangestellt, die anderen Schlüsselwörter beginnen mit „N,“. Bei geringer Konfidenz beginnt die Zeichenkette mit „?,“.Dieses willkürliche Kodierungsschema können Sie nach Belieben ändern.
Sie können mein Projekt von GitHub herunterladen. Dort finden Sie auch eine Pin-toggelnde Version der Katzen/Hunde-Detektor-Demo, die zusätzliche Daten auf UART2 ausgibt.
Bei MAX78000FTHR wichtig
Wenn Sie mit dem MAX78000FTHR zu arbeiten wollen, sollten Sie die folgenden Aspekte beachten:
- Der Spannungspegel an den I/O-Ports ist standardmäßig auf 1,8 V eingestellt. Sie können dies pro Pin ändern, indem Sie das Feld vssel der Struktur mxc_gpio_cfg_t ausfüllen, wenn der Pin mit der Funktion MXC_GPIO_Config konfiguriert wird. Für 3,3 V benötigen Sie MXC_GPIO_VSSEL_VDDIOH(Standard ist MXC_GPIO_VSSEL_VDDIO, ohne das „H“ am Ende).
- Das Problem der Spannungspegel gilt auch für die alternativen Pin-Funktionen wie TX und RX von UART2. Allerdings sind deren Pin-Konfigurationsstrukturen schreibgeschützt, so dass Sie das Feld vssel nicht ändern können. Als Workaround können Sie zuerst die Struktur kopieren und die Kopie modifizieren, um den Pin wie jeden anderen Pin zu (re)konfigurieren. Wenn Sie einen besseren Weg kennen, lassen Sie es mich bitte wissen.
- Die Funktion MXC_GPIO_OutPut ließ mich den Wert eines Pins nicht setzen, ich musste stattdessen MXC_GPIO_OutSet und MXC_GPIO_OutClr verwenden. Die Ursache scheint der übergebene Pin-Wert zu sein. „0“ funktioniert wie erwartet, aber nicht „1“. Damit es funktioniert, übergeben Sie ihn als „-1“ (minus eins, d.h. 0xffffffff)...
- Maxim hat Repositories für die MAX78000-Boards und -Tools auf GitHub eingerichtet, wo Sie die neuesten Versionen von allem finden können, einschließlich Tutorials und Beispiele.
- Das SDK kommt mit MinGW als Alternative zu Eclipse. Wenn Sie also eine Konsole statt einer IDE bevorzugen, sind Sie ebenfalls bestens gerüstet.
- Auf der winzigen Kamera des MAX78000FTHR befindet sich möglicherweise eine Schutzfolie (Bild 6). Entfernen Sie diese unbedingt, bevor Sie kamerabasierte Anwendungen ausprobieren.
Experimentieren
Nun können Sie mit maschinellem Lernen und künstlicher Intelligenz auf dem MAX78000FTHR-Board experimentieren. In diesem Beitrag wurde nur an der Oberfläche dieses leistungsfähigen Boards gekratzt, und es werden noch einige tiefer gehende Artikel folgen. Sie haben gesehen, wie man die Entwicklungsumgebung einrichtet und einige Beispiele modifiziert, um die vortrainierten KI-Beispiele in eigenen Anwendungen nutzen zu können.
Eines der nicht angesprochenen Themen ist das KI-Training. Obwohl es eine zeit- und ressourcenaufwändige Aufgabe ist, muss es durchgeführt werden, wenn Sie möchten, dass die KI-App mit Ihren eigenen Daten arbeitet. Weitere Informationen dazu finden Sie in den Maxim-Repositories auf GitHub.
Übersetzung: Dr. Thomas Scherer
Sind Sie bereit, innovative Lösungen für künstliche Intelligenz (KI) zu entwickeln?
Dann setzen Sie den Ultra-Low-Power-Mikrocontroller MAX78000 von Maxim in einer aufregenden neuen Anwendung ein und nehmen am MAX78000-AI-Design-Wettbewerb (powered by Elektor) teil.