Нагрев/охлаждение с помощью ПИД регулятора

roma_roma
Offline
Зарегистрирован: 10.04.2020

Здравствуйте!

Хочу сразу заметить, что со средой ардуины познакомился недавно.

Игрался с ПИД регулятором (нагрев датчика лампочкой) с использование стандартной библиотеки 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);                                 // управление выходом
}

 

b707
Offline
Зарегистрирован: 26.05.2017

по уму, надо два регулятора, потому коэффициенты каждого будут разными

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

по уму, надо два регулятора, потому коэффициенты каждого будут разными

по уму - один.

roma_roma
Offline
Зарегистрирован: 10.04.2020

А как правильно добавить второй регулятор в код? Ведь, например, переменные Ki, Kp, Kd используются в библиотеке и будут общими для двух регуляторов? 

b707
Offline
Зарегистрирован: 26.05.2017

SLKH пишет:

b707 пишет:

по уму, надо два регулятора, потому коэффициенты каждого будут разными

по уму - один.

не спорю, но вроде характеристики-то "нагревателя" и "охлаждателя" разные, значит и коэффициенты ПИД тоже

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

То есть если остывание у вас допустим одинаковое,
а нагрев что киловатт что десять и нет разницы?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Если надо остужать, более, чем ... меняем плюс на минус и нагреватель на остужатель.

rkit
Offline
Зарегистрирован: 23.11.2016

Если на выходе регулятора отрицательное число - включаем вентилятор. Единственная сложность это найти коэффициенты, чтобы оба устройства имели одинаково пропорциональный эффект.

roma_roma
Offline
Зарегистрирован: 10.04.2020

Как добиться (увидеть) отрицательное число на регуляторе? В стандартном PID на выходе 0...255

nik182
Offline
Зарегистрирован: 04.05.2015

Не бывает стандартного ПИД. И библиотеки стандартной ПИД не бывает. Бывает конкретная реализация, конкретным человеком, который может ошибаться. Даже простое рассуждение, что на выходе ПИД  имеем число пропорциональное разности уставки ПИД и текущего значения датчика говорит о том, что отрицательные числа быть должны. Если их нет, то или библиотека плохо написана, или не правильно применяется. 

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Я бы добавил задержку в цикле. Резоны следующие - очень частый опрос датчика может вызвать его нагрев и в следствии этого неточность показаний, ПИД регулятор предполагает равные интервалы между измерениями, что проще добиться жестко задав интервал.

Кроме того неплохо бы уменьшить количество опросов датчика в цикле:


void loop() {
  ds.requestTemperatures();                               // температура с датчика
 
  delay(1000);
  Input = ds.getTempCByIndex(0);
  Serial.print("Температура: ");
  Serial.print(Input);
  Serial.println("C");

  myPID.Compute();
  analogWrite(2, Output);                                 // управление выходом
}

 

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

SLKH пишет:

b707 пишет:

по уму, надо два регулятора, потому коэффициенты каждого будут разными

по уму - один.

не спорю, но вроде характеристики-то "нагревателя" и "охлаждателя" разные, значит и коэффициенты ПИД тоже

без вентилятора, при естественном охлаждении, характеристики "нагревателя" и "охлаждателя" тоже разные (или очень разные). и что, у нас везде по 2 регулятора? 

SLKH
Offline
Зарегистрирован: 17.08.2015

roma_roma пишет:

Как добиться (увидеть) отрицательное число на регуляторе? В стандартном PID на выходе 0...255

в стандартном ПИД измеряется отклонение регулируемого параметра от заданного (требуемого) значения. в зависимости от величины отклонения и её изменения по времени ПИД-регулятор формирует какой-то управляющий сигнал на исполнительный механизм. 

roma_roma
Offline
Зарегистрирован: 10.04.2020

Всем спасибо за помощь!

Вопрос решился применением двух ПИД регуляторов.