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

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

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

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

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

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

Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха.

 
Опции темы
Непрочитано 12.12.2017, 20:26  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Хочу!
Окей, займусь!

А за это я я хочу ответ на вопрос

AR_Favorit вне форума  
Непрочитано 12.12.2017, 20:26  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
А за это я я хочу ответ на вопрос
лови

Сообщение от AR_Favorit Посмотреть сообщение
Внимание, вопрос. Тема же - твои ответы на вопросы? Вот и ответь пажалста на крайне вежливо заданный вопрос:
ЗА КАКИМ ПОЛОВЫМ КУЕМ ты исполняешь это самое включение ПИД-алгоритма строго при определенной температуре ошибки, а не просто при включении нагрева? Для чего ты писал эту самую минимум одну лишнюю строку, выглядящую как с некоей целью введенный костыль??
Я включаю ПИД-алгоритм не с момента пуска, а с некоторого значения температуры ниже температуры уставки только по той причине, что знаю, что нагрев любого тела не может происходить мгновенно, и мне нет смыла программно умничать ПИДом!
Я на 100% уверен, что даже на 100% приложенной к нагревателю мощности, график нагрева будет линейным, изменяясь со скоростью 1-2 градуса в секунду, и начинаю работать ПИДом только тогда, когда мне эту линейность надо изменить, чтобы выйти на заданную температуру без ее превышения!
ALEGYR вне форума  
Непрочитано 12.12.2017, 20:35  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
лови
Я включаю ПИД-алгоритм не с момента пуска, а с некоторого значения температуры ниже температуры уставки только по той причине, что знаю, что нагрев любого тела не может происходить мгновенно, и мне нет смыла программно умничать ПИДом!
Это не объяснение! Ты ввел лишний кусок программы - зачем? Без него же с "умничанием ПИДом" тоже ведь будет работать, и даже не хуже! Ты так орал про "лишнюю ячейку памяти", а сам истратил их несколько. Даже хуже, чем у меня (у меня-то, помнится, в любом случае пересчет бы присутствовал), и ты еще и свое время на написание лишнего кода истратил. Зачем?!
AR_Favorit вне форума  
Непрочитано 12.12.2017, 20:49  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Да не превращается при этом ПИД-регулятор ни во что, дятел ты упоротый, сколько раз тебе повторять? При нормальной работе интегральная составляющая столько не накапливает. А при аномалиях - обрыве ТЭНа, или при заливке во внешнюю емкость сильно охлажденного масла, слишком вязкого и убивающего насос, или неправильной настройке коэффициентов - накапливает, стопорится, а в другом месте программы это воспринимается как аварийный сигнал.
Ну да, ну да! При аномалиях или неправильной настройке коэффициентов вся работа агрегата стопорится, а в другом месте программы поставим костылек и это будет восприниматься как аварийный сигнал! Как будто другое место программы знает, что изменение переменной integral_err прекратилось от аномалии, а не от того что агрегат достиг уставки, и спокойненько выполняет свою работу!
Ведь изменение переменной integral_err происходит либо по условию

if (integral_err‹(EE_PID_TIME*2000)) integral_err += PID_curr_err;

либо по изменению переменной PID_curr_err, которая определяется по формуле

PID_curr_err = EE_FUEL_TARGET_TEMP - temp;

Вы фантазер, батенька!

Последний раз редактировалось ALEGYR; 12.12.2017 в 21:13.
ALEGYR вне форума  
Непрочитано 12.12.2017, 20:50  
stalkernet
Почётный гражданин KAZUS.RU
 
Регистрация: 02.07.2009
Сообщений: 1,110
Сказал спасибо: 1,246
Сказали Спасибо 2,178 раз(а) в 624 сообщении(ях)
stalkernet на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Бля ну наконецто до народа начало доходить... а я уж думал когда это случится. Господа брачующиеся поймите наконец свою главную ошибку. Вы сравниваете два разных регулятора. ОДНОСТОУПЕНЧАТЫЙ с ДВУХСТУПЕНЧАТЫМ!!!!!!!!

