keine Ahnung ob das hier schon mal wer gemacht hat.
Es geht um folgendes. Ich habe einen Brushless-Motor an einen ESC angeschlossen.
über Pigpiod, also pigs SERVO 18 1000 (0%) bzw. pigs SERVO 18 2000 (100%) lässt sich der Motor einwandfrei steuern. (also über die Terminal Eingaben).
Ich könnte zwar jetzt über Execute das alles rausschreiben usw. aber ich würde das bevorzugt über CodeSys direkt lösen.
Über den Funktionsbaustein BLINK aus der util.lib bzw. über den Funktionsbaustein OSCAT_BASIC.PWM_PW kann ich den Motor ein- und ausschalten. Also 100% oder 0%.
Das Problem hierbei ist dass das PWM Signal für den ESC Regler so aufgebaut sein muss:
1ms - 2ms High Level entsprechen 0-100%. Also 1.5ms würden dann sozusagen 50% Drehzahl entsprechen.
Die Frequenz für das PWM Signal sind 50Hz, also 20ms Pulsweite.
Jetzt hab ich natürlich das Problem dass ich für die Eingabe T#XX bei CodeSys keinen Wert eingeben kann der kleiner als 1ms ist, bzw. einen Wert álá T#1.24MS
Gibts es hierzu Generatoren etc. oder andere Bausteine welche das realisieren können? Die OSCAT bietet zwar noch weitere PWM Bausteine nur hier komme ich mit dem Begriff Duty Cycle nicht ganz klar. Ich habe mit dem Baustein OSCAT_BASIC.CTRL_PWM den Motor zwar auch schon ans laufen bekommen, aber auch wieder nur 100% oder 0%. Keinen Zwischenwert.
Würde mich über jede Hilfe freuen.
Gruß
Wastl
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2017-08-15
Originally created by: PI-Beginner
Hallo,
an dem Thema war ich auch schon mal dran. Das Problem ist die Zykluszeit von Codesys bzw. ist Codesys kein Echtzeitsystem.
Hab die Ausgänge mal mit einem Oszi gemessen und bin nicht unter 4-5ms gekommen. Das reicht für ein Servo nicht aus.
Anbei noch ein Bild wie ich damals das Programm aufgebaut habe.
Von Adafruit gibt es ein Breakout für PWM (AdafruitPWM) das von Codesys unterstütz wird.
Grüße
Jan
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ja, sowas habe ich leider schon befürchtet.
Du meinst wohl dieses I2C Breakout, oder? : Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685
Denke ich werde dann doch über pigs arbeiten. Der GPIO 18 vom Raspi ist ja ein "echter" PWM Ausgang. So funktioniert es ja im Prinzip. Aber leider nicht sooooo komfortabel.
Da ich hier nur 1 PWM ansteuern will würde sich so ein Breakout eigentlich nicht rentieren.
Aber auf jedenfall Danke für die Antwort.
Gruß
WAstl
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen,
keine Ahnung ob das hier schon mal wer gemacht hat.
Es geht um folgendes. Ich habe einen Brushless-Motor an einen ESC angeschlossen.
über Pigpiod, also pigs SERVO 18 1000 (0%) bzw. pigs SERVO 18 2000 (100%) lässt sich der Motor einwandfrei steuern. (also über die Terminal Eingaben).
Ich könnte zwar jetzt über Execute das alles rausschreiben usw. aber ich würde das bevorzugt über CodeSys direkt lösen.
Über den Funktionsbaustein BLINK aus der util.lib bzw. über den Funktionsbaustein OSCAT_BASIC.PWM_PW kann ich den Motor ein- und ausschalten. Also 100% oder 0%.
Das Problem hierbei ist dass das PWM Signal für den ESC Regler so aufgebaut sein muss:
1ms - 2ms High Level entsprechen 0-100%. Also 1.5ms würden dann sozusagen 50% Drehzahl entsprechen.
Die Frequenz für das PWM Signal sind 50Hz, also 20ms Pulsweite.
Jetzt hab ich natürlich das Problem dass ich für die Eingabe T#XX bei CodeSys keinen Wert eingeben kann der kleiner als 1ms ist, bzw. einen Wert álá T#1.24MS
Gibts es hierzu Generatoren etc. oder andere Bausteine welche das realisieren können? Die OSCAT bietet zwar noch weitere PWM Bausteine nur hier komme ich mit dem Begriff Duty Cycle nicht ganz klar. Ich habe mit dem Baustein OSCAT_BASIC.CTRL_PWM den Motor zwar auch schon ans laufen bekommen, aber auch wieder nur 100% oder 0%. Keinen Zwischenwert.
Würde mich über jede Hilfe freuen.
Gruß
Wastl
Originally created by: PI-Beginner
Hallo,
an dem Thema war ich auch schon mal dran. Das Problem ist die Zykluszeit von Codesys bzw. ist Codesys kein Echtzeitsystem.
Hab die Ausgänge mal mit einem Oszi gemessen und bin nicht unter 4-5ms gekommen. Das reicht für ein Servo nicht aus.
Anbei noch ein Bild wie ich damals das Programm aufgebaut habe.
Von Adafruit gibt es ein Breakout für PWM (AdafruitPWM) das von Codesys unterstütz wird.
Grüße
Jan
Hallo,
ja, sowas habe ich leider schon befürchtet.
Du meinst wohl dieses I2C Breakout, oder? : Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685
Denke ich werde dann doch über pigs arbeiten. Der GPIO 18 vom Raspi ist ja ein "echter" PWM Ausgang. So funktioniert es ja im Prinzip. Aber leider nicht sooooo komfortabel.
Da ich hier nur 1 PWM ansteuern will würde sich so ein Breakout eigentlich nicht rentieren.
Aber auf jedenfall Danke für die Antwort.
Gruß
WAstl