rotary impuls / drehgeber von Python in C/C++

  • Hallo zusammen,

    ich habe das Problem das mein Programm zwar Läuft, aber ich ne CPU Last von +-40% habe und bei weiteren Routinen mein Programm Pulse schluckt. :@
    Einige im Internet schreiben dass das am Python liegt. C oder C++ währe da schneller siehe Link. raspberry-pi-gpio-speed

    Einige andere sind das Problem umgangen in dem sie ein arduino nutzen.... ich habe keinen :daumendreh2: beim Kauf stellte ich fest dass es 2 verschiedene gibt und hauptsächlich in C/C++ sind.

    ich habe auch schon Lösungen wie gaugette.rotary_encoder versucht, brachten aber keine Besserung.


    Da ich 0 Kenntnisse von C / C++ habe könnt ihr mein Programm, zum erfassen der RPGs umschreiben :daumendreh2: und eine kleine HowTo dazu geben wie man das in Python importiert? :helpnew:


    hier mein komplettes Programm.


    Gruß Termi

  • Hi,
    du machst die Auswertung über Interrupts. Da wäre es gut, zu wissen, ob du die Drehgeber vorher entprellst. Sonst kriegst du durch das Prellen nämlich sehr viele Interrupts und dann wundert es mich nicht, dass das eine hohe CPU Last verursacht.

    Außerdem ist mir folgendes aufgefallen:

    Code
    ServoAL = GPIO.input(SXL)
    ServoAR = GPIO.input(SXR)
    ServoAL = GPIO.input(SYL)
    ServoAR = GPIO.input(SYR)

    Sicher meintest du hier einmal A und einmal B. Aber benutzt wird das ja gar nicht.

    Was sind das eigentlich für Drehgeber, die ein Links/Rechts Signal ausgeben?! In der Regel geben Drehgeber ein Gray-Code Signal (A/B) aus - siehe dazu hier: https://www.mikrocontroller.net/articles/Drehgeber

  • Meiner Erfahrung nach ist RPI.GPIO nicht besonders gut geeignet fuer timing-kritische Signale.

    Bessere Erfahrungen habe ich mit PIGPIO gemacht. Das laeuft als Daemon, und versorgt Signale mit Zeitstempeln. Dadurch kann sogar nachprozessiert werden, weil mehrere Signale auflaufen koennen bevor Python sie durchgereicht bekommt - aber ihre zeitliche Ordnung bleibt bestehen.

    Also wuerde ich dazu raten, das zu verwenden, um zu sehen, ob es das Problem wenigstens der Schrittverluste (wenn schon nicht der Prozessorlast) loest.

    Falls nicht - ein Traumprojekt von mir waeren erweiterte Filter/Aggregationsfunktionen in PIGPIO. Aber ob ich dazu bald die Zeit finde weiss ich nicht.

  • KrawallKurt
    ups... ja
    kleiner Namenskonflikt :blush:
    was aber weiter im Programm nicht zu Problemen führte, da ich beim RPG test nur einen verwendete und die und die Ports direkt anspreche.

    entprellen? hab mit nem Scope drüber geschaut konnten keine spitzen erkennen bei meinen Drehzahlen.


    @__deets__
    PIGPIO von dir beschrieben, Klinkt wie Interrupts.... gleich mal testen........

  • bin auf der Seite fündig geworden http://abyz.co.uk/rpi/pigpio/
    ist sogar ein C Porgramm dabei. :thumbs1:

    bin bis jetzt begeistert.
    Auflösung ist je Puls und CPU last/verhalten ca wie in Python. (kann aber an der Konsolen Ausgabe der Werte Liegen)
    Beim drehen per Hand werden keine Pulse geschluckt.


    jetzt muss ich noch raus bekommen, wie ich die werte an Python übergebe...

    oder gleich das Python Programm nehmen?! das sah auf den ersten blick kompliziert aus , mal sehen.
    mach für heute Schluss

    erst mal danke :danke_ATDE:

    Einmal editiert, zuletzt von Termi 0_0 (5. April 2016 um 19:57)

  • Zitat

    entprellen? hab mit nem Scope drüber geschaut konnten keine spitzen erkennen bei meinen Drehzahlen.

    Du sollst auch nicht Spitzen suchen, sondern Preller.

    Verrätst du uns noch, was das für ein Drehgeber ist, der ein Links/Rechts Signal erzeugt? Ich hab mir letztens sowas gebaut, indem ich einen Mikrocontroller für die Auswertung des A/B Signals benutzt habe und dann ein Links/Rechts Signal an den Pi weitergeleitet habe. Aber als Fertiglösung hab ich sowas noch nie gesehen.

  • Du sollst auch nicht Spitzen suchen, sondern Preller.

    Verrätst du uns noch, was das für ein Drehgeber ist, der ein Links/Rechts Signal erzeugt? Ich hab mir letztens sowas gebaut, indem ich einen Mikrocontroller für die Auswertung des A/B Signals benutzt habe und dann ein Links/Rechts Signal an den Pi weitergeleitet habe. Aber als Fertiglösung hab ich sowas noch nie gesehen.

    bin nicht sicher ob du damit was anfangen kannst...
    Inkrementalgeber RE 30 -2-100 von dunkermotoren, war schon vormontiert (Flohmarkt Fund)

    gute sind nicht gerade billig.... such in google danach "Broadcom Inkremental Drehgeber, Digital Ausgang" der chip ist in meinem auch verbaut.
    oder schlachtest einen sehr alten HP Tintenstrahl Drucker aus, da sind die oft verbaut. (alte Kugelmaus hat auch so was in der Art)

    wer was in der Richtung sucht und noch keine Erfahrung hat, kann ich die Seite sehr empfehlen Drehgeber
    oder gleich einen V Plotter http://www.homofaciens.de/technics-machi…r_ge_navion.htm

    bin an meinem Projekt allerdings noch nicht weiter...

Jetzt mitmachen!

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