BWP-WS19-02/Dokumentation/AntriebMechanikKommunikation: Unterschied zwischen den Versionen

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche
(Brett sägen und Kugelrad basteln)
(Das Kugelrad)
Zeile 103: Zeile 103:
 
Schließlich einigten wir uns auf ein Kugelrad, da die vorher genannte Problematik hierbei behoben wäre.
 
Schließlich einigten wir uns auf ein Kugelrad, da die vorher genannte Problematik hierbei behoben wäre.
   
*Kugelrad Version 1.0:
+
'''Kugelrad Version 1.0:'''
 
Die erste Version des Kugelrads war eine auf Drähten gelagerte Murmel.
 
Die erste Version des Kugelrads war eine auf Drähten gelagerte Murmel.
 
Hierzu bohrten wir test-weise ein Loch in eine Platte und klebten zur Lochmitte hin 4 Drähte auf, auf welchen die Murmel gleiten sollte.
 
Hierzu bohrten wir test-weise ein Loch in eine Platte und klebten zur Lochmitte hin 4 Drähte auf, auf welchen die Murmel gleiten sollte.
   
*Kugelrad Version 1.1:
+
'''Kugelrad Version 1.1:'''
 
Um das Ganze am Auto montieren zu können sägten wir eine Halterung für die Murmel aus und lagerten die Murmel auf 4 Nägeln, deren Spitzten rund gefeilt wurden.
 
Um das Ganze am Auto montieren zu können sägten wir eine Halterung für die Murmel aus und lagerten die Murmel auf 4 Nägeln, deren Spitzten rund gefeilt wurden.
  +
Der Schwachpunkt bei dieser Konstruktion war die Unebenheit der Murmel. Bei gießen der Murmeln entstehen offenbar kleine rillen die uns zum Verhängnis wurden, wenn die Nägel darin hängen blieben. Außerdem war keine der Murmeln 'perfekt' rund.
[[Datei: Kugelrad_V11_2.png| Kugelrad_V1.1|400 px]]
 
  +
Ein weiterer Nachteil bestand darin die Kugel auf 4 Punkten auf zu legen. Dies gestaltete sich aufgrund der nicht so präzisen Bohrungen als schwierig.
  +
[[Datei: Kugelrad_V11_2.png| Kugelrad_V1.1|300 px]]
 
[[Datei: Kugelrad_V11.png| Kugelrad_V1.1| 400 px]]
 
[[Datei: Kugelrad_V11.png| Kugelrad_V1.1| 400 px]]
  +
  +
'''Kugelrad Version 2.0:'''
  +
