#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 |
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 }
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.