Projekte
- Firmwareentwicklung für Industrie-Saugroboter NR-1500
- Webseite erstellt für naraart-design.com
- Firmware für neue Gerätegeneration
- Bootware für neue Servoverstärker Generation mit Multicore Controller
- IPC mit Safety Optionskarte
- Dokumentenvorlagen für den firmeninternen Functional Safety Entwicklungsprozess
- EtherCAT to CAN Gateway - Multiaxes
- Konzept und Treiber Basis für OLED Display Treiber
- EtherCAT to CAN Umsetzer für ECOCOMPACT
- Etablierung des Profinet Feldbustreibers inklusive des Antriebsprofils ProfiDrive.
- EtherCAT Treiber für Mehrachsgeräte erweitern
- Entwicklung eines EtherCAT Feldbustreibers für die ECOVARIO Gerätefamilie
Firmwareentwicklung für Industrie-Saugroboter NR-1500
von August 2023 bis Dezember 2024
Rolle: embedded Software Ingenieur
In diesem Projekt habe ich bei der Firmwareentwicklung eines Saugroboters für industrielle Anwendungen unterstützt. Ich bin relativ spät in das Projekt gekommen, um als Troubleshooter schwere Fehler zu finden und dabei zu unterstützen, die Verfügbarkeit des Gesamtsystems zu erhöhen. Die Entwicklung des Roboters war schon sehr weit fortgeschritten, aber die Software erfüllte bisher nicht das gewünschte Geräteverhalten, das für den Produktstart wichtig war.
Das Unternehmen, für das ich arbeitete, verfolgt in der Produktentwicklung den agilen Ansatz. Themen wurden in Dailys live abgestimmt und in Plannings erfolgte die Planung des kommenden Sprints, was einer Periode von 2 Wochen entsprach. Im späteren Projektverlauf ging es darum, Fehler und unerwünschtes Verhalten, das während der Produkttests festgestellt wurde, zu beheben. In dieser Phase wurden die Plannings ausgesetzt und es wurden akute Fehler, die während der Tests auftraten, in den Dailys besprochen und deren Behebung geplant. Einmal im Quartal fand ein Stage-Planning statt bei dem ich ein besseres Gefühl für die Produktstartegie und die unternehmerischen Ziele erlangen konnte.
Ich konnte den Update-Prozess der sMCU Controller während eines
Firmware-Updates stabilisieren und so robust gestalten, dass es keine Ausfälle
des Gerätes durch korrupte Firmware mehr gab.
Die Verfügbarkeit des Gesamtsystems konnte ich durch eine Verbesserung im
Geräteverhalten bei Erkennung einer Sturzkante erhöhen. Bisher war immer eine
direkte Nutzerinteraktion notwendig, um den Reinigungsvorgang fortzusetzen.
Ich habe das Geräteverhalten dahingehend verändert, dass der Roboter nach
Erkennen einer Kante zunächst zeitweise misst, ob die Bedingungen für einen
möglichen Sturz noch gegeben sind. Wenn das nicht mehr der Fall war, so gab es
seitens der safety Steuerung im Gerät wieder eine Freigabe und die Reinigung
konnte selbstständig fortgesetzt werden.
Das Arbeiten und Nachverfolgen an den konkreten Themen erfolgte über ein Ticketsystem, wodurch Aufgaben klar abgegrenzt und dokumentiert werden konnten.
Zu meinen Tätigkeiten gehörte es:
- Fehlverhalten in der I2C-Kommunikation zwischen Echtzeit Controller und Safety-Controller untersuchen und beheben.
- Implementierung eines Interfaces zur Kalibrierung der Drop-Sensoren, die sich unterhalb des Roboters befinden.
- Registerauszug der Registerwerte der Safety-Controller während eines Safety Ereignisses via I2C auslesen und die Informationen im Journal des Linux-Systems im Markdown Tabellenformat bereitstellen.
- Optimieren der Startreihenfolge von Systemd Services, um einen fehlerfreien und zuverlässigen Systemstart bei unterschiedlichen Startvoraussetzungen zu erreichen.
- Anpassung diverser Service-Beschreibungsdateien.
- Erstellen von Bash Scripts, um das Geräteverhalten für diverse Labortests und Messungen zu steuern.
- Optimierung des bestehenden Skriptes, das den Firmware-Updateprozess der Safety-Controller steuert.
- Analyse großer Journal-Logs zur Identifizierung spezifischer Fehlerfälle, die seitens der QA in Tickets beschrieben und bereitgestellt wurden.
- Abstimmung mit chinesischen Fertiger zur Behebung von Problemen während des Updateprozesses neu hergestellter Geräte.
- Erstellen von Testsoftware für die Safety Controller, zur Erhöhung der Geräteverfügbarkeit.
- Besprechung und Implementierung von Verbesserungen bestehender Sicherheitsfunktionen.
- Erstellung von Unit-Tests auf Basis des Google-Test Frameworks.
- Erstellung von Gerätetests in Python und Integration der Testfälle ins Robot-Framework.
Webseite erstellt für naraart-design.com
von Juli 2023 bis August 2023
Ziel des Projekts war es, die bestehende Webpräsenz meiner Ehefrau zu überarbeiten.
Die Webpräsenz von Nanaart-Design sollte einen frischen Anstrich erhalten.
Meiner Frau war es wichtig, dass die Webseite modern und individuell
sein sollte. Beim Erstellen der Webseite habe ich bewusst auf die Verwendung
fertiger CMS Systeme verzichtet, um dem Anspruch des individuellen Designs
gerecht zu werden.
Auf diese Weise bleiben mir alle Freiheitsgrade in der Gestaltung und der
Funktionalität der Webseite erhalten. Für die Umsetzung des Projektes habe
ich mich auf die Verwendung der 4 Basistechnologien der Webentwicklung
beschränkt.
Verwendete Basistechnologien für die Webseite:
- HTML für die Beschreibung der Inhalte
- CSS für das Styling der Webseite
- JavaScript für die Steuerung interaktiver Elemente auf der Webseite
- PHP für die dynamische Steuerung von Inhalten
Das grundlegende Design der Webseite besteht aus drei Teilen, einem Kopfbereich,
einem Fußbereich und einem Hauptbereich. Der Kopf- und Fußbereich sollen auf
jeder Seite gleich sein. Zur Vermeidung doppelten Codes habe ich mich dafür
entschieden eine Basisseite zu erstellen, die alle drei Berreiche repräsentiert.
In Abhängigkeit der Seite auf der sich der Benutzer befindet wird der Hauptberreich
dynamisch nachgeladen.
Durch diese Maßnahme sind Anpassungen im Kopf- und Fußbereich der Seite immer für alle
Seiten wirksam.
Das responsive Design der Webseite wurde über CSS realisiert. Ab einer bestimmten Bildschirmbreite wird die Webseite passend für Mobile Endgeräte dargestellt. Die Seitenelemente passen sich dynamisch der Fensterbreite an.
Medieninhalte, wie Grafiken, Bilder und Videos werden getrennt vom Code der Webseite vorgehalten, was hauptsächlich in der Codeverwaltung und beim Seitenupload jede Menge Platz spart. Auf die Medieninhalte wird über eine seperate URL zugegriffen, dadurch wird erreicht, dass diese Inhalte leicht ausstauschbar sind, ohne Änderungen am Quellcode der Webseite selbst vorzunehmen.
Firmware für neue Gerätegeneration
von März 2021 bis Juni 2023
Rolle: Product Owner, Scrum Developer
Ziel dieses Projektes ist es, die Firmware für eine neue Gerätegeneration mit einem Multicore Prozessor als Zentrale Einheit zu entwickeln.
Des Weiteren musste ein Konzept entwickelt werden, wie Informationen zwischen den Cores ausgetauscht werden können und welche Informationen aus Laufzeitgründen in einem Shared-RAM zwischen den beiden C28x Cores zur Verfügung gestellt werden müssen. Zu meinen Aufgaben zählte unter anderem die Betreuung des gesamten Firmware Projektes als Scrum Product Owner. In dieser Rolle habe ich das Backlog mit Aufgaben gepflegt und einzelnen Features vor priorisiert, die dann während der Sprintplanung Berücksichtigung fanden. Neben der Rolle des Product Owner hatte ich auch noch die Rolle des Developer inne und habe selbst einige Themen bearbeitet.
Unter anderem habe ich den Basis-Treiber für die Interprozessorkommunikation entwickelt. Mein Treiber hat Methoden zur Verfügung gestellt, der es den andern Entwicklern ermöglicht eigene IPC-Services (inter prozessor communication - services) zu implementieren. Mein früher entwickelter SDO-Handler kam zum Einsatz, um SDO Anfragen an die korrekte CPU weiterzuleiten. Meine Philosophie ist es, dass die Daten dort vorgehalten werden, wo sie benötigt werden. Doppelte Datenvorhaltung sollte weitestgehend vermieden werden.
In meiner Rolle als Developer habe ich noch die folgenden Implementierungen realisiert:
- Blackchannel Implementierung zur integrierten Safety Optionskarte, um einen Austausch zyklischer Safety Daten zwischen dem sicheren Feldbus und der Safety Optionskarte zu realsieren
- SPI Treiber für mehrere IO-Expander Chips.
- Ablaufregime für Lesen und Schreiben der Zustände der erweiterten IO-Expander Chips in einem zyklischen Intervall
- IPC-Services zum Laden und Speichern von remanenten Parametern in einem EEPROM, der von einer CPU verwaltet wird.
- EtherCAT Treiber inklusive Datenaustausch zyklischer Prozessdaten zwischen den einzelnen Cores und dem Feldbus
- FSoE Umsetzung in der Firmware in verständliche Parameteranfragen an die safety Optionskarte USB Treiber
Bootware für neue Servoverstärker Generation mit Multicore Controller
von Februar 2020 bis März 2021
Rolle: Projektverantwortlicher und Embedded Software Ingenieur
Ziel dieses Projektes war es, eine Bootware für einen neuen Multicore Controller aus der TMS Familie von Texas Instruments zu entwickeln.
Dieser Prozessor hat 2 C28x DSP Cores und einen ARM Cortex M4 Core. Jeder Core hat einen internen Programmflash. Jeder Core Flash kann immer nur von dem Core programmiert werden, zu dem er gehört. Im Wesentlichen besteht das Bootware-Projekt also aus drei Firmware Projekten, die den Bootloader bilden.
Die Hauptfirmware läuft auf dem Master-Core (CPU1), dieser Core startet als Erstes und muss die Bootware für die anderen Cores über den internen Message-RAM verteilen und die Cores anschließend starten lassen. Weil das gesamte Bootware-Projekt zu viel Programmflash des CPU1 Cores in Anspruch genommen hätte, wurden Teile der Bootware in einem externen Daten-Flash gespeichert. Der kritische Code, der beim Start-up ausgeführt wird, belegt nur 2 Flashsektoren und lädt die fehlenden Programmteile aus dem externen Flash in den CPU RAM nach.
Anschließend wird der Start-up Code der jeweiligen Co-CPUs in die Message RAMs geladen und die Cores werden gestartet. Sobald die Cores gestartet sind, fordern diese Ihre fehlenden Programmteile mittels Interprozessorkommunikation bei CPU1 an. CPU1 lädt diese Programmteile aus dem externen Daten-Flash und stellt sie dem jeweiligen Core zur Verfügung.
Diese Abfolge des Controller-Starts verlangt ein ausgeklügeltes Mapping verschiedener Firmwareteile in den jeweiligen Linker Files, um zu verhindern, dass Programmteile ausgeführt werden, die noch nicht aus dem externen Daten-Flash in den RAM geladen wurden.
Treiber für interne Kommunikation mit einer im Produkt integrierten Safety Optionskarte
von Januar 2019 bis Januar 2020
Rolle: Projektverantwortlicher Software und Embedded Software Ingenieur
Eine neue Safety Optionskarte sollte in den Servoverstärker integriert werden. Die Kommunikationsschnittstelle zwischen der FS-Karte und der Firmware bestand aus einer UART und einer Protokollspezifikation, die zur Verfügung gestellt wurde. Meine Aufgabe war es, den Kommunikationstreiber zur FS-Karte auf Basis der Interface-Spezifikation zu implementieren.
Die Herausforderung bestand darin, Interface Objekte auf CANOpen Basis zu implementieren. Hinter diesen Objekten wurden entsprechende Callback Methoden implementiert, welche die Objekt-IDs in für die FS-Karte verständliche Parameter Anfragen umgesetzt haben.
Des Weiteren musste der bestehende SDO-Handler so erweitert werden, dass Anfragen nicht direkt ein Ergebnis liefern konnten, weil auf die Antwort der FS-Karte gewartet werden musste, um eine entsprechende SDO-Response an den Client zu senden. Hierzu musste die bestehende und bewährte Umsetzung dieses SDO-Händlers völlig neu entwickelt werden, weil eine Erweiterung in der alten Implementierung nicht möglich war.
Dokumentenvorlagen für den firmeninternen Functional Safety Entwicklungsprozess
von Mai 2018 bis November 2018
Rolle: Functional Safety Ingenieur
Nachdem ich meine Zertifizierung zum "Functional Safety Certified Engineer Development" vom TüV Nord erhalten hatte, wurde ich damit beauftragt, die nötigen Vorlagen für die Dokumentation einer sicherheitsgerichteten Entwicklung anzufertigen. Ich habe in Excel eine Dokumentenübersicht erstellt und die nötigen Dokumentenvorlagen für den Entwicklungsprozess nach DIN 61508 erstellt. Dieser Dokumentensatz dient als Basis für jede FS-Entwicklung. Zur Versionierung des Dokumentensatzes im jeweiligen Entwicklungsprojekt wurde von mir Git empfohlen.
Um den Entwicklungsingenieur im Rahmen der Safety Entwicklung zu unterstützen, wurden innerhalb der Dokumente und in der Dokumentenübersicht mittels VBA diverse Unterstützungen von mir implementiert.
EtherCAT to CAN Gateway - Multiaxes
von Mai 2017 bis Mai 2018
Rolle: Projektverantwortlicher Embedded Software Ingenieur
In diesem Projekt ging es darum, das bestehende EtherCAT to CAN-Gateway, das bereits als Optionskarte für Kompaktantriebe verwendet wurde, für Mehrachsbetrieb zu erweitern. Mit Hilfe dieses Gateway ist es möglich, sämtliche CANOpen Geräte des Kunden an den EtherCAT Feldbus anzuschließen und diese Echtzeitfähig bis 1ms Zyklen zu betreiben.
Über das ESI-File wurde festgelegt, wie viele Geräteachsen an der CAN Schnittstelle zu finden sind. Die maximale Anzahl unterstützter CAN Knoten wurde aus Performancegründen auf vier begrenzt. Für eine Drei-Achs-Variante konnten Zykluszeiten bis 1 ms erreicht werden. Die Vier-Achs-Variante konnte Zykluszeiten bis 2 ms erreichen.
Konzept und Treiber Basis für OLED Display Treiber
von Juli 2016 bis April 2017
Rolle: Embedded Software Ingenieur
Für eine neue Generation von Antriebsreglern soll ein OLED Display zur Anzeige des Gerätezustandes am Servoverstärker selbst zum Einsatz kommen. Aufgabe in diesem Projekt war es, einen Prototyp des Displays in Betrieb zu nehmen und einen ersten Treiber zur Ansteuerung der Anzeige zu entwickeln.
Ich vertiefte mein Verständnis darüber, wie OLED-Displays auf hardwarenaher Ebene angesteuert werden. Hierbei spielten die Anforderungen des Display-Controllers und die Umsetzung der elektrischen Signale eine wesentliche Rolle. Darüber hinaus habe ich gelernt, wie Bit-Maps für verschiedene Schriftarten erzeugt werden können. Dieser Prozess umfasste sowohl die Auswahl geeigneter Fonts als auch die Umsetzung dieser in eine für das Display lesbare Form.
Der TI-DSP auf dem dieser Treiber lief, hat als kleinste Speichereinheit 16-Bit, um Speicher zu sparen, habe ich ein entsprechendes VB-Script geschrieben, welches das Bitmap eines Fonts passend in das 16-Bit Format presst. Ein weiterer wichtiger Aspekt des Projekts war die Beschäftigung mit der Spezifikation der Displayansteuerung über SPI. Ich erlangte tiefe Einblicke in das Zusammenspiel zwischen Timing, Datenformat und den speziellen Anforderungen der OLED-Displayansteuerung.
EtherCAT to CAN Umsetzer für ECOCOMPACT
von Februar 2015 bis Juni 2016
Rolle: Projektverantwortung für die Software
Um einen Kompaktantrieb an den EtherCAT Feldbus anschließen zu können, wurde eine Erweiterungsplatine entwickelt, die mittels CAN-Bus an den Kompaktantrieb intern angeschlossen war.
Meine Aufgabe war es, die Firmware für diese Optionskarte zu schreiben. Der EtherCAT-ASIC war hier für mich erstmals via SPI mit dem Microcontroller verbunden. Eine Herausforderung war es, meinen EtherCAT Treiber so umzuprogrammieren, dass er die Anforderungen auch über die SPI Schnittstelle erfüllen kann. Des Weiteren musste die Firmware gewährleisten, die Prozessdaten rechtzeitig zu verteilen. Die Prozessdaten des Feldbusses mussten via CAN Telegramm an den Antrieb übermittelt werden und die Prozessdaten des Antriebs mussten rechtzeitig empfangen worden sein, um über EtherCAT verschickt werden zu können. Es konnte eine Zykluszeit von 1 ms erreicht werden.
Neue Erfahrungen konnte ich hier auf dem Gebiet der Bootware Entwicklung sammeln, denn es zählte auch zu meinen Aufgaben den Bootloader für diese Optionskarte zu entwickeln, um Software-Updates zu gewährleisten, ohne das Gesamtgerät demontieren zu müssen.
Etablierung des Profinet Feldbustreibers inklusive des Antriebsprofils ProfiDrive.
von September 2012 bis Februar 2015
Rolle: Projektleiter und Embedded Software Ingenieur
Während dieser Zeit wurden die Mehrachsgeräte des Kunden um den Feldbustreiber ProfiNet erweitert. Parallel dazu wurde das Antriebsprofil ProfiDrive implementiert. Wir waren ein Team bestehend aus zwei erfahrenen Softwareentwicklern und konnten durch enge Zusammenarbeit schnell unsere Ziele erreichen. Das Projekt konnte mit erfolgreicher Zertifizierung in einem akkreditierten Testlabor in Erlangen beendet werden.
EtherCAT Treiber für Mehrachsgeräte erweitern
von Oktober 2011 bis August 2012
Rolle: Embedded Software Ingenieur
Ziel dieses Projektes war es, den bestehenden EtherCAT Treiber auf die Mehrachsplattform des Kunden zu bringen. Die Herausforderung bestand dabei darin, den Treiber für mehrere Achsen auszulegen. Dazu musste neben dem bestehende CoE Mailbox Protokoll ein herstellerspezifisches VoE Protokoll entwickelt werden. Diese Anpassung wurde von mir in der Firmware und in der Kommunikations.dll auf PC Seite umgesetzt. Zusätzlich zu diesem Protokoll wurde ein Achsenschalter Objekt eingeführt, mit dem es möglich ist, die herstellerspezifischen Objekte der Achse in jedem EtherCAT Mastersystem zu erreichen.
Entwicklung eines EtherCAT Feldbustreibers für die ECOVARIO Gerätefamilie
von September 2010 bis September 2011
Rolle: Embedded Software Ingenieur
Meine Aufgabe war es, den bestehenden Gerätetreiber in der ECOVARIO Familie so zu erweitern, dass er den EtherCAT Conformance Test besteht. Des Weiteren habe ich die Kommunikationszyklen für den synchronen Prozessdatenaustausch von 1ms auf, 250us gesenkt. Während dieser Arbeiten habe ich erste Erfahrungen mit den DSPs von Texas Instruments sammeln können.