Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Производственное оборудование Медицинская техника, а также другое промышленное оборудования. Обсуждение и ремонт.

 
Опции темы
Непрочитано 27.02.2007, 14:52  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию ПИД регулятор

Привет всем. Есть задача, управлять треходовым клапаном. Клапан приводиться в движение специальным сервоприводом. Упр. напряжение на котором от 2-х до 10В изменяю с помощью ШИМа. Температуру меряю с помощью DS1820 с точностью до 1 градуса,. т.к. большая точность не требуеться.
Есть задача написать ПИД на Си. Для данной задачи достаточно только ПИ-закон. Т.е диф. составляющую не используем.

Вот кусок кода, нарыл в инете и немного доработал, выкинув лишнее. Может быть кто сталкивался с подобной задачей, будет ли такое работать.
Заранее благодарен.

/***************************************

Themp - текущая температура
Themp_Set - установленная температура
delta_Themp - ошибка регулятора задача регулятора держать ее как можно ближе
равной 0.
old_delta_Themp - старый отсчет ошибки регулятора.
S - полный сигнал
I - интегральная составляющая
Kp - зона пропорциональности
Ti - интегральная постоянная
*/

void PID()
{
delta_Themp = Themp_Set - Themp;
I += (delta_Themp + old_delta_Themp)/(2 * Ti);
if(I ‹ 0) I = 0;
else if (I › Kp) I = Kp;

S = (delta_Themp + I) / Kp;
if(S ‹ 0) S = 0;
else if(S › 1) S = 1;
old_delta_Themp = delta_Themp;
}

// Все величины нормированные к единице.
// Td как минимум в десять раз меньше Ti.
Реклама:
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 27.02.2007, 17:19  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

возможно будет.

ПИД есть

в openservo.org с исходниками под WinAVR

в апноуте AVR рассмотреном на avr123.nm.ru/01.htm

а апноутах Microchip.com
AN696 an899 an582 AN937

архив со списком апноутов на avr123.nm.ru/01.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 27.02.2007, 20:17  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Попробовал приведенный выше вариант, и вот в чем загвоздка: ШИМ работает неправильно, при переполнении регистра сравнения таймера, заслонка возвращаеться в исходное положение и начинает закрываться заново. Если я температуру стабилизации выставляю 20 градусов и грею паяльником датчик, то такой процесс замечаеться два раза. Тоже самое если лед приложить и охлаждать датчик. Может быть так и должно быть, а вся проблема в коэффициентах?
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 27.02.2007, 21:22  
renatavr
Временная регистрация
 
Регистрация: 12.10.2006
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
renatavr на пути к лучшему
По умолчанию

Сегодня написал програмку управления эл.нагревателем(ТЭНы), для вентиляции.

Суть такова:
proc=50; - процент нагрева PWM 0..100%
OCRx=proc*2.55;
tic++; // некий программный счётчик считающий до ~10..~500
if (tic›=~10..~500) tic=0;

Процедура:
if (tic==0 & t'C реальная › t'C установленной) { OCRx=проц.открытия клапана вычесть 1% (OCR2=proc--) }
if (tic==0 & t'C реальная ‹ t'C установленной) { OCRx=проц.открытия клапана прибавить 1% (OCR2=proc++) }

Теперь корректность работы зависит от времени реакции нагревателя, т.е. мы можем регулировать длину пересчёта счётчика (tic), при tic=0 происходит пересчёт значения процента(ШИМ), соответственно и плавно подходить к искомому значению...
Чем больше проходит времени между изменениям значения тем меньше будет процент перерегулирования системы.
КАК у настоящего ПИДа.

Тебе же надо начинать со 100% открытия клапана (дорогие нынче калориферы) и плавно его закрывать.
Правильно отстроенный tic не должен даже перерегулировать клапан.
Пусть медленно но верно!

Завтра принесу исходник и если интересно то выложу.
Правда ещо не успел проверить в работе.
__________________
Б.га нет, есть только двоичный код.
renatavr вне форума  
Непрочитано 27.02.2007, 21:43  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Я тэном тоже управляю, использую для этого ШИМ с большим (порядка 50-250 секунд) периодом. В принципе все как у тебя. Очень понравилось. Мо мере приближнния к заданой температуре реле включаеться на меньшие промежутки времени. Это сделано, чтобы не было большого колебательного процесса. тем более, что тэны сильно инерционны.
А здесь нужен ПИД, без диф. составляющей, т.е ПИ-регулятор. Вот о нем и идет речь.


А БОГ есть, но об этом уже в другом форуме
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 27.02.2007, 22:08  
renatavr
Временная регистрация
 
Регистрация: 12.10.2006
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
renatavr на пути к лучшему
По умолчанию

Я упровляю семисторами (BTA26,BTA41 - 26Amper,41Amper) через оптопару (MOC3063).
3 фазы - L1 напрямую, L2 L3 два семистора.
__________________
Б.га нет, есть только двоичный код.
renatavr вне форума  
Непрочитано 27.02.2007, 23:01  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

На счет управления тэнами у меня вопросов нет. Мне сейчас заслонка горит. Управляеться ШИМом. ШИМ поступает на вход ОУ, на выходе которого меняеться напряжение, которое и подаеться на заслонку. Такими приборами лучше всего только с помощью ПИД регуляторов.
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 04.03.2007, 03:48  
omkravets
Частый гость
 
Регистрация: 06.06.2006
Адрес: Украина, Винница
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
omkravets на пути к лучшему
По умолчанию

по теме ПИД-регуляторов посмотрите топик:
https://kazus.ru/forum/topic_849-0-0-asc-.html

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

И еще, время интегрирования нужно выставлять побольше, т.к. время полного хода задвижки достаточно продолжительно.
omkravets вне форума  
Непрочитано 04.03.2007, 12:46  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от omkravets
по теме ПИД-регуляторов посмотрите топик:
https://kazus.ru/forum/topic_849-0-0-asc-.html

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

И еще, время интегрирования нужно выставлять побольше, т.к. время полного хода задвижки достаточно продолжительно.
Смотрел топик, интересный вариант, непонятна толко одна переменная - INTERVAL. Еще все коэффициенты принято держать в типе float или double. У меня На выходе ПИ регулятора значения в типе float от 0 до 1. Я этот результат обрабатываю и запихиваю в регистр сравнения таймера проца, чтобы ШИМ получить.
INTERVAL по моему время квантования, поправте если я не прав. И если прав, то как лучше выбирать это время?

Вот цитата из топика:

"Ну вообще довольно обширная тема...но я использовал простой алгоритм :

signed int pid_control(signed char setpoint, signed char currentpoint)
{
static signed int last_error;
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);
}

Где Kp, Кi, Kd - коэффициенты которые нужно подбирать под конкретную задачу или приблизительно вычислять. Не помню ссылку..но видел сайт с теорие по АСУ - там были все формулы и пояснения".
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 04.03.2007, 14:06  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от omkravets
по теме ПИД-регуляторов посмотрите топик:
ВОТ ЭТО ДА!!! Только сейчас заметил, что omkravets из моего города! Где б еще встретились
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПИД регулятор на AVR ua_gruzin Микроконтроллеры, АЦП, память и т.д 52 22.03.2012 15:52
ПИД-регулятор и Proteus oleg_harp Микроконтроллеры, АЦП, память и т.д 16 01.07.2009 23:37
ПИД регулятор на AVR mishutka Микроконтроллеры, АЦП, память и т.д 40 31.12.2006 03:11
Пид-регулятор и AVR French Микроконтроллеры, АЦП, память и т.д 1 06.10.2004 23:30


Часовой пояс GMT +4, время: 01:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot