Arduino und Matlab

Da man mit Matlab doch immer öfters in seinem Studium in Kontakt kommt bin ich irgendwann auf die Arduino Integration für Matlab gestoßen.

Was kann man damit machen?

Ein handelsübliches Arduino Board (Nano, Uno Mega, ...) kann man so von Matlab aus über die Serielle Schnittstelle steuern. Es gibt drei verschiedene Programme für den Controller die auf ein bestimmtes Motorshield angepasst wurden, aber einfache Funktionen wie das Setzen von Digitalpins, oder das Auslesen von Digital und Analogpins funktioniert auch ohne Erweiterungsboard. Wenn man natürlich Servomotoren per Matlab steuern möchte, benötigt man das passende Erweiterungsboard mit Motortreiber.

Was benötige ich dafür?

Vorbereitungen zum Installieren

Die Schritte sind exemplarisch für ein Debian bzw. Ubuntu System. Unter Windows funktioniert es genauso mit dem Unterschied, dass man die benötigten Treiber für den FTDI Chip und ggf. dem Programmieradapter vorher oder währenddessen installieren muss.
Ein ISP Programmieradapter wird aber nur gebraucht, wenn die Fusebits des Arduinos nicht richtig gesetzt sind und kein Bootloader auf dem Chip vorhanden ist. Wenn man explizit ein Arduino kauft, sollte der Bootloader schon vorinstalliert sein. In dem Fall ist kein Adapter mehr nötig.

Also erstes sollte Matlab installiert sein. Anschließend lädt man sich die aktuelle Arduino Software herunter. Eine Installation ist eigentlich nicht nötig, da man die Arduino IDE auch so starten kann.
Als nächstes benötigen wir noch das Matlab Support Package für Arduino. Dort ist ein kleines Matlab Skript enthalten, dass die Arduino Integration automatisch in Simulink hinzufügt und die Matlab Pfadvariable ergänzt. Das Skript heißt "install_arduino".

Controller zu einem Arduino machen

Falls man einen neuen Controller verwendet auf dem noch kein Arduino Booloader drauf ist, muss man ein paar Dinge beachten. Zu erst sollte man die Fusebits richtig setzen. In der Regel für einen Quarz um die 16 MHz und einem Bootsektor von 1024 Bytes. Ein paar gängige Typen habe ich in der Tabelle einmal zusammen gefasst. Die Informationen stammen aus dem Konfigurationsdateien der Arduino Software. Daher gebe ich keinerlei Garantie für die Richtigkeit der Angaben. Es ist leider schnell passiert, dass man ein AVR mit falschen Fuse Bits beschreibt. Aber dazu mehr in meinem Artikel zum retten von AVRs.

Angaben aus "hardware/arduino/boards.txt"
Board Controller low fuse high Fuse extended Fuse
Uno Atmega328(p) FF DE 05
Nano Atmega168(p) FF DD 00
Nano Atmega328(p) FF DA 05

 

Die Arduino IDE bietet die Möglichkeit, den Booloader per Controller auf den AVR zu schreiben. Dies hat bei mir aber nur mit dem Programmieradapter funktioniert, der mit avrdude als USBasp funktioniert. Bei den ganzen STK500 oder STK500v2 Adapter oder Nachbauten muss man noch einen Port angeben zum programmieren. Das sieht die IDE aber wohl leider nicht vor. Ansonsten kann man auch in den Konfigurationsdateien der Hardware nachschauen welche HEX Dateien geladen werden und diese manuell auf den AVR flashen. Die ist ja nur ein einziges mal nötig.

Arduino mit der nötigen Firmeware beschreiben

Zum Schluss muss man jetzt noch den Arduino mit der nötigen Firmeware beschreiben. Diese liegt als Projektdatei für die Arduino IDE in dem Matlab Support Package unter "pde/adiosrv/adiosrv.pde" und kann einfach in die IDE geladen werden. Jetzt nur noch den passenden Arduino Typ und Schnittstelle auswählen und dann kann die Firmeware auf den Arduino geflashed werden.
Wenn alles funktioniert hat sollte man den Controller nun per Matlab steuern können. die Passenden Befehle können beispielhaft hier entnommen werden.

Wenn der Zugriff über die Matlab Konsole funktioniert, sollte dies per Simulink auch kein Problem mehr sein.

Wie die Integration in Simulink funktioniert könnt ihr in meinem Howto dazu nachlsen.

PS: Wer Rechtschreibfehler findet, darf sie behalten. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.