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

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

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

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

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

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

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

 
Опции темы
Непрочитано 20.11.2017, 23:51  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Откуда ты берешь 100 секунд-то? Пальцем покажи.
Показываю пальцем:
Сообщение от AR_Favorit Посмотреть сообщение
А еще эта строка в цикле прерывания с периодом в 1 мс будет отсчитывать "1 раз 100 секунд" только если оператор выставит уставку периода регулирования EE_PID_TIME в значение "100". Но на случай такого глупого оператора программа не даст ему это сделать, ибо период регулирования, исходя из характеристик оборудования (конкретно - определяемой объемом бака и мощностью нагреватля скорости нагрева) можно задать от 1 до 10 сек. Соответственно и значение дданной переменной EE_PID_TIME лежит в этом диапазоне.
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Уже третий день мается, болезный.
omercury вне форума  
Непрочитано 21.11.2017, 01:29  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Откуда ты берешь 100 секунд-то? Пальцем покажи.
Я эти 100 секунд взял предположив, что будем производить расчет пида 10 раз в секунду! То есть принял что EE_PID_TIME = 100 мc (см первое сообщение темы, в котором написано
Сообщение от ALEGYR Посмотреть сообщение
EE_PID_TIME = 100 мc
Если я возьму твои значения EE_PID_TIME, которая раньше была CONST_PID_TIME и равнялась 1 секунде (см цитату из ТВОЕГО сообщения

Сообщение от AR_Favorit Посмотреть сообщение
Исторически так сложилось. Изначально планировалось жестко задать период регулирования, и на месте EE_PID_TIME был токен CONST_PID_TIME, определенный как
Цитата:
Код:
#define CONST_PID_TIME 1 //период регулирования в секундах
для того, чтобы подобрать его при отладке под параметры установки заказчика.
и твое заявление
Сообщение от AR_Favorit Посмотреть сообщение
В этой строке нет измерения температуры. Как и в последующих.
А еще эта строка в цикле прерывания с периодом в 1 мс
то твоя первая строка кода

if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;

вообще будет ждать расчета пида не 100 секунд, а целых 1000!

Ведь прерывание ты делаешь с периодом 1 мс (то есть 1000 раз в секунду), твой счетчик ожидания расчета пид pid_counter должен достичь значения 1000000
то есть переменную EE_PID_TIME равную 1 секунде (указанную в #define EE_PID_TIME 1 //период регулирования в секундах) в перевести в 1000 миллисекунд и умножить на 1000!!!

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

Сообщение от ALEGYR Посмотреть сообщение
Я эти 100 секунд взял предположив, что будем производить расчет пида 10 раз в секунду! То есть принял что EE_PID_TIME = 100 мc (см первое сообщение темы, в котором написано
То есть ты, не поняв двух операндов в одной строчке кода, один из которых (EE_PID_TIME) задает период регулирования в секундах, а второй (1000) переводит это значение в миллисекунды для сравнения со счетчиком pid_counter, ведущим отсчет в миллисекундах, и проигнорировав неоднократно данное пояснение, что переменная (уставка) EE_PID_TIME может принимать только значения от 1 до 10, начал городить заведомую ерунду:

Сообщение от ALEGYR Посмотреть сообщение
твоя первая строка кода
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
вообще будет ждать расчета пида не 100 секунд, а целых 1000!
Уже и 1000 секунд, Карл!

Мы берем 1 (единицу! точно такую же единицу, которой была CONST_PID_TIME!), умножаем ее на 1000 (тысячу), и получаем число, до которого счетчик, тикающий каждую миллисекунду

Сообщение от ALEGYR Посмотреть сообщение
Ведь прерывание ты делаешь с периодом 1 мс (то есть 1000 раз в секунду)
должен натикать...... за 1000 секунд! Миллион!

Ты как в магазине с такой арифметикой рассчитываешься, а? Единицу умножили на тысячу и получили миллион!

Еще раз, медленно и печально.

Переменная EE_PID_TIME - период регулировки в секундах.
Переменная EE_PID_TIME, умноженная на 1000 - период регулировки в миллисекундах.

Счетчик, инкрементируемый в прерывании, вызывающемся каждую миллисекунду, отсчитает от 0 до 1*1000 за одну секунду.

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

Сообщение от omercury Посмотреть сообщение
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Ну какая же это неточность в объяснениях, если в ТЗ указано

Сообщение от AR_Favorit Посмотреть сообщение
период регулирования, исходя из характеристик оборудования ... можно задать от 1 до 10 сек. Соответственно и значение дданной переменной EE_PID_TIME лежит в этом диапазоне.
и в программе объявлено и даже выделено
Сообщение от AR_Favorit Посмотреть сообщение
#define CONST_PID_TIME 1 //период регулирования в секундах
ALEGYR вне форума  
Непрочитано 21.11.2017, 01:53  
Марья-2
Почётный гражданин KAZUS.RU
 
Аватар для Марья-2
 
Регистрация: 26.06.2010
Адрес: Минск
Сообщений: 1,511
Сказал спасибо: 917
Сказали Спасибо 1,275 раз(а) в 488 сообщении(ях)
Марья-2 на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

AR_Favorit, как у Вас только хватает терпения

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

Сообщение от omercury Посмотреть сообщение
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Была б там неточность, я б еще понял. Но сначала он долго выясняет, зачем-зачем-зачем EE_PID_TIME в программе умножается на тысячу, а затем, когда вроде как всё разжевано, берет значение EE_PID_TIME, умножает его на тысячу в уме (), затем еще раз на тысячу в программе, и получает миллион, до которого мой бедный счетчик должен досчитать. Прям слава богу, что я его 32-битным объявил, а то был бы 16-битный - никогда бы не досчитал, ни за тыщу смекунд, ни за миллион лет)))

Я не знаю, может я очень плохо объясняю? Прям как в том анекдоте - "сам уже понял, а они нет". Скажите кто-нить со стороны, неужели настолько плохо? Я же неоднократно умудрялся людям, не позиционирующим себя программистами, но желающими стать таковыми (в определенных пределах, хотя бы той же ардуины) , объяснять такие элементарные вещи, и они вроде бы как понимали. )))
AR_Favorit вне форума  
Непрочитано 21.11.2017, 01:57  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Ну какая же это неточность в объяснениях, если в ТЗ указано

