Гистерезис
- Войдите на сайт для отправки комментариев
Втр, 14/03/2017 - 14:29
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;}
есть такой код по регулировке температуры шести скоростной,
как гистезис организовать не пойму.
Нужно запоминать предыдущее значение и сравнивать с ним.
Только не гистезис, а гистере́зис.
Нужно запоминать предыдущее значение и сравнивать с ним.
это как?
А если так ?
так плохо. Если к примеру temp > temp_off но, temp < (temp_off + hysteresis) ? Получим
return
nothing;
, а надо или off или low с учетом гистерезиса. Выход порст, делаем так1. У ТС сейчас 7 диапазонов, добавляем еще 6 по одному между существующими, в них и будет гистерезис. В той же технике if-else только пороги вместо temp_off,temp_low,... станут temp_off, temp_off + hysteresis, temp_low,.....
2. вводим переменную, сохраняющую предыдущий результат работы функции.
3. если попали в один из диапазонов гистерезиса, то функция возвращает предыдущий результат.
4. Опционально. Переписываем весь код в цикл с использованием масивов.
ПС. Предполагается что изменение температуры происходит относительно медленно, без перескоков диапазонов. Еслии с перескоком требуется - немножко усложнится код.