linuxer7
29.05.2012, 13:32
Hallo Leute.
Ich habe ein kleines Problem und stehe momentan etwas auf dem Schlauch.
Mein Roboter wird angetrieben von 2 Conrad-Motoren mit 1:50 Getrieben. Auf den Achsen befindet sich jeweils ein Geber womit ich die "Impulse/Schritte" zählen kann die das Rad macht. Gesteuert wird mit Bascom, PWM.
Soweit funktioniert alles. Wenn ich 200 "Schritte" gerade aus fahre und mir am ende jeweils die gemeldeten Impulse anschaue liegen die +/- 1 auseinander.
Links 200, Rechts 201/199. Gezählt werden die linken Impulse.
Wenn ich nur den rechten Motor ansteure (255) und den linken Motor stehen lasse fährt er einen Vollkreis mit 135 Schritten.
Nun mein Problem.
Wie kann ich gezielt einen Kreis fahren?
Ich weiß die Frage an sich ist etwas bescheuert. Linker Motor Voll-Saft. Rechter Motor weniger Saft. Robi fährt im Kreis.
Mein Problem liegt aber darin das wenn der linke Motor Voll läuft (255) und der Rechte nur etwas (10) dann habe ich jedes mal einen anderen Radius.
Die gemessenen Impulse der Räder belegen das auch.
Links 135 Rechts 30
Links 135 Rechts 35
Links 135 Rechts 32
usw.
Mein Ziel ist/war es das Ding so zu programmieren das er mit einem kleinen Kreis anfängt und dann in immer größere Kreise folgen.
Wie gesagt wenn ich den Robi gerade aus fahren lasse laufen beide Motoren Synchron. Das Ding fährt gerade aus und die Zähler bleiben bei annähernd gleichen Werten stehen. Ich will damit sagen das keiner der Motoren langsamer oder schneller rennt als der andere.
Meine Vermutung ist das der/die Motor/en bei kleinen Impulsen unterschiedlich ansprechen und deswegen die Differenz auftritt.
Ich müsste es irgendwie Programm technisch hin bekommen das z.b. der linke Motor 100 Impulse/Schritte macht und der rechte Motor nur 30 und das aber in der gleichen Zeit.
So das beide "Geber" permanent ausgewertet werden und danach der PWM-Wert korrigiert werden kann.
Wie mache ich so etwas.
Geht so etwas eigentlich mit Gleichstrommotoren?
Mit Schrittmotoren kann ich es mir vorstellen aber die habe ich nicht.
Irgendwer ne Idee?
Gruß
Thomas
Ich habe ein kleines Problem und stehe momentan etwas auf dem Schlauch.
Mein Roboter wird angetrieben von 2 Conrad-Motoren mit 1:50 Getrieben. Auf den Achsen befindet sich jeweils ein Geber womit ich die "Impulse/Schritte" zählen kann die das Rad macht. Gesteuert wird mit Bascom, PWM.
Soweit funktioniert alles. Wenn ich 200 "Schritte" gerade aus fahre und mir am ende jeweils die gemeldeten Impulse anschaue liegen die +/- 1 auseinander.
Links 200, Rechts 201/199. Gezählt werden die linken Impulse.
Wenn ich nur den rechten Motor ansteure (255) und den linken Motor stehen lasse fährt er einen Vollkreis mit 135 Schritten.
Nun mein Problem.
Wie kann ich gezielt einen Kreis fahren?
Ich weiß die Frage an sich ist etwas bescheuert. Linker Motor Voll-Saft. Rechter Motor weniger Saft. Robi fährt im Kreis.
Mein Problem liegt aber darin das wenn der linke Motor Voll läuft (255) und der Rechte nur etwas (10) dann habe ich jedes mal einen anderen Radius.
Die gemessenen Impulse der Räder belegen das auch.
Links 135 Rechts 30
Links 135 Rechts 35
Links 135 Rechts 32
usw.
Mein Ziel ist/war es das Ding so zu programmieren das er mit einem kleinen Kreis anfängt und dann in immer größere Kreise folgen.
Wie gesagt wenn ich den Robi gerade aus fahren lasse laufen beide Motoren Synchron. Das Ding fährt gerade aus und die Zähler bleiben bei annähernd gleichen Werten stehen. Ich will damit sagen das keiner der Motoren langsamer oder schneller rennt als der andere.
Meine Vermutung ist das der/die Motor/en bei kleinen Impulsen unterschiedlich ansprechen und deswegen die Differenz auftritt.
Ich müsste es irgendwie Programm technisch hin bekommen das z.b. der linke Motor 100 Impulse/Schritte macht und der rechte Motor nur 30 und das aber in der gleichen Zeit.
So das beide "Geber" permanent ausgewertet werden und danach der PWM-Wert korrigiert werden kann.
Wie mache ich so etwas.
Geht so etwas eigentlich mit Gleichstrommotoren?
Mit Schrittmotoren kann ich es mir vorstellen aber die habe ich nicht.
Irgendwer ne Idee?
Gruß
Thomas