PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lynxmotion SSC32 Servocontrollerboard ansteuern



robosapiens
05.08.2014, 16:25
Möchte meinem Lynxmotion Hexapod ein leistungsstärkeres "Gehirn" geben, sodass ich mich dazu entschieden habe, das originale Bot Board zu entfernen und stattdessen ein Raspberry Pi zu verbauen, welches in Python programmiert werden soll. Doch leider bekomme ich die Ansteurung nicht hin. Habe versucht das Board sowohl über die Rs232 Schnittstelle der GPIO ports anzusteuern als auch über einen USB zu RS232 Converter, an dem das Board angeschlossen war.

Habe das Paket python-serial installiert, mit dem ich dachte mein Projekt umsetzten zu können. Das Testprogramm dazu sah wie folgt aus:

import serial

serialport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5)

serialport.write("#0 P1500 # 1 P1500 T 1000 <cr>")
delay(1000)
serialport.write("#0 P1000 # 1 P1000 T 1000 <cr>")
delay(1000)

Mein RPi gab die fehlermeldung aus, dass delay nicht deklariert sei. Als ich es entfernt hatte und erneut ausführte kam keine Fehlermeldung, jedoch hat sich auch kein Servo bewegt.
Als ich dann versuchte das Board per USB anzusteuern änderte ich die Adresse zu /dev/ttyACM0 , welche entweder nicht richtig ist, oder das Board darauf auch nicht reagiert....


Hat jemand eine Idee zur Lösung meines Problems?

robosapiens
06.08.2014, 14:50
Hat jemand schonmal ein serielles Servoboard mit einem RPi angesteuert oder kann mir sagen was ich beachten muss?

oberallgeier
06.08.2014, 17:35
... auch über einen USB zu RS232 Converter ... Als ich dann versuchte das Board per USB (http://www.rn-wissen.de/index.php/USB) anzusteuern änderte ich die Adresse zu /dev/ttyACM0 ...

... serialport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5)Bist Du sicher, dass die Adresse stimmt? Ich verbinde meine Peripherie am RasPi über USB-to-UART über das Terminal CuteCom; ich habe aber die Adresse "/dev/ttyUSB0" eingetragen. Das Raspi bediene ich dabei über RemoteDesktop.

Schau doch mal beim Hochfahren im Konsolentext vom RasPi, was bei Dir beim Kontext zu "USB" steht . . . das könntesollte bei Dir ein ähnlicher Anschluss sein. Denn Du adressierst mit AMA (Advanced_Microcontroller_Bus_Architecture, statt AMBA steht hier kurz AMA) eine "direkte" UART-Verbindung des RasPI und nicht den USB-Konverter.

robosapiens
06.08.2014, 18:44
Hallo oberallgeier für deine Antwort.

USB0 als Adresse anzugeben funktioniert nicht.
Habe die USB Schnittstelle "abgefragt" wobei mir aufgefallen ist, dass mein USB zu RS232 erkannt und scheinbar installiert ist:
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Po

bitte entschuldige, dass ich noch nicht alles bei Linux weiß, aber die Adresse, die ich statt USB0 angeben müsste wäre doch 067b richtig? Durch diesen Befehl ist eine Signalübertragung über den USB converter gegeben ?!

- - - Aktualisiert - - -

bitte entschuldige, hab das wörtchen danke in der anrede irgendwie übersprungen :)

- - - Aktualisiert - - -

die Beine meines Hexapods bewegen sich!!!!!!!
noch nicht regelmäßig oder gewollt aber daran kann man nun weiter aufbauen! :D

Mein Fehler im System war ein sehr dummer Fehler! Hab im Kabelgewürr TX falsch angeschlossen....

oberallgeier
06.08.2014, 19:27
... entschuldige, dass ich noch nicht alles bei Linux weiß ... sehr dummer ... TX falsch angeschlossen ...Wer bitte weiß schon alles über Linux? Ich bin da grad mal seit ein paar Tagen drin - da kratze ich erst an der Oberfläche rum.

TX falsch angeschlossen! Kenn ich, vor allem kenne ich diese dumme Verwechslung Rx/Tx. Deshalb sind meine dreipoligen UART-Stecker auch immer als (Rx)(GND)(Tx) angeordnet. Da genügt ein einfaches Steckerwenden.

Schön, dass es jetzt klappt!

robosapiens
06.08.2014, 19:56
hatte ja nichts gelötet sondern alles mit Brücken gesteckt... doch wenn 18 Kabel von den Servos und noch einige weitere Kabel auf meinem Tisch liegen, verliert man schnell die übersicht :)

Weißt du zufällig wie ich jeden einzelnen der 32 Ports anspreche?

robosapiens
10.08.2014, 16:33
kann mir vielleicht jemand kurz erklären wofür folgende Zeile verantwortlich ist, bzw. was die Werte aussagen?
serialport.write("#0 P1000 # 1 P1000 T 1000 <cr>")
Egal wie ich die Werte änder, es bewegt sich immer das erste Servo in immer derselben Geschwindigkeit...

HeXPloreR
27.08.2014, 10:03
Hallo robosapiens,

dazu könntest Du Dir das User-Manual zum SSC32 von Lynxmotion (klick hier) (http://www.lynxmotion.com/images/data/ssc-32.pdf) ansehen.

Viele Grüße
Jörg

robosapiens
27.08.2014, 17:33
Hallo Jörg,

auf diese Idee bin ich nicht gekommen... :) Besonders weil ich das Ausgedruckte Handbuch zum SSC32 vorgstern noch in der Hand hatte :D

HeXPloreR
28.08.2014, 08:36
Hallo robosapiens,

..."hört" sich komisch an Deine Antwort.

Deswegen:
Sorry das ich überhaupt was gesagt habe....war anscheinend ZU offensichtlich das dort direkt was zu dem Problem stehen könnte. Vielleicht überlege ich mir auch nochmal ob ich auf Fragen, die schon länger als zwei Wochen nicht weiterbeantwortet wurden, antworte. Denn die Wahrschienlichkeit das der Fragensteller die Lösung schon gefunden hat ist doch ziemlich hoch, merke ich.

Also was ist jetzt - neue Erkenntnisse gewonnen, oder stand in Deinem Handbuch dazu nichts?


Viele Grüße
Jörg

robosapiens
28.08.2014, 21:20
Nein, im gegenteil Hexplorer, das war nicht ironisch gemeint! Bin dir sehr dankbar.
Manchmal sieht man den Wald vor lauter Bäume nicht. Bin nicht auf die Idee gekommen, dass im Handbuch etwas zu meinem Problem steht.
Sorry, wenn du dich persönlich angegriffen gefühlt hast.

robosapiens
01.09.2014, 20:46
Bitte haltet mich nicht für unfähig, aber ich habe nun ein anderes Problem :)

Habe mein Raspberry Pi über einen USB zu Serial Converter an das SSC32 angeschlossen. Habe auch geschafft ein Servo anzusteuern, doch nach kurzer Zeit funktionierte es einfach nicht mehr... beim anschalten des Boards leuchtet eine Led, wenn es ein Signal vom Raspberry Pi bekommt, blinkt die Led kurz auf und geht dann aus. Verwende den Code vom Anfang des Topics. Das komische ist, schließe ich das Board an meinen Computer, kann ich jedes Servo ohne Probleme ansteuern, außerdem blinkt die Led die ganze Zeit.

Hat jemand eine Idee woran es liegt?

HeXPloreR
02.09.2014, 18:07
Hallo,

also ich habe es zwar aufgegeben mich mit dem Raspi/Linux auseinander zu setzen...
...aber kannst Du bitte mal nachschauen ob die Leerzeichen zwischen "#_1" dort hingehören. Vielleicht werden sie ja nicht rausgefiltert. Ich habe mal bischen rumgespielt mit meiner SSC32 aber das ist zu lange her um jetzt sagen zu können das es nichts ausmacht. Dazu habe ich auch zu wenig Erfahrung mit "Daten senden" vom Terminal.

Das Handbuch sagt, wenn seriell Daten empfangen werden dann blinkt die Led....könnte also schon mal richtig sein was der PC macht.

Was bedeutet "nach kurzer Zeit funktioniert es nicht mehr?" Was geht am Servo und wie lange tut es das was es soll? Welche Spannung liegt am SSC32 für die Servos an? Wo (ganz genau) hast Du die Spannung angeschlossen? Welche Servos sind das?
Richtigen Pin0 für Servo0 gewählt? - Wäre ja nen Traum wenn man was an Pin1 hängt und an Pin0 was erwartet ;)

Außerdem kann es gut sein das Dein Pythoncode einfach nach ca. 2Sekunden fertig ist? Erhöhe testweise das Delay zusätzlich zur unten genannten Maßnahme mal auf 3000. Dann ist der Code allerdings nach ca 6Sekunden auch fertig, aber das Servo hat mal etwas Zeit überhaupt irgendwo hin zu fahren.

Dreh den Servo mal spanungslos aus der Mitte, Spannung an (was passiert?) und gebe das bei Python ins Programm ein:
"#0 P1500 S750 <cr>" + delay - ... fährt es jetzt auf Mitte? Falls das Servo nach Spannung an wieder auf Mitte fährt, ändere den Positionswert mal in 1700 (erstmal nicht mehr) und führe Python wieder aus.
wenn ja:...dann dreh es wieder spannungslos aus der Mitte, spannung an (was passiert?) und gebe das ein: "#0 P1500 T1000 <cr>" + delay. Hier auch wieder wenn selbst fährt, Position ändern.
Unbedingt nur diesen einen Servo an Pin0 anschliessen für diesen Versuch. Vielleicht bricht ja einfach die Spannung weg - woher kommt deine Spannung?

Wenn das zu nichts führt, dann würde ich sagen der Pi macht irgendwas nicht so wie er soll /bzw macht das was du ihm sagst.

Ansonsten kann ich dir leider jetzt nicht weiter helfen.

Viele Grüße
Jörg

robosapiens
02.09.2014, 21:01
Hallo,
danke für deine Mühe. Habe deine Befehle mal in meinem Python Skript hinzugfügt und ausgeführt, doch es hat sich leider nichts geändert...
Ich betreibe das Board mit einem 2S Lipo, welcher über ein Spannungswandler auf 6Volt heruntergeregelt wird. Außerdem sind im ganzen Roboter HS645MG Servos von Hitec verbaut. Um dir ein grobes Bild meines Projektes zu machen, habe ich mal ein Bild von meinem Versuchsaufbau/Roboter gemacht.

Ich gehe nun endgültig davon aus, dass es nicht am Skript liegt.... Werde morgen eines meiner Raspberry Pis nehmen, neues Image drauf laden und das Skript darüber ausführen... obwohl ich mir davon nicht sehr viel verspreche, da man an der Led auf dem SSC32 sieht, dass Signale ankommen... Solltest du noch eine Idee haben, bitte immer her damit :)

29003

HeXPloreR
02.09.2014, 21:36
Leider sagst Du nichts zu den weiteren Anschlüssen bzw wo genau du angeschlossen hast. Ich hoffe es nichts falsch angeschlossen. Im Manual steht das es kritsch werden kann da etwas falsch anzuschliessen.

Also nochmal: wo genau bist Du drauf mit dem Akku? Und welche Jumper sind auf der Seite am Powerterminal gesetzt? Wo ist der Servo0 angeschlossen? Bitte nicht "der Meinung sein"...sondern hingucken und ablesen was wo dran ist.


PS: Die dumme Forumsuhr geht immer noch eine Stunde hinterher wenn man nicht angemeldet ist *halloadminwink*

robosapiens
03.09.2014, 21:41
also, mein Spannungswandler hat zwei Ausgänge mit jeweils 6 volt. Den einen Ausgang hab ich an VS1 und den anderen an VS2 angeschlossen. Die beiden Jumper VS2=VS1 sind nicht gesteckt. Der Jumper VS=VL jedoch schon, da ich die "Logik Spannung" ebenfalls über den Lipo betreiben möchte. Habe den Jumper auch schon mal gezogen und die Logik Spannung über einen 9 Volt Block betrieben. Ich weiss nicht genau was du meinst mit "Wo ist der Servo0 angeschlossen" denke aber du meinst ob der Port 0 vom SSC32 sicher mit einem servo verbunden ist, ja das ist er.

HeXPloreR
03.09.2014, 22:23
Na...hört sich alles richtig an.
Du hattest auf der SSC32 ja schon nen Atom drauf - sorry, hatte vergessen das Du damit schon länger arbeitest. Ich fürchte wenn also alles vorher lief und nur jetzt mit dem Raspi nicht, wird der Fehler dort liegen.

Naja, eigentlich meinte ich eher ob der Port0 auch sicher mit dem Servo0 verbunden (bzw der der da drauf sein soll, an dem du auch eine Reaktion erwartest).

robosapiens
03.09.2014, 22:36
werde wie schon vorher geschrieben ein anderes Raspberry Pi mal anschließen und es damit versuchen. Habe ein system entwickelt um zu wissen, welches servo, welcher port ist.

Sollte dir noch etwas einfallen wo mein Fehler liegt, immer her damit :)

robosapiens
12.09.2014, 06:56
Habe die Tage die Ansteuerung über ein anderes RPi versucht, hat leider auch nicht geklappt... Kann es vielleicht am usb - RS232 Converter liegen? Wollte mal versuchen das Board über den Tx pin des RPi anzusteuern. Welche Adresse hat die RS232 Schnittstelle auf dem Board - AMA0?

oberallgeier
12.09.2014, 09:15
... Ansteuerung über ... RPi ... nicht geklappt... usb - RS232 Converter liegen? ... Adresse hat die RS232 Schnittstelle ...?Hast Du die richtige Adresse der UART-Schnittstelle des U S B - Converters? Mein USB-UART-Converter hat z.B.: /dev/ttyUSB0. Du findest Deine Adresse wenn Du die lange Liste durchliest, die das RasPi beim Hochfahren auf die Konsole ausgibt. Einfach nach "...USB..." suchen. Steht drin, WENN Du den Converter beim Hochfahren angesteckt hast und WENN das RPi den erkennt und den passenden Treiber dafür hat.


... Welche Adresse hat die RS232 Schnittstelle auf dem Board - AMA0?Am Board gibts keine RS232, da gibts aber eine UART mit 3,3V-Pegel auf der GPIO-Stiftleiste, dort kannst Du mit mit der ...AMA... glücklich werden. Steht aber auch in der Startliste . . .

robosapiens
12.09.2014, 10:04
Danke für die Antwort.
Ja, mein USB Uart Converter hat auch die /dev/tty/USB0 Adresse. Er blinkt auch kurz auf, genauso das SSC32 Board, es bewegt sich nur kein Servo :/ Ich gehe solangsam davon aus, dass ich vielleicht den Converter zerstört habe, wenn ich auch nicht genau weiss wie.... Bestell jetzt gleich einfach mal einen neuen und probiers mal mit der Uart schnittstelle des Boards.

oberallgeier
12.09.2014, 11:56
... mein USB Uart Converter hat auch die /dev/tty/USB0 Adresse ... dass ich vielleicht den Converter zerstört ... einfach mal einen neuen ...Die Adresse heißt bei mir (und vermutlich besteht Linux auch drauf) : ttyUSB0 -Computer sind da bestimmt ziemlich pingelig.

Deinen Converter könntest Du am Pi testen, z.B. so : installiere am Pi CuteCom, das ist ein Terminalprogramm. Jetzt könntest Du über CuteCom=>Pi=>Converter einen String senden und am PC mit nem anderen Terminalprogramm testen ob etwas ankommt. Habe ich eben so mit 115,2 kBd probiert; mein Pi per RemoteDesktop auch am Desktop-PC. Funktionierte einwandfrei.

Viel Erfolg.

robosapiens
26.09.2014, 18:14
Da ich solangsam durchdrehe, wegen diesem Board, würde ich mich freuen, wenn sich jemand meinem Problem annimmt um es zu lösen... wäre bereit eine Kleinigkeit zu zahlen oder etwas für den Problemlöser zu drucken. Habe ein paar Filamentfarben zur Auswahl :)

peterfido
27.09.2014, 18:53
Die Schnittstelle darf auf dem Raspi nicht dauernd geöffnet und geschlossen werden. Da kommen dann beim Empfänger BITs an, die da nicht hinsollen. Ich habe mir "damals" extra deswegen ein Sendenprogramm in C geschrieben. Zusätzlich läuft ein Empfangenprogramm durch, welches die Schnittstelle offen hält.

Edit:
Ich habe die beiden Programm mal etwas "entschlackt" und angehangen. Wie man das Empfangen aufruft, ist in der Autostart.sh zu sehen.29128

Die Rechte auf 755 nicht vergessen. Ich bin auf meinen Raspis immer root....
Zum Senden dann einfach das Programm aufrufen und das zu Sendende als Parameter übergeben.
/Pfad/sendenXXX Sende mich

Das Empfang sollte das Empfange auf der Konsole ausgeben (Nicht getestet...)

robosapiens
29.09.2014, 02:28
Danke für deine Hilfe/Antwort.
Da ich gerade in Irland bin, kann ich erst kommendes Wochenende dein Programms testen.

robosapiens
06.10.2014, 17:57
Wollte mich grad wieder ein wenig mit dem Raspi und SSC32 beschäftigen, und wollte dein Programm testen. Weiss leider nicht genau, wie ich das Script/Programm nutzen soll bzw. was die konsole ausgeben soll...

peterfido
06.10.2014, 18:13
Das Programm kommt in einen Ordner (z.B. /var/scripte ) und dann die Rechte 755. Da auf der seriellen Schnittstelle ausgegeben werden soll, ist es von Vorteil erstmal alles als Root zu machen. Sonst fehlt evtl. die Gruppenzugehörigkeit um die Schnittstelle nutzen zu dürfen.

Dann einach den zu sendenden Befehl hintendran beim Aufrufen.

/var/scripte/sendenXXX befehl

Edit:
Das Empfangsprogramm startet man mit /var/scripte/empfangenXXX &
So läuft es im Hintergrund.
Zum beenden dann

pkill empfangenXXX

eingeben.

robosapiens
06.10.2014, 20:35
Was ich noch nicht verstehe:
/var/scripte/sendenXXX befehl
soll ich für "befehl" meinen Pythonbefehl zur Ansteuerung der Servos einsetzen oder was?

peterfido
07.10.2014, 17:37
Na sicher doch :)

Edit: Python? Den Befehl, der über die Schnittstelle wandern soll.

robosapiens
10.10.2014, 17:34
Ich habe die Sch... voll von diesem Board. Werde es zum Kauf im Forum anbieten.
Sollte jemand Interesse haben, einfach melden :)

robosapiens
13.10.2014, 15:36
Problem gelöst!!!!!!!!!!!!!!!!!!!!!!!

Nachdem ich mein Projekt einige Zeit im Schrank stehen gelassen hab, und heute mal wieder gegoogelt habe, bin ich auf folgende Webseite gestoßen: http://www.raspberry-pi-car.com/top-story-en/raspberry-pi-dfrobot-ssc-32-servo-controller/7046?lang=en#!prettyPhoto

Habe wie in der Beschreibung steht, das Rot markeirte console=ttyAMA0,115200 entfernt sowie folgendesT0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 auskommentiert.
Kann mir jemand erklären, wieso die Ansteurung dadurch funktioniert?

peterfido
13.10.2014, 16:14
Ich war davon ausgegangen, dass die Konsole schon abgeschaltet war. Standardmäßig gibt der Raspi auf ttyAMA0 die Systemmeldungen aus. getty (oder auch mingetty) bieten einen Terminalzugang zu dem Raspi. Wenn es kein Telnet gibt, kann man sich darüber anmelden und auf den Raspi zugreifen wie per Telnet. (Oder per Telnet kann man sich einloggen wie über die serielle...)

Wie die Schnittstelle freigemacht wird, steht auch in meinem Internetradio Tut (https://www.roboternetz.de/community/threads/58946-Internetradio?p=557527&viewfull=1#post557527) hier. Ich nutze übrigens mingetty um gleich root auf den Raspis anzumelden und darüber dann Programme auszuführen.

HeXPloreR
13.10.2014, 16:17
Tja, wie soll man sagen....du hast jetzt also tatsächlich die UART Schnittstelle aktiviert. Man hätte vermutet das wenn man sie nutzen wollte, sie vorher aktiviert werden müsste.... vermutlich hat niemand etwas direkt dazu gesagt, weil man davon ausging das Du sie aktiviert hast, weil es sonst auf den Pins nicht nutzbar ist.
Schön das es letzten Endes doch noch geklappt hat :Strahl

Viele Grüße
Jörg