Archiv verlassen und diese Seite im Standarddesign anzeigen : DC-Motoren stören MPU 6050
eniddelemaj
25.11.2018, 14:44
Hey,
ich arbeite gerade an einem Roboter, der sich anhand eines
MPU 6050 orientieren kann. Mein Ziel ist es, beispielsweise den Roboter
ein "perfektes" Viereck fahren zu lassen. Sprich ich sage dem Roboter,
um wie viel Grad er sich drehen soll und lasse ihn dann geradeaus fahren.
Ich konnte bisher einen vernünftigen Winkel mithilfe des MPU 6050 ermitteln.
Wenn ich das gyro/accel Modul um 180 Grad drehe, zeigt mir die Ausgabe auch
tatsächlich an, dass ich das Modul um 180 Grad gedreht habe.
Nun zum Problem:
Wenn ich das MPU-Modul mit dem Roboter verbinde, um ihn dann z.B. in einem Viereck
fahren zu lassen, verändert sich der Wert des Grades. Wo vorher z.B. noch 180 Grad war, ist wenig später
200 Grad. Der Yaw-Wert variiert.
Dies geschieht wenn ich die Motoren arbeiten lasse. Wenn ich die Leistung der Motoren verringere,
kann ich den ungewünschten Effekt verkleinern (Jedoch nicht ausreichend).
Ich bin im Internet auf diesen Link gestoßen:
https://www.pololu.com/docs/0J15/9
Dort wird erklärt, dass ich zwischen dem Stromkabel und dem DC-Motor
einen Kondensator setzen soll. Dieser soll wohl die Störungen, die sich
vom Motor auf die Sensoren auswirken, vermeiden.
Bevor ich mir jetzt diese Kondensatoren zulege, möchte ich mich von erfahrenen
Leuten vergewissern lassen, dass diese Methode eine ernsthafte Lösung für mein Problem darstellt.
Ich brauche also lediglich 0.1 µF Kondensatoren, zwischen Kabel und DC-Motor Kontakt setzen
und die Störungen werden beseitigt?
Ein weiterer Punkt ist, das MPU Modul so weit weg wie möglich von den Strom
versorgenden Kabeln zu setzen. Dies habe ich getan, aber konnte keine Verbesserung bemerken
Denke, dass das weit genug ist, oder?:
33803
Ich freue mich über jede Antwort, die mir weiterhilft!
021aet04
25.11.2018, 15:36
Sollte die Ursache das Bürstenfeuer sein wird es helfen (noch ein Link zum RN-Wissen https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung#Und_ni e_vergessen_Motoren_zu_entst.C3.B6ren). Sollte das Problem eine andere Ursache haben wird es nicht helfen (was ich aber nicht glaube). Entsörung sollte immer angebracht werden.
MfG Hannes
eniddelemaj
25.11.2018, 15:57
Danke für Ihre Antwort!
Okay in dem Beitrag steht, ist die Steuerung der Motoren per PWM gemeint. Meine Motoren steuere ich analog.
Ich kenne die genaue Funktionsweise von analogWrite() nicht. Macht das einen Unterschied?
Was ist mit Bürstenfeuer gemeint?
White_Fox
25.11.2018, 16:02
Der Entstörkondensator bringt nur was bei Bürstenmotoren. Da sollte der allerdings so oder so immer vorhanden sein, dein Sensor ist nicht das Einzige, was unter dem HF-Dreck des Motors leidet.
Und ich kenne es auch so, daß man drei Kondensatoren an den Motor anbringt: jeweils zwei zwischen Motorgehäuse und Anschlüsse, und einen zwischen den beiden Anschlüssen.
Edit:
Das ist Bürstenfeuer:
https://www.youtube.com/watch?v=GZjdbSGITB8
Danke für Ihre Antwort!
Okay in dem Beitrag steht, ist die Steuerung der Motoren per PWM gemeint. Meine Motoren steuere ich analog.
Ich kenne die genaue Funktionsweise von analogWrite() nicht. Macht das einen Unterschied?
Was ist mit Bürstenfeuer gemeint?
analogWrite() ist der Arduino-Funktionsname für pwm.
pwm ist keine "echte" analog-Spannung, sondern "zerhackte" digital-Signale.
Wie soll aber technisch das "Bürstenfeuer" den MPU6050 stören, denn
a) hängen die Motoren üblicherweise an einer H-Brücke, gespeist von einer anderen Spannungsquelle (5-24V) und
b) hängt ein MPU6050 an stabilisierten 3.3-5V Vc des Arduinos/µCs und gibt seine Signale über i2c...?
@ eniddelemaj
welchen µC hast du denn,
welches Programm,
welche MPU6050 Lib,
und wie sind deine Motoren genau angeschlossen (Schaltbild)?
Kondensatoren nützen schon was, aber ob das dann ausreicht? Eventuell ist auch ein LC-Glied notwendig. Bei dem fliegenden Aufbau ist keine richtige Trennung in Form von Metallumhausungen (Abschirmung), die Steckkabel sind auch nicht abgeschirmt.
Zum diesem Thema gibt es ein umfangreiches Dokument auf github (https://github.com/Ardumower/ardumower/blob/master/Dokumentation/Motor%20Entstoerung/Motor%20EntstoerungREV20150531.pdf), wie man solche Fälle richtig entstört.
MfG
@ eniddelemaj
welchen µC hast du denn,
welches Programm,
welche MPU6050 Lib,
und wie sind deine Motoren genau angeschlossen (Schaltbild)?
lassen wir doch erstmal den OP die genaue Antwort geben... ;)
eniddelemaj
25.11.2018, 18:47
Ich verwende einen Arduino/Genuino Uno.
Ich benutze diese Library
https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/MPU6050.h
Und hier sind die Schaltbilder
33804
33805
Ich verwende einen Arduino/Genuino Uno.
Ich benutze diese Library
https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/MPU6050.h
Und hier sind die Schaltbilder
das ist interessant!
Soweit ich sehe, ist die Verkabelung korrekt. Ich kann jetzt nicht alles erkennen, aber der L298 scheint an einer extemen Spannungsquelle zu hängen und der MPU am +5V vom Arduino.
Probiere mal diese Lib hier ersatzweise (vom selben Autor):
MPU6050_DMP6.ino
https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6/MPU6050_DMP6.ino
Grund:
diese Lib arbeitet mit dem internen dmp Chip, hier rechnet der MPU alles selber aus, und mit dieser Lib habe ich selber gute Erfahrungen.
Wenn du startest: erst ca. 30 sec waagerecht ruhig fixieren, bevor du die Motoren bewegst.
eniddelemaj
25.11.2018, 20:03
Okay danke für den Tipp!
Ich habe jetzt die Lib runtergeladen und versuche sie zu kompilieren.
Ich habe sämtliche erforderliche Dateien dem Sketch Verzeichnis beigefügt,
aber ich erhalte diese Fehlermeldung:
libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()':
(.text+0x0): multiple definition of `I2Cdev::I2Cdev()'
sketch\I2Cdev.cpp.o (symbol from plugin): (.text+0x0): first defined here
libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()':
(.text+0x0): multiple definition of `I2Cdev::I2Cdev()'
sketch\I2Cdev.cpp.o (symbol from plugin): (.text+0x0): first defined here
libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()':
(.text+0x0): multiple definition of `I2Cdev::readTimeout'
sketch\I2Cdev.cpp.o (symbol from plugin): (.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.
da muss ich passen, wenn du hier nicht weiter kommst, dann stell mal diese Frage bei github in den issues!
- - - Aktualisiert - - -
PS
hast du evtl I2Cdev 2x auf deinem System?
I2Cdev gehört NUR in den libraries Ordner!
sketch\I2Cdev.cpp.o (symbol from plugin): (.text+0x0): first defined here
libraries\I2Cdev\I2Cdev.cpp.o (symbol from plugin): In function `I2Cdev::I2Cdev()':
einmal in: sketch\
und einmal in: libraries\I2Cdev\
PS: unbedingt lesenswert: Dokument auf github (https://github.com/Ardumower/ardumower/blob/master/Dokumentation/Motor%20Entstoerung/Motor%20EntstoerungREV20150531.pdf)
Sollte die Fragen beantworten, was notwendig ist beim Entstören und vor allem, warum.
MfG
Moppi
Che Guevara
25.11.2018, 23:25
Hallo,
also m.M.n. hört sich das vielmehr nach Drift an als nach HW-Problemen. Woher ein MEMS Gyroskop Probleme mit HF-Strahlung bekommen sollte, kann ich mir ehrlich gesagt nicht vorstellen und wenn die Strahlung so heftig wäre, dass die Kommunikation gestört wird, würdest du überhaupt keinen Wert mehr auslesen können.
Dass es mit der Handdrehung besser aussieht als wenn die Motoren laufen ist IMHO auch logisch, Motoren bringen oft Vibrationen die du mit deiner Hand nicht erzeugst.
An deiner Stelle würde ich mir einen Kompass (z.b. HMC5883L) besorgen, alles andere wird auf Dauer sowieso nicht funktionieren.
Gruß
Chris
Hier gab es 2015 auch schon Tipps zu diesem Problem: https://www.roboternetz.de/community/threads/66895-Mpu6050-Werte-bei-laufenden-Motor-stark-schwankend?p=612808&viewfull=1#post612808
MfG
White_Fox
26.11.2018, 08:30
Was mir bei deinem ersten Bild noch auffällt: Es sieht so aus als hättest du die Motorleitungen nicht verdrillt. Mach das mal.
Das ersetzt dir zwar die Kondensatoren nicht, gehört aber zu den Entstörmaßnahmen die man immer macht da sie
a) wenig Aufwand erfordern
b) in der Regel hilfreich sind (und wenn nicht, haben sie immerhin keine Nachteile)
Sollte daß noch nichts bringen muß dein Hardwareaufbau nochmal genauer untersucht werden.
Hallo,
in vielen meiner Hubschrauber sitzt auch dieser Gyro drin. Und die sind so empfindlich, dass ich sie per Hand nicht ruhig halten kann.
Okay, Kaffeefetischist..;) Spass,,,,, die sind wirklich extrem empfindlich....
Daher sind generell unter der Elektronik noch PADs zur mechanischen Entkopplung vorhanden.
Suche mal nach Klebepad für Gyro. Hier gibt es verschiedene Varianten. Oft konnten Vibrationen nur durch tauschen des PADs beseitigt werden.
An elektrische Störung glaube ich nicht unbedingt. Wurde ja schon geschrieben, der Datenverkehr scheint ja zu laufen.
Vorstellbar wären evtl. noch magnetische Störungen von den Motoren, da Du schreibst, dass bei weniger Leistung es besser wird.
Ob das möglich ist, bin ich mir aber nicht sicher.
Oder rechnet Dir da ein externes Magnetometer was mit rein ?
Siro
Gyro Drift hat der MPU6050 (anfangs ein paar Grad pro Minute, die sich aber auch stabilisiert mit der Zeit), das stimmt, aber ich bezweifle, dass dieser digitale IMU mit onboard-dmp samt Sensor-Fusion von Motoren beeinflusst werden soll.
Bei raw Werten und analogen Gyros ist das sicher ein echtes Problem, aber wohl eher nicht hier.
Und bei IMUs mit zusätzlichem Kompass/Magnetometer (MPU9150, CMPS11, CMPS12) habe ich in der Nähe von Motoren dagegen deutlich mehr Probleme als ohne das.
Lasst doch mal den OP erst mal das example mit der neuen dmp6-lib zum Laufen kriegen und dann berichten.
Che Guevara
26.11.2018, 12:07
Definitiv wird das von Motoren beeinflusst, je nachdem, wie gut oder schlecht das entkoppelt ist auch mehr oder weniger.
Dabei spielt nicht nur der Drift eine Rolle, sondern auch Dinge wie Quantisierungsfehler, Abtastrate, etc...
Wenn man nur mit einem Gyro einen stabilen Yaw-Wert hinkriegen könnte, glaubst du nicht, große Firmen hätten das schon lange implementiert und würden auf den Kompass verzichten?
Es gibt auf YT ein interessantes Video von TED über Positionsbestimmung mittels ACC-Integration, ist zwar nicht das gleiche, aber die Fehler (und deren Summe über Zeit) werden schön dargestellt und daraus ist auch ersichtlich, dass sowas ohne Absolutwertgeber nie 100% funktionieren wird (zumindest momentan mit verfügbarer Soft / Hardware).
Wo vorher z.B. noch 180 Grad war, ist wenig später
200 Grad. Der Yaw-Wert variiert.
Dies geschieht wenn ich die Motoren arbeiten lasse.
Nur mal so Interesse halber, was ich hier noch nicht gelesen habe - vielleicht habe ich es übersehen: wann tritt das Problem genau auf? Nur beim Anlauf der Motoren oder auch wenn sie kontinuierlich vor sich hin drehen? Sind die Werte bei einer längeren Geradeausfahrt mit gleichbleibender Leistung der Motoren stabil oder schwanken die dann auch und nur nicht, wenn die Motoren aus sind?
MfG
Definitiv wird das von Motoren beeinflusst, je nachdem, wie gut oder schlecht das entkoppelt ist auch mehr oder weniger.
Dabei spielt nicht nur der Drift eine Rolle, sondern auch Dinge wie Quantisierungsfehler, Abtastrate, etc...
Wenn man nur mit einem Gyro einen stabilen Yaw-Wert hinkriegen könnte, glaubst du nicht, große Firmen hätten das schon lange implementiert und würden auf den Kompass verzichten?
Es gibt auf YT ein interessantes Video von TED über Positionsbestimmung mittels ACC-Integration, ist zwar nicht das gleiche, aber die Fehler (und deren Summe über Zeit) werden schön dargestellt und daraus ist auch ersichtlich, dass sowas ohne Absolutwertgeber nie 100% funktionieren wird (zumindest momentan mit verfügbarer Soft / Hardware).
ich kann das für meine Modelle bisher nicht bestätigen, im Gegenteil: Magnetometer machen alles in Motornähe oder bei Annäherung an externe Magnetquellen nur schlimmer - teilweise dreht sich das heading (yaw) um 180°. Der MPU6050 mit dmp6 lib bleibt dagegen deutlich stabiler. Alles aber eine Frage ntl, wie der eigene Aufbau ist und das betr. Environment.
Auch das Problem des OP kann ich bisher nicht bestätigen, dass der MPU6050 mit dmp6 lib bei Motorbetrieb über H-Brücken am Arduino schlechtere Werte liefert als ohne Motoren; das heißt ntl auch nicht, dass diese Beobachtung überall im Universum gültig ist.
Auch kenne ich bisher keine bessere MPU6050 lib als die genannte dmp6.
Also lassen wir doch den OP erst mal seinen persönlichen Aufbau mit der dmp6 Lib testen.
eniddelemaj
26.11.2018, 21:26
Wow danke für die ganzen Antworte, das weiss ich echt zu schätzen!
Neue Bibliothek:
Habe ich zum Laufen bekommen. Lag übrigens tatsächlich daran, dass ich i2cdev in libraries aktualisieren musste, danke dafür!
Leider hat sich hierbei nichts verändert.
Mechanische Entkopplung:
Ich kann den MPU nicht auf ein Pad kleben, da ich das Breadboard zur Fixierung des MPUs brauche.
Ich habe stattdessen das Breadboard auf Pattafix "Stelzen" geklebt. Das Breadboard steht auf 4 Pattafixe (Mehrzahl?)
auf dem Roboter. Ich denke, dass das eine Art mechanische Entkopplung darstellt. Davon abgesehen, glaube ich nicht,
dass Vibration oder ähnliches der Grund für mein Problem ist. Wenn ich den Yaw Wert messe und mit dem Finger auf den
Roboter klopfe, verändert sich der Wert nicht großartig (Nur im Nachkommabereich etwas).
Motorkabel verdrillen:
Habe ich getan. Leider auch keine Verbesserung meines Problems. Ich hatte auch allerdings nicht
viel Spiel, die Kabel zu verdrillen, da sie zu kurz sind. Reicht das so?
33806
Magnetometer:
Ich bin im Bezug auf Magnetometer der gleichen Meinung wie HaWe. Ich habe schon vorher
etliche Versuche unternommen einen Magnetometer für mein Problem zu nutzen. Das war allerdings
viel schlechter, da ich den Magnetometer nicht anständig kalibrieren kann. Ich habe bestenfalls eine
Abweichung von 5° hinbekommen, was noch zu viel ist. Wie HaWe schon sagt, ist dieser viel anfälliger
gegenüber den Motoren. Die Kombi aus Gyro und Accel scheint dagegen gegen Magnetfelder immun zu sein.
(Kein Veränderung wenn ich mein Handy bspweise in Nähe halte, ganz im Gegensatz zum Magnetometer).
Ich habe jetzt auch nochmal genauer untersucht, wann das Problem auftretet:
Ich habe ein Script geschrieben, das den Roboter in Endlosschleife eine Gerade hin und zurückfährt.
Fahre gerade, drehe um 180°, fahre gerade, drehe um 180°, usw.
Daran konnte ich sehen, wann der Roboter seinen Kurs plötzlich ändert, bzw. wann die 180° sich verschieben.
Ich muss den Roboter am USB Kabel angeschlossen haben, da die Batterien scheinbar zur Neige gehen.
Wenn der Roboter auf dem Boden fährt und das Kabel (was leider etwas kurz ist) den Roboter nicht behindert,
tretet das Problem nicht auf. Halte ich den Roboter in der Luft und drehe ihn von Hand, tretet das Problem auch nicht auf,
also der Winkel verschiebt sich nicht.
Wenn der Roboter allerdings auf dem Boden fährt und das Kabel ihn aufgrund der Länge behindert (Die Räder drehen durch) tretet das Problem auf.
Auch wenn ich den Roboter in der Luft halte und dabei die Räder mit Hand etwas blockiere, tretet das Problem auf.
Hierbei erschließe ich mir, dass durch das blockieren der Räder, die Spannungsversorgung des MPUs geschwächt bzw. verändert wird,
da die Motoren mehr Spannung für sich beanspruchen. Ich kenne die genaue Funktionsweise des MPU 6050 nicht, aber es erscheint mir logisch,dass die Werte sich bei veränderter Spannungsversorgung mitändern.
Ein weiteres Argument für meine These ist, dass Arduino bzw. MPU und Motoren sich eine Stromquelle teilen.
In Anbetracht dieser Aspekte fällt mir noch der Kondensator ein, oder 2 seperate Stromquellen für den Arduino
und den Motor Controller. Vlt wirken sich Spannungsveränderungen dann nicht auf das MPU aus. Der Arduino
ist lediglich über Signalkabel mit dem Motorcontroller verbunden.
Die Kondensatoren habe ich eh schon bestellt und ich werde sie ausprobieren sobald sie da sind. Was haltet ihr von
meinem Lösungsansatz?
Habe ich getan. Leider auch keine Verbesserung meines Problems. Ich hatte auch allerdings nicht
viel Spiel, die Kabel zu verdrillen, da sie zu kurz sind. Reicht das so?
Alufolie sollte auch möglich sein: um die Drähte gesamt eine Schicht wickeln und einen Draht abisolieren, etwas drumwickeln und mit GND verbinden.
Ich hatte bereits die Vermutung, dass was mit der Spannungsversorgung nicht so ganz ok ist, wenn die Motoren mehr Strom ziehen. Ich glaube, Du verwendest Mignonzellen?
Ich weiß, dass viele der Meinung sind, das reicht aus - hat die letzten 50 Jahre ja auch funktioniert. Aber um Probleme von vorn herein in dieser Richtung auszuschließen würde ich einen LiPo-Akku kaufen und ein Ladegerät dazu. LiPos liefern viel mehr Strom und gehen nicht in die Knie, wenn da etwas mehr Strom gezogen wird. Sie lassen sich außerdem jederzeit aufladen - schnell aufladen (ein 2400mAh-LiPo ist vielleicht in ca. 40min wieder geladen), einen Memory-Effekt gibts dort meines Wissens gar nicht. Nur tief entladen darf man sie nicht. Zum Ausprobieren würde ich hier mal so was hernehmen, was anständig Power liefern kann. Später kann man dann ja Mignons einsetzen, wenn es Spaß macht und sein muss. ;) Die einzelnen Geräte kann man mit einem Festspannungsregler versorgen. Sowohl einen ATmega328, als auch die einzelnen Sensormodule, meist genügen 5V oder 3.3V (LM 2936 Z5,0 für 5V, LP2950-3.3 = LP2950CZ/ACZ für 3.3V - beide sind bis 100mA belastbar und benötigen selber nicht viel Strom und sind einfach mit 2 Kondensatoren zu beschalten). Da kann auch jedes Gerät seinen eigenen Spannungsregler haben (so viel ziehen diese Sensor-Platinen nicht), Hauptsache GND ist miteinander verbunden.
Und noch mal zum Lösungsansatz: https://github.com/Ardumower/ardumower/blob/master/Dokumentation/Motor%20Entstoerung/Motor%20EntstoerungREV20150531.pdf
Das Dokument auf github, ich denke, damit bekommt man die Motoren auch entstört. Ich würde von der Vorgehnsweise, wie sie in dem Dokument beschrieben ist, gar nicht abweichen.
MfG
ich bezweifle nach wie vor, dass es sich mit Motor-Entstörungen beseitigen lässt.
Dass es sich ursächlcih um starke Spannungsschwankunken handelt, kann ich mir schon eher vorstellen.
Ich habe bei mir 9.6V oder 12V NiMH Akkus zu mindestens 5000mAh.
Daran einen stabilisierten 9-12V/5V 2A Stepdownregler mit USB Anschluss für meinen MCU (oder Raspi), alternativ ein 7V Stepdownregler zum Anschluss an die Arduino-DC-Buchse.
Die NiMH speisen direkt die H-Brücken.
Alle Sensoren werden vom Onboard-Vc-Pin des Arduinos/Raspis gespeist, so sind sie quasi doppelt stabilisiert.
Sollte sich eine Störung (durch Funkenbildung z.B.), leistungsmäßig im Ampere-Bereich nicht stärker auswirken, als die gleiche Störung im µA-Bereich? Dann: etwas mehr Leistungsaufnahme = stärkere Störung. Die Spannung könnte auch stabil bleiben, solang die AKkus das hergeben. Wissen wir alles nicht, weil nicht gemessen. Die Motoren sollten wohl auf jeden Fall halbwegs entstört werden. - Genug orakelt.
eniddelemaj
27.11.2018, 00:44
alufolie:
Also die alufolie um welche kabel wickeln? Um motorkabel nehme ich an und dann mit dem gnd vom motorcontroller verbinden?
Akkus:
Also ich verwende 4x 1.2 v 2600mAh wiederaufladbare batterien. Ich kann aber auch 6 verwenden. 6 schienen mir allerdings zu viel da die motoren sich viel schneller drehen als sonst. Tut mir leid leute ich habe von elektrotechnik kaum ahnung. :/
Sollte ich dennoch 6 stck verwenden? Oder doch den limh akku besorgen?
Den spannungsregler mit der stromquelle verbinden und diesen dann mit dem arduino.. und den motorcontroller versorge ich auch mit dem akku. So richtig?
Und ja die entstörung der motoren mache ich auf jeden fall noch um sicher zu gehen. Mittwoch kommen die kondensatoren leider erst an.
alufolie:
Also die alufolie um welche kabel wickeln? Um motorkabel nehme ich an und dann mit dem gnd vom motorcontroller verbinden?
Akkus:
Also ich verwende 4x 1.2 v 2600mAh wiederaufladbare batterien. Ich kann aber auch 6 verwenden. 6 schienen mir allerdings zu viel da die motoren sich viel schneller drehen als sonst. Tut mir leid leute ich habe von elektrotechnik kaum ahnung. :/
Sollte ich dennoch 6 stck verwenden? Oder doch den limh akku besorgen?
Den spannungsregler mit der stromquelle verbinden und diesen dann mit dem arduino.. und den motorcontroller versorge ich auch mit dem akku. So richtig?
Und ja die entstörung der motoren mache ich auf jeden fall noch um sicher zu gehen. Mittwoch kommen die kondensatoren leider erst an.
4x1,2V sind doch nur 4.8V, da braucht doch schon der Arduino alleine mehr, nämlich 5...? Und damit treibst du Arduino und Motoren an?
Wie stellst du dann sicher, dass der Arduino stabilisierte 5,0V bekommt über USB?
Über den DC-Anschluss braucht er dann ja sogar noch mindestens 1,5-2V mehr, also 6,5-7V!
Irgendwie war dein Schaltbild anfangs dann doch nicht so klar.
Außerdem sind 2600mAh für einen mobilen Roboter auch schon recht knapp.
Für wieviel Volt sind dann die Motoren ausgelegt (Nennspannung)? Wenn die mehr vertragen, kannst du deren Geschwindigkeit doch über pwm regeln!
alufolie:
Also die alufolie um welche kabel wickeln?
Jede Baugruppe für sich abschirmen: Motorkabel für sich, Sensorkabel für sich, Stromkabel für sich (den Schirm einfach mit GND - Masse verbinden; ein Erdungskabel pro Schirm). Beim Motor z.B. alle Zuleitungen gesamt schirmen und mit deem Motorgehäuse verbinden (das ja auch schon "geerdet" ist). Das hilft bei Störungen, die abgestrahlt werden. Allerdings könnte das die letzte Maßnahme sein, die Störungen gehen auch über die Leitungen in die Spannungsversorgung, deshalb sind die Kondensatoren und die andre Entstörung, durch entsprechende Bauteile, wohl am wichtigsten.
Bei der Spannungsversorgung könnte man eine höhere Versorgungsspannung wählen (9V beispielsweise) und die Baugruppen mit einem Spannungsregler versorgen (Spannungsregler zwischen Batterie und Baugruppe), der die Spannung dann stabil hält. Wenn die Ausgangsspannung höher ist darf sie auch etwas nachlassen (egal ob durch viel Belastung oder weil die Batterien leer werden), die Spannungsregler gleichen das aus. Auf einem Arduino-Board ist auch ein Spannungsregler drauf, wenn Du von dort aus die Baugruppen versorgst, die angeschlossen sind (das Arduino Board hat j 3.3V und 5V-Ausgänge), sollte das ausreichend sein.
Immer eins nach dem andern, dann sieht man, was wirklich geholfen hat.
Was die Akkus anbelangt, ich benutze z.B. dieses Ladegerät: hier klicken, Voltcraft ECO 3000 (https://www.conrad.de/de/modellbau-ladegeraet-230-v-3-a-voltcraft-v-charge-eco-lipo-3000-lipo-1409525.html). Damit kann ich für meine Bedürfnisse so ziemlich jeden LiPo-Akku laden. Zum Beispiel solche: 3000mAh, 7.4V (https://www.conrad.de/de/conrad-energy-modellbau-akkupack-lipo-74-v-3000-mah-zellen-zahl-2-20-c-stick-xt60-1344154.html) oder 3000mAh 14.8V (https://www.conrad.de/de/hacker-modellbau-akkupack-lipo-148-v-3000-mah-zellen-zahl-4-20-c-stick-ec3-239514.html)
wenn man 6 * 1.2V Zellen hat, dann lässt sich ja auch der Arduino-eigene Stepdownregler an der DC-Buchse verwenden, ohne weitere DC-Wandler.
eniddelemaj
27.11.2018, 14:55
Das mit der Alufolie halte ich dann als letzte Option fest.
Und natürlich werde ich die Kondensatoren auch ausprobieren, sobald diese da sind.
Korrigiert mich, wenn ich was falsch verstanden habe:
Also ein Spannungsregler gleicht Schwankungen in der Spannung, die von den Motoren ausgehen, aus.
Diesen Spannungsregler schalte ich zwischen die Stromquelle und dem Bauteil, mit dem ich die Stromversorgung verbinde
(In meinem Fall den Motorcontroller). Da ich aber, erst so einen Regler kaufen müsste, könnte ich auch den eingebauten Arduino-
Spannungsregler verwenden. Dazu müsste ich lediglich den Arduino selbst an die Stromversorgung über die DC-Buchse schließen.
Dann versorgt der Arduino die Sensoren und den Motorcontroller samt Motoren mit Strom, während der Arduino-Spannungsregler, Schwankungen in der Spannung, die von den Motoren ausgehen, ausgleicht.
Also die Hauptsache ist nun, den Arduino selbst mit genügend Spannung zu versorgen. Der Arduino-Regler
gleicht Schwankungen aus und der MPU "leidet" unter diesen Spannungen nicht mehr und erfüllt seinen Zweck.
Ist das der Plan?
Ich versuche möglichst wenig Geld auszugeben, deswegen sträube ich mich vor dem Kauf des Akkus.
Könnte ich dann eine 9 V Batterie verwenden und diese dann an die DC Buchse des Arduinos schließen?
Ich sehe allerdings gerade, dass die Motoren einen Spannungsbereich von 3 - 9 V aufweisen. Eine 9 V Batterie
wäre dann zu wenig richtig? Könnte ich dann übergangsweise 2 9V Batterien in Reihe schalten ?
im Prinzip: ja,
aber:
die 9V Batterie müsste auch schon 3000-5000mAh Kapazität haben, alles andere ist zu schwach (die kleinen 9V Blöcke für Waagen etc. taugen nichts, die sind bei weitem zu schwach und auf die Dauer auch viel zu teuer, wenn nicht wiederaufladbar).
Nimm doch 6x1.2V AA Zellen á 2600mAh, dann hast du 7.2V, das wär schon mal ein Anfang.
eniddelemaj
27.11.2018, 16:40
im Prinzip: ja,
aber:
die 9V Batterie müsste auch schon 3000-5000mAh Kapazität haben, alles andere ist zu schwach (die kleinen 9V Blöcke für Waagen etc. taugen nichts, die sind bei weitem zu schwach und auf die Dauer auch viel zu teuer, wenn nicht wiederaufladbar).
Nimm doch 6x1.2V AA Zellen á 2600mAh, dann hast du 7.2V, das wär schon mal ein Anfang.
Ah okay. Ich werde berichten. Würden auch 6x 1.2 v á 2300 mAh gehen? Das Problem ist, dass ich gerade nur 4 von den 2600 mAh zuhause habe. Ich habe zwar 4 weitere, aber die sind bis donnerstag für mich nicht erreichbar. Ich habe aber gerade 6 1.2v á 2300mAh parat. Gehen die auch oder wäre das sinnlos?
- - - Aktualisiert - - -
Mir ist noch eingefallen, dass der motorcontroller (L298n) einen 5v regulator hat. Ist das das gleiche oder was anderes? Wäre das das gleiche hätte unser vorhaben ja keinen effekt oder?
Ah okay. Ich werde berichten. Würden auch 6x 1.2 v á 2300 mAh gehen? Das Problem ist, dass ich gerade nur 4 von den 2600 mAh zuhause habe. Ich habe zwar 4 weitere, aber die sind bis donnerstag für mich nicht erreichbar. Ich habe aber gerade 6 1.2v á 2300mAh parat. Gehen die auch oder wäre das sinnlos?
- - - Aktualisiert - - -
Mir ist noch eingefallen, dass der motorcontroller (L298n) einen 5v regulator hat. Ist das das gleiche oder was anderes? Wäre das das gleiche hätte unser vorhaben ja keinen effekt oder?
klar sind für Gehversuche und kurze Tests auch mal 2300mAh erlaubt ;)
Zu L298n 5v regulator kann ich nichts sagen: kenne ich nicht, habe ich nicht, nutze ich nicht.
Es gibt auch einen integrierten 5-V-Regler. Wenn Sie also die Motoren mit 7 bis 12 V DC betreiben, kann das Modul Ihren Arduino (usw.) auch mit 5 V DC versorgen.
Quelle: https://tronixlabs.com.au/robotics/motor-controllers/l298n-dual-motor-controller-module-2a-australia/
Dazu müssen aber die Motoren sauber entstört sein. Dann gehen lange, verdrillte Kabel von dem Motor zum Modul. An dem 5V-Regler kann man dann 5V abgreifen.
Quelle: https://tronixlabs.com.au/robotics/motor-controllers/l298n-dual-motor-controller-module-2a-australia/
Dazu müssen aber die Motoren sauber entstört sein. Dann gehen lange, verdrillte Kabel von dem Motor zum Modul. An dem 5V-Regler kann man dann 5V abgreifen.
und wozu, wenn doch der Arduino stabiliserte 5V selber hat?
und wozu, wenn doch der Arduino stabiliserte 5V selber hat?
Weil der Regler da mit auf dem Board drauf ist. Er wollte nur wissen, ob man den verwenden kann, für irgendwas. Er hat da noch einen 5V-Regler.
Wie ist das jetzt, wird der Arduino direkt mit 4,6V betrieben, ohne Nutzung des Spannungsreglers?
Weil der Regler da mit auf dem Board drauf ist. Er wollte nur wissen, ob man den verwenden kann, für irgendwas. Er hat da noch einen 5V-Regler.
Wie ist das jetzt, wird der Arduino direkt mit 4,6V betrieben, ohne Nutzung des Spannungsreglers?
ja, hat er doch geschrieben! Wenn er 4x12V hat,würde ja auch nur ein stepup-Regler funktionieren, kein stepdown wie per L298 zu vermuten.
eniddelemaj
27.11.2018, 22:02
Also machte der 5V Regler an dem Motorcontroller keinen Sinn, da die Versorgungsspannung unter 5V lag
und da nichts "zu regeln" war? Eben weil es ja ein Step down Regler ist. Und sonst kann ich auch den Regler
des Motorcontrollers verwenden richtig? Der Vorteil bei dem Motorcontroller ist, dass ich die Kabel der Batteriehalterung, einfach in die Klemmen des Motorcontrollers stecken kann. Bei dem Arduino bräuchte ich
einen Stecker für die DC-Buchse.
Naja ich habe jetzt die 6x 1.2V á 2300mAh ausprobiert und ich glaube ehrlich gesagt,
dass das zu viel sein muss. Die Motoren drehen sich unglaublich schnell. Jetzt macht mein
Programm auch keinen Sinn mehr, da sich der Roboter so schnell dreht, dass die Yaw Messung
keinen Sinn mehr macht. Er dreht sich einfach unaufhörlich weiter, weil der Wert ständig übersprungen wird.
(Übrigens: Der Schaltplan ist immer noch der gleiche außer, dass jetzt 6x 1.2V á 2300mAh verwendet werden.
Also der L298n ist immer noch an die Stromquelle angeschlossen, nicht der Arduino.)
Der MPU arbeitet allerdings normal. Also ich kann immer noch einen Winkel ermitteln. Ob der Yaw Wert
immer noch springt konnte ich leider nicht heraus kriegen, eben weil die Motoren sich viel zu schnell drehen.
Wenn ich jetzt annehme, dass die 6 1.2V zu viel sind, verstehe ich das trotzdem nicht.
Wie können nur 4x 1.2V Akkus den Roboter ausreichend versorgen, wenn schon der Arduino 5V verbraucht?
Was mache ich jetzt? Ich bin wirklich optimistisch eine Lösung zu finden und ich bin richtig froh, dass mir hier
so geholfen wird!
Eine Idee die ich hätte wäre einen Potenziometer zwischen die Stromquelle und den L298n zu schalten. Ich kenne
die Funktion eines Potenziometer (Also die Regelung der Spannung per Hand), aber ich habe damit noch nie gearbeitet.
Wäre das eine Lösung?
Oder vielleicht benutze ich Wiederstände, um auf eine etwas niedrigere Spannung
zu kommen.
Wie viel V brauche ich eigentlich ? Rechnet sich das so?:
5V Arduino + 2* 3-9V Motoren + 3.3V MPU = 11.3 - 17.3V.
Geht das so?:D
Nein, regle die Motoren per pwm zurück ( analogWrite(pin, 127) ).
Schließe den Arduino an den Batterien über die DC Buchse oder Vin (!) Pin an, denn die sind genau dafür stabilisiert!
Vergiss den L298 Regler, denn der kann wieder von der Motorleistung negativ beeinflusst sein!
Aber zum Test:
was passiert, wenn die Motoren laufen, und du den Robot in der Hand hältst und drehst?
Das ist ja erst mal die entscheidene Frage.
Was macht dein yaw bei exakt manuellen 180° Drehung hin und zurück?
Sind das diese Getriebemotoren (http://www.produktinfo.conrad.com/datenblaetter/1500000-1599999/001573543-da-01-de-JOY_IT_GETRIEBEMOTOR_MIT_RAD_COM_MOTOR01.pdf)?
Hier wären die Daten aus dem Datenblatt dazu:
Spannung DC V 4,5 - 6 - 7,2 - 9
Stromstärke Leerlauf mA 190 - 160 - 180 - 200
Drehzahl pro Minute im Leerlauf +- 10% 90 - 190 - 230 - 300
Drehmoment gf/cm min. 800 - 800 - 1000 - 1200
Deine ganze Beschaltung benötigt für den Arduino an der DC-Buchse 7 bis 9V. Am Arduino sind Spannungen rausgeführt, 3.3V und 5V. Daran kann man Erweiterungsplatinen anschließen. DC-Motoren lassen sich i.R. nicht direkt am Arduino betreiben, weil die zu viel Strom aufnehmen, wie oben zu sehen ist, bis 200mA - im Leerlauf. Bei Belastung würde ich von bis zu 400mA ausgehen. Aus dem Grund kommt ein Motortreiber-Baustein hinzu. Der Baustein wird mit dem Arduino angesteuert und erhält eine extra Versorgungsspannung für die DC-Motoren, die von der Versorgungssspannung vom Arduino abweichen kann, aber nicht muss. Es kann auch dieselbe Versorgungsspannungsquelle sein. Wie man aus der Tabelle sieht, drehen die Motoren bei 7.2V Versorgung mit 230u/min, statt 90u/min bei 4.5V. Das ist 2.5mal so schnell.
Allerdings sind die 4.5V für den Arduino zur Versorgung etwas zu wenig. Das sollten tatsächlich mehr als 6V (7.2 z.B. sein). Wenn die Motoren zu schnell drehen, kann man die mit dem Arduino per PWM in der Drehzahl steuern, über den Motortreiber. An den Motoren ist scheinbar nichts entstört. Wo hängt die Sensorplatine mit der Versorgung dran, direkt am Motortreiber und der Arduino auch?
Ich denke, Du kannst die 6*1.2V 2300mAh schon verwenden. Man muss nur daran denken, dass "normale" Akkus ihre Gesamtleistung nicht so schnell abgeben können, dann würde die Spannung am Akku sinken. Bei LiPo ist das was anderes, da kann ein 3000mAh-Akku durchaus die 3000mA und mehr in sehr kurzer Zeit abgeben, der ist dann nur schnell leer.
Überschlagsweise Leistungsberechnung - nicht unbedingt meine Stärke ;)
Motorenleistung: 2x 400mA*7.2V = 5760mW
Arduinoleistung: 100mA*5V = 500mW
Sensorplatine Leistung: 50mA*5V = 250mW
Gesamt: 6510mW
Batterien:
7.2V*2300mA=16560mW
(Bitte berichtigen, wenn ich falsch gerechnet habe.)
Aber Du musst diese ingesamt 7.2V am Arduino an der DC-Buchse anschließen. Die Sensorplatine versorgst Du vom Arduino mit 5V oder 3.3V - wie es nötig ist. Der Motortreiber bekommt zum einen die 7.2V aus den Batterien. Der Arduino steuert den Motortreiber per Digital-Ausgang. Per PWM wird die Geschwindigkeit der Motoren geregelt.
Und nein, die Spannungen für die einzelnen Baugruppen summieren sich nicht auf, nur die Leistung die die einzelnen Komponenten brauchen. Die Spannung bleibt bei max. 7.2V für die Motoren und für den Arduino wird die Spannung über den Spannungsregler auf dem Arduino-Board auf 5V runtergeregelt (zusätzlich werden auf dem Board 3.3V erzeugt, so dass an dem Board 2 Spannungen für Erweiterungen zur Verfügung stehen).
MfG
Mir ist ein Punkt aufgefallen, das deutlich unterschiedliche Verhalten bei 6x1,2V und 4x1,2V.
Der L298N benötigt eine Versorgungsspannung an pin 4 von V IH+2,5V mit V IH min = 2,3V.
Das wird mit vier realen Akkus im Betrieb sicher etwas knapp.
Ich bin nicht sicher ob es daran liegt, aber es ist wohl ein kritischer Punkt.
Datenblatt: 33809
und nur nochmal, damit du es nicht überliest:
der Pin
Vin
auf der Arduino-Steckerleiste tut genau dasselbe wie die DC-Buchse, also hier kannst du auch 7.2V anlegen, per Jumperkabel!!
Nein, regle die Motoren per pwm zurück ( analogWrite(pin, 127) ).
Schließe den Arduino an den Batterien über die DC Buchse oder Vin (!) Pin an, denn die sind genau dafür stabilisiert!
Vergiss den L298 Regler, denn der kann wieder von der Motorleistung negativ beeinflusst sein!
Aber zum Test:
was passiert, wenn die Motoren laufen, und du den Robot in der Hand hältst und drehst?
Das ist ja erst mal die entscheidene Frage.
Was macht dein yaw bei exakt manuellen 180° Drehung hin und zurück?
eniddelemaj
28.11.2018, 14:21
Leute es hat funktioniert! Auf euren Hinweis hin, habe ich die Versorgungsspannung an den Arduino
angeschlossen, damit ich den Spannungsregler verwende, der Spannungsschwankungen ausgleicht.
Er tut genau das, was ihr es gesagt habt!
Der Yaw Wert bleibt jetzt stabil und verschiebt sich jetzt nicht mehr plötzlich.
Ich hatte schon öfters Probleme mit Sensoren, die sich komisch verhielten, wenn die Motoren laufen.
Also an alle die ein ähnliches Problem haben:
Achtet auf eine ausreichende Versorgungsspannung und schließt diese am VIN oder der DC Buchse des Arduinos an.
Der Grund dafür ist, dass Motoren für Spannungsschwankungen sorgen, die sich dann auf die Sensoren auswirkt.
Lasst die Spannung über den Arduino laufen, damit sein Spannungsregulator Schwankungen ausgleichen kann.
Über den Arduino versorgt ihr den Motorcontroller, der dann die Motoren versorgt. Eure Sensoren werden somit
nicht mehr beeinträchtigt.
Und danke an alle, die mir geholfen haben! : ) Vor allem an diejenigen, die konsequent
Tipps und Vorschläge gegeben haben!
freut mich, dass es jetzt funktioniert! :Strahl
Jetzt müssen die Motoren noch entstört werden.. :)
Aber immer schön wenn es dann funktioniert!
MfG
Jetzt müssen die Motoren noch entstört werden..
Aber immer schön wenn es dann funktioniert!
MfG
nein, müssen sie nicht, und mussten sie auch vorher noch nie bei mir selber,
dieser Vorschlag war hier ncht zielführend, wie von Anfang an von mir vermutet ;)
Zu dem Thema habe ich hier noch was Lesenswertes, aus 2003, gefunden: https://www.roboternetz.de/community/threads/332-Wie-entstört-Ihr-Motoren
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.