Ausarbeitung

1. Einführung
2. Vorgehenweise
    2.1. Hardware
    2.2. Software
3. Test des Systems
4. Abschlussvideo

1. Einführung:

Für das Projekt wurden folgende Materialien verwendet:

 

2. Vorgehenweise:

2.1 Hardware:

Die Hardware, welche zur Positionsbestimmung eingesetzt wird, besteht grob aus den folgenden vier Komponennten.

angebrachte Maßverkörperung und Sensor Codemuster

Das Codemuster wird mithilfe eines Sensors (Reflektionslichttaster MRL 601) erfasst. Dieser wurde in ca. 5 mm Entfernung von der Maßverkörßerung angebracht (siehe Bild oben rechts). Der Sensor liefert eine analoge Ausgangsspannung je nachdem wie viel das ausgesendete Infrarotlichts vom Untergrund reflektiert und vom Phototransistor im Sensor empfangen wird. Das Sensorausgangssignal wurde mit dem Oszilloskop analysiert. (Genaueres hierzu siehe: Messung des Sensorsignals mit dem Oszilloskop)

Zur Auswertung des Signals und Berechnung der Position wird das Microcontrollerboard STM32F746G - DISCO eingesetzt. Hierzu wird das Ausgangssignal des Schmitt-Triggers auf einen GPIO-Pin (Arduino Uno V3 connectors) des STM32F746G - DISCOs gegeben. Zur Auswertung des Signals wurde eine Software geschrieben, welche im Folgenden näher beschrieben wird.

An der Kameraschine befinden sich aktuell zwei mechanische Endschalter. Es handet sich hierbei um Öffner, welche jeweils über zwei Kabel direkt mit dem Schrittmotor verbunden sind. Ursprünglich war geplant, den linken Endschalter (Motorseite) mit einem Pin von Arduino Uno V3 des STM32F746G-DISCOs zu verbinden, sodass durch einen weiteren Interrupt der Flankencounter auf 0 gesetzt werden kann.
Bei der zuvor durchgeführten Messung der Spannungspegel wurde jedoch folgendes festgestellt:

  1. Die Betriebsspannung des Motors beträgt 24 Volt.

  2. Der Endschalter (Öffner) ist einerseits an +Ub des Netzteils (24V) und andererseits an einem Eingangspin des Motors angeschlossen.

  3. Die Masse des Motornetzteils und die Ground-Pins des STM32F746G-DISCOs sind bei Spannungsversorgung mit einem PC über das Stromnetz verbunden, sodass diese das gleiche Potential besitzen.

Würde man jetzt den Endschalter mit einem der Pins des STMs verbinden, so würde dieser Pin bei unbetätigtem Schalter mit einer Spannung von +24V beaufschlagt, was weit auserhalb des zulässigen Bereichs liegt. Dies würde den STM zerstören.
Als Abhilfe müsste entweder ein Spannungsregler vorgesehen werden, welcher die Spannung auf max. 3,3 V reduziert, oder ein zweiter Endschalter (Öffner/Schließer) angebaut werden, der nur mit dem STM verbunden ist.

 

2.2 Software:

2.2.1 Entwicklungsumgebung

Zur entwicklung der Software für das Microcontrollerboard STM32F746G-DISCO wird die Entwicklungsumgebung System Workbench für STM32 eingesetzt. Vor der Programmierung muss die Hardware entsprechend konfiguriert werden. Für die Konfiguration wird das Tool STM32CubeMX eingesetzt. Diese beide Software können nach einer Anmeldung von der ST-Homepage heruntergeladen werden.

2.2.2 Vorhaben:

Zur Berechnung der zurückgelegten Strecke wird versucht, die Segmente des Code-Musters der Maßverkörperung beim Verfahren des Schlittens zu zählen.

2.2.3 Lösungsmöglichkeiten/Realisierungen

2.2.3.1 Lösungmöglichkeit/Realisierung 1: Hardware-Timer als Zähler

Das Sensor-Ausgangssignal wird an einem (Input-)Pin des Microcontrollers gelegt. Es handelt sich um ein Rechtecksignal (Highpegel 3,3 V und Lowpegel 0 V). Die Frequenz des Signals hängt von der Drehgeschwindigkeit der Maßverkörperung ab, welche wiederum von der Verfahrgeschwindigkeit des Schlittens beeinflußt wird.

