Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Softwaredoku
Hochschule Karlsruhe Logo F & E - Projekt Master
EncoderFT-32
Sommersemester 2019
Timo Traenkel
Tim Brachat
Maximilian Schmitz

Software Dokumentation

Im Folgenden soll ein Überblick gegeben werden, welche Softwaremodule für das Auslesen und Ansteuern, sowie der Realisierung der Regelung nötig sind.

Im Rahmen des Projekts wurde eine Datei „GlobalDefinitions.h“ entwickelt, um Variablen in ihr zu deklarieren und definieren. Die verschiedenen Klassen (CEncodermotor, PID, TaskHandle) greifen alle auf „GlobalDefinitions.h“ zu und benötigen den Zugriff auf die in ihr gespeicherten Variablen, um volle Funktion zu gewährleisten.

 

Programmablauf

 

Mit Start des Programms FT32_Encoder werden in der Setup-Funktion 2 eigenständige Tasks gestartet, auf welche im Weiteren näher eingegangen wird. Die Regelung wird aktiviert und wichtige Einstellungen, wie Interrupts, vorgenommen. In der Loop()-Funktion wird die Geschwindigkeit des Fahrzeugs gesetzt und die Tasks übernehmen die Regelung, sowie die Motoransteuerung.

CEncodermotor

Ein kurzer Überblick soll über die Klasse CEncodermotor gegeben werden. Auf Konstruktoren/Destruktoren wird nicht eingegangen, da es sich jeweils um Standard Konstruktoren/Destruktoren handelt.

-          Start()

o   Setzt die Startbedingungen um die Encodermotoren zu betreiben

-          printMotors()

o   Gibt Informationen, wie wichtige Laufvariablen (i, turnSpeed) oder aktuelle Werte der Regelvariablen für beide Motoren, aus.

-          setMotorScale()

o   Setzt die Motordrehrichtung und einen Skalierungsfaktor bei unterschiedlichen Drehzahlen der beiden Räder

-          setMotorSpeeds()

o   Fragt ab, ob die Geschwindigkeitsvorgabe mit einer Anfahrtsrampe kommt. Ruft setMotorScale() auf.

 

PID-Library

Wichtige Funktionen der PID-Library sollen hier kurz erklärt werden.

-          PID-Kontruktor()

o   Baut ein Objekt des Typs PID. Dabei werden Variablen, wie Input, Setpoint und Output referenziert und Regelparameter übergeben.

-          SetSampleTime()

o   Zeitintervall mit welchem ein neuer Output errechnet wird.

-          SetOutputLimits()

o   Output-Spannweite wird hier übergeben.

-          SetMode()

o   An-/Ausschalten der Regelung

 

TaskHandle

Mit Start des Programms „FT32_Encoder“ werden, wie schon vorgehend erwähnt, in der setup()-Funktion zwei eigenständige Tasks gestartet. Der ESP32 besitzt 2 Rechenkerne. Auf Core 1 wird die setup()-Funktion, sowie die loop()-Funktion abgearbeitet. Um weitestgehend unabhängig von den Arduino-Funktionen zu sein, benutzen beide Tasks den Core 0.

Task „RegelTask“

Mit Start des RegelTasks werden Flags zur Überprüfung der Fahrrichtung kontrolliert. Laufvariablen werden gesetzt um den Setpoint der Regelung vorzugeben. Dabei wird auf eine Anfahrtsrampe überprüft. Im Fall Anfahrtsrampe werden die Laufvariablen kontinuierlich erhöht/erniedrigt, sowie ein neuer Setpoint mit jeder Erhöhung/Erniedrigung der Laufvariable gesetzt. Falls keine Anfahrtsrampe vorliegt, wird der Reglerinput sofort gelesen/gesetzt. Anschließend berechnet der Regler den Output, welcher im nächsten Schritt auf den PWM-Channel geschrieben wird.

 

 

 

 

 

 

 

 

 

Task „FeedbackTask“

 

Um kontinuierlich Feedback der Encoder zu erhalten, wurde ein eigener Task mit dieser Aufgabe entwickelt. Dieser wartet ein bestimmtes Intervall ab, liest die Motorumdrehungen, berechnet hieraus die aktuelle Raddrehzahl und setzt den Encodercounter wieder auf Null. So kann gewährleistet werden, dass selbst Teilumdrehungen des Rades wahrgenommen werden.




  Mit Unterstützung von Prof. J. Walter Sommersemester 2019