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

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

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

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

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

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

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

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

Кстати о интегральной составляющей, и о заблуждениях НЕ крутого кодера!

Читаем сообщение
Сообщение от AR_Favorit Посмотреть сообщение
Может быть, ты просто не понимаешь, как работает приведенный тобой кусок кода, и как использовать его? И именно поэтому, несмотря на то, что программная конструкция, как отчетливо видно на графике, прекрасно без костылей умеет выдавать максимальное значение и при 20 градусах рассогласования, и при 10, и явно бы делала это при куда бОльших значениях при начале нагрева, где ты почему-то отстраняешь ее от работы, ты пишешь бред про "умничать пидом в начале нагрева"?
А я ведь знаю, почему у тебя так. Когда ты включал ПИД сразу, у тебя интегральная компонента по мере зашкаливала и выдавала дикое перерегулирование. А подобрать правильное ее ограничение и коэффициенты ты не смог. Поэтому использовал костыль: при включении за 10-20 итераций до достижения уставки интегральная составляющая просто не успевает накопить слишком много, и работает как должна в паре с пропорциональной. Вместо того, чтоб настраивать ПИД, ты подобрал время его включения
и читаем код
Цитата:
PID_curr_err = EE_FUEL_TARGET_TEMP - temp;//Начало
if (integral_err‹(EE_PID_TIME*2000)) integral_err += PID_curr_err;
control = (int32_t)EE_PID_P*PID_curr_err;
control += (integral_err*(int32_t)EE_PID_I)/1000;
control -= (PID_prev_err - PID_curr_err)*(int32_t)EE_PID_D;
И пространное сообщение, и код программы написаны НЕ крутым кодером, который думает что он понимает что-то в интегральной составляющей и в самом пиде!
А на самом деле он нихрена не понимает, путая сено с соломой!!!

Ведь если интегральная составляющая integral_err определяется выражением

integral_err += PID_curr_err;
а PID_curr_err; выражением
PID_curr_err = EE_FUEL_TARGET_TEMP - temp;
где
EE_FUEL_TARGET_TEMP - это КОНЕЧНАЯ ТЕМПЕРАТУРА НАГРЕВА(ГРАДУСЫ)
PID_curr_err - это ТЕКУЩАЯ ОШИБКА РАССОГЛАСОВАНИЯ (ГРАДУСЫ)
EE_FUEL_TARGET_TEMP - это температура пусть равна 1000 градусам
temp - это текущая температура нагреваемого тела (ГРАДУСЫ)

то если понимать чем оперирует программа (абстракциями или физическими величинами) можно спокойно выкинуть не очень умное сравнение if (integral_err‹(EE_PID_TIME*2000)) , записанное во второй строке кода


Ведь даже если максимальное значение текущей ошибки рассогласования будет составлять 1000 градусов, и греть мы будет 1000 секунд, то максимальная значение суммы ошибок рассогласования НЕ ПРЕВЫСИТ 1 000 000 (одиного миллиона) за 1000 секунд!!!
А это значит, что для хранения интегральной составляющей вполне хватит регистра в 32 разряда, и его даже не нужно будет искусственно ограничивать!!!
Ведь он же переполнится только еще через 4294 таких же сумм ошибок!!!
То есть греть бочок с маслом до 1000 градусов с ошибкой в 1000 градусов, и с выборкой пида 1 раз в одну секунду, можно непрерывно в течении 4294967 секунд, или 71582 минут, или 1193 часов, или 49 суток!!!

Правда занятно!
Мы греем бачок всего до 75 градусов,в течение 300-600 секунд и боимся что он быстро переполнится выйдя на уставку, когда интегральная составляющая integral_err в худшем случае будет дополнятся 1-2 градусами каждую секунду, а в лучшем сулучае оставаться без изменений!!!

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

Сообщение от omercury Посмотреть сообщение
Значит можно и до 190.
Можно и выше! И не сгорает!!!
Ведь в 3D принтере ардуине приходиться греть и экструдер до 220-240 градусов, и стол до 110! да еще крутиться и вертеться!!!
ALEGYR вне форума  
Непрочитано 22.11.2017, 03:04  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
если понимать чем оперирует программа (абстракциями или физическими величинами) можно спокойно выкинуть не очень умное сравнениеif (integral_err‹(EE_PID_TIME*2000)) , записанное во второй строке кода
Ты в своем стиле, как я вижу)))
Пытаешься комментировать то, чего не понимаешь, и получается, как обычно, полнейший ламерский бред.

Сообщение от ALEGYR Посмотреть сообщение
А это значит, что для хранения интегральной составляющей вполне хватит регистра в 32 разряда, и его даже не нужно будет искусственно ограничивать!!!
Ведь он еще же переполнится только еще через 4294 таких же сумм ошибок!!!
То есть ты снова, абсолютно не понимая, как работает ПИД-алгоритм, приписал мне свои фантазии:

Сообщение от ALEGYR Посмотреть сообщение
боимся что он быстро переполнится

Открою тебе страшную тайну, чайник, до которой ты и сам бы мог допереть, если бы присмотрелся, на каком уровне ограничивается накопление интегральной составляющей: это ограничение совсем НЕ для того, чтобы "переменная не переполнилась". Это ограничение нужно для того, чтоб за то время, пока бачок наберет температуру, интегральная составляющая не начала вносить слишком большой вклад в выходное значение ПИДа. Которое приведет к перерегулировке, к выбросу. Не понимаешь? Таргет греется 600 секунд - в интегральной составляющей накопилось 600 средних значений ошибки за это время. И дальше два варианта: либо при разумном значении интегрального коэффициента это накопленное значение будет удерживать выходной сигнал на максимальном или близком к нему уровне, что приведет к очень сильной перерегулировке, либо мы выберем настолько малый коэффициент интегральной составляющей, что перерегулировки не случится - но при этом интегральная составляющая у нас не будет способна реагировать на изменение внешних условий.

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

Смотри внимательно, неуч, я для тебя специально жирненьким выделил:


Цитата:
Код:
bool PID::Compute()
{
if(!inAuto) return false;
unsigned long now = millis();
unsigned long timeChange = (now - lastTime);
if(timeChange›=SampleTime)
{
/*Compute all the working error variables*/
double input = *myInput;
double error = *mySetpoint - input;
double dInput = (input - lastInput);
outputSum+= (ki * error); //Вычисление той самой интегральной компоненты

/*Add Proportional on Measurement, if P_ON_M is specified*/
if(!pOnE) outputSum-= kp * dInput;// участок кода, у тебя не выполняющийся - изобредение автора алгоритма

if(outputSum › outMax) outputSum= outMax;     //То самое ограничение максимального значения интегральной компоненты 
else if(outputSum ‹ outMin) outputSum= outMin; //То же самое в отношении  отрицательного значения 

/*Add Proportional on Error, if P_ON_E is specified*/
double output;
if(pOnE) output = kp * error;                //Вычисление пропорциональной компоненты
else output = 0;

/*Compute Rest of PID Output*/
output += outputSum - kd * dInput;   //Вычисление дифференциальной компоненты и суммирование компонент в выходной сигнал

if(output › outMax) output = outMax;
else if(output ‹ outMin) output = outMin;
*myOutput = output;

/*Remember some variables for next time*/
lastInput = input;
lastTime = now;
return true;
}
else return false;
}
Или автор сего кода боится, что у него "переполнится" аж флоатная переменная outputSum, или он, хоть и ардуинщик, но всё-таки хотя бы немного, но знает то, что знаю я, и чего вообще не знаешь ты.

PS ограничение у него, кстати, вдвое жестче моего, у меня оно 2 х максимальный выходной сигнал ПИД, у него на 1 х максимальный выходной сигнал. Для универсального кода это немного неправильно - следовало предусмотреть отдельные переменные для ограничения именно данного параметра. В некоторых случаях интегральной компоненте требуется больше свободы. Но если использовать только для нагревателей - пойдёт.

