Go Down

Topic: Servo REFRESH_INTERVAL ändern (Read 119 times) previous topic - next topic

KUCKY

Hallo zusammen,
ich möchte die Refreshrate der Servo lib im Rahmen meines Quadrocopters von 50Hz auf 100Hz ändern. Ich möchte aber nicht die lib direkt ändern, sondern so verfahren:

In der Lib.
Code: [Select]

#define MIN_PULSE_WIDTH       544     // the shortest pulse sent to a servo 
#define MAX_PULSE_WIDTH      2400     // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH  1500     // default pulse width when servo is attached

#ifndef REFRESH_INTERVAL /// Changed by kucky
#define REFRESH_INTERVAL    20000     // minumim time to refresh servos in microseconds
#endif /// Changed by kucky

#define SERVOS_PER_TIMER       12     // the maximum number of servos controlled by one timer
#define MAX_SERVOS   (_Nbr_16timers  * SERVOS_PER_TIMER)



Im Code

Code: [Select]

#define REFRESH_INTERVAL    10000


Ist das so richtig? An welcher Stelle im Code sollte das sein?

Gruß Willi


Serenifly

Nein, das geht nicht. Du kannst die Library so umschreiben dass du aus dem Makro eine richtige Konstante machst du man optional per Konstruktor ändern kann.

MicroBahner

#2
Oct 06, 2017, 08:25 pm Last Edit: Oct 06, 2017, 08:27 pm by MicroBahner
Hallo Willi,
das Problem ist, das #define immer nur in der Datei gilt, in der es steht (wobei mit #include eingebundene Dateien auch dazugehören ). Die Servo-Lib wird aber vollkommen getrennt von deinem Sketch übersetzt.
Was in der servo.h steht sehen beide Übersetzungsvorgänge, aber von den #define, die Du in deinem Sketch setzt, bekommt die Servo-Lib bei der Übersetzung nichts mit.
Wenn, musst Du es also direkt in der servo.h ändern, damit es auch beim Übersetzten der Lib wirkt. Es wirkt dann aber eben auch für alle anderen Sketches, in denen Du die Servo-Lib verwendest.
Oder Du gehst den aufwändigeren Weg den Serenifly beschreibt. Aber dann veränderst Du die Lib schon wesentlich stärker als nur den Wert in der servo.h zu verändern.

P.S. mit der kleineren Refreshrate kannst Du auch nur wesentlich weniger Servos ansteuern, bevor die Lib die Refreshrate dann doch erhöht.
Gruß, Franz-Peter

KUCKY

Danke für Eure Antworten. Das habe ich nicht gewusst. Ich werde dann eine Kopie der Servo.lib verwenden und dort das REFRESH_INTEVALL auf 10000 ändern. Ich benötige nur max. 4 BL´s und 2 Servos.

Gruß
Willi

MicroBahner

#4
Oct 06, 2017, 08:53 pm Last Edit: Oct 06, 2017, 08:53 pm by MicroBahner
Ich benötige nur max. 4 BL´s und 2 Servos.
Könnte knapp werden. Die Impulse werden innerhalb des refresh-Intervalls nacheinander erzeugt. Wenn mal alle gleichzeitig 2ms Impulse benötigen sind das bereits 12ms, und dann wird dein Refresh-Intervall halt länger. Wenn Du damit leben kannst, ist das OK.
Gruß, Franz-Peter

Go Up