и в программе объявлено и даже выделено
ДА!!! В секундах! Отлично! Одна секунда, две секунды, три секунды.... до десяти.
А счетчик у нас тикает каждую миллисекунду - в одну секунду набегает ровно тысяча тиков.

И мы берем секунды - одну, или две, или пять, -умножаем их на эту тыщу, и получаем то самое количество тиков, которое должен протикать таймер для отсчета заданного времени: тыщу, или две тыжи, или пять тыщ. Откуда у тебя взялся миллион, до которого ему надо дотикать? Ну откуда?! Покажи "я вот это умножил на вот то".
AR_Favorit вне форума  
Непрочитано 21.11.2017, 02:12  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от Марья-2 Посмотреть сообщение
AR_Favorit, как у Вас только хватает терпения
Плоховато хватает

Но мне жутко интересно, это настолько невскрываемый троллинг, или человек пишет всерьез?!

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

Сообщение от AR_Favorit Посмотреть сообщение
Мы берем 1 (единицу! точно такую же единицу, которой была CONST_PID_TIME!), умножаем ее на 1000 (тысячу), и получаем число, до которого счетчик, тикающий каждую миллисекунду
Так понимаешь в чем дело, если тебе в ТЗ указано, что регулирование производится в диапазоне от 1 до 10 секунд, то и надо исходить из этого. Перевел ОДИН раз данные вводимые оператором из секунд в миллисекунды, запомнил их в ЕЕПРОМе, и ЗАБЫЛ о всех умножениях в своем коде!!! записав

if (pid_counter ‹ EE_PID_TIME) pid_counter++;
или
if (heat_counter › EE_PID_TIME) heat_counter=0;

А если еще и таймер прерывания можно задать этим значением, то и саму первую строку вообще можно убрать, вместе со счетчиком pid_counter и строкой pid_counter = 0;
написав
Цитата:

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;
PID_prev_err = PID_curr_err;//конец

if (control›heat_counter) HEAT_ON; else HEAT_OFF;
heat_counter++;
if (heat_counter›(EE_PID_TIME) heat_counter=0;
ALEGYR вне форума  
Непрочитано 21.11.2017, 02:43  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Так понимаешь в чем дело, если тебе в ТЗ указано, что регулирование производится в диапазоне от 1 до 10 секунд, то и надо исходить из этого.
Регулирование и производится в диапазоне от 1 до 10 секунд, какие претензии?

Сообщение от ALEGYR Посмотреть сообщение
Перевел ОДИН раз данные вводимые оператором из секунд в миллисекунды, запомнил их в ЕЕПРОМе, и ЗАБЫЛ о всех умножениях в своем коде!!!
Можно сделать и так, а можно сделать, как я. А при определенной организации программы в результате компиляции вообще не будет этих умножений, несмотря на то, что в исходном тексте они есть. И в любом случае результат исполнения данного кода корректный, и ни о каких "думающих 100 секунд бачках" речи не идет. Это ты понимаешь или нет? Это вопрос, прочти название темы и ответь.

Сообщение от ALEGYR Посмотреть сообщение
А если еще и таймер прерывания можно задать этим значением
А если бы у бабушки были яйца, она пожарила бы яичницу.

Вот эта часть

Код:
if (control›heat_counter) HEAT_ON; else HEAT_OFF;
heat_counter++;
if (heat_counter›(EE_PID_TIME) heat_counter=0;
В твоей пародии на мой код нормально работать уже не будет. ШИМ-сигнал с периодом 1-10с превратился в пшик. Вот так вот.

Последний раз редактировалось AR_Favorit; 21.11.2017 в 02:50.
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, время: 04:47.


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