Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха. |
20.11.2017, 21:00
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от stalkernet
|
Как раз по мне тут опсуждаются методы преобразования сигналов из аналоговых в цифровые и на оборот, на основании четко описанных законов и методик.
|
Ну это тебе только кажется!
Вообще-то тут обсуждается код программы, который реализует ПИД регулятор для нагрева бачка с маслом, до заданной температуры!
А методы преобразования сигналов из аналоговых в цифровые и на оборот, на основании четко описанных законов и методик, наверное обсуждаются в разделе Микроконтроллеры, АЦП, память и т.д или Цифровые сигнальные процессоры.
|
|
|
|
20.11.2017, 21:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,859
Сказал спасибо: 2,730
Сказали Спасибо 2,674 раз(а) в 1,978 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
Так алгоритм-то выбирает человек, и выбирая его, он на что-то опирается, чтобы выбрать наиболее оптимальный, а не абы какой!
|
Так то оно в принципе и верно.
Надо бы создать математическую модель той системы бачок-нагреватель-датчик, измерить все постоянные времени (с учетом возможного напряжения питания нагревателя и зависимости потерь тепла от температуры), посчитать коэффициенты ПИД регулятора, чтобы получить нужное качество регулирования...
Но, если это не для космического двигателя - можно взять контроллер, что есть под рукой, и пусть себе отрабатывает алгоритм на той частоте, на которую его быстродействия хватает. А коэфф-ты подобрать опытным путем.
Как-то так.
|
|
|
|
20.11.2017, 21:06
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от AR_Favorit
|
А где ты увидел измерение температуры раз в миллисекунду?
|
А я его там и не увидел!
Я увидел, что по первой строке твоего кода
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
измерение температуры производится 1 раз в 100 секунд!!!
|
|
|
|
20.11.2017, 21:12
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от Yuri222
|
Надо бы создать математическую модель той системы бачок-нагреватель-датчик, измерить все постоянные времени (с учетом возможного напряжения питания нагревателя и зависимости потерь тепла от температуры), посчитать коэффициенты ПИД регулятора, чтобы получить нужное качество регулирования...
|
Я надеюсь, что AR_Favorit, именно так и поступил, прежде чем стал писать свой код. Но скорее всего, все это ему указали в ТЗ.
|
|
|
|
20.11.2017, 21:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от stalkernet
|
а если правильно подобрать и период регулирования то можно вобще перейти к целочисленной четной математике. где все делается сдвигами вправо и влево. например умножить на 10 это сдвинуть влево 5 раз. разделить - вправо.
.....
ИМХО такое впечетление что код писал человек умеющий писать только для компа.
|
Код в данном случае писал человек, который читал даташит на тот процессор, который применяет ![Улыбка](images/smilies/icon_smile.gif)
Вот если для восьмибитников эта "четная математика" ещё может пригодиться, то в данном случае она не имеет абсолютно никакого преимущества, так как ядро примененного процессора перемножает два 32битных числа с 32-битным результатом за один такт. Точно так же, как выполняет сдвиг.
Именно поэтому там по тексту стоят постоянно выполняющиеся умножения: при профилировании простейшими подручными средствами (в прерывании от SYSTICK выставляем свободную ножку в 1, в основном цикле по завершении работы всех КА и сброса выставленного в SYSTICK флага, сбрасываем ее в 0) прекрасно видно, что процессор на выполнение "полезного" программного кода тратит намного меньше, чем на тупое ожидание очередного прерывания. Что делает неактуальной экономию десятков наносекунд в ущерб читаемости исходного кода.
Я же говорю - нужно разбираться в вопросе, чтобы рассматривать реальность, а не своё представление о ней. В данном случае - в платформе, под которую написан код. Вы совершенно верно подметили ее избыточность в плане производительности.
Последний раз редактировалось AR_Favorit; 20.11.2017 в 21:29.
|
|
|
|
20.11.2017, 21:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,859
Сказал спасибо: 2,730
Сказали Спасибо 2,674 раз(а) в 1,978 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
Но скорее всего, все это ему указали в ТЗ.
|
Так и правильно это.
Те, кто составлял ТЗ - "механики".
Измерение параметров системы - в принципе их дело.
Более того, и саму основу ("каркас") алгоритма регулирования было бы логично получить от них - спецов в своей области.
Но не удивлюсь, если было и наоборот - пришли, сказали, что нужно, а дальше - вплоть до выбора датчиков и мощности нагревателя - пришлось выбирать исполнителю этого задания.
|
|
|
|
20.11.2017, 21:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
А я его там и не увидел!
Я увидел, что по первой строке твоего кода
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
измерение температуры производится 1 раз в 100 секунд!!!
|
В этой строке нет измерения температуры. Как и в последующих.
А еще эта строка в цикле прерывания с периодом в 1 мс будет отсчитывать "1 раз 100 секунд" только если оператор выставит уставку периода регулирования EE_PID_TIME в значение "100". Но на случай такого глупого оператора программа не даст ему это сделать, ибо период регулирования, исходя из характеристик оборудования (конкретно - определяемой объемом бака и мощностью нагреватля скорости нагрева) можно задать от 1 до 10 сек. Соответственно и значение дданной переменной EE_PID_TIME лежит в этом диапазоне.
|
|
|
|
20.11.2017, 21:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от Yuri222
|
Но не удивлюсь, если было и наоборот - пришли, сказали, что нужно, а дальше - вплоть до выбора датчиков и мощности нагревателя - пришлось выбирать исполнителю этого задания.
|
Там было всё гораздо забавнее. Но к обсуждаемому вопросу отношения не имеет. Скажу только, что изначально вообще не шло речи о ПИДе и вообще управлении нагревателем.)))
|
|
|
|
20.11.2017, 21:34
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от AR_Favorit
|
Цитата:
|
Сообщение от ALEGYR
Цитата:
|
А я его там и не увидел!
Я увидел, что по первой строке твоего кода
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
измерение температуры производится 1 раз в 100 секунд!!!
|
|
В этой строке нет измерения температуры. Как и в последующих.
|
Правильно! Там идет подсчет времени по счетчику pid_counter, и пока его значение на превысит значение выражения EE_PID_TIME*1000 равное 100 секундам, измерения температуры не принимаются во внимание, а расчет управляющего сигнала control не производится!
|
|
|
|
20.11.2017, 21:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
Правильно! Там идет подсчет времени по счетчику pid_counter, и пока его значение на превысит значение выражения EE_PID_TIME*1000 равное 100 секундам, измерения температуры не принимаются во внимание, а расчет управляющего сигнала control не производится!
|
Перестань рассматривать собственные заблуждения вместо моего кода.
EE_PID_TIME*1000 не может быть равным 100 секундам.
EE_PID_TIME*1000 это период регулирования в миллисекундах. Период регулирования в 100 000 миллисекунд для управления нагревателем, поднимающим температуру объекта от начальной до рабочей температуры за 300-600 секунд, использовать не выйдет.
А теперь поясни, почему ты путаешь измерение температуры с применением измеренного (полученного совсем другим участком кода) значения в алгоритме?
Измерение - это процесс, выполняемый АЦП. Там еще есть усреднение и пересчет в кратные степеням десятки единицы. В рассматриваемом участке кода никакого измерения нет. Есть только готовое для использования свеженькое значение, выражаясь в терминах ПИД, сигнала обратной связи.
Последний раз редактировалось AR_Favorit; 20.11.2017 в 21:46.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:11.
|
|