TLE9879 BLDC Shield von Infineon
headerimage

TLE9879 BLDC Shield von Infineon

Vor einiger Zeit kaufte ich mir für den Arduino UNO ein Shield für einen Brushless DC Motor von Infineon, Typ "BLDC_SHIELD_TLE9879". Die Idee ist, einen kleinen, aber durchaus Leistungsstarken BLDC-Motor damit anzusteuern. Die Drehzahl des Motors sollte zwischen 5000 und 20000 1/min einstellbar sein und er sollte, gerade im niedrigeren Drehzahlbereich, also so zwischen 5000 und 7000 ordentliches Drehmoment besitzen.

Der TLE9879 ist aus meiner Sicht ein wirkliche guter Controller, zumal er u.a. FOC (Field Orientated Control) beherrscht und lt. Infineon die Parameter (z.B. Polparzahl, KP und KI Faktoren etc.) über das Schield einstellbar sind. Das Bild zeigt meine Komponenten, wobei der Motor da noch nicht angeschlossen ist.

Also habe ich zunächst das Demoprogramm, welches Infineon für den UNO zur Verfügung stellt kompiliert und hochgeladen, keine Fehler oder sonstige Meldungen. Der Motor lief kurz (so 5 Sekunden) und blieb dann stehen, so wie es auch im Code vorgesehen ist.

Alles gut, oder doch nicht? Bei einer Anpassung des Codes (ich habe einen Taster zum Ein- und Auschalten des Motors implementiert) stellte ich nach Messungen fest, dass die Angabe der Drehzahl in der Funktion

shields->setMotorSpeed(1000, BOARD1);

nicht stimmte. Bei 1000 läuft der Motor mit 8000 Umdrehungen pro Minute. Also muss das wohl mit den Polpaaren zu tun haben, ich setzte also mit shields->setParameter(FOC_POLE_PAIRS,8, BOARD1); die Polpaarzahl auf 8 (auch wenn ich leider keine Daten des Motors habe!), um zu testen, ober der Motor mit der gewünschen (oder einer anderen) Drehzahl läuft. Leider tat er das nicht und auch weitere Versuche, die gewünschte Drehzahl mit Änderung der Polpaare zu erreichen, schlug fehl. Durch die o.g. Messung konnte ich also einen Faktor von 8 bzw. 0,125 feststellen, so dass ich den Code entsprechend ändern musste. Bei shields->setMotorSpeed(625, BOARD1); läuft der Motor mit 5000 1/min. Diese Anpassung ist an sich nicht kritisch, man bekommt also die gewünschte Drehzahl dann hin, allerdings wollte ich nun die Reglung etwas anpassen, was leider auch nicht funktionierte. Das Setzen der Parameter

shields->setParameter(FOC_SPEED_KP, 600, BOARD1);
shields->setParameter(FOC_SPEED_KI, 150, BOARD1);

hatten leider auch keinerlei Effekt auf das Regelverhalten des Motors. Wie Schade! Meine anfängliche Euphorie über das Shield war hin, es fing alles so gut an, und nun dieses. Im Forum von Infineon findet man dazu die Aussage, das es "Lücken im Arduino Code" gibt und das man dabei ist, daran zu arbeiten. Als Workaround müsse man auf die Toolchain von Infineon zurückgreifen und mittels J-Link den TLE9879 direkt mit den Parametern versehen, dann sollte es klappen...

Ein OLED-Display habe ich in der Zwischenzeit hinzugefügt:

Workaround, um Parameter für den TLE9879 einzustellen

Also zunächst nochmal: Der Code im TLE9879 ist lückenhaft und muss geändert werden. Dazu gibt es im Infineon Forum den Hinweis zum einen, was da lückenhaft ist und und zum anderen, wie man dies selber "zurecht biegen" kann. Auf der Seite https://community.infineon.com/t5/MOTIX-MCU/BLDC-SHIELD-TLE9879-setParameter-Working/td-p/383020 sieht man, welche Zeile Code ergänzt werden muss. Ja in der Tat, es ist offenbar nur EINE ZEILE CODE die fehlt !!! Diesen Artikel könnte ich jetzt beenden und sagen, das dies ein Garantiefall ist, den Infineon nachbessern muss, denn lt. der Produktseite des Boards (https://www.infineon.com/cms/en/product/evaluation-boards/bldc_shield_tle9879/) kann man die Parameter des Motors einstellen (Zitat: "Motor parameters can be set for each Shield individually"). Das ist aber nicht der Fall. Das wäre so, also ob bei einem Auto das Lenkrad fehlt. Da muss der Hersteller auch nachbessern. Ich bin daher auch am Überlegen, das Board zu Infineon zwecks Nachbesserung zu schicken.

Dennoch möchte ich auf den Workaround, der im Infineon-Forum beschrieben wird, eingehen.

Zunächst einmal sei gesagt, dass dieser Workaround viel Geduld und eine strukturierte Vorgehensweise verlangt. Es ist also für jemanden, der mal schnell an den Parametern etwas ändern möchte, einen sagen wir, ein nicht geradliniger Weg. undecided Folgende Voraussetzungen sind zunächst notwendig:

- PC / Laptop mit Windows 10. Linuxuser haben da leider das Nachsehen.

- J-Link Adapter von Segger (SEEHR problematisch, da EXTREEM teuer!)

- Diverse Softwareinstallationen notwendig (siehe auch Infineon Forum und das TLE987x_EvalKit_Getting_Started.pdf etc.):

Die notwendige Software:

Download und installation Keil μVision5:

https://www.keil.com/demo/eval/arm.htm -> Registrierung notwendig

Download Infineon Toolbox und darin dann die Installation des "Config Wizard" VERSION 1.8

https://www.infineon.com/cms/en/design-support/tools/utilities/infineon-developer-center-idc-launcher/ -> Registrierung notwendig

Download und Installation des Segger J-Link Driver

https://www.segger.com/downloads/jlink/JLink_Windows.exe -> Direkter Download möglich

Download des SDK für den TLE9879 (Pack Installer) über Keil μVision5

https://www.keil.com/boards2/infineon/tle9879evalkit/#!#third-party-download-dialog -> Wird nach Infineon verlinkt, direkter Download möglich

(Auch ich bin derzeit dabei, dies zu testen, weitere Infos folgen. Stand: 02.09.2022)

Update 11.03.2023:

Wie aus dem Infineon Forum zu erfahren war, muss der Compiler, der beim Download des Keil µVision5 mit dazu kommt, auf die Version 5 downgegraded werden. Das ist schwerer als gedacht, denn die Anmerkungen im Forum sind so ohne weiteres nicht machbar. Auf https://community.infineon.com/t5/MOTIX-MCU/Keil-%C2%B5vision5-errors-when-compiling-example-Timer2Blink/td-p/383346 berichtet ein User, dass er den Compiler nicht auf die Version 5 umstellen kann, so war es bei mir auch. Im Fenster zur Einstellung des "Targets" sieht man dies, "Missing: Compiler Version 5":

Dies ist nun ein weiteres Ärgernis und eine ziemliche Zeitverschwendung, denn man muss nun, nachdem man all die o.g. Tools (erfolgreich) installiert hat, den ARM-Compiler Version 5 installieren. Hier gibt es im Infineon-Forum einen Hinweis, unter dem o.g. Link gibt der Support die Seite https://developer.arm.com/documentation/ka005073/ an. Dort findet man dann einen Link "Arm Compiler downloads index", wo man dann auf die nächste Seite geführt wird (https://developer.arm.com/documentation/ka005198/latest) und dann dort, unten in der Tabelle bei "Arm Compiler 5.06 update 7 (build 960)" auf https://developer.arm.com/downloads/view/ACOMP5 weiter geleitet wird, wo nach nochmaliger Registrierung mit Telefonnummer man dort die Software endlich herunter laden. Sehr verwirrend, wie der User auf dem Infineon Forum auch schon sagte. Warum hat Infineon nicht gleich auf den letzt genannten Link verwiesen? So geht "Fast Prototyping" jedenfalls nicht!

Nach dem Herunterladen der Sofware kann diese Installiert werden, wenn man nun aber denkt, das wars und alles läuft, der irrt.  Die Software wird in einem Verzeichis unter "Programme(x86)" installiert und muss anschließend in das Verzeichnis kopiert werden, wo die Keil µVision Software installiert wurde.

Die notwendige Hardware:

Hier hört der Spaß eigentlich auf, denn so ein Segger-Adapter kostet mindestens 100€ und ist für solch eine Anwengung, nämlich das Testen des TLE9879 vollkommen indiskutabel. Eine andere Alternative wäre ein anderes Board, das TLE9879-Eval Board, welches bereits einen Programmierapter für den TLE9879 beinhaltet.

Weiteres folgt...

 

 

 

 

Letzte Bearbeitung: 01.04.2023, 23:19
nach oben