diff --git a/GyverPID/GyverPID.h b/GyverPID/GyverPID.h index a09f7f5..87c9ca6 100644 --- a/GyverPID/GyverPID.h +++ b/GyverPID/GyverPID.h @@ -19,6 +19,7 @@ - Добавлен режим оптимизации интегральной составляющей (см. доку) - Добавлены автоматические калибровщики коэффициентов (см. примеры и доку) Версия 3.1 - исправлен режиме ON_RATE, добавлено автоограничение инт. суммы + Версия 3.2 - чуть оптимизации, добавлена getResultNow */ #include @@ -116,11 +117,18 @@ class GyverPID { datatype getResultTimer() { if (millis() - pidTimer >= _dt) { pidTimer = millis(); - GyverPID::getResult(); + getResult(); } return output; } + // посчитает выход по реальному прошедшему времени между вызовами функции + datatype getResultNow() { + setDt(millis() - pidTimer); + pidTimer = millis(); + return getResult(); + } + private: int16_t _dt = 100; // время итерации в мс float _dt_s = 0.1; // время итерации в с diff --git "a/GyverPID/examples/autotune/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" "b/GyverPID/examples/autotune/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" new file mode 100644 index 0000000..8a4ddf3 --- /dev/null +++ "b/GyverPID/examples/autotune/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" @@ -0,0 +1,7 @@ +Класс тахометр здесь работает не очень корректно (значения в 10 раз меньше реальных), +но регулятор в примерах с тестами настроен именно на такие значения. +Актуальная исправленная версия библиотеки тахометра лежит тут https://github.com/AlexGyver/GyverLibs/blob/master/minimLibs/tachometer/Tacho.h +в своих целях используйте именно её + +Также для стабильной работы вентилятора рекомендуется внешняя подтяжка 10 кОм к VCC, +а ШИМ пин подключать через резистор ~220 Ом. Но скорее всего будет стабильно и без него. \ No newline at end of file diff --git a/GyverPID/examples/autotune/thermistor-pwm/PIDtest/PIDtest.ino b/GyverPID/examples/autotune/thermistor-pwm/PIDtest/PIDtest.ino index f1b139b..8857c83 100644 --- a/GyverPID/examples/autotune/thermistor-pwm/PIDtest/PIDtest.ino +++ b/GyverPID/examples/autotune/thermistor-pwm/PIDtest/PIDtest.ino @@ -6,7 +6,6 @@ thermistor therm(THERM_PIN, 10000, 3950); // пин, сопротивление при 25 градусах (R термистора = R резистора!), бета-коэффициент -#define PID_OPTIMIZED_I #include "GyverPID.h" //analysis: 99% PI p: 14.27 PI i: 0.82 PID p: 19.02 PID i: 1.58 PID d: 57.11 //analysis: 97% PI p: 15.20 PI i: 0.94 PID p: 20.26 PID i: 2.19 PID d: 46.96 diff --git "a/GyverPID/examples/autotune2/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" "b/GyverPID/examples/autotune2/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" new file mode 100644 index 0000000..8a4ddf3 --- /dev/null +++ "b/GyverPID/examples/autotune2/pcfan-pwm/\320\262\320\275\320\270\320\274\320\260\320\275\320\270\320\265!.txt" @@ -0,0 +1,7 @@ +Класс тахометр здесь работает не очень корректно (значения в 10 раз меньше реальных), +но регулятор в примерах с тестами настроен именно на такие значения. +Актуальная исправленная версия библиотеки тахометра лежит тут https://github.com/AlexGyver/GyverLibs/blob/master/minimLibs/tachometer/Tacho.h +в своих целях используйте именно её + +Также для стабильной работы вентилятора рекомендуется внешняя подтяжка 10 кОм к VCC, +а ШИМ пин подключать через резистор ~220 Ом. Но скорее всего будет стабильно и без него. \ No newline at end of file diff --git a/GyverPID/examples/autotune2/thermistor-pwm/PIDtest/PIDtest.ino b/GyverPID/examples/autotune2/thermistor-pwm/PIDtest/PIDtest.ino index 1484703..99ad50c 100644 --- a/GyverPID/examples/autotune2/thermistor-pwm/PIDtest/PIDtest.ino +++ b/GyverPID/examples/autotune2/thermistor-pwm/PIDtest/PIDtest.ino @@ -6,7 +6,6 @@ thermistor therm(THERM_PIN, 10000, 3950); // пин, сопротивление при 25 градусах (R термистора = R резистора!), бета-коэффициент -#define PID_OPTIMIZED_I #include "GyverPID.h" // result: PI p: 41.72 PI i: 4.76 PID p: 61.86 PID i: 9.02 PID d: 63.22 // result: PI p: 17.84 PI i: 0.92 PID p: 26.59 PID i: 1.61 PID d: 66.24 diff --git a/GyverPID/examples/simulation_pid/simulation_pid.ino b/GyverPID/examples/simulation_pid/simulation_pid.ino index 49fbf45..1efcd33 100644 --- a/GyverPID/examples/simulation_pid/simulation_pid.ino +++ b/GyverPID/examples/simulation_pid/simulation_pid.ino @@ -10,9 +10,9 @@ #define DT 30 #include "GyverPID.h" -GyverPID regulator(5, 0, 0, DT); +GyverPID regulator(0, 0, 0, DT); -float value = 30; +float value = 15; float signal = 0; float COEF = 0.1; @@ -52,10 +52,10 @@ void loop() { if (regulator.integral < 0) regulator.integral = 0; process(); - Serial.print(value); Serial.print(' '); + Serial.print(value); Serial.print(' '); Serial.print(signal); Serial.print(' '); //Serial.print(regulator.integral); Serial.print(' '); - Serial.println(regulator.setpoint); + Serial.println(regulator.setpoint); } // настройка @@ -84,7 +84,9 @@ void loop() { void process() { static float valueSpeed; static float signalSpeed; - + static bool firstFlag = false; + static float delayArray[DELAY_AMOUNT]; + // сигнал == скорость нагрева // ограничивает сигнал его же значением и плавно к нему стремится signalSpeed += (signal - signalSpeed) * 0.003; @@ -93,7 +95,11 @@ void process() { // скорость охлаждения получаем как разность "температуры" и её нулевого значения valueSpeed = signalSpeed * SIGNAL_COEF + (LOW_VALUE - value) * COEF; - static float delayArray[DELAY_AMOUNT]; + if (!firstFlag) { + firstFlag = true; + for (int i = 0; i < DELAY_AMOUNT; i++) delayArray[i] = valueSpeed; + } + for (int i = 0; i < DELAY_AMOUNT - 1; i++) delayArray[i] = delayArray[i + 1]; delayArray[DELAY_AMOUNT - 1] = valueSpeed; diff --git a/GyverPID/keywords.txt b/GyverPID/keywords.txt index 6bbff1f..01766fc 100644 --- a/GyverPID/keywords.txt +++ b/GyverPID/keywords.txt @@ -22,7 +22,7 @@ Kd KEYWORD2 getResult KEYWORD2 getResultTimer KEYWORD2 - +getResultNow KEYWORD2 setDirection KEYWORD2 setMode KEYWORD2 setLimits KEYWORD2 diff --git a/GyverPID/library.properties b/GyverPID/library.properties index cbea284..ee9abd0 100644 --- a/GyverPID/library.properties +++ b/GyverPID/library.properties @@ -1,5 +1,5 @@ name=GyverPID -version=3.1 +version=3.2 author=AlexGyver maintainer=AlexGyver sentence=Fast library for PID regulating algorithm.