Гистерезис

fuso
Offline
Зарегистрирован: 14.02.2016
unsigned char cooling_pwm (int temp)
{
  if (temp <= temp_off)
    return off;
  else if (temp <= temp_low)
    return low;
    else if (temp <= temp_low1)
    return low1;
  else if (temp <= temp_normal)
    return normal;
  else if (temp <= temp_medium)
    return medium;
    else if (temp <= temp_medium1)
    return medium1;
  else 
    return high;}

есть такой код по регулировке температуры шести скоростной,

как гистезис организовать не пойму.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нужно запоминать предыдущее значение и сравнивать с ним.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Только не гистезис, а гистере́зис.

fuso
Offline
Зарегистрирован: 14.02.2016

andriano пишет:

Нужно запоминать предыдущее значение и сравнивать с ним.

это как?

Araris
Offline
Зарегистрирован: 09.11.2012

fuso пишет:

как гистезис организовать не пойму.

А если так ?

unsigned char cooling_pwm (int temp)
int hysteresis = 1;
{
  if (temp <= temp_off)
    return off;
  else if (temp > (temp_off + hysteresis) && temp <= temp_low)
    return low;
    else if (temp > (temp_low + hysteresis) && temp <= temp_low1)
    return low1;
  else if (temp > (temp_low1 + hysteresis) && temp <= temp_normal)
    return normal;
  else if (temp > (temp_normal + hysteresis) && temp <= temp_medium)
    return medium;
  else if (temp > (temp_medium + hysteresis) && (temp <= temp_medium1)
    return medium1;
  else if (temp > (temp_medium1 + hysteresis) ) 
    return high;
  else
    return nothing; // не попали ни в одно из условий
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

так плохо. Если к примеру temp > temp_off но,  temp < (temp_off + hysteresis) ? Получим return nothing; , а надо или off или low с учетом гистерезиса. Выход порст, делаем так

1. У ТС сейчас 7 диапазонов, добавляем еще 6 по одному между существующими, в них и будет гистерезис. В той же технике if-else только пороги вместо temp_off,temp_low,... станут temp_offtemp_off + hysteresistemp_low,.....

2. вводим переменную, сохраняющую предыдущий результат работы функции.

3. если попали в один из диапазонов гистерезиса, то функция возвращает предыдущий результат.

4. Опционально. Переписываем весь код в цикл с использованием масивов.

ПС. Предполагается что изменение температуры происходит относительно медленно, без перескоков диапазонов. Еслии с перескоком требуется - немножко усложнится код.