Akakiy 1 18 ноября, 2004 Опубликовано 18 ноября, 2004 · Жалоба Может кто нибудь видел сишные исходники ПИД регулятора. Хотчется глянуть как народ решает эту задачку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 22 ноября, 2004 Опубликовано 22 ноября, 2004 · Жалоба Хотчется глянуть как народ решает эту задачку. Не только читали, но и писали. ;) А что ж в этом такого сложного - в этой хорошо известной формуле ? Берем ее - и вперед ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 23 ноября, 2004 Опубликовано 23 ноября, 2004 · Жалоба Есть классная книга - "Искусство программирования на С" (Хэффлд, Кирби). Там есть все, что надо. Если трудно достать, то на сайте Diasoft (www.diasoft.kiev.ua) можно скачать диск с исходниками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gek 0 13 января, 2005 Опубликовано 13 января, 2005 · Жалоба Есть классная книга - "Искусство программирования на С" (Хэффлд, Кирби). Там есть все, что надо. Если трудно достать, то на сайте Diasoft (www.diasoft.kiev.ua) можно скачать диск с исходниками. <{POST_SNAPBACK}> Море интересных тем, но мне нужен доступ на фтп. Про цифровой пид регулятор тоже интересно, кто бы чего поподробнее выложил. Например так ..... Чтобы реализовать эту функцию управления в цифровой вычислитель-ной машине, должно быть выполнено квантование непрерывной функции в соответствии с периодическими замерами значения ошибки с последующим расчетом регулирующего воздействия. Соответствующее уравнение, являю-щееся основой для решения на цифровой вычислительной машине, имеет вид (3.3): . Q(n)=Qf(n)+Qi(n)+Qd(n) (3.3) где: Q(n) – расчетное значение регулирующего воздействия в момент квантования n; QP(n) – значение пропорциональной составляющей регулирующего воздействия в момент квантования n; QI(n) – значение интегральной составляющей регулирующего воздействия в момент квантования n; QD(n) – значение дифференциальной составляющей регулирующего воздействия в момент квантования n; Модифицированное уравнение имеет вид (3.4): . Q(n)=Kc*e(n)+Ki*{сумма от i=1 до n}e(i) +Qнач+Kd*(e(n)-e(n-1)) (3.4) где: Q(n) - расчетное значение регулирующего воздействия в момент квантования n; KC - коэффициент усиления контура регулирования; e(n) - значение ошибки регулирования в момент квантования n; e(n-1) - предыдущее значение ошибки регулирования (в момент квантования n-1); KI - коэффициент пропорциональности интегральной составляющей; Qнач - начальное значение регулирующего воздействия; KD - коэффициент пропорциональности дифференциальной составляющей; .... ну и дальше в таком же духе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veter 0 3 февраля, 2005 Опубликовано 3 февраля, 2005 · Жалоба почему все стремяться к таким сложностям? есть же решения, которые проще настраиваются Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артемка 0 4 февраля, 2005 Опубликовано 4 февраля, 2005 · Жалоба почему все стремяться к таким сложностям? есть же решения, которые проще настраиваются <{POST_SNAPBACK}> Например? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veter 0 4 февраля, 2005 Опубликовано 4 февраля, 2005 · Жалоба решали задачу управления процессом аустенизации патрубков после сварки, поддержка температуры трубы на 1000 градусах сначала вдарились в ПИДрегулирование - настраивали такой регулятор месяца два. ничего не выходило - при выходе на режим наблюдался выброс на 100 град, а если его убрать (в смысле выброс )- до 1000 доходил аж за 7-10мин. к нам подошел ответственный за работу и говорит: сделайте пока в релейном режиме - дошла Т до уставки вырубайте, снизилась врубайте. - таким методом достигли точности установки примерно в 20 градусов потом попробовали итерационный алгоритм. первый выброс не более 20 град, поддержка Т - +-5Град. а коэффициентов всего два 1 - частота съема показаний с датчика, 2 - шаг одной итерации. потом разогрев по прямой делали, тоже никаких проблемм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gek 0 7 февраля, 2005 Опубликовано 7 февраля, 2005 · Жалоба Мда... Нужно было лучше Теорию Автоматического Управления учить тут интересный материал http://www.telesys.ru/wwwboards/mcontrol/8...ages/3748.shtml объявления signed int mem_UPR, mem_DAT;float R_E1[3], U_E2[2]; формулы R_E1[0] = (float) (mem_UPR - mem_DAT);U_E2[0] = C0 * R_E1[0] - C1 * R_E1[1] + C2 * R_E1[2] + U_E2[1];U_E2[1] = U_E2[0];R_E1[2] = R_E1[1];R_E1[1] = R_E1[0]; R_E1 - разность между управляющим напряжением и напряжением обратной связи U_E2 - управляющее воздействие C1, C2, C3 из коэффициентов ПИД считаются так. mem_UPR - измеренное управлющее воздействие в кодах АЦП mem_DAT - измеренное напряжение обратной связи в кодах АЦП Эти коды в приниципе надо привести к вольтам, но можно и в коэффициентах учесть. C0 := Kp + ((Ki * T) / 2 ) + Kd /T;C1 := Kp + (2 * Kd) / T;C2 := Kd / T; Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие -------------------- То что приводил я выше взято из документации к логическим контроллерам фирмы siemens simatic s7. В принципе работает, но хочу попробовать новый алгоритм Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 7 февраля, 2005 Опубликовано 7 февраля, 2005 · Жалоба сначала вдарились в ПИДрегулирование - настраивали такой регулятор месяца два. ничего не выходило - при выходе на режим наблюдался выброс на 100 град, а если его убрать (в смысле выброс )- до 1000 доходил аж за 7-10мин. <{POST_SNAPBACK}> Что значит "убрать" ? Убрать переригулирование до 0 или до 20 градусов это разные получатся времена. Да, дело известное. Это "интегратор виноват ". Тут можно рекомендовать применить разные параметры ПИД - регулятора для первоначального нагрева и для регулирования в установившемся режиме. (Теоретически можно поэкспериментировать с уровнем насышения интегратора. Это тоже может (могло) помочь.) В общем, при первоначальном нагреве - релейный алгоритм, при выходе на режим - ПИД. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veter 0 7 февраля, 2005 Опубликовано 7 февраля, 2005 · Жалоба Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие а как выбирать их значения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gek 0 9 февраля, 2005 Опубликовано 9 февраля, 2005 · Жалоба Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие а как выбирать их значения? <{POST_SNAPBACK}> Вот я и говорю, что лучше нужно было ТАУ изучать Остается только опытным путем. Т беретется самым минимальным, сколько можно достичь, остальными коэффициентами играться. Вот тут без графиков переходных процессов не обойтись. Строишь график измеряемой переменной и смотришь веоичину перерегулирования, колебательность и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 10 февраля, 2005 Опубликовано 10 февраля, 2005 · Жалоба а как выбирать их значения? Что то тут можно почитать: http://www.dian.ru/sh_autm.html Автор этой статьи предлагает такую методику: 1. Отключаем все звенья, кроме ПЭ. 2. Увеличиваем Кп до тех пор, пока не появятся колебания. Это и будет - Кп. 3. Измеряем период (частоту) этих колебаний. 4. Выбираем Tдиф = ~ этому периоду. Это значит, запас по фазе будет 45 градусов, что достаточно. 5. Выбираем Tинт = ~10 * Tдиф. 6. после параметры можно еще уточнить используя: http://members.vicard.net/sensor/main1_10.htm :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergag 0 14 марта, 2005 Опубликовано 14 марта, 2005 · Жалоба а как выбирать их значения? Не уверен, но по-моему, стоит посмотреть программы по автонастройке контуров. Например, www.ExperTune.com. Она есть у меня немного вылеченная :) Если возражений не будет, то в ближайшее время сброшу (где-то 8 МБ). А также посмотри www.atm.h1.ru - очень подробно говорится о настройке регуляторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 33 14 марта, 2005 Опубликовано 14 марта, 2005 · Жалоба Приблудилось из Сети. /* . position = ReadPlantADC(); drive = UpdatePID(&plantPID, plantCommand - position, position); DrivePlantDAC(drive); . */ typedef struct { double dState; // Last position input double iState; // Integrator state double iMax, iMin; // Maximum and minimum allowable integrator state double iGain, // integral gain pGain, // proportional gain dGain; // derivative gain } SPid; double UpdatePID(SPid * pid, double error, double position) { double pTerm, dTerm, iTerm; pTerm = pid->pGain * error; // calculate the proportional term // calculate the integral state with appropriate limiting pid->iState += error; if (pid->iState > pid->iMax) pid->iState = pid->iMax; else if (pid->iState < pid->iMin) pid->iState = pid->iMin; iTerm = pid->iGain * iState; // calculate the integral term dTerm = pid->dGain * (position - pid->dState); pid->dState = position; return pTerm + iTerm - dTerm; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergag 0 17 марта, 2005 Опубликовано 17 марта, 2005 · Жалоба Поможет или нет - не знаю, но посморите форум http://forum.cta.ru/forum_posts.asp?TID=758&PN=1 - там обсуждали настрйку регуляторов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться