wastePID.c-Dateireferenz

#include "asuro.h"
#include <stdlib.h>

gehe zum Quellcode dieser Datei

Funktionen

void FollowLine (void)
int main (void)

Variablen

unsigned char speed
int speedLeft
int speedRight
unsigned int lineData [2]
int x
int xalt
int don
int doff
int kp
int kd
int ki
int yp
int yd
int yi
int drest
int y
int y2
int isum


Dokumentation der Funktionen

void FollowLine ( void   ) 

Definiert in Zeile 16 der Datei wastePID.c.

00017 {
00018 unsigned char leftDir = FWD, rightDir = FWD;
00019    FrontLED(OFF);
00020    LineData(lineData);                  // Messung mit LED OFF
00021    doff = (lineData[0] - lineData[1]);   // zur Kompensation des Umgebungslicht
00022    FrontLED(ON);
00023    LineData(lineData);                  // Messung mit LED ON
00024    don = (lineData[0] - lineData[1]);   
00025    x = don - doff;                  // Regelabweichung
00026    isum += x;
00027    if (isum > 16000) isum =16000;         //Begrenzung um Überlauf zu vermeiden
00028    if (isum < -16000) isum =-16000;
00029    yi = isum/625 * ki;               //I-Anteil berechnen
00030    yd = (x - xalt)*kd;               // D-Anteil berechnen und mit
00031    yd += drest;                     // nicht berücksichtigtem Rest addieren
00032    if (yd > 255) drest = yd - 255;      // merke Rest
00033    else if (yd < -255) drest = yd + 255;
00034    else drest = 0;
00035    if (isum > 15000) BackLED(OFF,ON);   // nur zur Diagnostik
00036    else if (isum < -15000) BackLED(ON,OFF);
00037    else BackLED(OFF,OFF);
00038    yp = x*kp;                        // P-Anteil berechnen
00039    y = yp + yi + yd;                  // Gesamtkorrektur
00040    y2 = y/2;                        // Aufteilung auf beide Motoren
00041    xalt = x;                        // x merken
00042    speedLeft = speedRight = speed;
00043    MotorDir(FWD,FWD);
00044    if ( y > 0) {                     // nach rechts
00045       StatusLED(GREEN);
00046       speedLeft = speed + y2;         // links beschleunigen
00047       if (speedLeft > 255) {
00048          speedLeft = 255;            // falls Begrenzung
00049          y2 = speedLeft - speed;      // dann Rest rechts berücksichtigen
00050       }
00051       y = y - y2;
00052       speedRight = speed - y;         // rechts abbremsen
00053       if (speedRight < 0) {
00054          speedRight = 0;
00055       }
00056    }
00057    if ( y < 0) {                     // nach links
00058       StatusLED(RED);
00059       speedRight = speed - y2;         // rechts beschleunigen
00060       if (speedRight > 255) {
00061          speedRight = 255;            // falls Begrenzung
00062          y2 = speed - speedRight;      // dann Rest links berücksichtigen
00063       }
00064       y = y - y2;
00065       speedLeft = speed + y;            // links abbremsen
00066       if (speedLeft < 0) {
00067          speedLeft = 0;
00068       }
00069    }
00070    leftDir = rightDir = FWD;
00071    if (speedLeft < 20)  leftDir = BREAK; // richtig bremsen
00072    if (speedRight < 20) rightDir = BREAK;
00073    MotorDir(leftDir,rightDir);
00074    MotorSpeed(abs(speedLeft),abs(speedRight));
00075 }

int main ( void   ) 

Definiert in Zeile 77 der Datei wastePID.c.

00078 {
00079 unsigned char sw;
00080    Init();
00081    MotorDir(FWD,FWD);
00082    StatusLED(GREEN);
00083    speed = 150;
00084    kp = 3; ki = 10; kd = 70;      // Regler Parameter kd enthält bereits Division durch dt
00085    sw = PollSwitch();
00086    if (sw & 0x01)
00087       {ki=20;}
00088    if (sw & 0x02)
00089       {speed = 200;}
00090    if (sw & 0x04)
00091       speed = 100;
00092    if (sw & 0x08)
00093       kd = 35;
00094    if (sw & 0x10)
00095       kd = 70;
00096    if (sw & 0x20)
00097       kd = 140;
00098    FrontLED(ON);
00099    LineData(lineData);
00100    speedLeft = speedRight = speed;
00101    while(1){
00102       FollowLine();
00103    }
00104     return 0;
00105 }


Variablen-Dokumentation

int doff

Definiert in Zeile 14 der Datei wastePID.c.

int don

Definiert in Zeile 14 der Datei wastePID.c.

int drest

Definiert in Zeile 14 der Datei wastePID.c.

int isum

Definiert in Zeile 14 der Datei wastePID.c.

int kd

Definiert in Zeile 14 der Datei wastePID.c.

int ki

Definiert in Zeile 14 der Datei wastePID.c.

int kp

Definiert in Zeile 14 der Datei wastePID.c.

unsigned int lineData[2]

Definiert in Zeile 13 der Datei wastePID.c.

unsigned char speed

Definiert in Zeile 11 der Datei wastePID.c.

int speedLeft

Definiert in Zeile 12 der Datei wastePID.c.

int speedRight

Definiert in Zeile 12 der Datei wastePID.c.

int x

Definiert in Zeile 14 der Datei wastePID.c.

int xalt

Definiert in Zeile 14 der Datei wastePID.c.

int y

Definiert in Zeile 14 der Datei wastePID.c.

int y2

Definiert in Zeile 14 der Datei wastePID.c.

int yd

Definiert in Zeile 14 der Datei wastePID.c.

int yi

Definiert in Zeile 14 der Datei wastePID.c.

int yp

Definiert in Zeile 14 der Datei wastePID.c.


Erzeugt am Mon Apr 9 13:28:41 2007 für ASURO Library von  doxygen 1.5.1-p1