Så vad är det för fel på min PID regulator?
När e är 0 eller negativ så ska I regulatorn inte fungera.
Jag kan inte summera ihop sumIntegral hur mycket som helst? Eller?
EDIT:
Jag tog bort nollningen av sumIntegral då jag kom på att om systemet svänger över så måste sumIntegral minska.
En fråga till: T2-T1 är deltaT. Är det nödvändigt att jag använder tid? Kan jag inte bara skriva T2-T2 = 1 ? Jag sparar minne.
Kod: Markera allt
static int U_pump(float PHar, long *T2_point)
{
float e = PHbor - PHar; // The wrong value
static const byte Td = 5; // Td value
static const byte Ti = 3; // Ti value
long T2 = *T2_point; // a pointer
static int sumIntegral =+ e_before*(T2-T1);
double PH_voltage = K*(e + Td*(e-e_before)/(T2-T1) + (1/Ti)*sumIntegral); // Lovely PID-regulator
e_before = e; // save e as e_before for next loop
T1 = T2; // save T2 as T1 for next loop