Um die Prozessorlast möglich gering zu halten kann ein Hardware-Timer zum Zählen des steigenden (fallenden) Flankenwechsels benutzt werden.

Der STM32F746G-DISCO besitzt einige Hardware-Timer, die für unterschiedliche Anwendungen konfiguriert werden können. (Siehe hierzu: STM32 cross-series timer overview). Unter anderem gibt es einen sog. Encoder Mode. Da normale Encoder in der Regel zwei zueinander phasenverschobene Ausgangssignale besitzen, werden in diesem Modus zwei Eingänge vorgesehen. Je nachdem welcher Eingang dem Anderen vor- bzw. nacheilt, kann so die Drehrichtung erfasst und ein Direction-Bit (DIR-Bit) geschaltet werden. In Abhängigkeit vom DIR-Bit zählt der Timer aufwärts bzw. abwärts. Folgende Abbildungen verdeutlichen dies:

Bei der X2-Auflösung wird nur bei den steigenden und fallenden Flanken von einem Signal in Abhängigkeit des anderen Signals auf- oder abwärts gezählt. Bei der X4-Auflösung wird bei den steigenden und fallenden Flanken von beiden Signalen auf- oder abwärts gezählt.

Es wurde Folgendes versucht:

Der Vorteil dieser Lösung bestünde darin, dass eine extra zum Zählen vorhandene Hardware-Einheit (Timer/Counter) des STMs zum Zählen des Flankenwechsels eingesetzt würde, sodass die eigentliche CPU dadurch nicht belastet wird.

2.2.3.2 Lösungmöglichkeit/Realisierung 2: Interrupt-Service-Routine

Bei dieser Lösungsmöglichkeit wird bei jedem steigenden (fallenden, steigenden/fallenden oder fallenden/steigenden) Flankenwechsel ein externer Interrupt ausgelöst. In der dazu gehörigen Interrupt-Service-Routine wird eine Zählvariable je nach Verfahrrichtung hoch oder runter gezählt. Der erfasste Zählerstand kann dann in lineare Länge umgerechnet werden.

Im Folgenden wird die Realisierungschritte vorgestellt:

1. Auswählen der Richtigen CPU 2. An Pin PI3 (entspricht D7 an den Arduino Uno connecters) GPIO_EXTI3 auswählen
3. Configuration --> GPIO --> An Pin PI3 "Pull-Down" und die gewünschte Triggerflane auswählen (hier: "Rising edge trigger detection" 4. Configuration --> NIVC --> EXTI line3 interrupt enablen

Die Datei zur Konfiguration der Hardware wurde wie oben beschrieben mithilfe von STM32CubeMX erstellt. Um den Zählerstand und die Länge ausgeben zu können, wurde ein "Hello World"-Beispielprogram von der Internetseite von ST heruntergeladen. In diesem Programm wurden dann die zuvor erstellten Programmzeilen zur Konfiguration des externen Interrupts 3, sowie die Interrupt-Service-Routine einprogrammiert. Des Weiteren wurden die relevanten Variablendeklarationen hinzugefügt. Eine detaillierte Beschreibung des Quellcodes, sowie einen Link zum Download finden Sie hier: Quellcode

Der Vorteil dieser Lösung besteht darin, dass in der Interrupt-Service-Routine der Zähler je nach Fahrtrichtung hoch bzw. runter gezählt werden kann.

Der Nachtei bei dieser Lösungsvariante ist, dass bei voller Fahrt (3000 mm/min) ca. alle 9 ms ein Interrupt ausgelöst wird, was den STM belastet und die restlichen Programmabläufe verzögert.

 

3. Test des Systems

Nach Bebendigung der Arbeit an der Hardware und Software wurde ein letzter Test des Systems durchgeführt. Dabei wurde eine Messreihe aufgenommen und ausgewertet. Näheres zu diesem Test finden Sie hier: Test des Systems

 

4. Abschlussvideo

Im Folgenden Video ist die Anlage in Betrieb zu sehen. Es wird von einem Endanschlag zum Anderen gefahren und dabei die zurückgelegte Strecke gemessen und auf dem Display des STM32F746G-DISCO ausgegeben.

 

Zurück zum Anfang!