Offline
Newbie
Karma: 0
Posts: 41
|
 |
« on: April 09, 2012, 11:58:34 am » |
Hallo zusammen
Ich möchte Fragen ob ich ein Servo mit der Servo Bibliothek Servo.h die Frequenz auf z.B.100Hz ändern kann. Also das die Periodendauer 10ms beträgt.
Geht das, und wenn ja wie geht das?
Ich danke euch schon im voraus für eine Antwort.
Gruss Kai
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16140
+39 349 2158303
|
 |
« Reply #1 on: April 09, 2012, 01:01:07 pm » |
Wieso brauchst Du das? Hast Du superschnelle, supergenaue, superteure digitale Servos? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #2 on: April 09, 2012, 01:06:19 pm » |
Es sind normale Bl regler die ich ansteuere, es geht um eine Lageregelung.
Meine Frage diesbezüglich kannst du aber nicht beantworten?
Gruss Kai
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #3 on: April 10, 2012, 10:31:42 am » |
Wo sind denn hier die Experten?
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Online
Edison Member
Karma: 33
Posts: 1838
Arduino rocks
|
 |
« Reply #4 on: April 10, 2012, 10:54:18 am » |
Wo sind denn hier die Experten?
Keine Ahnung! Mir sind die Informationen zu dünn, um eine hinreichend gute Hilfestellung geben zu können. Du redest zwar von einem "Bl regler", ich denke aber, dass den wenigsten klar ist, dass ein Brushless-Regler gemeint ist. Welches Fabrikat/Hersteller, dass man mal in ein Datenblatt schauen kann?
|
|
|
|
|
Logged
|
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #5 on: April 10, 2012, 11:44:02 am » |
Es geht um das "wie" und nicht "wieso".
Die Frage ist doch Präzise genug, oder hab ich was übersehen?
Durch die Bibliothek Servo.h erzeugt man ein PWM Signal um Servo's oder ähnliches anzusteuern. Gibt es eine Möglichkeit bei dieser Bibliothek die Periodendauer von Standard 20ms (50Hz) auf 10ms (100Hz) zu ändern?
Gruss Kay
|
|
|
|
« Last Edit: April 10, 2012, 11:55:26 am by Ketchup »
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16140
+39 349 2158303
|
 |
« Reply #6 on: April 10, 2012, 11:59:34 am » |
Sicher gehts für Dich um das <<Es geht um das "wie" und nicht "wieso".>> Aber eine gewisse Neugierde und den Wunsch unsererseits nicht "eine Antwort" zu geben sondern "eine möglichst gute Antwort" zu geben mußt Du aber schon akzeptieren. Un die Frequenz zu ändern braucht man nur den "richtigen" Wert in der Bibiothek zu verändern. Ich habe aber ehrlich gesagt keine Lust, Zeit zu investieren, die richtige Stelle zu finden, weil Du gerne die Bibothek mit 100 Hz anstatt 50 Hz am laufen haben möchtst. Ich habe oft erlebt, daß man in einer Lösung festgefahren ist diese umbedingt haben will, obwohl andere Lösungswege zielführender und einfacher sind. Viele Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #7 on: April 10, 2012, 12:13:35 pm » |
Ich selber habe noch zu wenig Ahnung über Bibliotheken um das selber zu finden.
Das warum ist eigentlich einfach:
Ich habe eine PID Lageregelung Programmiert für einen Quatrokopter, die Brushless-Regler steuere ich mit 200Hz an, diese Regler Funktionieren sehr gut mit diesem Signal, die Regelung ist viel ruhiger als mit 50Hz.
Nur generiere ich das Servosignal durch einen eigenen Code ohne Bibliothek, und finde dies nicht so schön. Eventuell weiss ja jemand wo und was ich in dieser Bibliothek ändern muss.
Gruss Kay
|
|
|
|
|
Logged
|
|
|
|
|
Munich/Germany
Offline
God Member
Karma: 8
Posts: 592
|
 |
« Reply #8 on: April 10, 2012, 12:15:22 pm » |
Vermutlich gehts um diesen Wert: #define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds Steht ungefähr am Ende der Definitionen.
|
|
|
|
|
Logged
|
_______ Manfred
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #9 on: April 10, 2012, 12:32:16 pm » |
Hallo MaFu
Vielen Dank für deine Antwort. Reicht es wenn ich in der Datei Servo.h diesen Wert ändere und dann speichere? Oder braucht es da mehr dazu?
Gruss Kay
|
|
|
|
|
Logged
|
|
|
|
|
Munich/Germany
Offline
God Member
Karma: 8
Posts: 592
|
 |
« Reply #10 on: April 10, 2012, 01:46:16 pm » |
Keine Ahnung, sollte aber reichen. Probiers aus.
|
|
|
|
|
Logged
|
_______ Manfred
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #11 on: April 10, 2012, 02:05:36 pm » |
Werde ich Morgen machen, vielen Dank.
Gruss Kay
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #12 on: April 11, 2012, 01:45:17 pm » |
So
Habe es versucht, leider ohne Erfolg. Scheinbar reicht es nicht wenn man diese Zahl ändert, die Bibliothek neu einliesst und Uploadet. Das Oszi hat keine Änderung des Signales angezeigt, ich habe diverse Werte versucht.
Jetzt sind wieder die Experten gefragt, ich hoffe jemand weiss eine Lösung wie ich diese Bibliothek ändern kann.
Gruss Kay
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 41
|
 |
« Reply #13 on: April 14, 2012, 11:49:56 am » |
Jungs, hier mal ein Beispiel wie ich ein Servosignal mit 100Hz erzeuge: // von Kay // 14 April 2012
// Erzeugen von einem Servosignal von 100Hz // Ohne Bibliothek und ohne Delay
int Winkel=1500; // Servo Winkel 90° int Periodendauer=10000; // Periodendauer 10 millisekunden = 100Hz int x=1; int Servo=9; // Servo an Pin 9 unsigned long Zeit;
void setup() { Zeit = micros(); pinMode(Servo,OUTPUT); }
void loop() { if (x == 1) digitalWrite(Servo,HIGH); if (x==1&&(micros() - Zeit) >Winkel) // Erzeugen von einem Impuls von 1,5ms = 90° Servo Winkel { Zeit=micros(); digitalWrite(Servo,LOW); x=0; } if (x==0&(micros() - Zeit) >Periodendauer) // Erzeugen von 100Hz Periodendauer { Zeit=micros(); x=1; } }
Schön währe wirklich wenn ich die Bibliothek Servo.h so ändern kann das ich Servosignale von z.B. 100Hz erzeugen kann. Gruss Kay
|
|
|
|
« Last Edit: April 16, 2012, 01:12:16 pm by Ketchup »
|
Logged
|
|
|
|
|
Germany
Offline
Jr. Member
Karma: 0
Posts: 91
Walking on Nails
|
 |
« Reply #14 on: April 15, 2012, 09:22:35 am » |
REFRESH_INTERVAL ist der entsprechende Wert, der das Intervall zwischen den Impulsen angibt. Ich vermute hier hast du einen Fehler an anderer Stelle gemacht. Dein Beispiel arbeitet auch eher bei 80Hz als bei den von dir angegebenen 100Hz - das sollte dein Oszi dir aufgezeigt haben. Versuch doch mal, die Wiederholrate in der Servo.h geringer einzustellen und das Ergebnis auf dem Oszi zu messen.
Und in deinem Beispiel hast du & mit && verwechselt - was bei deinem Code glücklicher Weise trotzdem zum richtigen Ergebnis führt.
|
|
|
|
« Last Edit: April 15, 2012, 09:25:14 am by Marek080 »
|
Logged
|
loved the 68000 assembler back then and now I have to deal with THIS 8 bit thingy
|
|
|
|
|