Нагрев/охлаждение с помощью ПИД регулятора
- Войдите на сайт для отправки комментариев
Пт, 10/04/2020 - 16:12
Здравствуйте!
Хочу сразу заметить, что со средой ардуины познакомился недавно.
Игрался с ПИД регулятором (нагрев датчика лампочкой) с использование стандартной библиотеки PID_v1.h. Все работает хорошо, но возник вопрос. Как прикрутить туда охлаждение, например, вентилятором, с тем же ПИД управлением? Тоесть, что-бы в одной системе датчик нагревался и охлаждался с помощью ПИД.
Для этого нужен двухпозиционный (с выходами нагрева и охлаждения) регулятор или можно как-то обойтись стандартным, но переключать ему направление работы (DIRECT/NORMAL) ?
Скетч:
#include <OneWire.h> #include <DallasTemperature.h> #include <PID_v1.h> OneWire oneWire(3); // вход датчиков 18b20, #define PIN_OUTPUT 2 // нагрев #define PIN_OUTPUT 4 // вентилятор double Setpoint, Input, Output; double Kp = 300, Ki = 10, Kd = 20; DallasTemperature ds(&oneWire); PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT); void setup() { Serial.begin(9600); ds.begin(); myPID.SetMode(AUTOMATIC); Input = ds.getTempCByIndex(0); Setpoint = 40; } void loop() { ds.requestTemperatures(); // температура с датчика Serial.print("Температура: "); Serial.print(ds.getTempCByIndex(0)); Serial.println("C"); Input = ds.getTempCByIndex(0); myPID.Compute(); analogWrite(2, Output); // управление выходом }
по уму, надо два регулятора, потому коэффициенты каждого будут разными
по уму, надо два регулятора, потому коэффициенты каждого будут разными
А как правильно добавить второй регулятор в код? Ведь, например, переменные Ki, Kp, Kd используются в библиотеке и будут общими для двух регуляторов?
по уму, надо два регулятора, потому коэффициенты каждого будут разными
не спорю, но вроде характеристики-то "нагревателя" и "охлаждателя" разные, значит и коэффициенты ПИД тоже
То есть если остывание у вас допустим одинаковое,
а нагрев что киловатт что десять и нет разницы?
Если надо остужать, более, чем ... меняем плюс на минус и нагреватель на остужатель.
Если на выходе регулятора отрицательное число - включаем вентилятор. Единственная сложность это найти коэффициенты, чтобы оба устройства имели одинаково пропорциональный эффект.
Как добиться (увидеть) отрицательное число на регуляторе? В стандартном PID на выходе 0...255
Не бывает стандартного ПИД. И библиотеки стандартной ПИД не бывает. Бывает конкретная реализация, конкретным человеком, который может ошибаться. Даже простое рассуждение, что на выходе ПИД имеем число пропорциональное разности уставки ПИД и текущего значения датчика говорит о том, что отрицательные числа быть должны. Если их нет, то или библиотека плохо написана, или не правильно применяется.
Я бы добавил задержку в цикле. Резоны следующие - очень частый опрос датчика может вызвать его нагрев и в следствии этого неточность показаний, ПИД регулятор предполагает равные интервалы между измерениями, что проще добиться жестко задав интервал.
Кроме того неплохо бы уменьшить количество опросов датчика в цикле:
по уму, надо два регулятора, потому коэффициенты каждого будут разными
не спорю, но вроде характеристики-то "нагревателя" и "охлаждателя" разные, значит и коэффициенты ПИД тоже
Как добиться (увидеть) отрицательное число на регуляторе? В стандартном PID на выходе 0...255
Всем спасибо за помощь!
Вопрос решился применением двух ПИД регуляторов.