moin!
Auf AVRs oder ARMs werden die ausgewiesenen pwm-Pins über eigene Interrupts gesteuert und daher eigentlich nie durch andere Interrupts gestört.
Hier ntl nicht die "normalen" pwm-Befehle verwenden ( wie bei Arduino: analogWrite), sondern die auf Servo-Steuerung hin ausgelegten (bei Arduino: z.B. Servo.h, Servo::write(), damit kann ich hier bei mir 6 angeschlossene Servos meines Robotarms steuern )
Beim Raspi gibt es zum Einen 2 ausgewiesene Hardware-Interrupt Pins, die ebenfalls völlig ungestört arbeiten (verwende ich persönlich überhaupt nicht; man braucht dazu auch root Rechte).
Zusätzlich lässt sich aber zum Anderen jeder beliebige GPIO per Software-pwm ansprechen: Man kann dazu z.B. die C Wrapper Funktionen von pigpio oder wiringPi verwenden. Gordon Henderson, der Autor von wiringPi, schrieb einmal im Raspi.org Forum dazu, dass diese genauso gut in der Lage sind, pwm zu erzeugen, wie aufgesetzte oder angesteckte pwm-Platinen (wie z.B. PCA9685), und zwar nicht nur für 1 Pin allein, sondern auch für alle simultan.
edit2: hier Python Code:
https://learn.adafruit.com/adafruits...motor/software
Ich selber habe es für 3 Servos schon problemfrei selber gemacht. Da der Raspi aber insgesamt recht wenige GPIOs ohne spezielle Sonderfunktionen hat (i2c, SPI, UART, 1-Wire,...), würde ich bei mehr als 3 Servos dennoch eher einen PCA9685 über I2C verwenden.
Immer jedoch wichtig: für die Servos eine externe, leistungsfähige Stromquelle verwenden (ich verwende 7V 10A bei meinen 6 Servos).
Dass Servos aber manchmal zittern, kann ich bei mir auch nicht immer verhindern.
edit -
PS, ich vergaß, du nutzt ja Python - aber wiringPi ist auch für Python verfügbar
https://learn.adafruit.com/adafruits...motor/software
Lesezeichen