Frage von ChrisGarry, 47

Wie steuere ich Servo mit Raspberry P3 per Java (PI4J)?

Hallo, Ich arbeite mich grad mit dem Raspberry P3 B ein. Hierfür nuzte ich die Libary PI4J. Nun möchte ich einen Servo Motor ansteuern. Ich habe bereits mehrere Wege ausprobiert mit unterschiedlichen erfolg. Nun hoffe ich darauf das jemand mit Java eine gute Lösung gefunden hat. Auf Pyton gibst massig Beispiele nur lässt sich die Syntax nicht so einfach auf Java übertragen.

Vielen Dank für eure Hilfe


Lösung 1: Ist Aktuell die beste Möglichkeit aber posistioniert nicht so gut

com.pi4j.wiringpi.Gpio.wiringPiSetup();
SoftPWm.softPwmCrate(1,0,50),
SoftPwm.softPwmWrite(1,15)

Lösung 2: Digitalen Pin HIGH LOW (PWM) modulieren mit Thread.Sleep() Funktioniert nur sehr begrenzt bzw zuckt unkontrollierbar


Lösung 3: Eignet sich sehr gut um LED's zu dimmen aber für Servos irgedwie ungeeignet

GpioPinPwmPutput pin = gpio.provisionPwmOutputPin(RaspiPin.GPIO.01);
pin.setPwm(x); 
Antwort
von HarryHirsch4711, 24

Wenn der Servo zuckt, dann stimmt wahrscheinlich dein Timing nicht.

Kennst Du dieses http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung

Kommentar von ChrisGarry ,

Das ist schon richtig da das Timing leider in diser Art mit dem Raspberry nicht möglich ist,  da das Timing zu ungenau ist (Thread.sleep()). Ich habe diese Lösung nur hier mit reingeschrieben damit jeder weiß, dass ich das schon Probiert habe.


Ich suche eher eine Software Lösung mit der ich Lösung1: oder Lösung 3 anpassen oder konfigurieren kann damit die Positionierung mit hinreichender Genauigkeit funktoniert andere Lösungen sind natürlich auch gerne gesehen.

Kommentar von HarryHirsch4711 ,

1ms ist natürlich für einen "PC" ein sehr kleines Zeitraster. Beim Spielen mit einem USB Interface über Visual Basic bin ich nicht unter 20ms gekommen...

Kommentar von ChrisGarry ,

ja darum müsste es doch irgend eine Lösung mithilfe der libary pi4j  (Lösung 3). Ich meine darin befinden sich schon Methoden zur PWM, allerdings müsste man die auf 50Hz anpassen können nur leider weiß ich nicht wie.

Ich sag schon mal Danke für jedliche Hilfe

Antwort
von guteantwortxDx, 30

Kann dir das Beispiel helfen?

https://github.com/Pi4J/pi4j/blob/master/pi4j-example/src/main/java/StepperMotor...

Kommentar von ChrisGarry ,

Das Programm ist für einen Schrittmotor, leider kein Servomotor.

Antwort
von ChrisGarry, 16

Hab die Lösung gefunden Danke für eure Bemühungen

com.pi4j.wiringpi.Gpio.wiringPiSetupGpio();
com.pi4j.wiringpi.Gpio.pinMode(18, com.pi4j.wiringpi.Gpio.PWM_OUTPUT);
com.pi4j.wiringpi.Gpio.pwmSetMode(com.pi4j.wiringpi.Gpio.PWM_MODE_MS;
com.pi4j.wiringpi.Gpio.pwmSetClock(384);
com.pi4j.wiringpi.Gpio.pwmSetRange(1000);
com.pi4j.wiringpi.Gpio.pwmWrite(18, 75);

Quelle: http://pastebin.com/KpQQHKEh

Keine passende Antwort gefunden?

Fragen Sie die Community