Skip to content

Commit

Permalink
upd
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexGyver committed Nov 17, 2020
1 parent 91c9e52 commit 4cdd391
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 11 deletions.
10 changes: 9 additions & 1 deletion GyverPID/GyverPID.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
- Добавлен режим оптимизации интегральной составляющей (см. доку)
- Добавлены автоматические калибровщики коэффициентов (см. примеры и доку)
Версия 3.1 - исправлен режиме ON_RATE, добавлено автоограничение инт. суммы
Версия 3.2 - чуть оптимизации, добавлена getResultNow
*/

#include <Arduino.h>
Expand Down Expand Up @@ -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; // время итерации в с
Expand Down
7 changes: 7 additions & 0 deletions GyverPID/examples/autotune/pcfan-pwm/внимание!.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Класс тахометр здесь работает не очень корректно (значения в 10 раз меньше реальных),
но регулятор в примерах с тестами настроен именно на такие значения.
Актуальная исправленная версия библиотеки тахометра лежит тут https://github.com/AlexGyver/GyverLibs/blob/master/minimLibs/tachometer/Tacho.h
в своих целях используйте именно её

Также для стабильной работы вентилятора рекомендуется внешняя подтяжка 10 кОм к VCC,
а ШИМ пин подключать через резистор ~220 Ом. Но скорее всего будет стабильно и без него.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions GyverPID/examples/autotune2/pcfan-pwm/внимание!.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Класс тахометр здесь работает не очень корректно (значения в 10 раз меньше реальных),
но регулятор в примерах с тестами настроен именно на такие значения.
Актуальная исправленная версия библиотеки тахометра лежит тут https://github.com/AlexGyver/GyverLibs/blob/master/minimLibs/tachometer/Tacho.h
в своих целях используйте именно её

Также для стабильной работы вентилятора рекомендуется внешняя подтяжка 10 кОм к VCC,
а ШИМ пин подключать через резистор ~220 Ом. Но скорее всего будет стабильно и без него.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 12 additions & 6 deletions GyverPID/examples/simulation_pid/simulation_pid.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}

// настройка
Expand Down Expand Up @@ -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;
Expand All @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion GyverPID/keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Kd KEYWORD2

getResult KEYWORD2
getResultTimer KEYWORD2

getResultNow KEYWORD2
setDirection KEYWORD2
setMode KEYWORD2
setLimits KEYWORD2
Expand Down
2 changes: 1 addition & 1 deletion GyverPID/library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=GyverPID
version=3.1
version=3.2
author=AlexGyver <[email protected]>
maintainer=AlexGyver <[email protected]>
sentence=Fast library for PID regulating algorithm.
Expand Down

0 comments on commit 4cdd391

Please sign in to comment.