ПИД ШИМ регулятор температурі
- Войдите на сайт для отправки комментариев
Вс, 01/01/2017 - 15:39
Здравствуйте, пытаюсь сделать ПИД ШИМ регулятор на основе Uno для регулировки включения ТЭНа обогревателя, так как в "режиме термостата" качество регулировки не очень удовлетворительное.
Температура измеряется с помощью DS18B20, ее значение подается на вход ПИД-регулятора (или туда нужен сигнал разбаланса?), регулятор выдает некоторое значение, которое в свою очередь подается на вход симметрического мультивибратора и определяет длительность импульсов на пин выхода к реле, которое управляет ТЭНом.
Правильный ли такой алгоритм, или можно как-то упростить программу? Возможно у кого-то есть простые скетчи каких-то ПИД-регуляторов? Нашел только для управления серводвигателями и пытаюсь их разобрать. Кнопки и дисплей использоваться не будут.

P.S. занимаюсь программированием промышленных контроллеров на LD, FBD и ST почти два года, наконец прикупил Arduino, но пытаюсь применять методы оттуда прихожу в замешательство..
P.S. занимаюсь программированием промышленных контроллеров на LD, FBD и ST почти два года, наконец прикупил Arduino, но пытаюсь применять методы оттуда прихожу в замешательство..
Ну можно программировать в Ардуино так как показано в учебных скетчах.
Но это не мой метод. Мой метод millis(),millis() и еще millis(). То есть многопоточное программирование. Чего нет в большом программировании.
Собственно, сейчас у меня что-то получилось, но на выходе не могу получить импульсы. Добился только плавного изменения яркости светодиода на пине в зависимости от температуры:
Надо как-то преобразовать сигнал с выхода регулятора в импульсы с определенной частотой.
P.S. Как отредактировать ошибки в тексте первого поста?
А зачем управленние именно шимом? Если 220 и нагрузка более 1квт то применение шим дает помехи в сети.
В примерах к библиотеке пид есть скетч управления нагревателем
Никак не отредактировать
многопоточное программирование. Чего нет в большом программировании.
Точно? А мужики-то и не в курсе! :))))
Спасибо, об этом не подумал. Допустим, это будет что-то менее мощное.
Не могли бы тыкнуть?
С телефона, а по памяти , примеры, pid, и там будет три примера, один как выше, один вкл, выкл для обогревателя, а третий непомню какой
Касаемо помех в сети, если импульсы будут с маленькой частотой и большой скважностью (система инерционная), то помехи будут не так заметны. Например, импульс 5 сек, пауза 15 сек. Хотя и это нельзя будет назвать ШИМ, но такой метод подойдет даже лучше. Чего я и пытаюсь добиться.
Касаемо помех в сети, если импульсы будут с маленькой частотой и большой скважностью (система инерционная), то помехи будут не так заметны. Например, импульс 5 сек, пауза 15 сек. Хотя и это нельзя будет назвать ШИМ, но такой метод подойдет даже лучше. Чего я и пытаюсь добиться.
Ищите Blink через millis(). А то мужики знают, но молчат как белорусские партизаны. Ну что с мужиков взять-то. Одним словом Мужики.
Ищите Blink через millis().
Это оно! Что-то похожее, только не совсем так, как работает импульсный регулятор. Наверное, импульс и пауза должны немного отличаться по длительности..
Код программы сейчас выглядит вот так (вместо реле встроенный светодиод):
Примерно то, что я желаю получить (температура в комнате, сигнал выхода на регуляторе, импульсы на реле)
И чтo вам мешает? Вот код над которым я работаю. Может навеет вам решение.
А вот работаю с сервами
Cпасибо, попробую разбораться, с сервами более понятно. Копать в millis(). Там где uint16_t - это какие-то таймеры?
Для своего регулятора, думаю, целесообразно изменить алгоритм работы. Например, выдавать импульсы через определенные промежутки времени, например 10 сек? Длинна этих импульсов будет зависеть от значения на выходе ПИД. Хотя и это не совсем правильно.
uint16_t это тип переменной беззнаковое int и все.
Почему не правильно. Если нет в аппаратной части, приходится реализовывать программно. Считайте, что ставите программный драйвер ШИМ.
Добился того, чтобы "мигалка" изменяла периоды паузы и свечения поуродовав код "blink без delay":
Подозреваю, что есть решения получше, но пока на ум больше ничего не приходит..
Чёт ругается компилятор :((( Говорит, что past_1 Пушкин будет описывать in this fucked scope :(((
Вот тема http://arduino.ru/forum/programmirovanie/upravlenie-tenami-propuskom-per...
Тут и ПИД и ШИМ мдленный. Может интересно будет ознакомиться.
Про ШИМ медленный http://arduino.ru/forum/programmirovanie/upravlenie-tenami-propuskom-per...
Исправил
Еще пара варийантов
Этот лучше.
но скважность лучше задавать в процентах от периода fill=(период/100*%заполнения)
вот стандартный пример для управления реле
То, что нужно, попробую еще так. Когда в самописный код с millis() пытаюсь вставить регулятор, чтобы задавать значение интервала, то задержки не срабатывают, мигает с одной частотой.
Также решил не очень кошерным способом через FLProg. Сгеренированный код показывать не буду, так как он мерзкий. Тем не менее, похоже, что работает нормально.