Как- то раз, одна дружественная лаборатория попросила сделать для нее ПИД регулятор до 500 градусов с точностью удержания температуры не хуже 0,5 градуса, при этом точность установления самой температуры требовалась не очень высокая – около 3х градусов и, соответственно, градуировка термопары не закладывалась. Промышленный регулятор им не подошел ни по точности, ни по удобству. Так как менять температуру надо было очень часто, а делать это кнопками очень муторно , было решено в качестве задатчика температуры применить энкодер. Но, к сожалению, до железа дело так и не дошло, так как финансирование закончилось, как это часто у нас бывает, раньше чем поступили деньги. Временные характеристики нагревателя были приблизительно как у электрической конфорки, поэтому для того чтобы симуляция в протеусе не была слишком долгой и утомительной, шаг регулирования временных параметров уменьшен в 10 раз. Еще им нужен был аналоговый выход температуры. Температура подается на вход 12-и разрядного выносного АЦП, что обеспечивает шаг дискретности 0,125 градуса, хотя возможно это излишне. Все настройки вводятся в сервисном меню и запоминаются в ЕЕПРОМ. В сервисном режиме можно настраивать такие параметры, как: коэффициенты регулирования, период ПИД, период ШИМ, режим регулирования (ПИД, П, ПД, ПИ, Релейный режим – для подбора коэффициентов). Алгоритм регулирования классический и самый простой , с ограничением интегрирования. Для того чтобы войти в сервис, перед запуском симуляции переведите кнопку SERVIСE в нажатое состояние, запустите протеус (подайте питание), нажимая кнопку выберете нужный параметр и измените его вращением энкодера, далее нажимайте кнопку до выхода из сервисного меню. Dll-ка mcp3201 для тех у кого протеус меньше чем 7.10 прилагается в архиве. Mcp4921 можно вообще исключить из моделирования. Хотя программа сыровата и подглючивает (иногда АЦП вдруг читает нулевое значение, и срабатывает защита от обрыва термопары), да и опыта в микроконтроллерах у меня не очень много, все же надеюсь, что информация будет полезна тем, кто впервые хочет покрутить, пощупать ПИД регулятор, хотя бы виртуально.
Источник
Пид регуляторы температуры своими руками
Собственно нужно держать температуру нагрева как можно точнее, ровнее. Хотелось бы сделать ПИД регулятор. Почитал про принцип действия, но как организовать на мк и настроить его- пока мыслей нет. Может кто уже делал или знает как- подскажите пожалуйста. (мк типа МЕГА8)
Есть термопара с платой усилителя сигнала. мк АЦП можно захватывать значение входа усилителя термопары, а вот что далее, как это значение в какие формулы пихать, да еще и коэффициенты применять.
поделитесь дельными предложениями, ссылками. (готовые решения что то дороги очень 3500-6500руб.)
я тоже думаю нафига дифференциальная составляющая- может она и не нужна вовсе? скажем так -задача регулировать нагреватели ИК станции. Нижний- просто держать температуру уставки, верхний -программный, поход по нескольким температурам (термопрофиль).
Интересует, конечно, если кто уже сам делал. Поделитесь практической реализацией, кода, схемотехники, алгоритм. (понятно, что управление симистором через оптопару с детектором перехода через ноль, а как мк сигнал на оптопару формирует- шим? как связать шим с расчетом ПИ, как применить коэффициенты и расчитать их значение. )
Реклама
Приглашаем всех желающих 13 октября 2021 г. посетить вебинар, посвященный искусственному интеллекту, машинному обучению и решениям для их реализации от Microchip. Современные среды для глубинного обучения нейронных сетей позволяют без детального изучения предмета развернуть искусственную нейронную сеть (ANN) не только на производительных микропроцессорах и ПЛИС, но и на 32-битных микроконтроллерах. А благодаря широкому портфолио Microchip, включающему в себя диапазон компонентов от микроконтроллеров и датчиков до ПЛИС, средств скоростной передачи и хранения информации, возможно решить весь спектр задач, возникающий при обучении, верификации и развёртывании модели ANN.
Сэр Мурр
Модератор
Карма: 46 Рейтинг сообщений: 232 Зарегистрирован: Чт окт 27, 2005 18:50:07 Сообщений: 11174 Откуда: из мест не столь отдалённых Рейтинг сообщения: 0 Медали: 2
Реклама
Реклама
Компания Компэл приглашает 30 сентября на вебинар посвященный экономичным решениям МЕAN WELL. На вебинаре мы рассмотрим, как решения MEAN WELL позволяют сэкономить при выборе оптимального источника питания для ваших приложений. Будут представлены основные группы источников питания по конструктивным признакам и по областям применения в контексте их стоимости или их особенностей, позволяющих снизить затраты на электропитание конечного устройства.
Спасибо большое за ответы, а можно по подробнее как управлять нагрузкой?
Планирую использовать оптопару с детектором нуля и симистор. Оптопара при подаче на нее сигнала управления включит симистор только в ближайший переход через ноль. Как на мк реализовать подачу сигнала на оптопару, ведь скорее всего продолжительность подачи этого сигнала нужно как то увязать с рассчитанным значением ПИД?
В процессе расчета out имеет определенную величину. Скармливаете это значение, например, алгоритму Брезенхема, который равномерно распределяет вкл/выкл состояние на интервал управления нагрузкой.
Pooher
Мучитель микросхем
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна. Рейтинг сообщения: 0
А как симистор откроется при нулевом напряжении? Симистор надо открывать при напряжении отличном от нуля, а вот закрывать в тот момент, кода ток и напряжение равно нулю. На пример: 1-Отследили «ноль» (напр. внешним прерыванием) 2-Запустили таймер 3-Таймер досчитал до нужного значения — подаём импульс открытия. 4-При правильной постройке схемы контроля перехода через ноль, симистор сам закроется в «нуле»
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
для управления симистором предполагается использовать оптопару MOC3083M. у нее на вход просто подается питание, а выход уже сам включается в ближайший, подходящий для включения симистора, момент времени по внутренней схеме с детектором нуля.
имхо зачем усложнять и считать периоды, когда подал напряжение и вуаля, в ближайший момент времени открывается симистор, подключается нагрузка, затем, по высчитанному с термопары ПИД значению отключается.
вопрос лишь в том, вероятна ли и существенна ли ситуация, что оптопара будет включать симистор например только в положительный полупериод. при поддержании граничных значений температуры, когда уже все прогрелось и стоит лишь немного поддерживать- совпадет например так, что симистор будет открываться интервалами в полупериод и только в положительную его часть. возникнут ли какие неприятные последствия в сети?
добрые коты, помогите разобраться с ПИД регулятором. Есть кусок кода CVAVR для регулировки нагревателям (лампа 60Вт.), управляю нагревом через оптотиристор + симистор, режим роботы: 100% — максимальный нагрев и 30% минимальный нагрев. термометр — термопара. нарыл кусок ПИД регулятора . ну не могу его превинтить к своим проекту необходимо что бы функция возвращала процент нагрузки в приделах ((
#define INTERVAL 0.1 #define MAX 100 #define MIN 30 signed int Kp=2,Ki=1,Kd=0; static signed int last_error;
signed int pid_control(signed char setpoint, signed char currentpoint) < signed int P; signed int D; static signed int I; signed int PID; P = (setpoint — currentpoint); I = (I + (setpoint — currentpoint) * INTERVAL); D = (((setpoint — currentpoint) — last_error) / INTERVAL); last_error = setpoint — currentpoint; PID = (Kp * P) + (Ki * I) + (Kd * D); return (PID); >
каждые 250 мс. я считываю показания термопары, и передаю показания
добрые коты, помогите разобраться с ПИД регулятором. Есть кусок кода CVAVR для регулировки нагревателям (лампа 60Вт.), управляю нагревом через оптотиристор + симистор, режим роботы: 100% — максимальный нагрев и 30% минимальный нагрев. термометр — термопара. нарыл кусок ПИД регулятора . ну не могу его превинтить к своим проекту необходимо что бы функция возвращала процент нагрузки в приделах ((
#define INTERVAL 0.1 #define MAX 100 #define MIN 30 signed int Kp=2,Ki=1,Kd=0; static signed int last_error;
signed int pid_control(signed char setpoint, signed char currentpoint) < signed int P; signed int D; static signed int I; signed int PID; P = (setpoint — currentpoint); I = (I + (setpoint — currentpoint) * INTERVAL); D = (((setpoint — currentpoint) — last_error) / INTERVAL); last_error = setpoint — currentpoint; PID = (Kp * P) + (Ki * I) + (Kd * D); return (PID); >
каждые 250 мс. я считываю показания термопары, и передаю показания