Schließlich bestellten wir gehärtete Edelstahlkugeln in der Qualität G28 nach DIN 5401, die extra sorgfältig poliert wurden! Diese Kugeln haben ein maximale Unrundheit von 0,7 µm und eine maximale Rauheit von 0,05 µm. (Verglich der Rauheiten Link: https://www.kugel-winnie.de/Kugel-Winnies-Kugel-Wissen/Qualitaeten/Genauigkeiten-von-Stahlkugeln )
  +
Die Kugel wurde bei www.kugel-winnie.de bestellt (Link: https://www.kugel-winnie.de/epages/62136757.sf/secee124065da/?ObjectPath=/Shops/62136757/Products/010304001 ).
  +
  +
Um die Kugel ideal zu lagern verwendeten wir (diesmal 3, nicht 4) Edelstahlnadeln mit Glasköpfen.
  +
Um die Kugel zusätzlich zu federn wurde eine Scheibe angefertigt auf der die Nadeln aufgelötet wurden und zusätzlich die Unterseite des Autos freigefräst.
  +
[[Datei: Kugelrad_V2_Ring.jpeg| Kugelrad_V2_Ring| 400 px]]
  +
[[Datei: Kugelrad_V2_Ring3.jpeg| Kugelrad_V2_Ring 3| 400 px]]
  +
[[Datei: Kugelrad_V2_Ring2.jpeg| Kugelrad_V2_Ring 2| 400 px]]
  +
  +
Auf den Glasköfen ist die Reibung der Kugel minimal.
  +
[[Datei: Kugelrad_V2_Nadel.jpeg| Kugelrad_V2_Nadel| 400 px]]
  +
  +
Damit die Kugel beim anheben des Autos nicht herausfällt wurde eine Kappe darüber montiert.
  +
Die Kappe ist von einem Kugelrad von Pollin Elektronik genommen (Link: https://www.pollin.de/p/kugelrolle-48x32x20mm-10-kg-stahl-490506 ).
  +
Es wurde lediglich der untere Ring abgeflext, beigeschliffen und M2 Muttern in die Löcher eingepresst und verlötet.
  +
[[Datei: Kugelrad Pollin.jpeg| Kugelrad Pollin| 400 px]]
  +
[[Datei: Kugelrad_V2_Ring_Kugel2.jpeg| Kugelrad_V2_Ring_Kugel2| 400 px]]
  +
  +
Um den idealen Abstand der Kappe ein zu stellen sind Federn zwischen der Kappe und dem Chassis angebracht.
  +
[[Datei: Kugelrad_V2_Feder.jpeg| Kugelrad_V2_Feder| 400 px]]
  +
[[Datei: Kugelrad_V2.jpeg| Kugelrad_V2| 400 px]]
  +
  +
Diese Variante funktioniert selbst auf sehr glatten Unterflächen noch sehr gut.
  +
[[Datei: Kugelrad_V2_vorne.jpeg| Kugelrad_V2_vorne| 400 px]]
  +
[[Datei: Kugelrad_V2_unten.jpeg| Kugelrad_V2_unten| 400 px]]
  +
  +
Da die Kugel mit 66 gram relativ schwer ist wurde sie dichter zur Radachse gesetzt als ursprünglich geplant, um bei möglicher Schieflage der Fahrstrecke das Fahrzeug nicht zu sehr zur Seite zu ziehen.
  +
[[Datei: Kugelrad_V2_oben.jpeg| Kugelrad_V2_oben| 400 px]]
   
 
==Motorensteuerung==
 
==Motorensteuerung==

Version vom 3. Dezember 2019, 14:37 Uhr

Teamstruktur

zur 1. Projektphase:

  • Ellen (Manager)
  • Felix (Tester)
  • Laura (Dokumentation)

zur 2. Projektphase:

  • Ellen (Tester)
  • Felix (Dokumentation
  • Laura (Manager)

Teaminterne Milestones

  • fahrendes Auto
  • fahrendes Auto mit Sensor Austausch
  • Drehungen
  • Auto montiert
  • Kommunizierendes Auto

Arbeitspakete

Mechanik & Konstruktion
Aufgabe Teilaufgabe Zuordnung geplanter Aufwand Zieldatum realer Aufwand Status
Chassis Entwurf Ellen, Felix, Laura 17h 04.11.19 20h 100%
Brettsägen, Kugelrad basteln Ellen, Felix, Laura 8h 07.11.19 4h 90%
Aufbau Ellen, Felix, Laura 5h 06.12.2019 2h 20%
Motorensteuerung GPIO + Programme anschauen Ellen, Laura 4h 06.11.19 3h 100%
Motoren über PWM ansteuern Ellen, Felix, Laura 2h 08.11.19 12h 75%
Implementierung der Motorfunktionen Ellen, Laura 8h XX 4h 80%
Berechnung der Drehungen (Implementierung inkl.) Ellen, Felix, Laura 4h 06.12.19 X 50%
Drehzahlmessung Gabellichtschranke: Signale Felix 4h 06.11.19 X 1%
Implementierung der Drehzahlmessung Laura 4h XX 03.11.19 10%
XX XX XX XX XX 0%
Platinenaufbau Eagle-Schaltplan anfertigen Felix 4 19.11.19 16h 50%
Teila XX XX XX XX 0%
Teila XX XX XX XX 0%
Kommunikation
Aufgabe Zuordnung geplanter Aufwand Zieldatum realer Aufwand Status
Sichten der Altdateien, Einarbeitung in BLE XX XX XX XX 0%
Entwurf Kommunikationsdiagramm XX XX XX XX 0%
Implementierung einer Kommunikationsschnittstelle XX XX XX XX 0%
Gruppenübergreifende Milestones
Aufgabe Zuordnung geplanter Aufwand Zieldatum realer Aufwand Status
ITS-E: simulieren und thread-spezifische Nachrichten austauschen Ellen, Laura 8h 26.11.19 10h 100%
ITS-E: Zusammenbauen und Hinderniserkennung XX XX XX XX 0%

Antrieb & Mechanik

Chassis

Entwurf

Für das Chassis des autonomen Fahrroboters haben wir verschiedene Formen und Aufbau-Ideen evaluiert und uns schließlich für eine Kombination eines Rechtecks mit einem Trapez ausgesucht, da das Sensoren-Team uns als Anforderung vorgegeben hatte, dass die Time of Light Sensoren alle gleichweit von dem Fahrzeugdrehpunkt angebracht werden sollen.

Text der Bildlegende Text der Bildlegende Text der Bildlegende Text der Bildlegende

Brett sägen und Kugelrad basteln

Für das Aussägen unserer ausgewählten Form, haben wir für die Dekupiersäge ein Sägeblatt gesucht. Nachdem wir keine vorort gefunden haben, haben wir eins im Baumarkt beschafft. Darauffolgend haben wir für unsere Form Löcher in die Pressspanplatte gebohrt, um die Löcher für die Räder und Zahnräder gebohrt. Schließlich haben wir mit der Dekupiersäge die Vorlage ausgesägt und die Kanten anschließend abgefeilt.


Text der Bildlegende


Das Kugelrad

Da unser ITS-E leider nicht auf 2 Rädern balancieren kann benötigt er ein drittes Stützrad. Beim Vorgängerprojekt wurde dieses Problem mit einer einfachen Lenkrolle gelöst. Nachteil daran war, das die Lenkrolle sich beim drehen erst ausrichten muss und somit in Abhängigkeit von ihrer vorherigen Position unterschiedliche Reibungswiderstände erzeugt. Fuhr man beispielsweise erst gerade aus und drehte dann das Fahrzeug um seinen Mittelpunkt musste die Rolle sich um 90° drehen. Wenn man nun das Fahrzeug in die entgegengesetzte Richtung drehen wollte musste die Rolle sich um 180° drehen, was ohne schleifen des Rads in diesem Aufbau nicht möglich war.


Da unser Auto sich jedoch sehr exakt drehen können muss war ein reibungsarmes Stützrad schnell motiviert.

Es entstanden verschiedene Ideen, die das Problem minimieren, aber nicht beseitigen würden. So unter anderem eine doppelt gelenkte Lenkrolle. Schließlich einigten wir uns auf ein Kugelrad, da die vorher genannte Problematik hierbei behoben wäre.

Kugelrad Version 1.0: Die erste Version des Kugelrads war eine auf Drähten gelagerte Murmel. Hierzu bohrten wir test-weise ein Loch in eine Platte und klebten zur Lochmitte hin 4 Drähte auf, auf welchen die Murmel gleiten sollte.

Kugelrad Version 1.1: Um das Ganze am Auto montieren zu können sägten wir eine Halterung für die Murmel aus und lagerten die Murmel auf 4 Nägeln, deren Spitzten rund gefeilt wurden. Der Schwachpunkt bei dieser Konstruktion war die Unebenheit der Murmel. Bei gießen der Murmeln entstehen offenbar kleine rillen die uns zum Verhängnis wurden, wenn die Nägel darin hängen blieben. Außerdem war keine der Murmeln 'perfekt' rund. Ein weiterer Nachteil bestand darin die Kugel auf 4 Punkten auf zu legen. Dies gestaltete sich aufgrund der nicht so präzisen Bohrungen als schwierig. Kugelrad_V1.1 Kugelrad_V1.1

Kugelrad Version 2.0: Schließlich bestellten wir gehärtete Edelstahlkugeln in der Qualität G28 nach DIN 5401, die extra sorgfältig poliert wurden! Diese Kugeln haben ein maximale Unrundheit von 0,7 µm und eine maximale Rauheit von 0,05 µm. (Verglich der Rauheiten Link: https://www.kugel-winnie.de/Kugel-Winnies-Kugel-Wissen/Qualitaeten/Genauigkeiten-von-Stahlkugeln ) Die Kugel wurde bei www.kugel-winnie.de bestellt (Link: https://www.kugel-winnie.de/epages/62136757.sf/secee124065da/?ObjectPath=/Shops/62136757/Products/010304001 ).

Um die Kugel ideal zu lagern verwendeten wir (diesmal 3, nicht 4) Edelstahlnadeln mit Glasköpfen. Um die Kugel zusätzlich zu federn wurde eine Scheibe angefertigt auf der die Nadeln aufgelötet wurden und zusätzlich die Unterseite des Autos freigefräst. Kugelrad_V2_Ring Kugelrad_V2_Ring 3 Kugelrad_V2_Ring 2

Auf den Glasköfen ist die Reibung der Kugel minimal. Kugelrad_V2_Nadel

Damit die Kugel beim anheben des Autos nicht herausfällt wurde eine Kappe darüber montiert. Die Kappe ist von einem Kugelrad von Pollin Elektronik genommen (Link: https://www.pollin.de/p/kugelrolle-48x32x20mm-10-kg-stahl-490506 ). Es wurde lediglich der untere Ring abgeflext, beigeschliffen und M2 Muttern in die Löcher eingepresst und verlötet. Kugelrad Pollin Kugelrad_V2_Ring_Kugel2

Um den idealen Abstand der Kappe ein zu stellen sind Federn zwischen der Kappe und dem Chassis angebracht. Kugelrad_V2_Feder Kugelrad_V2

Diese Variante funktioniert selbst auf sehr glatten Unterflächen noch sehr gut. Kugelrad_V2_vorne Kugelrad_V2_unten

Da die Kugel mit 66 gram relativ schwer ist wurde sie dichter zur Radachse gesetzt als ursprünglich geplant, um bei möglicher Schieflage der Fahrstrecke das Fahrzeug nicht zu sehr zur Seite zu ziehen. Kugelrad_V2_oben

Motorensteuerung

GPIO + Programme anschauen

Für die Ansteuerung der GPIOs haben wir die vorhandenen Demo-Programme gesichtet und durch die Zephyr Dokumentation sowie der Datei ITS-E/zephyr/boards/arm/nrf52_adafruit_feather/board.h konnten wir die GPIO Pins verwenden, um eine LED blinken zu lassen.

Versuch den Motor über PWM anzusteuern

Um später mittels PWM die Pins ansteuern zu können, braucht man einen aktivierten PWM-Driver. Diesen haben wir aus den ⁨bwp_ws19⁩/zephyr⁩/boards⁩/⁨arm⁩/⁨nrf52_pca10040⁩/Kconfig.defconfig

if PWM
config PWM_0
	default y

endif # PWM

in die Kconfig.defconfig des adafruit featherboard kopiert und danach ebenfalls aus den ⁨nrf52_pca10040-bordkonfigurationen in der Datei nrf52_pca10040.dts die Passage

&pwm0 {
	status = "okay";
	ch0-pin = <17>;
	ch0-inverted;
};

in die .dts-Datei im Ordner des genutzen Adafruit Featherboards nrf52 (zephyr/boards/arm/nrf52_adafruit_feather) kopiert, um bei dem angegeben Pin das Pwm-Signal zu aktivieren. → Wenn man einen anderen Pin als Pin 17 mit Pwm versorgen möchte, muss man ihn an dieser Stelle „ch0-pin = <pinnummer>; angeben!

Danach haben wir das PWMSignal mit dem Beispielprogramm blink_LED ausprobieren, jedoch haben wir das Pwm nicht zum laufen bringen können, weil die defines DT_ALIAS_PWM_LED0_PWMS_CONTROLLER und DT_ALIAS_PWM_LED0_PWMS_CHANNEL nicht gefunden wurden.

Jedoch haben wir bei dem Programm servo-Motor ein Signal erhalten. Wichtig ist, dass man beim Aufruf von static int pwm_pin_set_usec(struct device *dev, u32_t pwm, u32_t period, u32_t pulse) Set the period and pulse width for a single PWM output. Parameters

   • dev: Pointer to the device structure for the driver instance. 
   • pwm: PWM pin. 
   • period: Period (in microseconds) set to the PWM. 
   • pulse: Pulse width (in microseconds) set to the PWM. 

Return Value

   • 0: If successful. 
   • Negative: errno code if failure. 
nochmals den PWM-pin angibt(typ u32_t) siehe Parameters.


Wir haben dieses Beispielprogramm in unseren ITS-E-Ordner kopiert. Hierfür muss man noch in der ITS-E/project.conf- Datei „CONFIG_PWM=y“ setzen.

Bei dem Servo-Beispiel setzt man MinPulsWidth und MaxPulsWidth in Mikrosekunden und gibt die Periodendauer


Text der Bildlegende


Des Weiteren haben wir versucht den Strom durch einen 3 Ohm Widerstand der 1206 Baureihe auf dem Breakout-Board auf 66,6 mA zu begrenzen. Die Formel zur Berechnung des Maximalstroms Imax=0,2V/R (0,066 A=0,2 V / 3 Ohm). Die Spannung ist laut Datenblatt auf 0,2 V festgelegt. Da der Motor als induktive Last bei fallenden Flaken des PWM Signals eine negative Spannung induziert, sind auf dem Breadkout-Board bereits Kick-Back-Dioden assembliert, um den Motortreiber vor negativen Spannungsimpulsen zu schützen. Trotzdessen muss die Spannung am Motor über einen Wechselspannungskondensator (ca. 10µF) geglättet werden und das Tastverhältnis (duty cycle) des PWM-Signals berücksichtigt werden, um die Spannung im gewünschten Spannungsbereich von 0,3 - 1V regeln zu können. Dem Datenblatt entsprechend haben wir die Pins VM(VCC) und SLP(SLEEP) mit einem 68 KOhm Pullup-Widerstand verbunden.

Vorerst haben wir uns dazu entschieden den Versuch die Motoren mittels PWM ansteuern zu können erstmal auf Eis zu legen, und die Motoren über die GPIOs anzusteuern.



Implementierung der Motorfunktionen

Mit Hilfe der vorgegebenen GPIO-Funktionen, die die Zephyr Dokumentation zur Verfügung bereitstellt, haben wir die Motoren ansteuern können. Für eine bessere Wartbarkeit des Programms haben wir die Funktionalität für vorwärts, rückwärts, halten, rechts und links in einzelne Funktionen ausgelagert. Das Programm ist aktuell unter Link-zum-Programmcode zu finden.

Berechnung der Drehungen (Implementierung inkl.)

  1. Ellen trägt das ein

Drehzahlmessung

Gabellichtschranke: Signale

Erste Versuche die Drehzahl über eine IR-Diode QCX48 (950 nm Wellenlänge) und einen Phototransistor SFH309 (380 nm bis 1180 nm) liefern keine stabielen Signale.

Weiterer Versuch mit verschiedenen Gabellichtschranken:

1.) LTH-301-07 und LTH-309-08

2.) HOA0872


Zu 1.)

Die LTH Gabellichtschranken der Firma LITEON erweisen sich für unsere Drehzahlmessung als untauglich, da der Abstand zwischen IR-Diode und Phototransistor mit 5mm für unsere 1mm Lochscheibe zu groß ist. Außerdem ist das Licht der IR-Diode nicht gut gebündelt, wodurch der Phototransistor bei nicht vollständiger Abdeckung der IR-Diode teilweise leitfähig wird.

Auf diesem Photo sieht man auf der linken Seite wie die Spannung sich langsam erhöht, wenn ein schwarzes Plättchen zwischen IR-Diode und Phototransistor geschoben wird. Zwischen dem ersten erkennbaren Spannungsanstieg und dem voll durchgesteuerten Phototransistor wird mit dem Plättchen ein Weg von fast 3mm zurückgelegt, wodurch die Streuung der IR-Diode sehr deutlich wird. Auf der Rechten Seite sieht man wie die Spannung schwankt wenn man das 1mm dicke Plättchen zwischen Phototransistor und IR-Diode hin und her bewegt.

Gabellichtschranke LTH

Zu 2.)

Wesentlich bessere Ergebnisse erzielen wir mit der Gabellichtschranke von Honeywell HOA0872. Der Abstand zwischen IR-Diode und Phototransistor beträgt hier 3,3mm. Außerdem kann man eine eindeutige Schaltschwelle auf 0,5 mm beobachten, wodurch unsaubere Zwischenwerte für unsere Anwendung ausgeschlossen sind.

Im linken Photo sieht ist ein schwarzes Plättchen zwischen IR-Diode und Phototransistor. Im Rechten wurde das Plättchen entfernt.

Gabellichtschranke Honeywell Gabellichtschranke Honeywell


Skizze:

In der Skizze sieht man wie das Ausgangssignal des Phototransistors über einen LM258N OP im Aufbau als 'Nicht-invertierender Operationsverstärker' unendlich verstärkt wird. Die Verstärkung berechnet sich aus dem 1M Widerstand und dem Vorwiderstand am Negativen Eingang des OP. Da es keinen Vorwiderstand gibt, dieser also gleich Null ist, ist die Verstärkung V=1000000/0 = Unendlich = 3,3V (Versorgungsspannung des OP.

Gabellichtschranke Skizze


Messung mit ADC an Analogeingängen, ohne Operationsverstärker

Eine weiter Möglichkeit die Drehzahl auszuwerten bieten uns die Analogeingänge des feather boards. Zum einlesen der Drehzahl könnte man den Phototransistor an einen Analogeingang anschließen und die Schaltschwelle entweder über eine interne oder externe Referenzspannung festlegen. Somit könnte man den Operationsverstärker einsparen dessen einzige Aufgabe es war 'saubere' Rechteckimpulse zu erzeugen. (Ob wir dies tun ist jedoch noch nicht sicher. Ein möglicher Nachteil hierbei könnte sein das wir die Drehzahl 'aktiv' einlesen müssen und nicht über einen Counter der möglicherweise auch im Schlafzustand des feather boards weiter zählen könnte. Ob es sich lohnt den Operationsverstärker einzusparen hängt aber auch davon ob das feahter board im Schlafzustand deutlich mehr als 500µA einsparen kann, da der Verbrauch des LM258N bei 480-510 µA liegt [es wurde einer von 2 verfügbaren OPs des ICs verwendet, weitere Messung folgt])


Die eingebauten Gabellichtschranken

Gabellichtschranke Honeywell oben Gabellichtschranke Honeywell unten

Implementierung der Drehzahlmessung

Auch hier wurde mit Hilfe der vorgegebenen GPIO-Funktionen, der Zephyr Dokumentation gearbeitet. Der aktuelle Code ist unter Link-zum-Programmcode zu finden. Die Funktionalität wurde mit einer Kabelbrücke vom 3.3V Port und dem GPIO-Pin getestet.

Platinenaufbau

Eagle-Schaltplan anfertigen

Zur Planung des Platinenlayouts und insbesondere der Pinbelegung des feather boards haben wir begonnen einen Schaltplan mit eagle zu erstellen. Hierbei haben wir auch kontrolliert, das die einzelnen Module technisch zusammen arbeiten können, da die jeweils verbauten ICs unterschiedliche Spannungen benötigen. Glücklicherweise sind die Breakout-boards bereits mit Spannungsreglern und Logikpegelwandlern bestückt, womit der Betrieb des Bussystems als auch des Gesamtsystems mit einer Betriebsspannung von 3,3V möglich ist. Da die I/O's des feather boards eventuell nicht ausreichen, werden wir diese voraussichtlich über I2C-Schieberegister erweitern. Ob die I/O's ausreichen hängt vorerst noch davon ab, wie viele Helligkeitssensoren tatsächlich installiert werden und ob wir diese einzeln über die Analog-Eingänge des feather-boards einlesen, oder auf Helligkeitssensoren mit direkter Busanbindung zurückgreifen.


Hier ein vorläufiger Plan und ein Entwurf wie die Boards ungefähr aussehen werden: ...es wird noch ein paar Änderungen und Erweiterungen geben.

Datei:ITS-E Circuit Diagrams.pdf

ITS-E_Motherboard.png ITS-E_Energy_Board.png

(Links: ITS-E Energy Board, Rechts: ITS-E Motherboard)

Kommunikation

Quellen