Еще вопросы есть?

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

Сообщение от ALEGYR Посмотреть сообщение
Можно и выше! И не сгорает!!!
Ведь в 3D принтере ардуине приходиться греть и экструдер до 220-240 градусов, и стол до 110! да еще крутиться и вертеться!!!
Есть видео, как она вертится? (с)

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

Сообщение от AR_Favorit Посмотреть сообщение
Открою тебе страшную тайну, чайник, до которой ты и сам бы мог допереть, если бы присмотрелся, на каком уровне ограничивается накопление интегральной составляющей: это ограничение совсем НЕ для того, чтобы "переменная не переполнилась". Это ограничение нужно для того, чтоб за то время, пока бачок наберет температуру, интегральная составляющая не начала вносить слишком большой вклад в выходное значение ПИДа. Которое приведет к перерегулировке, к выбросу.
Если бы ты не умничал о пиде, а понимал его, то ты бы знал, что для регулировки вклада интегральной составляющей в управляющее воздействие служит интенгральный коэффициент, который в твоем коде обозначен буковками EE_PID_I!!!
Если тебе хочется уменьшать влияние интегральной составляющей, ты просто уменьшаешь его, а если хочется увеличить вклад интегральной составляющей в управляющее воздействие control, то увеличиваешь его! Хочешь совсем удалить влияние интегральной составляющей, то обнуляешь его!
смотри свою строку control += (integral_err*(int32_t)EE_PID_I)/1000;

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

Сообщение от omercury Посмотреть сообщение
...хотя у тебя получилось:
Сообщение от ALEGYR Посмотреть сообщение
ардуина греет фен до 190 градусов за ТРИ минуты
Значит можно и до 190.
Ну тут понятно - нагревателю стола пид просчитай в флоатах, нагревателю экструдера (не понял, правда, что он там экструдит у ТС) просчитай, температуру фена просчитай, G-коды из входного потока выцепи и во флоаты переведи, а потом эти флоаты опять же посчитай, да еще двигателями покрути и поверти, бедную ардуину пришлось гнать до частот повыше СТМных, чтоб все успевала. ОТсюда и нагрев!
AR_Favorit вне форума  
Непрочитано 22.11.2017, 03:29  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

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

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

Сообщение от ALEGYR Посмотреть сообщение
Если бы ты не умничал о пиде, а понимал его, то ты бы знал, что для регулировки вклада интегральной составляющей в управляющее воздействие служит интенгральный коэффициент, который в твоем коде обозначен буковками EE_PID_I!!!
Если бы ты не был настолько некомпетентным в рассматриваемом вопросе, то не тупил бы таак по-черному и не путал регулировку этого самого вклада с ограничением его максимальной величины.

Сообщение от ALEGYR Посмотреть сообщение
Если тебе хочется уменьшать влияние интегральной составляющей, ты просто уменьшаешь его, а если хочется увеличить вклад интегральной составляющей в управляющее воздействие, то увеличиваешь его! Хочешь совсем удалить влияние интегральной составляющей обнуляешь его!
смотри свою строку control += (integral_err*(int32_t)EE_PID_I)/1000;
Да-да! Чтобы корова меньше ела и давала больше молока, ее надо меньше кормить и больше доить!

Простофиля, возьми бумажку, карандаш, и посчитай.

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

2) какой нужен в твоей системе интегральный коэффициент, чтобы за время прогрева от стартовой до целевой температуры в даннйо компоненте накопилось бы примерно столько, сколько у тебя выдает ПИД при целевой температуре.

3) рассчитанный в п.2 кеф вставь в свою программу вместо нынешнего "9.0" и понаблюдай, как долго будет доползать до уставки фактическая температура.

Блин, просто непередаваемый кретин.

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

Сообщение от ALEGYR Посмотреть сообщение
Экструдер экструдит пластмассовую нить до температуры плавления.
А я думал экструдить = выдавливать.

Выдавливатель выдавливает пластмассовую нить до температуры плавления.

Где траву берешь?
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, время: 07:27.


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