Jump to content

[C/C++] Servo Brick :


Recommended Posts

So, am Wochenende habe ich mal den Servobrick in mein bestehendes System eingebunden. Zuerst lief alles super, dann tauchte aber ein Problem auf. Wahrscheinlich hab ich da Schrott programmiert, aber folgendes ist passiert.

Habe ein Multitouch genommen und eine bestimmte Taste mit einem set_position für einen Servo festgelegt. So bewegte sich der Motor brav auf jeden Tastendruck. Dann noch 3 weitere Tasten für rückwärts und set_position auf 9000 und -9000. ( Vollauschlag zu beiden Seiten)

 

Jetzt ist es so, das nach ein paar mal Tasten drücken der Servo "stottert". Wird laut Taste auf Position -9000 gefahren, so geht auf einmal gar nichts mehr, die LCD24 Bricklets geben nichts mehr aus und alle paar Sekunden bewegt sich der Servo. ( Ohne aber auch nur ansatzweise sich auf die tatsächlich angeforderte Position bewegt zu haben. Zwar in die korrekte Richtung aber eher nur in ganz kleinen Schritten )

 

Ich schätze erst mal einen Programmierfehler meinerseits , aber das bringt mich zu meinen Fragen.

Macht es Sinn, das Erreichen der Position über das Callback abzufragen?

Was passiert, wenn noch bevor der Servo angekommen ist, bereits eine neue Positionsänderung gewünscht wird.

 

Leider fehlte mit gestern noch die Zeit, aber das Verhalten an sich war recht sonderbar. Es sah so aus, als wäre ein Teil des Systems verlangsamt. ( Ich habe die LCD Anzeige auch noch als ncurses Clone auf dem Bildschirm und dort wurden die Änderungen angezeigt, die eigentlich auch auf dem LCD Bricklet erscheinen sollten. Auch die Tastendrucke wurden dort korrekt angezeigt. Auch ein paar angeschlossenen Sensoren liefen brav weiter.) Wie gesagt, ich schätze mal das liegt auf meiner Seite, aber wie kann ich sicher stellen, das der Servobrick genau das macht was er soll?

Link zu diesem Kommentar
Share on other sites

Welche Art Servo hast Du?

Ist das wirklich ein Servo, welches 180° abdeckt?

Die meisten können nur -+ 45°, dann solltest Du auch nur solche Impulse senden (also den Wertebereich und die Grundeinstellung anpassen).

 

Wie oft sendest Du Befehle zum Stack und über welche Verbindung? Ich hatte vor längerer Zeit ziemliche Probleme mit Servo in Kombination mit der WLAN Extension. Das ging bis zum Aufhängen des Stacks, wenn ich sehr viele Daten über die WLAN Extension sende/empfange.

 

Das sollte aber behoben sein ...

Link zu diesem Kommentar
Share on other sites

Ganz normale Servos, die ca. 120Grad drehen. Dies machen Sie mit dem Brickviewer auch ohne Probleme, selbst wenn ich den Bereich von 9000 bis -9000 belasse. Ich habe die gleichen Parameter auch im C Programm verwendet, um einfach mal testen zu können.

 

Ich habe mal weiter rumgespielt. Es ist so, dass der Servo langsam weitergedreht wird, selbst wenn ich das Programm welches die Bricks stuert, beendet habe. Bei einem Neustart fällt dann die Enumerierung der Bricks weg und es entsteht ein undefinerter Zustand des Systems. In dieser Zeit zuckt der Servo brav vor sich hin und bewegt sich alle paar Sekunden vor. Nach einem Hardreset funktioniert wieder alles, Enumerierung findet alle Teile und ich kann diese zur Initialisierung kurz ansprechen. Bei dieser Initialisierung wird der Servo auch mit Set_position von 9000 bis 9000 gedreht, was er auch erledigt.  Danach läuft wieder alles.

 

Wenn ich dann per Multitouch den Servo bewege, tut er ein paar mal das was er soll und dann ist Schicht. Wobei alle mit angeschlossenen Sensoren brav ihre Werte liefern, nur die Anzeige auf dem LCD Display friert ein. Naja, und dann kann ich auf dem Multitouch drücken was ich will, es bleibt still. Das Ganze hat ja vorher einwandfrei funktioniert, auch die Anzeigen etc., aber es ist halt so, dass ich seit dem Servobrick das Problem habe. Natürlich kann ich ihn auch alleine ansteuern, das werde ich mal die Tage ausprobieren, ob der Fehler auch auftritt. Vielleicht klappt da was mit dem parallelbetrieb nicht, denn im brickviewer wird der Servotest auch sofort ausgeschaltet, wenn man einen anderen Reiter anwählt.

 

Naja, schaun wir mal. Ich teste weiter, jetzt kommt eh die Jahresezeit fürs Arbeitszimmer.

 

 

 

 

 

Link zu diesem Kommentar
Share on other sites

Kann ähnliches berichten, I/O-16-Bricklet an die IMU ganz oben im Stack und wird nicht am Master erkannt. I/O-16-Bricklet an den Master unten im Stack und das Bricklet wird erkannt wie alle anderen im Stack auch. Wenn das Bricklet an der IMU ist, kann es dafür sorgen das fast alle Bricklets am Stack nicht mehr erkannt werden. Die IMU selbst wird dann auch nicht mehr im Brickv angezeigt. Könnte natürlich auch daran liegen das unter der IMU auch ein Servo Brick liegt. I/O-16-Bricklet am Servo und es läuft ebenfalls.

 

Ich habe es nur lösen können in dem ich an die IMU kein I/O-16-Bricklet anschließe. Firmware ist überall aktuell.

 

edit:// IMU (v2) mit I/O-16-Bricklet im Stack und USB an der IMU statt am Master und nur die IMU mit dem I/O-16-Bricklet wird erkannt. Also ok. Scheint so auszusehen, als denke die IMU mit einem I/O-16 das es alleine im Stack ist und stellt die Stack Kommunikation ein, direkt selbst kann es aber mit dem I/O-16 kommunizieren. I/0-16 irgendwo anderes als an der IMU und alles läuft.

 

Kann also das Servo Brick ausschließen und den Fehler auf I/0-16 und IMU eingrenzen.

 

 

Link zu diesem Kommentar
Share on other sites

Daran merkt man, dass die Komplexität solcher "Kleinigkeiten" nicht zu unterschätzen ist. Auch wenn es ab und an hakt, Hut ab vor den Jungs von TF!! ( Keine Ahnung, ob's da auch Mädels gibt )

 

Ich werde mal versuchen, das ganze nur mit Servobrick und LCD laufen zulassen ( also ohne die anderen Bricks und Bricklets ) , vielleicht kann ich das noch etwas eingrenzen.

 

Zum Glück lassen sich solche Stolpersteine meist per Software erledigen.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...