Motorsteuerung

Die Mechanik/Elektronik des c't-Bot

Moderator: Moderatoren Team

Motorsteuerung

Beitragvon Sheridan » 22. Feb 2009, 17:50

Hallo,
ich bin gerade dabei mich mit der Motorsteuerung zu beschäftigen.
Um die Geschwindigkeit der Motoren zu setzen, also den richtigen Compare - Wert für den Timer1 zu ermitteln stehen in der Funktion

void motor_set(int16 left, int16 right) folgende 2 Formeln

pwm = PWMMAX/(BOT_SPEED_MAX*4.0)) * left) + 50;

bzw.

pwm = PWMMAX/(BOT_SPEED_MAX*1.1)) * left) - 30;

Kann mir jmd. sagen, wo die Formeln herkommen bzw. wie sie hergeleitet wurden.

Vielen Dank

Gruß Bernhard
Sheridan
Friends of Marvin
Friends of Marvin
 
Beiträge: 17
Registriert: 1. Nov 2006, 00:56

Re: Motorsteuerung

Beitragvon eax » 24. Feb 2009, 18:42

Hi,
Sheridan hat geschrieben:Hallo,
ich bin gerade dabei mich mit der Motorsteuerung zu beschäftigen.
Um die Geschwindigkeit der Motoren zu setzen, also den richtigen Compare - Wert für den Timer1 zu ermitteln stehen in der Funktion

void motor_set(int16 left, int16 right) folgende 2 Formeln
Code: Alles auswählen
if (left <= BOT_SPEED_NORMAL) {
    pwm = (uint16_t)(((float)PWMMAX/(BOT_SPEED_MAX*4.0)) * left) + 50;
} else {
    pwm = (uint16_t)(((float)PWMMAX/(BOT_SPEED_MAX*1.1)) * left) - 30;
}

Kann mir jmd. sagen, wo die Formeln herkommen bzw. wie sie hergeleitet wurden.

gar nicht. Die Kennlinie der Motoren ist nicht linear und hängt u.a. auch von der Frequenz des PWM-Signals ab. Wäre sie linear, würde die Formel logischerweise
Code: Alles auswählen
pwm = (uint16_t)(((float)PWMMAX / BOT_SPEED_MAX) * left) + OFFSET;

lauten. Die Überlegung für die tatsächlich angewandte Formel ist nun, dass die Motoren im unteren Drehzahlbereich ein deutlich größeres Puls-Pause-Verhältnis benötigen als sonst. Darum der Faktor 4 für kleine Geschwindigkeiten. Der andere Fall sorgt dann dafür, dass der Bot bei einer doppelt so hoch eingestellten Geschwindigkeit auch in etwa doppelt so schnell fährt.
Bei einer festen Zuordnung von Geschwindigkeit zu Puls-Pause-Verhältnis bestehen aber immer folgende Probleme:
a) Es gibt keinen Gleichlauf der Motoren.
b) Die tatsächliche Geschwindigkeit hängt stark von der aktuellen Akkuspannung ab.
c) Die tatsächliche Geschwindigkeit hängt stark vom Untergrund ab, auf dem der Bot fährt.
Damit der Bot auch bei fast leeren Akkus noch losfährt, muss man die kleinste Geschwindigkeit entsprechend groß wählen, wodurch es aber unmöglich wird, sehr genaue Drehungen zu erreichen.
Insgesamt sollte man also die Geschwindigkeit regeln lassen und nicht nur einstellen. Daher ist die einfache Variante ohne Motorregelung auch nicht perfekt an die wirkliche Motorkennlinie angepasst, sondern nur ein Kompromiss zum einfachen Ausprobieren des Bots.
Hinzu kommt, dass durch die dabei recht niedrige PWM-Frequenz (bei höheren Frequenzen funktioniert das Prinzip so gar nicht mehr) höhere Ströme durch die Motorspulen fließen, was den Verschleiß erhöht.

Gruß,
Timo
eax
Friends of Robby
Friends of Robby
 
Beiträge: 747
Registriert: 18. Jan 2006, 17:16
Wohnort: Karlsruhe


Zurück zu Mechanik/Elektronik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron