karlauer
04.12.2008, 12:47
Hallo!
Bin grad am einarbeiten in die Ausro Thematik und hätte da mal folgende Fragen:
Was passiert hier? Es geht um die Geschwindigkeit. Ich verstehe nicht ganz wie man mithilfe der Taktfrequenz und der Odometrie auf die Geschwindigkeit kommt?
Wie kommt man auf die Konstante 256, 27000 usw.
#include "asuro.h"
#include <stdlib.h>
volatile unsigned char count36kHz;
volatile unsigned long timebase;
unsigned int takte;
int w, x, e, y, kp, ki, esum[2];
unsigned char speedLeft,speedRight;
unsigned long zeit[2];
void ReglerL (void)
{
takte = (timebase*256)+count36kHz - zeit[0];
zeit[0]=(timebase*256)+count36kHz;
x = 27000/takte;
e = w - x;
esum[0] = esum[0] + e;
if (esum[0] < -130) {esum[0] = -130;}
if (esum[0] > 130) {esum[0] = 130;}
y = kp*e + ki*esum[0];
if (y < 0) {y = 0;}
if (y > 255) {y = 255;}
speedLeft = y;
MotorSpeed(speedLeft,speedRight);
}
Was ich hier erkenne ist der Regelfehler e wird aus der Führungsgröße w minus Regelgröße x bestimmt. Wenn x eine Geschwindigkeit sein soll bräcute ich auch noch einen "Weg" um mit der Zeit auf die Geschwindigkeit zu kommen...wieso steht dann hier aber 27000
Ps: Ich hoffe es fühlt sich keiner beleidigt dass ich mir den Code hier zum Verständnis ausgeborgt habe 8-[
Bin grad am einarbeiten in die Ausro Thematik und hätte da mal folgende Fragen:
Was passiert hier? Es geht um die Geschwindigkeit. Ich verstehe nicht ganz wie man mithilfe der Taktfrequenz und der Odometrie auf die Geschwindigkeit kommt?
Wie kommt man auf die Konstante 256, 27000 usw.
#include "asuro.h"
#include <stdlib.h>
volatile unsigned char count36kHz;
volatile unsigned long timebase;
unsigned int takte;
int w, x, e, y, kp, ki, esum[2];
unsigned char speedLeft,speedRight;
unsigned long zeit[2];
void ReglerL (void)
{
takte = (timebase*256)+count36kHz - zeit[0];
zeit[0]=(timebase*256)+count36kHz;
x = 27000/takte;
e = w - x;
esum[0] = esum[0] + e;
if (esum[0] < -130) {esum[0] = -130;}
if (esum[0] > 130) {esum[0] = 130;}
y = kp*e + ki*esum[0];
if (y < 0) {y = 0;}
if (y > 255) {y = 255;}
speedLeft = y;
MotorSpeed(speedLeft,speedRight);
}
Was ich hier erkenne ist der Regelfehler e wird aus der Führungsgröße w minus Regelgröße x bestimmt. Wenn x eine Geschwindigkeit sein soll bräcute ich auch noch einen "Weg" um mit der Zeit auf die Geschwindigkeit zu kommen...wieso steht dann hier aber 27000
Ps: Ich hoffe es fühlt sich keiner beleidigt dass ich mir den Code hier zum Verständnis ausgeborgt habe 8-[