Hallo Zusammen,
ich will den Schrittmotor und Getriebemotor mit der gleichen ermittelten Geschwindigkeit von Encoder laufen lassen.
Ist das möglich?
Vielen Dank im Voraus
Was verstehst Du darunter?
Gruß Tommy
wird zuerst die Geschwindigkeit mit Encoder(Encoder auf ein Band wie Förderband) gemessen. mit dieser gleichen Geschwindigkeit will ich Schrittmotor und Getriebemotor laufen.
Das sind doch zwei völlig unterschiedliche Dinge. Motoren misst du die Drehzahl, bei Förderbändern cm pro min.
Haben Sie einen Vorschlag, wie ich das lösen kann?
Nein, da musst du erst mal genau erklären, was du machen willst.
Hallo,
ich habe das jetzt so verstanden. Ein Encoder dient als Sollwert für beide Antriebe. Beide Antriebe sollen synchron drehen.
daraus ergibt sich die Frage soll das Drehzahl oder Wegsynchron bzw. Winkelsynchron sein ?
einem Schrittmotor kannst Du im Prinzip mit dem Encoder die Schritte direkt vorgeben. Eventuell musst Du das noch skalieren damit kann das Wegsynchron und gleichzeitig Drehzahlsynchron sein ohne weitere Einheiten.
Zu Deinem Getriebemotor, Wenn es sich um einen DC oder AC Motor handelt dann benötigst Du einen gemessenen Drehzahl-Istwert für den Antrieb. Das kann ein analoger Tacho oder ein weiterer Encoder sein. Mit Tacho geht aber nur Drehzahlsynchron , bei einem Encoder benötigst Du dann die Istdrehzahl. (z.B Imp/s) Um dann die passende Drehzahl für den Motor zu verwenden wirst Du einen PI Regler einsetzen müssen, um damit einen Drehzahl-Regelkreis aufbauen zu können. Auch hier musst Du das dann passend skalieren. Wenn Du das ebenfalls Wegsynchron fahren willst wird es etwas komplizierter. In dem Fall kannst Du eine Differenzzähler verwenden (Impulse Sollwert-Istwert) und bildest daraus einen Korrekturwert für die Drehzahl. Sowas wird auch als elektrisches Getriebe oder elektrische Welle bezeichnet.
Heinz
Hallo,
vielen Dank für die Hilfe!
genau so will ich machen.
also das soll Wegsynchron bzw. Winkelsynchron sein.
Zur Messung des Sollwerts habe ich diesen Code (in diesem Code wird Impulse und Imp/s und Geschwindigkeit gemessen):
volatile unsigned long isr_impulse = 0;
volatile unsigned long isr_letzterImpuls=0;
#define MESSINTERVALL 1000
#define ppr 100 // Encoder 100p/r
#define D_rolle 0.063 //0,063m Durchmesser Encoder Roller Rad
#define encoderA 2
void setup()
{
Serial.begin(115200);
pinMode (encoderA, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(encoderA), encoder_zaehler, RISING);
}
void loop()
{
static unsigned long ersteMessung;
static unsigned long letzteMessung;
static unsigned long zeit;
static unsigned long letzterImpuls;
unsigned long impulse;
float frequenz;
float rps;
float geschwindigkeit;
ersteMessung=millis();
if (ersteMessung-letzteMessung >= MESSINTERVALL)
{
unsigned long Time = ersteMessung-letzteMessung;
letzteMessung=ersteMessung;
noInterrupts(); // Interrupts sperren
impulse=isr_impulse; // volatile Variable auslesen
isr_impulse=0; // valatile Variable zurücksetzen
zeit=isr_letzterImpuls-letzterImpuls;
letzterImpuls=isr_letzterImpuls;
interrupts(); // Interrupts wieder zulassen
// frequenz= impulse/(float)(zeit*ppr)*1000L;
rps= impulse/(float)(zeit*ppr)*1000L;
geschwindigkeit = rps *2*D_rolle* PI;
}
}
void encoder_zaehler()
{
isr_impulse++;
isr_letzterImpuls=millis();
}
wie kann ich das skalieren, damit das Wegsynchron und gleichzeitig Drehzahlsynchron sein kann?
Es handelt sich um einen DC Motor.
Hallo
Na ja du hast ja schon die Geschwindigkeit für den gemeinsamen Sollwert berechnet.
Jetzt hängt es natürlich von der Mechanik und Übersetzung der beiden Antriebe ab.
Letztlich solltest du auf gleiche Wertigkeiten für jedes System kommen. Also sowas in der Art Vorschub mm/imp . Beispiel Schrittmotor 200imp/Umdr. Vorschub 10mm/Umdr . Dann kannst du da was rechnen. Ähnliches gilt dann für den Getriebemotor, bzw seinen Istwert encoder.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.