ServoMotor mit Feedback (Parallax 360° Feedback): PWM Hallsensor Feedback Signal als Input in Python

  • Hallo Zusammen,


    wie kann ich das PWM-Sensorsignal, das der Hallsensor des Servomotors durch manuelles drehen liefert in Python einlesen?


    Ich würde gerne das PWM-Signal, das durch manuelles Drehen der Antriebswelle des Servomotors erzeugt wird, in Python einlesen (Record) und durch Betätigen eines Tasters wieder ausgeben (Play). Kann man das mit dem Raspberry Pi machen? Und wie kann man das PWM-Signal einlesen?


    Vielen Dank - Grüße Marcel

  • Hallo,


    vielen Dank für die Antwort. Ich habe mich in der Zwischenzeit auch sehr intensiv mit dem Thema PIGPIO auseinandergesetzt.

    Habe über das Tutorial die Vorinstallationen gemacht und den daemon gestartet. U.a. auch gestetste und funktioniert alles.


    Ich habe einen Parallax 360° Feedback Servo an 6V angeschlossen und den Input auf PIN17 und Output auf Pin4. Ich habe einen Raspberry PI 4b und verwende Python3.


    Folgenden Code habe ich aus der PIGPIO Bibliothek zum testen:


    # http://abyz.me.uk/rpi/pigpio/python.html


    import pigpio

    import time


    pi = pigpio.pi() # exit script if no connection

    if not pi.connected:

    exit()


    pi.set_mode(17, pigpio.INPUT) # GPIO 17 as input

    pi.set_mode(4, pigpio.OUTPUT) # GPIO 4 as output


    pi.set_PWM_frequency(4, 50) # set_PWM_frequency

    print(pi.get_PWM_frequency(4))

    time.sleep(1)


    # set dutycycle

    pi.set_PWM_dutycycle(4, 0) # PWM off

    print('X')

    time.sleep(1)


    pi.set_PWM_dutycycle(4, 64) # PWM 1/4 on

    print('X')

    time.sleep(1)


    pi.set_PWM_dutycycle(4, 128) # PWM 1/2 on

    print('X')

    time.sleep(1)


    pi.set_PWM_dutycycle(4, 192) # PWM 3/4 on

    print('X')

    time.sleep(1)


    pi.set_PWM_dutycycle(4, 255) # PWM full on

    print('X')

    time.sleep(1)


    # set servo pilse width

    pi.set_servo_pulsewidth(4, 0) # off

    print('X')

    time.sleep(1)


    pi.set_servo_pulsewidth(4, 1000) # safe anti-clockwise

    print('X')

    time.sleep(1)


    pi.set_servo_pulsewidth(4, 1500) # centre

    print('X')

    time.sleep(1)


    pi.set_servo_pulsewidth(4, 2000) # safe clockwise

    print('X')

    time.sleep(1)


    pi.set_servo_pulsewidth(4, 0) # PWM full on

    print('X')

    time.sleep(1)


    print(pi.get_hardware_revision()) # Zeigt Hardware Revisionsnummer an

    2


    print(pi.get_mode(4)) # Zeigt Modus des Pin4 (0=Input, 1=Output)

    4


    print(pi.get_mode(17)) # Zeigt Modus des Pin17 (0=Input, 1=Output)

    4


    v = pi.get_pigpio_version() # PIGPIO Version

    print(v)


    print('Ende')



    Die ganzen Print-Funktionen funktionieren. Aber bei meinem Servo tut sich gar nichts. Was habe ich falsch gemacht?


    Kann mir jemand helfen? Bin mit meinem Latein echt am Ende...


    Vielen Dank - Gruß Marcel

  • Na servos reagieren ja nur auf einen Bruchteil der 20ms Periode as Signal. 1-2ms üblicherweise. Zumindest deinen PWM Kram zu Beginn kannst du damit knicken.


    Hast du Zugriff auf ein Oszilloskop? Das ist für sowas IMHO unerlässlich.

  • Hi deets,


    leider nicht...


    Wie kann ich denn die einzelnen SIgnale über längere Zeit schalten?


    Hast du nen Fehler in meinem Code entdecken können?

  • Es geht nicht um länger. Es geht um nicht die PWM benutzen. Sondern nur den Servo Code.


    Es gibt inzwischen 1 Kanal ozis für 25€. Die taugen nicht sehr viel, aber für sowas hier reicht es.


    Alternativ (oder bis es da ist): anders Servo dranhängen, Beispielcode der die PiGPIO Servo Funktionalität nutzt auf github suchen & versuchen zu verwenden.


    Und dein PIN 17 Code wird selbst wenn das Servo irgendwann etwas tut nichts ausspucken. Nur das es da keine falschen Erwartungen gibt.