#include #include "ADC.h" #include "timer.h" #include "adc.h" int temp1; // volatile -> aktuellen Wert immer in den Speicher schreiben int temp2; volatile float e=0; volatile float esum=0; volatile int x=0; volatile int w=0; volatile float x_alt=0; volatile float y_R=0; volatile float y_i=0; volatile float y_d=0; volatile float y_kp=0; float D; float Kd=0; float Ki=0; float Kp=5; float Tn=2; // Tn in ms 2,4s => 2400ms float Tv=0; // Tv in ms 0,2s => 200ms float Ta=0.01; // Ta in ms 0,001s => 1ms int main (void) { /******************************************************** * * I- und D- Anteil mit Tn und Tv =0 ausschalten !!! * ***************************************************************/ if (Tn == 0) { Ki=0; } else { Ki=(Kp*Ta)/Tn; } if (Tv == 0) { Kd=0; } else { Kd=(Tv*Kp)/Ta; } /******************************************************************************************** * * Aufruf der Timer-, D/A Wandler- und der serielle Kommunikations Funktion!!! * ***************************************************************/ ADC_Init(); timer0_init(); sei(); DAWandler_init(); /******************************************************** * * Ist und Sollwert mit ADC0 und ADC1 einlesen!!! In der while scleife * ***************************************************************/ while (1) { temp1 = ReadADC(1)-512; // Sollwert einlesen temp2 = ReadADC(0)-512; // Istwert einlesen cli(); // Interrupt deaktiveren w=temp1; x=temp2; sei (); // Interrupt aktiveren /******************************************************** * * Stellgröße mit dem D/A Wandler ausgeben !!! In der while schleife * ***************************************************************/ SetDAWander (DAWanderA, y_R+512); } return 0; }