одноступенчатый это чистый ПИД!!!
двухступенчатый это обычный позиционный плюс ПИД включаемый при определенном условии!!!!!!!!

тотже чистый ПИД при определенном алгоритме может стать двухступенчатым регулятором. пример разгон идет при Кp › 0 Ki = 0 Kd › 0.(первая ступень) при достижении определенного условия переходит идет уже при Kp › 0 Ki › 0 Kd › 0. (вторая ступень)
stalkernet вне форума  
Непрочитано 12.12.2017, 21:11  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Это не объяснение! Ты ввел лишний кусок программы - зачем?
Это как раз и объяснение! Я в своем коде ввел условие
if (error ›= 20 ){ Output = 255 ; }
чтобы оператором
analogWrite(HEATER_PIN_OUTPUT, Output);
нагревать фен максимально быстро пока температура нагрева не достигнет значения на 20 градусов меньше уставки!
Если я этого на сделаю, то нагревания фена не произойдет, так как управляющий сигнал пида Output равен 0!

Что касается твоего вопроса
Сообщение от AR_Favorit Посмотреть сообщение
ты еще и свое время на написание лишнего кода истратил. Зачем?!
то я истратил СВОЕ время на написание лишнего кода, чтобы сократить время выполнения программы! Я то ведь потрачу свое время только один раз, а бедненькой ардуине придется тратить свое время и силенки всю ее жизнь, пока она будет работать в агрегате!
ALEGYR вне форума  
Непрочитано 12.12.2017, 21:19  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

что касается кефов для моего варианта.

На твоих графиках температура растет строго на 1 градус каждую итерацию алгоритма. Допустим, что это реальный график с твоего устройства (здравый смысл подсказывает, что с таким строгим прибавлением градуса за итерацию - это эмуляция, но я не стану настаивать). Вопрос - а какой период регулирования на твоем графике? 1 секунда? Нагрев с 25 градусов до 190 градусов занимает 165 секунд? ОК. Значит у меня будет EE_PID_TIME = 1

Температура будет в градусах. При необходимости можно пересчитать в десятых долях градуса, но пока для разминки оставим так.

Дальше мы можем заметить на твоем графике один важный момент: выходное значение алгоритма при достигнутой уставке пляшет вокруг величины 155 единиц из 255. Именно эту, или чуть меньшую величину должна давать интегральная составляющая. При достигнутой и устойчиво удерживающейся нулевой ошибке только она ведь и будет давать выходной сигнал.

Поскольку у меня при вышеуказанном периоде регулирования 100% выходной мощности соответствует 1000 единиц, а не 255, как у тебя, пересчитываем твое выходное значение при достигнутой уставке в мое:

155*1000/255 = 607

Интегральная компонента за 165 секунд должна изменить свой вклад в выходной сигнал от 0 до 607.

Среднее значение ошибки за время нагрева составит ((190-25)+(190-190))/2 = 82

165 итераций прибавляют в среднем 82 каждая. Без учета кефов за время нагрева интегральная составляющая накопит 165х82=13530. Это значение, будучи умножено на Ки и поделено на тысячу (у меня же там деление на тысячу) должно дать вышерассчитаное значение 607.
(Ки*13530)/1000 = 607
Ки = (607*1000) /13530 = 44

Мы, благодаря тому, что у нас есть типа экспериментальный график нагрева, получили требуемое значение интегрального коэффициента еще до того, как подобрали пропорциональный. Это потому, что данный коэффициент в твоем случае - важнее пропорционального. Если занизишь Ки, "догревать" до уставки будет слишком долго, если завысишь, будет перерегулирование

А вот теперь мы спокойно подберем подходящий пропорциональный кеф. Тут, конечно, проблема понятная: мы должны обеспечить значение " с запасом" вносимой пропорциональной компонентой величины в выходной сигнал, на начальном участке нагрева, и вовремя "убраться" из процесса, когда подобрались к уставке.

Мы помним, что у нас еще есть вклад интегральной составляющий, ноль в начале нагрева и 607 в самом конце. Например, за 10 секунд до достижения уставки это значение будет 557.

То есть чтобы фен выдавал 100% мощности, нам надо начальном участке нагрева (при ошибке 165) иметь Кп*165›=1000, а за 10 секунд до достижения уставки (при ошибке 10)- уже Кп*10›= 443.

Я предлагаю начать с Кп = 40, Ки = 44, Кд=0.
При этом твою любимую строку
"if (integral_err‹(EE_PID_TIME*2000)) integral_err += PID_curr_err;", разумеется, придется скорректировать, ибо она предназначена для систем с на порядок меньшей интегральной составляющей. То есть кеф 2000 для твоей системы должен быть минимум в 10 раз больше, чтобы "залочивание" аномально большого накопления происходило за пределами возможных при нормальной работе системы значений накопленной интегральной ошибки.

if (integral_err‹(EE_PID_TIME*20000)) integral_err += PID_curr_err; для систем типа твоей.

Вот с такими уставками подключить твой фен к моей конструкции - и будет похоже на истину. Разумеется, на реальном устройстве (да-да, нам обязательно надо реальное устройство) надо будет с ними еще поиграться, и после получения устойчивого и максимально быстрого выхода на рабочую точку можно уже поиграться и с дифференциальной компонентой, тут чисто подбор на объекте, оценить влияние "колебаний воздуха от проходящих мимо людей" на выходную температуру фена я как-то не в состоянии.

Последний раз редактировалось AR_Favorit; 12.12.2017 в 21:51.
AR_Favorit вне форума  
Непрочитано 12.12.2017, 21:21  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Да не превращается при этом ПИД-регулятор ни во что, дятел ты упоротый, сколько раз тебе повторять?
Ну конечно! Это ведь это не ты, а я поумничал и написал

Сообщение от AR_Favorit Посмотреть сообщение
Дифференциальная же составляющая во всем этом веселье может и не участвовать вообще. Более того, ее влияние тут не особо-то и желательно: просто на участках, где скорость нагрева сильно меняется, она будет пытаться в меру заданного ей кефа "прибить" крутизну изменения графика нагрева, причем совершенно безуспешно - инерционность системы такая, что ее влияние будет воспринято гораздо позже того момента, когда оно было применено. И будет скорее вредно, чем полезно. В некоторых реализациях алгоритма даже встречается ее расчет, исходящий из среднего значения производной скорости изменения ошибки за несколько периодов. Извращение-с, но в пределах допустимого.
В итоге правильно настроенный PID-алгоритм в данном случае вырождается в PI-алгоритм,

Последний раз редактировалось ALEGYR; 12.12.2017 в 21:23.
ALEGYR вне форума  
Непрочитано 12.12.2017, 21:27  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Ну да, ну да! При аномалиях или неправильной настройке коэффициентов вся работа агрегата стопорится, а в другом месте программы поставим костылек и это будет восприниматься как аварийный сигнал! Как будто другое место программы знает, что изменение переменной integral_err прекратилось от аномалии, а не от того что агрегат достиг уставки, и спокойненько выполняет свою работу!
Ведь изменение переменной integral_err происходит либо по условию

if (integral_err‹(EE_PID_TIME*2000)) integral_err += PID_curr_err;

либо по изменению переменной PID_curr_err, которая определяется по формуле

PID_curr_err = EE_FUEL_TARGET_TEMP - temp;

Вы фантазер, батенька!
Продолжаешь демонстрировать дебилизм. В другом месте программы не "костылек", моллюск ты двустворчатый, а проверка, не превысило ли накопление в интегральной составляющей вот именно этой самой величины : EE_PID_TIME*2000. Да-да, это служит флагом аварийной ситуации с нагревом. Можно было бы истратить лишнюю ячейку памяти, и поставить флаг непосредственно по месту. Или городить вообще отдельный счетчик времени нагрева, и по его превышению падать в аварию. Но зачем, если у меня есть отличный индикатор, нормально ли идет нагрев, или аномально - интегральная ошибка. До определенных пределов ее накопление соответствует нормальной работе, после определенного предела - свидетельствует об аномалии, а по любой аномалии нагрева надо установку вырубать, ибо Так Хочет Заказчик.

То что ты, тупорылая чувырла, уже полгода не можешь понять, как работает эта строчка - это только твои проблемы.
AR_Favorit вне форума  
Непрочитано 12.12.2017, 21:42  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Это как раз и объяснение! Я в своем коде ввел условие
if (error ›= 20 ){ Output = 255 ; }
чтобы оператором
analogWrite(HEATER_PIN_OUTPUT, Output);
нагревать фен максимально быстро пока температура нагрева не достигнет значения на 20 градусов меньше уставки!
Если я этого на сделаю, то нагревания фена не произойдет, так как управляющий сигнал пида Output равен 0!
Ты идиот штоле? Ах да, я забыл
С какого органа управляющий сигнал ПИДа у тебя будет ноль? при первой же итерации сравнится уставка (190) с ОС (25), посчитается ошибка (165), умножится на твой кеф (30) и залупит выходной сигнал Output по самые помидоры, так, что придется работать ограничителю в конце алгоритма, чтоб насчитанные 4950 превратить в максимально допустимые 255.

Сообщение от ALEGYR Посмотреть сообщение
Что касается твоего вопроса

то я истратил СВОЕ время на написание лишнего кода, чтобы сократить время выполнения программы! Я то ведь потрачу свое время только один раз, а бедненькой ардуине придется тратить свое время и силенки всю ее жизнь, пока она будет работать в агрегате!
О да, тут не поспоришь. Сократил.
Только вместо того, чтобы сократить правильно (убрать идиотские сложения-вычитания-умножения флоатов), ты их все оставил - бедненькая ардуина "сократилась" на менее, чем трех минутах прогрева, а потом оставшиеся от 6-8 минут (твои слова) 3-4 минуты таки бесмыссленно и беспощадно множит, плюсует и вычитает числа с плавающей точкой... чтобы выработать 8-битный, однобайтовый целый, сигнал управления

А еще ты своим "сокращением" повесил себе на шею гирю, значение которой, возможно, ощутишь, когда твое теоретическое устройство начнет принимать формы практического воплощения. Ты на разных участках нагрева сделал разную скорость выполнения программы. Ты сам себе выкопал яму, в которой долго будешь спотыкаться, когда твоя мега по непонятной для тебя причине "вот тут работает нормально, а вот тут пропустила G-код/прощелкала срабатывание концевика/не успела чего-то-там-еще". Если бы ты оставил нагрев с самого начала с ПИД-алгоритмом, твоя программа, всегда вела бы себя одинаково, и когда ей станет не хватать силенок меги тоже и бы не хватало в любом сосо=тоянии одинкаово. А так как ты сделал - не будет.


Резюме. Выгоды от этого решения ноль. Все равно тебе в какой-то момент становится надо считать этот ПИД - так что или ты успеваешь его считать всегда, и мега ворочает дурацкими флоатами вместо пустого цикла, что ей, кстати, по барабану, или начинает не успевать все посчитать (движение фена по квадрату 20х20мм, ага), когда заработал ПИД, и эта ситуация все равно неприемлема. Недостатки этого решения - очевидны.

Внимание, вопрос: так скажи теперь уже правду, зачем ты сделал плохое решение вместо правильного (использовать ПИД всегда?) Если настаиваешь на предыдущем ответе - это точно такая же глупость, что "фен бы грелся медленно". НО может, скажешь уже правду?
AR_Favorit вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wiznet W7100. Общие вопросы R_N Микроконтроллеры, АЦП, память и т.д 7 06.06.2012 00:33
PCAD - вопросы и ответы avr123-nm-ru Proteus, KiCAD и другие ECAD 7 27.01.2011 21:15
Система измерения температуры (на AD8495), вопросы по схеме и реализации spartakchamp Измерительное оборудование 2 15.11.2010 22:04


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


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