C Bibliothek für Servo Controller Board?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute,

    kennt jemand ein Servo Controller bei dem man mit Hilfe einer vernünftigen C Bibliothek für das Raspberry Pi, die angeschlossenen Servos z.B. über I2C ansteuern kann?

    Ich finde sowas hier:
    http://www.adafruit.com/products/815
    oder
    http://www.pridopia.co.uk/pi-user-manual…otor-p5-psu.pdf

    Leider existieren für diese Boards (PCA 9685) keine Bibliotheken in C sondern nur in Python.


    Alternativ Frage:

    Wenn ihr 5 Servos (standard analog servos mit 1-2ms PWM Siganl) mit Hilfe von Raspberry Pi rev2 ansteuern wolltet. Wie würdet ihr das am einfachsten (ohne Python) machen?

  • Danke, so wie ich das sehe ist pigpio eine Alternative zu WirinPi. Damit kann ich versuchen einen Servo über den einen Hardware PWM Ausgang des Pi anzusteuern.

    Ich suche auch weiterhin ein Servoboard für den eine C Bibliothek für das Raspberry Pi existiert.
    Ich würde halt gerne alle 5 Servos über Hard PWM ansteuern.


  • Ich würde halt gerne alle 5 Servos über Hard PWM ansteuern.

    Du hast die Möglichkeiten von "pigpio" nicht erkannt. =(

    Der Clou bei "pigpio" ist, daß es sich direkt in den DMA-Takt des Pi einklinkt und keine Kernelfunktionen benötigt. Somit lassen sich ganz locker 5 Servos per PWM steuern - es wäre sogar eine PWM bis fast 1 MHz möglich! Die CPU-Last bleibt dabei recht gering. :thumbs1:

    Es gibt auch ein youtube-Video dazu:
    http://www.youtube.com/watch?v=pqz2W6ekKS4

    Der BCM SoC auf dem Pi bietet nicht mehr als zwei Hardware-PWMs, zweckentfremdet ginge dann kein Sound mehr - kommt für Dich ja sowieso nicht in Frage. "WiringPi" arbeitet ansonsten mit Kernelfunktionen und erreicht nicht die Präzision und Geschwindigkeit bei höheren Frequenzen.

    Gruß, mmi

  • Servus DS, alter Spezi :thumbs1:


    tja ... dem ist wohl nichts mehr hinzuzufügen ;) ...

    Ja, schade, zu professionelle Lösungen mag scheinbar nicht jeder. :s

    Die "Dämon-Version" von pigpio hab' ich noch gar nicht ausprobiert, damit wär's wohl auch für Nicht-C-Programmierer einfacher, die Funktionen zu nutzen. :)

    raspiprojekt: Der externe Chip ist für Servos natürlich auch eine Lösung. Viele Wege führen nach Rom.


  • Servus DS, alter Spezi :thumbs1:


    Ja, schade, zu professionelle Lösungen mag scheinbar nicht jeder. :s

    Die "Dämon-Version" von pigpio hab' ich noch gar nicht ausprobiert, damit wär's wohl auch für Nicht-C-Programmierer einfacher, die Funktionen zu nutzen. :)

    raspiprojekt: Der externe Chip ist für Servos natürlich auch eine Lösung. Viele Wege führen nach Rom.

    Hallo mmi, ich weis nicht was du mit "..zu professionelle Lösungen mag scheinbar nicht jeder.." meinst, aber deinen Lösungsvorschlag finde ich sehr geil. Ich habe zwar noch ein Problem mit dem Einbinden von pigpio aber ich hoffe im Laufe der nächsten Tage das Problem zu lösen und die Bibliothek ausprobieren zu können.

    raspiprojekt: Vielen dank für die Links! Das is im Grunde genau das was ich zu Beginn gesucht habe. Aber wenn das mit der pigpio Bibliothek vernünftig funktioniert werde ich das wohl bevorzugen.

    :thumbs1:

    Einmal editiert, zuletzt von ajak (5. Juli 2014 um 20:04)


  • Hallo mmi, ich weis nicht was du mit "..zu professionelle Lösungen mag scheinbar nicht jeder.." meinst


    Hallo Ajak,
    diese Anmerkung ist natürlich keinesfalls auf Dich persönlich bezogen - "pigpio" ist zunächst auch nur eine von mehreren Lösungen. "wiringpi" u.a. haben sicherlich auch ihre Berechtigung, aber wenn es in erster Linie um Effizienz geht, programmiert man in ASM oder C, und dann ist "pigpio" erste Wahl! ;)

    "pigpio" könnte wahrscheinlich eine bessere Doku vertragen, aber ein "fortgeschrittener" C-Programmierer sieht relativ schnell, wo der Hase läuft ;)

    Wobei gute Hardwareerweiterungen - wie von raspiprojekt alternativ vorgeschlagen - sicherlich noch effizienter sind. Muß man halt je nach Anwendungsfall abwägen, aber die Steuerung von Servos zählt ja nun auch nicht gerade zum non-plus-ultra unter den PWM-Anwendungen - man möchte fast sagen: lahme Angelegenheit ;) ;)

    Grüssle, mmi

  • Hallöle zusammen,
    hi mmi alter Südschwede ;) ...


    ...
    eine von mehreren Lösungen. "wiringpi" u.a. haben sicherlich auch ihre Berechtigung
    ...

    ja, dem kann ich zustimmen. Wobei afaik auch der Autor der wiringPi mal eingeräumt hat, dass seine Library wohl für mehrere PWM Signale eher nicht geeignet ist, weil nicht performant genug ...
    (sorry, aber einen Link dazu finde ich leider nicht mehr).


    ...
    "pigpio" könnte wahrscheinlich eine bessere Doku vertragen...
    ...

    wobei ich dem ebenfalls zustimme. Es scheint so, als wenn diese geniale Library wegen der fehlenden Doku irgendwie ein Schattendasein führt, obwohl sie bei solcher verwendung imho um Längen besser ist, als die wiringPi.
    Btw: es gibt da noch die bcm2835 von mikem ... das nur der Vollständigkeit halber und weil ich mich noch daran erinnere, dass z.B. orb auf diese Lib geschworen hat ... ich kann da leider nicht mehr dazu sagen, weil ich die aus dem Sortiment genommen habe, nachdem sie mir einen üblen Streich in Sachen ISR gespielt hatte.


    ...
    Wobei gute Hardwareerweiterungen - wie von raspiprojekt alternativ vorgeschlagen ...
    ...

    Das ist wohl wahr. wobei ich festgestellt habe, dass dieser sonderbare Effekt mit dem "zittern" (jitter) nicht zwangsläufig immer mit der Ansteuerung zu tun haben muss.
    Ich habe -> hier <- genau dieses Problem beschrieben und versucht zu lösen ...
    Mein Bruder hat mir mal mit einem PCA9685 eine Treiberplatine gebastelt und selbst mit der war der Ruckel-Effekt nicht ganz weg.

    Das beste Ergebnis hatte ich, wenn ich einen Abblock-Kondensator (Elko!) mit 470 µF zwischen 5V und Gnd der Stromversorgung des Servos geschaltet habe, der Servo ansonsten eine eigene Stromquelle hatte und die Kabel möglichst kurz gehalten waren.

    cu,
    -ds-

  • ok ich komme nun doch nicht weiter mit PIGPIO und muss euch nochmal bemühen.
    Ich habe alles installiert wie hier Beschrieben:
    http://abyz.co.uk/rpi/pigpio/download.html

    Wenn ich die Bibliothek pigpio.h in mein Programm einfüge, wird diese erkannt (ich benutze Geany). Allerdings wenn ich weiter die Funktion 'gpioServo(x, x);' einfüge kommt eine Fehlermeldung mit der ich nichts anfangen kann:
    sihe:
    Bild1

    Ich habe mein Programm gespeichert und mit:
    gcc -o meinprogramm meinprogramm.c -lpigpio -lrt -lpthread
    versucht zu kompilieren. Allerdings kriege ich dann im Terminal eine Andere Fehlermeldung:
    Bild2

    Ich kriege mein Programm also nicht kompiliert. Und warum reicht es nicht die Bibliothek pigpio.h (#include <pigpio.h>) einfach im Kopf meines Programms einzufügen?

    EDIT: Gerade beim einfügen habe ich gemerkt, dass ich bei
    gcc -o meinprogramm meinprogramm.c -lpigpio -lrt -lpthread
    ein Schreibfehler gemacht habe. Ich habe -1lpigpio geschrieben :blush: nun kann ich Kompilieren es geht also weiter. Die Frage bleibt jedoch:
    Warum reicht es nicht die Bibliothek pigpio.h (#include <pigpio.h>) einfach im Kopf meines Programms einzufügen?

    Einmal editiert, zuletzt von ajak (6. Juli 2014 um 17:55)

  • Moin,


    ...
    Ich habe alles installiert wie hier Beschrieben:
    ...


    zunächst mal auch an Dich die Bitte: keine Verweise auf irgendwelche Anleitungen.
    Erstens interessiert die Anleitung keinen Menschen zudem ist nur das interessant, was Du gemacht hast, nicht was in der Anleitung steht ...


    ...
    Wenn ich die Bibliothek pigpio.h ...
    es nicht die Bibliothek pigpio.h
    ...


    pigpio.h ist eine Header-Datei mit Deklarationen/Definitionen und keine Bibliothek ... (ich empfehle das Buch der Bücher von Kernigham/Ritchie).


    ...
    wenn ich weiter die Funktion 'gpioServo(x, x);' einfüge kommt eine Fehlermeldung mit der ich nichts anfangen kann:
    ...


    Die wird scheinbar vom Linker dann nicht gefunden. Du fügst übrigens nicht die Funktion sondern den Aufruf von ... ein. Kleiner aber feiner Unterschied (Grundlagen!).
    Wo stehen die Dateien pigpio.h und libpigpio.a ?
    Da müsste dann mit -I der Suchpfad für den Präprozessor bzw. -L der passende Suchpfad für den Linker angegeben werden (Grundlagen bzw. gcc-Dokumenation)

    Die Fehlermeldung des zweiten Bildes ist mir unklar ...
    Was sagt das Kommando:

    Code
    which gcc

    Bilder sind eh etwas schwierig weil schlecht zu lesen ...


    cu,
    -ds-


  • zunächst mal auch an Dich die Bitte: keine Verweise auf irgendwelche Anleitungen.
    Erstens interessiert die Anleitung keinen Menschen zudem ist nur das interessant, was Du gemacht hast, nicht was in der Anleitung steht ...


    Da bin ich zwar anderer Meinung, weil es schon interessant ist, wie vorgegangen wurde. Und da ist ein Link durchaus angebracht. Das dabei natürlich auch was schief gehen kann ist eine ander Frage.

    Der angezeigte Fehler (im zweiten Bild) ist typisch, wenn gcc die dynamischen Links nicht synchronisiert.

    Code
    which gcc

    sollte usr/bin/gcc ergeben
    mach mal ein

    Code
    which ld


    , da sollte usr/bin/ld rauskommen.

    Setz mal den Pfad so

    Code
    export COMPILER_PATH=/usr/bin


    danach sollte

    Code
    gcc -print-prog-name=ld


    usr/bin/ld
    ergeben.

    Dann kannst du nochmal versuchen zu kompilieren.

  • which gcc
    sagt
    /usr/bin/gcc

    mein Fehler war: ich habe nicht -L sondern -1 geschrieben, weswegen er nicht verlinken konnte. Ich kann jetzt mit dem gcc Kompiler Verlinken und eine Ausführbare Datei erstellen.
    Danke erstmal.

  • Richtig wenn man weis, dass -l für Link stehen soll dan macht man so einen Fehler nicht. Ich bin ja dabei mich in die Marterie immer weiter ein zu arbeiten:geek:. Deswegen mach ich das Projekt. Es ist das erste mal, das ich mit Linux und RaspberryPI wasmache.:daumendreh2:

    Einmal editiert, zuletzt von ajak (6. Juli 2014 um 18:59)

  • Hallo!

    Sorry für die späte Antwort, aber ich habe ein paar Monate vor deinem Posting genau so eine library geschrieben.
    Du findest sie unter https://github.com/Reinbert/pca9685 und verbindet WiringPi mit dem Adafruit 16-Channel 12-bit PWM/Servo Driver (PCA9685) [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]http://www.adafruit.com/products/815.[/font]


    Eine Google Suche nach "wiringpi pca9685" hätte dich eigentlich zum Ziel führen müssen.

    Vielleicht hilft es ja jetzt jemandem.

    Lg, Reinbert

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!