Pro Bot 128 / Projekt: Motorsteuerung verbessern
Mahlzeit!
Wie ich aus zahlreichen Posts in diversen Foren entnehmen konnte und letztendlich (glaube ich) selbst verstanden habe, ist die Motoransteuerung beim Probot 128 sagen wir mal „suboptimal“. Daher habe ich mir ein paar Gedanken gemacht, wie man die Ansteuerung (im ersten Schritt hardwareseitig, Software muss dann natürlich auch angepasst werden) verbessern könnte. (bin Elektro-Laie, also bitte nicht allzu sehr maßregeln, wenn ich etwas falsch erkläre)
++++++ Zum Bestand ++++++
Verwendete Bauteile:
- C Control Pro Mega 128 (Microcontroller)
- CD4093 (NAND-Gatter)
- L293D (Motortreiber)
Schaltung:
2x PWM Signal (von Pin X1_2 = OC1B bzw. Pin X1_3 = OC1A) wird über ein NAND-Gatter (CMOS 4093) an die Input Pins 1+2 bzw. 3+4 vom Motortreiber L293D verteilt.
Ein PWM-Signal wird über jeweils 2 der 4 NAND-Gatter so invertiert, dass am Motortreiber IN1 High ist, wenn IN2 Low ist und umgekehrt. Das gleiche gilt sinngem. für IN3 und IN4.
Der Pin X1_1 (OC1C) schaltet beide Enable-Eingänge bei Bedarf permanent auf high.
Die Motorgeschwindigkeit ist im Bereich von 0-255 einstellbar; allerdings mit der Besonderheit, dass die Motoren bei einem Wert von 128 (50/50 Puls/Pause) stillstehen und bei Werten >< als 128 in die jeweilige Richtung drehen. Als ich die Funktionsweise endlich verstanden / nachvollzogen hatte, habe ich gestutzt, da die vorhandene Steuerung der Drehrichtung und der Geschwindigkeit über ein PWM-Signal pro Motor ja bedeutet, dass die Motoren quasi ständig im Wechsel vorwärts und rückwärts fahren. Je nachdem in welche Richtung sie dann drehen sollen eben mehr vorwärts als rückwärts oder umgekehrt.
Selbst mir als absoluter Laie war nach dieser Erkenntnis klar, dass das nicht effektiv sein kann. Ein Auto fährt man ja auch nicht 50m im Vorwärtsgang und dann wieder 5 oder 10m zurück, nur um langsamer zu fahren. Außerdem vermute ich, dass der permanente Richtungswechsel nicht grade materialschonend ist.
Diese Ansteuerung spart zwar (auf den ersten Blick) Pins am Controller, bedeutet aber, dass die Motoren nicht auf voller Leistung laufen (korrigiert mich, wenn ich falsch liege).
++++++ Zur geplanten Veränderung ++++++
1. IC-Sockel Adapter:
Um die Motorplatine im Originalzustand belassen zu können und die schon vom Controller zur Motorplatine geführten Pins weiter benutzen zu können, habe ich mir mittels Platinenstückchen und Stiftleisten bereits einen Adapter für die beiden vorh. IC Sockel zurechtgedengelt.
Vom Sockel des CD4093 greife ich über 4 Stifte die Pins X1_2 und X1_3, sowie VSS (inkl. Pufferkondensator auf Platine) und VDD (GND) ab. Vom Sockel des L293D greife ich den PIN X1_1 (im Bestand Enable 1), VSS (inkl. Pufferkondensator auf Platine), GND (4x) und Output 1-4 ab.
2. Motorsteuerplatine
Auf die beiden Sockeladapter klebe/stecke ich dann eine zweite Platinenebene, auf der ich dann die Schaltung mit einem CD4093 und dem L293D neu aufbaue.
Ich plane die beiden PWM-Signale (X1_2 und X1_3) an die Enable-Eingänge des L293D zu führen. VSS und GND wie im Bestand. VS (Motorversorgung) kommt dann direkt von meinem Akkupack mit 6x2/3 A Akkus (7,2V bzw. voll geladen ca. 8,4V / 1300mAh).
Die Richtungsansteuerung über die Inputs 1+2 bzw. 3+4 will ich über jeweils einen Controllerpin (X1_1 und einen beliebigen anderen) mit entsprechend vorgeschaltetem NAND-Gatter realisieren. Ich denke mal, dass ich auf die „Vollbrems-Option“ durch kurzschließen der Inputs gut verzichten kann. Den zusätzlich notwendigen Controllerpin könnte ich dann über die noch freie Leitung auf dem einen Wannenstecker auf die Motorplatine herunterführen.
Schaltbilder kann ich heute Abend nachreichen.
Viel Text, ich weiß…J
Ich bitte um Kritik und Verbesserungsvorschläge!
Danke!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Du hast ja sicher auch den "Frei"-Pin neben dem Sockel oben mit dem Kontroller verbunden, oder?
Ärgerlich, dass die Stecker ausgerechnet vor einem langen Wochenende kaputt sind. Alternativ und zu Testzwecken könnte man die auch verlöten.
Gruß
mic
Liste der Anhänge anzeigen (Anzahl: 8)
bin mir zwar nicht sicher, ob das hier überhaut noch jmd. mitliest aber ich schreib mal weiter (mein) tagebuch:
1. Motorsteuerung läuft soweit, aber gerade fährt der kleine noch nicht. muss wohl nich weiter an den PID Werten feilen...
2. Die Motorspannung am L293D kommt bei mir direkt aus dem Akku (6*AA Zelle, frisch geladen ca. 8,4v) Mir ist aufgefallen, dass hier durch die getrennte versorgungsspannung gar kein kondensator mehr im stromkreis ist. habe nun einen elko mit 100 microfarad parallel zu GND dazwischengeklemmt. nächste versuchsreihe steht noch aus.
3. mittels i2c portexpander pcf8574 habe ich ein 2x16 zeichen lcd auf der breadboard platine hinzugefügt. hat dank der vorhandenen i2c lcd lib (fast) auf anhieb geklappt. problem war anfangs ein zu kleines poti am kontrastpin, wodurch das lcd nichts angezeigt hat.
4. für erste gehversuche mit SPI habe ich außerdem 8 stück rote 3mm low current leds auf der vorderen hälfte der breadboard platine angeordnet und über ein 74hc595 schieberegister an den spi bus angeschlossen. hat auch (fast) auf anhieb geklappt. hab halt einfach mal den takteingang am falschen mc pin angelötet (bis 7 zählen ist schon schwierig)...
mittels byte arrays kann ich mir nun neben dem lcd auch über diverse blinkmuster der leds z.b. zustände oder aktuelle funktion anzeigen lassen.
oder ein nightrider lauflicht für den "coolness-faktor" ;-)
5. da die alten bumper, bestehend aus mikrotastern mit schaschlikspießfühlern bei den diversen probefahrten bzw. bei schnellen drehungen um die eigene achse zu nahe an einer wand gebrochen sind (schaltwippe) habe ich mir aus einem gebogenen eisstiel und zwei drucktastern einen neuen bumper gebaut, der hoffentlich stabiler ist. funktion allerdings noch nicht getestet.
brauchen ziemlich viel druck zum auslösen (ca. 250 g).
nächste schritte:
-zusätzlicher distanzsensor mit tendenz zu einem sharp ir auf servo
-stromversorgung überarbeiten
. aktuell gelöst mit 7805er für die logikspannung. besser wäre eine ultralowdrop variante oder schaltregler
-libraries nochmal sauber durcharbeiten
-programm mit subsumptionsarchitektur aufbauen und den bot mit ein paar aufgaben unter einbeziehung aller verfügbaren sensoren und aktuatoren rumfahren lassen
-selbständiges anfahren einer ladeschaltung
-weltherrschaft ^^
werde gleich mal ein paar fotos für interessierte einstellen.
- - - Aktualisiert - - -
Anhang 31501unterste Platine mit neuem Frontbumper (rechts), Spannungsversorgung (links), Schmitt Trigger Huckepack auf Motor Dir IC, um die Signale der Radencoder zu verbessern (Mitte)
Anhang 31503mittlere Platine mit "Front-Scheinwerfern" (rechts) Danke nochmal an den user bnitram für die Hilfe dabei), Anschlüssen für die Versorgungsspannung und dem 4 poligen Kabel für den SPI Bus zum Schieberegister auf der oberen Platine (SCK, SCLK, RCLK und OE)
Anhang 31506obere Platine ohne LCD mit Portexpander PCF8574 (Mitte), Schieberegister 74HC595 (oben), Pinleiste für das LCD (rechts) und den LEDs am Schieberegister (rechts außen)
Anhang 31507Anhang 31508so sieht er aktuell zusammengebaut aus...
Anhang 31502Stromversorgungsplatine mit 7805 und reichlich Anschlussklemmen
Anhang 31504Front-Scheinwerfer
Anhang 31505Radencoder mit Reflexlichtschranke CNY70 und selbstgedruckter Encoderscheibe (selbstklebende Folie mit Laser bedruckt auf Aluminiumfolie), Auflösung 32 Ticks
Liste der Anhänge anzeigen (Anzahl: 1)
Eventuell auch eine interessante Variante, die Taster sind aus alten Mäusen (haben mich nix gekostet) Auslösung bei 55g.
https://www.roboternetz.de/community...164#post622164
Aktueller Baustand: (die Bumper bekommen später noch umgebogene Ränder damit sie sich nicht verhaken können)Anhang 31510