Примерно с год назад Innovate анонсировали MTX-L PLUS и пообещали радикальное уменьшение времени реакции (до 4мс) как по сравнению с своими старыми приборами, так и с приборами конкурентов. Заявление было похоже на сказку - поскольку не смотря на практическую возможность измерять смесь очень быстро (2-3мс), время реакции прибора зависело не только от времени измерения, но и от конструкции самого зонда (в частности лабиринтного поступлении смеси в камеру для измерений).. Естественно я цепляюсь за любую попытку ускорить измерения для нормальной реализации цилиндровой селекции, поэтому при первой же удобной возможности MTX-L PLUS была приобретена и испытана.
Сразу же при включении еще без сенсора была предпринята попытка слить прошивку из бутлоадера (эта возможность есть во всех старых приборах). Попытка закончилась неудачей - переход в бутлоадер при подаче стандартных команд перехода не произошел. Тогда прибор был разобран, а зонд все же подключен и откалиброван:
Чтоб получить время измерения, достаточно просто подключить осциллограф к выходу PA1 микропроцессора атмега64 (в любом приборе innovate) и измерить период качания +Ipump -Ipump в режиме наиболее близком к стехиометрии (DC=50%) т.е. продувая сенсор пропаном из зажигалки. Современные осциллографы выводят период численно - и даже делать ничего не нужно.
Первое же измерение периода (в новом приборе с новым зондом) дало очень хорошие результаты - 2.1-2.2ms. В принципе ничего сильно нового это не несло, для сенсоров LSU4.2 можно было и быстрее - но вот подобные значения для LSU4.9 (а именно им комплектовался прибор) ранее были мной не достижимы - т.е. в новом приборе явно что то было.. Мгновенно была отзвонена и проверенна цепь накачки током ячейки насоса (именно эти резисторы на фото).. Как один из предполагаемых вариантов увеличения быстродействия - форсирование тока накачки, выше заданного в документах BOSCH на LSU4.9 значения:
После занесения измененных номиналов резисторов в модель контроллера описанную в excel - выяснилось что по сравнению с LC-1 ток накачки хоть и изменен - но совсем не значительно, и сделано это больше для экономии на точных резисторах нестандартного ряда применяющегося в LC-1. Ток стал 6.22мА против 6.25мА у LC-1 - и таким образом, этот возможный путь повышения быстродействия прибора не использовался, а значит там использовалось, что то другое.. Что?! Нужна была прошивка! Морально приготовившись уже выпаять Атмегу и отправить ее китайцам, вместе с тремя сотнями баксов, я достал с полки ноутбук с LPT портом на котором под управлением Windows98 работал программатор Avreal.... Три сотни не понадобились - биты защиты, как обычно, не стояли..
Через три часа прошивка стала исходным текстом, полностью компилирующимся с учетом внутренних методов адресации данных - т.е. с возможностью сдвига любых участков и вставок своего кода. Еще через несколько часов все регистры и функции арифметики (включая float) получили свои имена. Сборка прошивки в виде DLD файла могла прошиваться в контроллер штатными средствами от разработчиков (последней версией).
Естественно первым делом был проанализирована причина не входа в бутлоадер. Проблемой оказались две простых команды: разрешения входа в программирование (подается перед входом) и соответственно запрещения входа в программирование (подается из бутлоадера), без подачи последней - прошивка висит в бутлоадере вечно... Софт для слива был поправлен на базе вновь появившейся информации - но пока он не нужен.
Далее проверена вся цепь измерения состава в ПО - там тоже не было каких либо существенных изменений. Т.е. все алгоритмы за мелкими исключениями остались старые и очень близки к LC-2.
Однако было замечено, что изменено очень много фундаментальных констант, так или иначе отвечающих за температуру сенсора - а значит настало время разобраться, как же именно работает его нагреватель, как поддерживается температура и от чего она зависит.
Для того. чтоб получить температуру сенсора, может быть использовано 2 общеизвестных метода:
1) Контроль сопротивления нагревателя. (обычно применяется для области холодных температур - а так же в точке росы для удаления воды с сенсора и предотвращения термального шока).
2) Контроль сопротивления измерительной ячейки (ячейки Нернста) в сенсоре. (обычно применяется в области рабочих температур).
Существуют рекомендуемые сопротивления ячейки Нернста (Rnernst) для поддержания рабочей температуры сенсора - в частности для нашего LSU4.9 это рекомендуемое значение 300 Ом при этом температура керамики сенсора поддерживается примерно на уровне 780 градусов Цельсия.
Однако innovate в нормальной работе не используют ни первый ни второй метод! Они используют гораздо более изящное решение. Дело в том, что две ячейки сенсора расположенные в непосредственной близости друг от друга на одной керамической подложке имеют очень близкие характеристики в целом, и естественно близкий друг к другу температурный коэффициент сопротивления в частности. Это позволяет в регуляторе температуры при рабочем режиме, подменить измерение Rnernst, измерением Rpump поскольку Rnernst очень сложно измерить не внося возмущения в сам механизм измерения состава. В то время как Rpump измеряется элементарно - поскольку, ток накачки Ipump у нас всегда меняется с положительного на отрицательное значение, которое в свою очередь является строго постоянным. При положительном Ipump напряжение на ячейке насоса будет как Upump(+) = Upump(measured)-2.5v при отрицательном Upump(-) = 2.5v - Upump(measured). Поскольку ток через ячейку постоянен и меняется лишь его знак, сопротивление ячейки насоса может быть элементарно рассчитано из разницы напряжений в обеих фазах таких измерений. Таким образом Rpump = ((Upump(+)-Upump(-))/2 /Ipump. Где Ipump константа для LC-1 равная 0.00625А а для MTX-L PLUS 0.00622А соответственно.
Конечно Rnernst LC-1, и все остальные приборы, тоже измеряют. И на это измерение там отведено примерно ТРЕТЬ их схем! И честно напишу - я не знаю как эта часть схемы работает.. Для меня это все сложная аналоговая магия. Но очевидно, что она работает - ибо только благодаря ей возможна калибровка нагревателя сенсора... И я знаю, что определенная подпрограмма возвращает Rnernst, точно так же получая разницу обоих измерений Unernst(+-) прогнанных через магическую схему в которой куча операционных усилителей и переключаемые конденсаторы.
И так мы постепенно подошли к загадочному Heater call. По сути калибровка нагревателя в LC-1 состоит:
1) Стабилизации заданной температуры путем измерения Rnernst и подачи его в ПИД регулятор нагревателя вместе с целевым Rnernst. (при этом используется тот же регулятор что и в основной работе - будет описан ниже).
2) По достижении целевого Rnernst измерения фактического Rpump для сопоставления этих сопротивлений и в дальнейшем получения возможности в сопоставлении заданному Rnernst измеренного в режиме калибровки Rpump и таким образом последующему регулированию температуры на базе этого Rpump .
3) Сохранения targetRpump в eeprom контроллера.
Собственно сразу стоит заметить что в MTX-L PLUS (а в принципе еще и со времен LC-2) innovate избавились от отдельного процесса калибровки нагревателя и нагреватель калибруется при каждом включении прибора. При этом в процедуре калибровки которая стала занимать гораздо меньше времени - поскольку достижение целевого значения Rnernst в общем то не требуется используется метод фильтрации как измеренного Rnernst так и измеренного Rpump на значительном интервале и вычисление дельты между их мгновенными значениями, которая для каждого сенсора в конкретном состоянии будет некоей фундаментальной константой (кстати не очень далекой от единицы) - затем с помощью этой дельты из targetRnernst легко одним умножением получается targetRpump. Однако суть действия примерно та же...
В начальных фазах прогрева обычно нет достоверной информации о температуре и используется так называемый режим регулирования с прямой связью (по модели объекта). Все рекомендации по проходу точки росы и испарению воды с керамики которые есть в мануале на LSU4.9 Y 258 E00 151e от боша конечно же не используются по причине лишнего гемороя в их реализации - потому, что если вы помните первая LM-1 появилась как дешевый и качественный измерительный прибор, а не как "будильник в тачку" - поэтому сенсор должен храниться в чистом и сухом месте при комнатной температуре, а в выхлоп закручиваться после предварительного прогрева дабы не испытывать термальный шок по утру от сконденсированной там нежданно влаги .
По сути участок регулятора с прямой связью состоит из следующих стадий:
1) Выставка начального эффективного напряжения нагревателя и инициализация других переменных алгоритма.
2) Участок с высокой ramprate, где происходит резкий подъем эффективного напряжения нагревателя до некоего заданного значения. (первые 3.2с на картинке).
3) Участок с низкой ramprate (0.4v/s) по рекомендациям BOSCH, протекающий до достижения целевого сопротивления нагревателя Rheat (по сути некоей целевой температуры) (3.2-12.7с) и последующего включения контроля Rnernst.
4) Участок где ramprate сохраняется на прежнем уровне, сопротивление нагревателя больше не контролируется, однако контролируется Rnernst, для достижения целевого значения заданной температуры сенсора (обычно для LSU4.9 300R=780c но в инновейтах обычно оно 200R и меньше) .(12.7-15.7с)
По окончании 4-го участка происходит переход в режим регулирования с обратной связью - в частности на примерах ниже запускается калибровка сенсора.
Вот так все 4 участка а так же следующая за ними калибровка нагревателя выглядят на картинках полученной из логов нашей LC-1F:
То же но с Rnernst (масштаб изменен).
В общем все почти как у Bosch - ну разве что, чуть чуть не так..
Для этого режима используется широко известное решение: Пропорционально Интегрально Дифференциальный регулятор, выполненный в дискретной форме и с частичным введением в схему управления модели объекта. (в частности - с учетом напряжения бортовой сети).
Дискретные формулы PID:
pfactor(n)=error(n)=targetRpump-Rpump(n)
ifactor(n)=ifactor(n-1)+error(n)
dfactor(n)=error(n)-error(n-1)
Vheat(eff)(n) = NominalVeff - (Kp * pfactor(n) + Ki * ifactor(n) + Kd * dfactor(n))
где:
iargetRpump - целевое сопротивление ячейки насоса.
Rpump(n) - сопротивление ячейки насоса измеренное на текущей итерации.
error(n) - невязка текущей итерации регулятора.
Kp Ki Kd - П И Д - коэффициенты регулятора (в разных прошивках кстати разные).
NominalVeff - номинальное эффективное напряжение для достижения номинальной мощности нагревателя. Что то типа этого:
Vheat(eff)(n) - Выходное значение регулятора на текущей итерации.
Кроме этого обычно интегратор (ifactor(n)) ограничивается значениями +- 4.88v но это реализовано только в LC-2 и позднее.
Вычисление DC нагревателя на основе Vheat(eff) происходит по формуле HtrDC% = Vheat(eff) *100% / Ubatt.
где Ubatt - напряжение бортовой сети...
Сначала давайте обсудим проблемы свойственные всем абсолютно приборам innovate которые было необходимо решить исправив прошивку LC-1F а за одно и MTX-L PLUS.
1) Возможно не только превышение длительно допустимого значения температуры нагревателя (12в) но и кратковременного предельного (13в) для которого нормируется 30секунд разово и 200часов наработка. Контроллер теоретически может подать на нагреватель все напряжение питания в принципе на любое время.
2) Учет напряжения бортовой сети ведется не корректно... Точнее он ведется корректно, если бы управляемый параметр был ток. Но в идеале управляемым параметром должна быть мощность нагревателя. Из школьной физики W=U^2/R и следовательно надо внести в формулу расчета DC% квадрат напряжения борт сети, вместо напряжения борт сети.
Обе проблемы можно решить одним махом изменив формулу вычисления DC нагревателя в одной единственной подпрограмме расчета DC. Чтоб не производить существенных изменений в остальном коде и оставить то же значение и размерность входных переменных, формула теперь выглядит так, как на этой картинке:
Тут же можно наблюдать экспериментальную проверку этого варианта - изменение напряжения питания на 2.7 вольта вызвало значительное изменение в HTR DC% при незначительном изменении в входном параметре Vheat(eff) - т.е. теперь регулятору почти не нужно отрабатывать колебания напряжения питания в системе. А ограничение Vheat(eff) значением 13в позволяет никогда не превышать предельно допустимого напряжения на нагревателе. Естественно подобное исправление так же было проделано и в прошивке MTX-L PLUS (именно для этого и нужны исходные тексты).
Было замечено, что иногда (причем не понятно, с чем именно это связано) единичное измерение Rpump выдает ошибочное значение. В принципе измерение Rpump примитивно, как доска - возможно проблематика кроется в целом в механизме измерения (возможной смены состояния порта) или в некорректной работе процедур обслуживания АЦП. или в самом АЦП (разные глюки бывают у микропроцессоров с этими вещами).. Хотя учитывая ,что ошибочное значение как правило соответствует ровно половине от нормального - причина должна где то быть и она должна быть довольно явной. Стоит заметить, что ошибка может быть очень редкой (за 10 минут ни разу) а может и несколько подряд почти выскочить.. На картинке уникальный случай - 2 ошибки в одном экране лога. Так было только один раз - но все же надо с этим что то делать..
И так тут у нас при номинальном Rpump=140 идут выбросы до 70 - т.е. ошибка примерно в 2 раза. В то время как при нормальной динамике соседние измерения не изменяются более чем на 10 дискрет... Чтоб сильно с этим не парится, решено было просто игнорировать измерение Rpump если оно различается на более чем 25% c предыдущим "вниз" и пропускать цикл регулирования. Кроме того на всякий случай решено было игнорировать любое значение Rpump > 500 дискрет в реальности не наблюдающееся. В принципе пропуск одного другого цикла не скажется сильно на работе регулятора. (тем более что как выяснилось там "в стоке" вообще творится тихий ужас - но об этом позже)..
А на этой картинке глюк измерения Rpump наоборот в плюc, причем глюки в минус уже парированы в момент снятия лога, и там четко видно, что это действительно глюк измерения и никакого реального изменения температуры за ним не стоит и с регулятором все ОК а вот глюк в плюс как и следовало ожидать вызвал возмущение в регуляторе и небольшой перегрев от номинала... Что же - внесем еще изменения в прошивку, чтоб убрать и его... 25% порог игнорирования придется расширить и на +.
Если с Rpump - все железно, то с Rnernst - совсем другое дело. Как я уже говорил - там магия. А магия никогда нормально не работает. Поэтому если измерение Rpump в некоторых случаях дает лишь один некорректный выброс параметра за 10 минут, то Rnernst уже может создавать очень серьезные проблемы за 10 секунд калибровки нагревателя. И тут дело не в частоте а в ошибочном значении, которое ну очень велико.
Те кто серьезно работает с этим оборудованием могли заметить, что калибровка с первого раза проходит не всегда. т.е. проходит то она конечно всегда - а вот что именно там накалибруется, это еще вопрос, и в частности, далеко не после каждой калибровки удается пройти "пропановый тест" (линейный рост AFR от min до free air после заполнения камеры пропаном от зажигалки). Посмотрим из за чего так происходит:
Эта проблема решается очень просто - поскольку отрицательные значения (а именно они тут присутствуют) могут быть только в результате отрицательных дельт напряжения, а Rnernst все равно фильтруется и значимыми (подаваемыми в регулятор) являются, не менее 20 подряд суммируемых измерений, то решено было попросту выкинуть из фильтра любое измерение, если оно выходит за границу теоретически возможных значений Rnernst (т.е. превышает 500 дискрет измерения).. В дальнейшем было произведено 10 подряд калибровок нагревателя и все 10 дали результирующее Rpump в пределах 3 дискрет целевого значения - т.е. около 1.5%, это вполне приемлемо. Однако замечено, что калибровка в случае глюков в Rnernst может затягиваться из за остывания сенсора на начальном этапе - возможно стоит входить в режим с чуть более перегретым от необходимого зондом и дальше уже вытягивать PID-ом, однако замедление в общем то особых проблем не представляет ...
На картинках выше при работе нагревателя показан красивый переходный процесс. Это само собой не просто так - коэффициенты Kp Ki Kd к моменту когда были сняты эти логи уже были изменены. Но в процессе этих изменений само собой были сняты логи "как не надо" - опять же при калибровке нагревателя т.е. с Rnernst.. В данном случае коэффициенты значительно превышены от необходимых - т.е. к прошлой проблеме измерения Rnernst мы имеем еще и небольшое перерегулирование. Хотя конечно корректно отработать такой скачок непросто.
Не смотря на то что желаемое Vheat(eff) местами превосходит 50вольт в реальности конечно оно не будет больше 13-ти поскольку в следующей подпрограмме после регулятора будет ограниченно.
Ответ банален - в температуре! Ответ всегда лежал на поверхности но как то и в мысли не приходил - хотите более быструю лямбду значит надо ее просто более горячее греть. Причем по идее скорость будет расти пока она вообще не расплавится..
Целевое Rnernst конца прогрева = 126 (201 в LC-1 для LSU 4.9)
Целевое Rnernst при калибровке нагревателя = 65 (200 в LC-1 для LSU 4.9)
Я честно не готов сказать насколько это горячо - потому, что не совсем уверен что это Омы. Хотя у LSU4.2 очень даже похоже на ее 80 Ом... Предположим, что все же это Омы.
(c) Maxi(РПД) 2017 Копирование материалов ресурса без разрешения автора запрещено.