Сегодня мы поговорим об очень важной теме — мониторинге положения электронной дроссельной заслонки.
Технология Drive by Wire (управление по проводам) является ведущей концепцией при проектировании систем управления транспортных средств вот уже более 20 лет. Практика реализации этой концепции для легковых авто приводит нас к использованию для управления ДВС электронной педали и электронной дроссельной заслонки (Egas). В этом году в мире было продано 77 миллионов легковых автомобилей — так или иначе абсолютное большинство из них имеет на борту Egas. А в целом в эксплуатации, находится более миллиарда единиц таких авто. Сегодня я расскажу вам, на чем основана безопасность этой системы, и почему мы каждый день доверяем свою жизнь системе, которая не доверяет ничему — даже самой себе. И почему на самом деле "тойота не убивает нас". Эта статья будет наиболее полезна инженерам по проектированию систем безопасности и прочим юным ардуинщикам.
Для примера я возьму систему Bosch ME7.5 образца 1998 года, систему 20-ти летней давности, но в таких вещах как концепция безопасности ее возраст со временем лишь только делает ее лучше, ведь с каждым годом, ее безопасное поведение только подтверждает верность заложенных в нее идей. Но перед этим будет небольшое лирическое отступление.
Большую помощь нам оказали специалисты Porsche в выборе конструкции замка боковой двери. Они похвалили замок, разработанный нашим конструктором В. Епишиным, отметив его простоту и компактность, но посоветовали всё же принять замок фирмы Bomoro. Особо отметив при этом, что в нём запирающий элемент удерживается вторым подвижным элементом наподобие борцовского приёма «захват».
Разговор простым не получился. Я возразил, что в нашем замке запирающий элемент подпружинен, поэтому он никогда не отойдёт от запираемого элемента.
Тогда начальник КБ механизмов г-н Колель положил пальцы на край стола и сказал: «Представьте себе, что пальцы – запирающий элемент, а стол – запираемый. Ведь при движении автомобиля происходит вибрация (он поёрзал пальцами), и ваш запирающий элемент может от края стола отойти».
Я повторил, что запирающий элемент нагружен пружиной и поэтому он не сдвинется. Г-н Колель28 сказал: «А вибрация?». И вновь поёрзал пальцами.
Я опять не согласился.
Тогда он и задал вопрос:
– Вы гарантируете, что Ваш замок не откроется, скажем, один из тысячи?
– Да.
– А один из 10 тысяч?
– Да.
– А один из 100 тысяч?
Я подумал: «В год будем выпускать 220 тысяч автомобилей 2108. И надо быть твёрдо уверенным, что даже на одном-единственном из этих автомобилей замок не откроется самопроизвольно».
А мой оппонент не торопит и добавляет:
– Учтите, что в Америке вы тоже собираетесь продавать свои автомобили, а там судебный процесс стоит очень и очень дорого. Был такой случай, когда у владельца автомобиля Porsche-911 пассажир на повороте выпал из автомобиля и погиб. В конце концов нам удалось всё же доказать, что замок двери не мог открыться самопроизвольно. Фирма Porsche этот процесс выиграла, но каких трудов это стоило! (том 2й "Выской мысли пламень" из истории разработки восьмерки)
Концепция безопасности EGAS- свод правил и алгоритмов обеспечивающих такое поведение системы, которое в случае нештатной или нечеткой ситуации позволяет минимизировать или вообще исключить человеческие жертвы и повреждения. Практически все серьезные техногенные катастрофы современности (будь то "Чернобыль", или "Cаяно-Шушенская ГЭС") в своей первопричине имеют либо нарушение концепции безопасности, либо плохую концепцию безопасности by design, либо совокупность обоих этих сущностей. Применительно к нашему случаю концепцией безопасности мы будем считать некий набор правил, реализованный посредством программно аппаратных средств системы управления двигателем, позволяющих избегать неконтролируемого открытия электронной дроссельной заслонки а следовательно — неконтролируемого увеличения скорости автомобиля, и таким образом травмирования или гибели участников движения, либо повреждения как самого автомобиля так и других транспортных средств на дороге.
С точки зрения концепции безопасности EGAS наша система управления может находиться в 3-х состояниях:
1) Рабочем (или аварийном по некритичным датчикам) — в котором абсолютно корректно производится управление электронной заслонкой с формальным доказательством этой корректности. Электронная заслонка принимает нужные положения в зависимости от желаемого момента двигателя и происходит постоянный непрерывный мониторинг исправности всех компонентов и корректности реализации законов ее управления .
2) Аварийном по Egas — с наличием критической ошибки в датчиках исполнительных механизмах или алгоритмах системы Egas. Когда у системы по тем или иным причинам недостаточно информации для корректного управления электронной дроссельной заслонкой. В этом режиме напряжение с электродвигателя заслонки снято. Пружиной механически заслонка приводится в home position — обороты двигателя 3000-4000 и можно очень медленно ехать с небольшой нагрузкой. такой режим называется LIMP HOME.
3) Режим циклического сброса ЭБУ — произошел очень серьезный отказ в железе или ПО ЭБУ. Двигатель запустить не возможно в принципе. Автомобиль может ехать по дороге разве что только на стартере или веревке.
Выбор в качестве безопасного поведения движения с низкой скоростью или полную остановку — не универсальный вариант. Например остановка на перекрестке или, что гораздо хуже — на пересечении с железной дорогой, явно будет не совсем правильным выбором реакции на отказ какого то элемента. Однако при выборе стратегии инженеры руководствовались не значительностью вероятности одновременного отказа и события пересечении путей железной дороги. Но все же следует помнить об этом — и стараться не переезжать через переезд или перекресток, если вы не можете в случае непредвиденной остановки быстро покинуть автомобиль и отойти на безопасное расстояние…
Надеюсь вы уже знаете (было в предыдущих частях), что данная система управления построена на базе так называемых "моментных моделей двигателя" — это класс систем в которых центральным управляемым параметром является момент двигателя и так или иначе, все управление, идет в терминах либо момента (численное значение на том или ином узле) либо эффективности (% от разницы моментов между узлами системы либо возможными ее состояниями). Да и вообще все управление двигателем у нас по сути сводиться к простой формуле — момент либо растет, либо падает, либо остается неизменным.
Теперь к делу. Для начала давайте посмотрим на нашу систему с точки зрения источников запросов на увеличение или уменьшение момента извне.

Выше вы видите примитивную блок схему основных компонентов ЭСУД c EGAS. Сразу можно отметить, что все датчики участвующие алгоритме исходя из нашей стратегии безопасности специально сделаны избыточными, это сделано исключительно для надежного обнаружения отказов, а вовсе не для их парирования. Кроме того, датчики сделаны таким образом, чтоб могли быть обнаружены абсолютно любые типы отказов. Например: на дорожке 1 положения педали, сигнал растет от 0.5в до 4.5в при нажатии на педаль, сигнал же на 2й дорожке при этом падает от 4.5в до 0.5в. Состояние педали тормоза вообще передается 2-ми сигналами разной полярности и 3-м сигналом в виде сообщения по шине CAN от блока ABS. Таким образом мы можем обнаруживать отказы типа обрывов или коротких замыканий сигналов на другие сигналы, или искажений показаний в результате износа дорожек. Железно тоже все надежно — контакты в разъемах цепей этих датчиков выполнены исключительно с покрытием клемм золотом, а все провода не имеют соединений и подключены точка-точка… Так же имея два сигнала с разными показаниями, мы можем выбрать то значение положения которое для данного компонента будет наиболее безопасным по цепи запроса (меньшее для педали) или наоборот наиболее опасным по цепи реализации (большее для дросселя). Т.е. предполагать самый худший случай развития событий аварии системы.
И так у нас есть несколько источников запроса момента. — Запрос драйвера на увеличение момента — выполненный в виде электронной педали акселератора. Запрос драйвера на торможение (уменьшение момента) — в виде сигнала педали тормоза и этот сигнал имеет более высокий приоритет в цепи запросов момента — если будут нажаты обе педали — такое состояние называется brake override и машина будет тормозить. Запрос от системы круиз контроля и запрос от других источников (например система MSR или ЭБУ АКПП)…
Впрочем, про то как Egas у нас устроен "снаружи" давно есть 100500 статей — давайте лучше смотреть, как он устроен внутри, этого то вам мало кто расскажет.

И так как видите — микроконтроллеров в этой системе ДВА. Основной в котором работает все ПО ЭБУ — в качестве него у нас Сименс 80с167. И вспомогательный так называемый микроконтроллер монитора, в качестве которого используется моторола 68HC05. Микроконтроллеры находятся в постоянном взаимодействии друг с другом, в постоянном круговороте байт, использующихся для проверок друг друга и самопроверок. В основе этих проверок лежат т.н. цепи Маркова.
Из блок схемы так же можно видеть, что каждый микроконтроллер независимо от другого, аппаратно, может снять питание с драйвера привода электронной дроссельной заслонки и таким образом любой микроконтроллер независимо от другого может перевести систему или в режим аварийной работы или в режим сброса.
Сам драйвер (мост из 4-х полевых транзисторов для управления DC мотором) тоже не совсем простой — на его борту имеется схема контроля истинности, это логическая матрица на которую заводятся все входы и выходы драйвера, для одной лишь единственной цели — сформировать сигнал ошибки. Сигнал ошибки формируется при любой проблеме истинности (несоответствии фактических напряжений на выходе драйвера логике сигналов на его входе). Он может определять пробой своих транзисторов или силовое замыкание проводов выходов на двигатель привода заслонки на +12 или землю. Этот сигнал ошибки немедленно сбрасывает ЭБУ т.к. это очень серьезная неисправность которую нельзя парировать ничем.
Раз уж мы заговорили о сбросе — давайте посмотрим как ASIC CC650 формирует сигналы сброса микроконтроллеров в различных ситуациях (вообще он много чего еще делает но сейчас нас интересует лишь эта его функция).



Тут можно видеть, что любой сброс, будь то программный или аппаратный инициированный любым источником, так или иначе распространиться на все микроконтроллеры и исполнительные устройства в ЭБУ. При этом все они обязаны перейти в неактивные состояния. Так же видно, что сбросить систему может или чип питания (при аварии питания) или любой из микроконтроллеров.
И так с сбросами все понятно. Программы в контроллерах стартовали — и мы начнем с самых простых вещей. Должны пройти тесты ОЗУ-ПЗУ… В ПЗУ должно находиться то, что мы туда положили. А ОЗУ должно быть исправно — поэтому при каждом включении питания и первом запуске ЭБУ обязательно производится тесты всех областей ОЗУ и ПЗУ в обоих микроконтроллерах, для ПЗУ cчитается CRC32 а ОЗУ заполняется набором данных в виде собственных адресов в прямом и инверсном виде. Любая неисправность на этом этапе проверки в любом из микроконтроллеров снова ведет за собой программный сброс! Если эта неисправность не может быть устранена после сброса — ЭБУ не запустится, поскольку будет находиться в постоянном циклическом сбросе. Таким образом сразу исключаются варианты запуска программы при серьезном аппаратном дефекте памяти. Вещи казалось бы очень простые — но они позволяют сразу избежать огромное количество проблем. Один дефектный байт в памяти и поведение программы может стать абсолютно непредсказуемым. Поэтому этот вариант надо сразу исключить еще на этапе запуска программы. Мы ведь не доверяем нашей памяти…
Проверки выполнены, память вроде в норме — стартовало наше ПО на уровне 1, собственно операционная система реального времени ERCOS, сам алгоритм управления двигателем включая алгоритмы контроля положения заслонки и вся диагностика датчиков и исполнительных механизмов, логика обхода отказов, обмены по CAN шине — в общем все, что нужно, чтоб двигатель работал. Можем ли мы доверять этому ПО?! Конечно нет! Дело в том, что это реально непознаваемая уйма говнокода — там реально есть функции в 20 экранов с 10-ками тысяч глобальных переменных, и 10-ками тысяч таблиц калибровочных данных, списки задач в растрах ОС не влезают в несколько экранов текста. Мы не доверяем этому коду! Мы не доверяем программистам которые его пишут. И компилятору которым его собрали — мы тоже не доверяем! Поскольку корректность работы всего этого кода не возможно обеспечить никакими методами в принципе — да это собственно и не нужно. Нужно, чтоб дроссель не открывался если не нажали на педаль! Поэтому в ПО ЭБУ введена небольшая полностью инкапсулированная область памяти, где располагается специальная программа — монитор. Это программа, которая на нашей картинке обозначена как "программа мониторинга на уровне 2". Цель этой программы — контроль запрашиваемого извне и фактического моментов двигателя (как и все ПО в ЭБУ программа монитора так же реализована в терминах "момента") и реакция если фактический момент больше допустимого с учетом некоего заданного порога в точности и времени.

Программа выполняется в 10мс растре ОС однако все ее функции распределены по 4-м последовательным растрам, для полного выполнения всех задач программы мониторинга микроконтроллеру требуется 40мс. Проектное время реакции в худших условиях — 400мс. Т.е. всего лишь 0.4 секунды есть у системы на то, чтоб сойти с ума разогнать вас до опасной скорости и ударить об столб. (боюсь например в современной вялой егазной калине за 0.4 секунды не получится даже понять, что что-то вообще попыталось куда-то там ускорится, да и 1.8 турбо — хоть и по резвее, но особо даже не раздуется на своей ТД03)… Программа мониторинга написана таким образом, что не использует абсолютно никаких библиотек основного ПО — мы им не доверяем. Она имеет все строго лишь необходимые ей копии библиотечных функций в своем собственном участке памяти. Программа использует укороченные изолированные калибровки системы, строго для своего функционирования, в 8-ми битном представлении, и в масштабе 3D таблиц 8x8, c интерполяцией. Большинство расчетов так же идет в размерности 8 бит. Причина проста — программе не нужен точный ответ на ее вопросы. Ей нужно быстрый! Ведь если у вас допустимый момент 90% а фактический момент 100% — то вообще ничего страшного не происходит. Другое дело если запрос момента 10% а фактический момент 90% — это уже беда, и на это надо реагировать, а чтоб это понять и реагировать, достаточно и копий калибровок в усеченном виде и расчетов в 8-ми битных пространствах значений.
Из блок схемы назначение каждого модуля должно быть понятно. Наверно стоит объяснить, что такое "мониторинг реакции на ошибки"… Дело в том, что у нас на этом уровне вообще любая реакция на ошибку — заставить систему отключить силовые каскады драйвера электронного дросселя, но сами на этом уровне, мы отключить их не можем — поскольку управление этим портом находится на уровне 1 в основной программе, она кстати тоже может отключить дроссель, если ей, что то не нравится, и у нее более развитая и полная система диагностики. Но есть одна проблема — мы не можем ей доверять! И мы не доверяем! Активируя этот запрос, выставкой бита B_i_ska_um — в следующем цикле выполнения программы монитора, через 40мс, мы проверим непосредственным чтением из порта, что основная программа выполнила нашу вежливую и настойчивую просьбу и силовые каскады драйвера Egas действительно отключены — и если это вдруг не так, вся система будет мгновенно сброшена командой swrst, в результате чего, на аппаратном уровне прекратиться вообще какое либо управление. Это и будет нашей "реакцией на реакцию".
Теперь немного о том, чего нет на блок схеме — конечно при каждом старте запускается тест ОЗУ. Но даже если ОЗУ исправно — где гарантия. что мы в нашей программе прочитаем оттуда то, что сами туда положили? вдруг пока исполнялся говнокод 1-го уровня какая то зараза взяла и модифицировала нашу внутреннюю переменную из программы монитора, или тяжелая заряженная частица не вовремя пролетела через корпус нашего микроконтроллера. Для работы нам надо создать цепь доверия нашим переменным… Для этого все переменные программы мониторинга мы будем хранить в виде двух копий — прямой (суффикс _um в названии) и инверсной (суффикс _ur в названии) и по возможности по дальше друг от друга, при этом в любой момент когда нам надо получить значение переменной мы читаем сразу обе копии приводим инверсную к прямой через XOR и сравниваем их. В случае обнаружения любой разницы в них — силовые цепи Egas отключаются немедленно. Причем мы храним аж в 3-х местах признак того, что Egas должен быть отключен.
Далее опять тест ПЗУ! Да в самом начале при запуске мы уже тестировали и ОЗУ и ПЗУ — но это было давно и не правда и тому тесту мы не доверяем и поэтому при каждом старте монитора раз в 40мс ПЗУ тестируются заново — но только лишь очень небольшие области буквально в 3кб которые занимает сам монитор и его библиотеки и калибровки. Потому, что корректность работы монитора в отличие от основного ПО уровня 1 должна быть обеспеченна в каждом конкретном случае — а это значит мы должны проверять память связанную с кодом и данными на уровнях 2 и 3 непрерывно перед выполнением программ из нее.
Выполнение программ говорите? а оно есть — это выполнение?! Мы вообще доверяем операционной системе ERCOS? конечно нет! Тогда как мы поймем, что программы на нашем втором уровне — вообще выполняются?! Вдруг операционная система халявит и пропускает весь растр 10мс. А что если какая то атомарная функция из нашей программы мониторинга начала выполняться и вдруг по каким то причинам управление было прервано и она "сделала" лишь на половину то, что должна была сделать?! Что-же — самое время разобраться с этим вопросом. Но сначала давайте поймем, как идеи, предложенные гениальным математиком Марковым в конце 19-го века, были применены в ЭБУ в конце века 20-го и в конечном счете, как они не дают проклятой тойоте нас убивать в веке 21-м…
Формально цепью Маркова можно считать ряд чисел, в котором каждое следующее число связано с предыдущим неким определенным законом — такой ряд например может быть сгенерирован в генераторе псевдослучайной последовательности. Марковским процессом в нашем случае мы будем считать ряд из цепи событий с неким исходом так же связанным лишь с начальным состоянием системы и с тем, что события происходят.
И так наши микроконтроллеры непрерывно общаются. Настало время понять — "о чем"… Собственно "ума" у 68HC05 не особо много — поэтому и "лексикон" у него бедноват. Маленькая старая и очень надежная 8-ми битка — маленькая масочная программа, написанная на ассемблере. Собственный кварцевый резонатор. Он может лишь послать нам некий "запрос", получить некий "ответ" и на основе этого ответа сделать далеко идущие выводы, в виде реакции на аж 2-х своих ногах выходах. Еще у него есть один вход который выбирает режим — нормальный или "flash programming mode" но об этом позже. Сначала разберемся, что же именно он шлет в основной MCU и что от него в итоге хочет получить.

А шлет он нам всего то 4-х битное число. Младший нибл 8-ми битного сдвигового регистра, используемого как генератор псевдослучайной последовательности по простому закону. На это число мы должны послать ему ответ… И ответ может быть верным или не верным. Таблица истинности у запросов и ответов определяющая верность тоже очень простая:

Что же будет если ответ верный — да в общем то ничего. Разве что внутренний счетчик ошибок уменьшится на единицу, пока не достигнет нуля.
А вот если ответ не верный или не получен по каким то причинам — счетчик ошибок увеличится сразу на три единицы. Дальше все зависит от содержимого счетчика. Значение >10 приводит к активному ESENSM(ESRST) и драйверы ЭБУ включая Egas будут отключены, значение >13 — сброс системы сигналом SWRST_SM. Собственно все…
Ну и раз уж начали, тут же опишем спец режим "Flash programming mode" — в него система переходит, когда обновляется микропрограмма основного контроллера. Делается это переводом порта P3.5 в состояние логической единицы. "Запросы" при этом не подаются и система не может быть сброшена MCU монитора — однако, чтоб не нарушать нашу концепцию безопасности в этом режиме сигнал ESENSM активен, и таким образом драйверы мотроника включая драйвер электронной дроссельной заслонки аппаратно отключены. Кроме того, если каким то образом обороты двигателя не = 0 — система принудительно покидает режим программирования flash, сбрасывая P3.5 и процесс отправки запросов и получения ответов как и собственно "мониторинг" возобновляется…
Давайте посмотрим как выглядит наша коммуникация 2-х микропроцессоров во времени в растре ОС 10мс.

Да а какой вопрос то мы решали? — ах да. Мы не доверяем ОС, и не понимаем выполняет ли она нашу программу мониторинга… Собственно весь геморой с обменом и 2м процессором для этого нам и нужен. Из полученного числа от генератора ПСП контроллера монитора мы сформируем цепь доверия!

И так наша первая Марковская цепь событий. У нас есть 28 атомарных функций мониторинга (n=28) в нашей программе мониторинга второго уровня и есть некое 16-битное значение в uma_res на выходе после 4-х последовательно выполненных 10мс растров. Так вот, в случае если все 28 функций были корректно начаты и корректно завершены (последовательность значения не имеет) — для каждого из 16 входных значений существует лишь одно выходное в пространстве 16-ти бит (одно из 65536) которое будет верным. Все остальные — ложны (что то не было выполнено, либо не было завершено)! "Декодер ответа" сопоставляет прямым сравнением 16 верных значений и выдает микропроцессору монитора ответ в соответствии с таблицей истинности запрос ответ (хотя сам ее не содержит).
А я говорил, что процессору мы тоже не доверяем?
Нет конечно на каком то уровне мы не можем не доверять процессору. Как процессор с мертвым ALU может нам CRC32 то корректно посчитать, он дальше теста ПЗУ не пойдет. но не все в процессоре так или иначе в ALU происходит. Умножение деление обычно в процессоре в виде отдельных модулей довольно автономных реализовано. Что если в нашей кремниевой технологии есть какой то дефект? что если этот дефект проявит себя через много много лет? Что если это случится в модуле умножителя? Можем ли мы доверять учебнику математики, где пишут что 2*2=4 — а то вдруг как приказом минобраза укажут, что 5 уже давно — эээ стопэ стопэ…
Именно поэтому в формирование части ответа введены умножение и деление на константы. По сути эти константы приводят к тому, что MEND_C=UFM_PTR*7 но если умножение и деление "сломались" — правильного ответа в цепи событий мы не получим. (и скажу вам по секрету — этот процессор на самом деле разрабатывали те, кто эту концепцию писал, и они знают что делают).
И так мы получили в процессор монитора верный ответ — теперь мы точно знаем, что наша программа монитора выполняется, что наш основной процессор как то там вроде бы работает. Мы точно знаем, что на 1-м уровне нас не просто слышат, но и слушаются. Но выполняется ли сам наш монитор правильно?! Можем ли мы сейчас доверять _сами себе_?! своей собственной, компактной, и понятной на все 100% программе?! ну короче — вы поняли ответ… Настало время нам надо создать цепь доверия своей программе. Как вообще программисты понимают, что своей программе можно доверять? Ну наверно они создают системы тестирования с некоторыми векторами ожидая на выходе получить какие то конкретные данные связанные с этими векторами, значит и мы сделаем то же самое.

Уровень 2' — в нем мы выполняем АБСОЛЮТНО ТОЧНУЮ КОПИЮ нашей программы монитора уровня 2, использующую те же самые калибровки, только вот на вход ее мы подаем не настоящие параметры для мониторинга, а специально подготовленные 16 наборов из тестовых данных (находятся в тех же калибровках по соседству), включающих абсолютно все "входы" в разных комбинациях, причем комбинациях, характерных как для "нормальной работы системы" так и для "сбоев" (копия в виде B_i_ska_uc=1 в этом случае должна отобразить реакцию на сбой). Все выходы мы просто суммируем и посылаем в тот же декодер ответа. Как и в случае проверки выполнения в пространстве из 65536 возможных вариантов у нас будет лишь 16 валидных для каждого из 16 возможных на входе, которые будут проверены в декодере ответа прямым сравнением. Верные ответы можно получить лишь в одном случае — если все функции монитора 2d-3d lookup, математика, интерполяции, значения калибровочных данных и тестовых векторов, реакции — работают корректно. Таким образом по сути ответ формируется из пространства возможных значений в 32 бита и только единственное значение будет верным для каждого случая.
Совсем забыл сказать — мы еще кварцевому резонатору не можем доверять… Хотя нет — кварцевому резонатору можем. Они обычно или работают, или дохлые совсем. а вот регистрам определяющим коэффициенты деления в таймере для модуля сравнения-захвата и системе времени в целом — нет… Однако, сейчас сможем — и схема доверия так же будет базироваться на Марковской цепи — только теперь цепь будет от нас скрыта в межпроцессорной коммуникации. Т.е мы вообще для этого ничего делать не будем — оно само собой получится.
На самом деле мы передаем наш 4-х битный код, в виде импульса строго определенной длинны, собственно "код" и определяет его длину. Ответ так же получаем импульсом. И отклонение длинны этого импульса более чем на 2% во времени даст нам уже либо "другой код" (а это провал) либо вообще не валидный код из запрещенного диапазона — а это со стороны основного процессора сразу без вопросов — сброс. Так что кварцу мы тоже теперь доверять можем… По крайней мере, если для 2-х кварцев в 5 сантиметрах друг от друга какие то одинаковые физические воздействия не приведут к строго одинаковому дрейфу их частоты… А какие воздействия? ну не знаю. Атомный взрыв например. Можем ли мы доверять системе в условиях когда в непосредственной близости атомный взрыв?! Конечно нет… ведь никаких "нас" там уже нет.
Ну пожалуй на сегодня хватит писанины, устал я чего то — пойду на хабр почитаю о том как ардуинщики светодиодиками своими мигают… вдруг идеи какие интересные появятся… Хотя особо смысла нет туда ходить — хабрадауны опять мне карму слили — тупые валенки.
Что можно почитать про инциденту c тойотой (не содержит бреда, эмоций, фантазий и домыслов):
1) ETCSi_Report_Sept242012.pdf
2) nhtsa.gov/staticfiles/nvs…f/NASA_report_execsum.pdf
Ну а вас поздравляю с новым годом. Увидимся в 2020.
P.S.
Есть такие коробочки — обманки на педаль.
Когда вы чуть нажимаете педаль коробочка на некоторое время формирует 100%-но валидный по обоим каналам датчиков положения педали сигнал о том, что педаль нажата в пол…
А потом через некоторое время она возвращает его к норме…
Каждый раз когда вы прикоснулись к педали она делает это…
и каждый раз через некоторое время обратно возвращает…
Приятных снов…

Комментарии 94
Привет. Прочитал про моментную модель управления двигателя у тебя. Если например установить другой распредвал, ресивер или просто расточить гбц. Возьмем бош например начиная от 7.9.7. Сможет ли он сам настроиться более менее оптимально? Понятно что инженерный эбу (например январь) + шдк дадут значительно больше КПД.
Что ты понимаешь под "сам настроится"? нет он не "настроится сам" под другой распредвал. Другое дело, что есть рынок лоховских распредвалов которые ничего не меняют в моторе по сути, но стоят денег, для впаривания владельцам таких самонастраивающихся мозгов.
У боша вроде на самообучнии многое завязано. Под другой вал это слишком конечно, согласен.
Если я правильно понял. Моментная модель это берут эталлоный двигатель, насилуют. Находят его момент во всем диапазоне и берут за 100%. Если например расточить гбц, поставить облгченную шпг или увеличить объем. Вырастит момент также на всем диапазоне. С электронными дросселем ещё блок сможет худо бедно подогнать под изначальный момент, но если дроссель механический… Нагрузка будет 100%, но потребление воздуха вырастит, соответственно фактически момента будет больше.
На январе проще, там пцн в основном нужен. Работа идёт больше по дмрв. Хотя моментная модель бош для стока работает явно лучшее, мягче, тише, приёмистей.
Нет понял не верно.
это нормально — надо перечитать еще раз.
Вкратце, есть бош, мех дроссель, увеличен объём двигателя. Как себя будет ввести бошик?
Никак не будет — у него моментное управление только на ХХ.
А с егаз полностью моментное?
На рабочих режимах работает также по дмрв? Он все равно пересчитывает в расчетную нагрузку и получает/подгоняет фактическую.
Опять же — нет. Он ничего не подгоняет.
Тогда какой смысл делать в пересчет RL. Цилиндровый баланс это конечно плюс. Потому что разброс по цилиндрами неизбежин. Я даже вижу особого смысла погнять шпг по весу грамм в грамм. Может для 10 т оборотов может ещё и есть смысл, либо для гонок где один два заезда требуется от двигателя.
Смысл не в этом вообще… Читайте текст пока не поймете.
Читал, не только тут. Значит я не понимаю вообще. Кстати у января реакция на педаль быстрее, чем у боша.
У меня есть мнение, что ничего идеального в мире не существует, можно вводить сколько угодно систем безопасности и концепций безопасности, но имхо уже слишком тяжело разбираться в том, как работают эти готовые системы. Причем настолько тяжело, что уже не известно что лучше = вытаться реверсить, или разрабатывать свои костыльные велосипеды. Наверно попытка чтения/адаптации и настройки rusEfi будет уже не самым плохим вариантом…
Если есть желание ездить на железе сопливом настолько, что его производители позиционируют его как "чип для мп3 плееров" и продают их за доллар мешок а среда его разработки настолько убогая, что ее даже не продают а просто раздают всем желающим — то можно конечно пытаться адаптировать и настраивать русефи. Если есть желание ездить на нормальном коде и нормальном железе сделанном профессионалами — то надо конечно заниматься строго заводскими ЭБУ.
уместен принцип: отклоняя, предлагай.
ide и rtos для stm32 — понятны и признаны сопливыми, равно как и сами камни. Что тогда? keil за 5000 евро с древними камнями c166?
я не сказал что надо купить кейл…
но очевидно же, что продукт за 5000 евро на 3 порядка превосходит сопливое бесплатное на STM32.
(на самом деле нет — кейл для бомжей там юзается tasking и стоит та копия — не выговоришь! и конечно она есть).
у st есть еще те же допиленные грабли в виде автомобильного семейства mcu — SPC5, "Safety Critical Applications & Motor Control", относительно доступны (от 600 руб при покупке 1 камня), активно ставятся в заводские блоки управления подушками безопасности spc560p50l3, значит по каким то критериям сам производитель выбрал именно эту платформу. Денег за open source IDE Eclipse и SPC5 Studio не просят, техническая литература публикуется, библиотеки и rtos готовые :)
Само по себе IDE и яп — имхо чисто инструмент, уже столько всего было, блокноты/vim, борланд делфи, VS, Qt creator, android studio … в рот наоборот = даже для PHP сейчас используются свои IDE. Бабушка в одной из компаний на старой машине с XP до сих пор использует мою программу печати конвертов на delphi, хотя она уже давно переделана мной на c++ и qt и может запускаться на linux. Просто это сборище костылей и велосипедов работает :)
В автомобильном ЭБУ и электронике я как минимум хочу разобраться, с протоколами, разобраться с применяемыми алгоритмами управления (за что Вам огромное спасибо), попытаться модифицировать старые ЭБУ мазды (схемы не нашел, маркировки ряда микросхем не читаются вообще), а ставить январь везде не горю желанием.
Хочу свой велосипед :)
Спасибо за статью! Многое я не понял, но очень интересно) После ее прочтения у меня появились вопросы.
1)Умеет ли М74.5 адаптироваться к тюнингу так же как Бош?
2)Если на сток 21127 поставить валы с ровным ХХ и ресивер сток1.8Xray, будет ли это работать оптимально без настройки?
3) Можно ли компенсировать настройку ЭБУ бензином с большим ОЧ (98-100)?
1) я не знаю ответ — мне не интересно изучать алгоритмы М74.5!
2) если валы такие же не едущие как сток — конечно будет…
3) не понял этого вопроса. Вы имеете ввиду применение бензина с большим ОЧ ВМЕСТО настройки ЭБУ?!
Да, я имел ввиду для случая с легким тюнингом без настройки, если смесь окажется бедной, сдвинуть порог детонации, или, возможно, это бессмысленно
Смесь то у вас лямбда сама отрегулирует. Там вопрос устойчивости ХХ и углов.
Спасибо за информацию)
В статье по ссылке про ДХ вместо потенциометров на педали тайоты после 2007г. Это как? Ну и в общем то, вот это -www.drive2.ru/o/b/522363406901052438/, я так думаю, теоретически, способно помочь тайоте убивать старушек?
Я же говорю — японцам сказали как надо… они не поняли!
Нельзя ставить ДХ в педаль — это нарушение концепции безопасности.
Не могут в педаль на резисторах нужной надежности — надо купить у тех кто может…
(практически на тойотах которые якобы кого то убили никаких дефектов элементов системы не было подтверждено и в тестах UA не удалось воспроизвести).
Хорошая статья. Спасибо.
Но, основываясь на ковырянии кода ленивых узкоглазых, в частности, Субару (ЭБУ Денсо) — с 2003 по 2019 года есть нюанс.
Несмотря на окулиард сложных проверок, в том числе, со вторым процессором, — нет самой простой.
Значение нажатия педали водителем (именно первичное значение процента нажатия педали в оперативной памяти) до 2005-2006 года даже не проверяется по инверсной копии. Более того, эта самая инверсная копия даже не делается.
А с 2006 года — только по инверсной копии и проверяется. Причём, начали раньше проверять (ещё в начале 2005) именно на USDM-рынке, наплевав на Европу и JDM. С 2007 — проверяют везде.
Надо ли говорить, что инверсная копия одна, и её значение вычисляется ровно один раз в функции обработки сигналов с АЦП педали газа?
Никаких "перепроверить по вольтажу с сенсоров ещё раз" — нет. Даже в 2019.
Соответственно, Субары с е-газом 2003-2005 года — потенциально опасные. После 2006 — чуть менее. Но, йож (йапонец) — птица гордая, пока не пнули — не полетит. Видимо, долго не пинали.
Зато на Denso у JLR — проверки идут постоянно. И адекватно. Но там и бюджет разработки другой был и занималась этим Denso Aeromotive, а не автомобильное подразделение (которое runaway тойотами и нарушениями MISRA славится).
Блин просто чудики не знают сколько у боша нарушений этой мисры… ;)
А они там раз в год даже СУББОТНИКИ устраивают "в борьбе за качество ПО снизить нарушения на 20%"…
Про бош согласен на все 146. Семнашки кривущие адово.
emmibox
Блин просто чудики не знают сколько у боша нарушений этой мисры… ;)
А они там раз в год даже СУББОТНИКИ устраивают "в борьбе за качество ПО снизить нарушения на 20%"…
то есть, у тебя в статье описано то, что должно быть в идеале? но реальность везде разная по своей суровости :)
Нет у меня написано, что есть именно в реальности — в очень конкретном ЭБУ. А в реальности безопасность системы никак не зависит от того, сколько нарушений MISRA в ней наблюдается.
DimeSPb
Хорошая статья. Спасибо.
Но, основываясь на ковырянии кода ленивых узкоглазых, в частности, Субару (ЭБУ Денсо) — с 2003 по 2019 года есть нюанс.
Несмотря на окулиард сложных проверок, в том числе, со вторым процессором, — нет самой простой.
Значение нажатия педали водителем (именно первичное значение процента нажатия педали в оперативной памяти) до 2005-2006 года даже не проверяется по инверсной копии. Более того, эта самая инверсная копия даже не делается.
А с 2006 года — только по инверсной копии и проверяется. Причём, начали раньше проверять (ещё в начале 2005) именно на USDM-рынке, наплевав на Европу и JDM. С 2007 — проверяют везде.
Надо ли говорить, что инверсная копия одна, и её значение вычисляется ровно один раз в функции обработки сигналов с АЦП педали газа?
Никаких "перепроверить по вольтажу с сенсоров ещё раз" — нет. Даже в 2019.
Соответственно, Субары с е-газом 2003-2005 года — потенциально опасные. После 2006 — чуть менее. Но, йож (йапонец) — птица гордая, пока не пнули — не полетит. Видимо, долго не пинали.
Обычное японское отставание и тупизна (им рассказали что надо — они что то не поняли а что то поняли но не до конца, что то вообще не правильно поняли) …
Макс, а подскажи практические ситуации, когда система отключила е-газ, но при этом не оставила никаких ошибок? прошивка — сток, Астра-Н с Z18XER на Симтеке 75.1
Если монитор сбросил блок и ошибка самоустранилась — она может не записаться в память. Но обычно ошибка не самоустраняется.
дык, вот же. диагностика не подтормаживает, т.е на сброс не похоже. реакция на педаль либо быстро пропадает после пуска, либо сразу нет. ошибок ни разу не выловил, даже ожидающих.
пока приговорил человеку Симтек, хотя его по схожей проблеме 2 недели назад только меняли. правда, тогда был явно горелый драйвер мотора заслонки и чёткая ошибка управления.
и да — заслонка уже новая, хотя и не оригинал (ERA вроде).
Если блок отвечает а реакции на педаль нет — возможно проблема как раз в области eeprom памяти. Но текущая ошибка все равно должна висеть в момент когда реакции нет.
Опять же драйвер почему сгорел?
у меня тоже в голове не укладывается, как это может быть авария по заслонке и при этом не быть ошибок. в параметрах педаль меняется, положение заслонки тоже (тока удержания нет, заслонка свободно двигается пальцем).
драйвер предположительно сдох от подклина старой заслонки, но история умалчивает. на Опелях может просто сдохнуть что угодно от термодеформаций платы.
ЭБУ был заменён и машина 2 недели ездила. потом начались хаотические улёты в аварию, после этого купили новую заслонку, но ничего не изменилось. тогда обратились снова ко мне на диагностику, вот и ломаю голову…
кстати, сбои памяти тоже обычно вызывают ошибку, сталкивался пару раз на Опелях.
Драйвер не может сдохнуть от подклина. Должна быть другая причина — и скорее всего причина сохраняется.
поидее, автомобильные драйверы не должны дохнуть от перегрева, КЗ или перегруза. однако же, дохнут. но потому и написал, что "история умалчивает".
проводка нетронутая и не тёртая, всё прозвонено и обнюхано…
Проводку надо разбирать.
там проводки 30см, т.к. ЭБУ стоит на коллекторе справа от заслонки. всё в родной тряпочной изоленте, на родных клипсах и ничего не касается. да и неисправности проводки должны ловиться драйверной диагностикой.
я склоняюсь к типичным проблемам опелёвских блоков — трещинам в плате или сдыханию памяти. приедет ещё один ЭБУ, посмотрим…
ISVLabs
поидее, автомобильные драйверы не должны дохнуть от перегрева, КЗ или перегруза. однако же, дохнут. но потому и написал, что "история умалчивает".
проводка нетронутая и не тёртая, всё прозвонено и обнюхано…
Не должны но дохнут, особенно продаваемые в РФ. Я несколько раз брал абсолютно оригинальные детали которые не держали ничего из своих защит. Инфенион во всех случаях. Оригинал за луну денег.
ISVLabs
дык, вот же. диагностика не подтормаживает, т.е на сброс не похоже. реакция на педаль либо быстро пропадает после пуска, либо сразу нет. ошибок ни разу не выловил, даже ожидающих.
пока приговорил человеку Симтек, хотя его по схожей проблеме 2 недели назад только меняли. правда, тогда был явно горелый драйвер мотора заслонки и чёткая ошибка управления.
и да — заслонка уже новая, хотя и не оригинал (ERA вроде).
Ровно подобное поведение я наблюдал после того как заменили ДК на подобный но с разной распиновкой разьема. Линия управления подогревателем походу была посажена на + (но точно не разкуривал че с чем замкнулось). Нашел случайно -через 2 недели. Бош-МЕ7.6.1 Долго искал-потому, что только что собранный мотор с другим эбу, проводкой, датчиками. Черная кошка в черной комнате короче.
Познавательно! Спасибо!
Для меня эта инфа в большей части знакома, но спасибо за труд по сбору в одну статью.
Классный пост! Спасибо!
Запилил бы лучше историю про одну машину и два диностенда
И о чем она должна быть?
Кто же все таки нетрадиционной сексуальной ориентации. С новым годом)
И как мы это поймем?
emmibox
И о чем она должна быть?
Кровь, кишки, разворотило. Ты как будто не знаешь, что нужно обывателям и читателям желтухи.
Muskul85
Запилил бы лучше историю про одну машину и два диностенда
Лучше бы Макс правильный егаз запилил бы со всеми этими мегапроверками.
Макс, а скажи честно, эта статья в предверии выпуска от тебя егаза в правильном виде, или это объяснение того, почему его от тебя не будет ни в каком виде?
Кстати, а на твоем контроллере Егаз не страшно на дорогах общего пользования теперь ездить после "разоблачения"
Так мы и раньше не скрывали что у нас простая реализация. Не надо прикидываться, как говориться.
А турбины ставить и 250 гонять, это нормально? Это конечно безопасно, если оно на тросике? :)
Turbofactory
Макс, а скажи честно, эта статья в предверии выпуска от тебя егаза в правильном виде, или это объяснение того, почему его от тебя не будет ни в каком виде?
О том в каком виде он бывает я прекрасно знал в 2013 когда собственно события с тойотой обсуждали… А сейчас просто решил немножко конкретики написать… Опять же — не нашел еще ту задачу которую решает егаз.
Про задачу кто-то мягко говоря заблуждает нас…
1. Антилаг (который нафиг не нужен)
2. Пресловутый BLIPер который всем нравится. Люди за попкорн готовы платить а тут блип
У меня сложный свап приоромотора в Пежо 308 с АКПП (ал4!)
Сделать полноценный анлоговый-цифровой адаптер я не могу, нет и времени столько и опыта.
Пришлось цеплять датчики Пежо вторым рядом на вазовский мотор. Обороты и температуру ОЖ.
Этот бутерброд работает, АКПП переключает передачи в "овощном" режиме. А Кик-дауна нет! Т.к. газ тросиковый, а АКПП понимает электронную педаль.
Было бы круто, иметь возможность подать сигнал дпдз ваза напрямую в Пежо для нормальной работы АКПП без диких переделок.
Как пример, посредством электронной педали на январь.
Evotsvai
Про задачу кто-то мягко говоря заблуждает нас…
1. Антилаг (который нафиг не нужен)
2. Пресловутый BLIPер который всем нравится. Люди за попкорн готовы платить а тут блип
1. реализована без — это есть в прошлой статье.
2. реализована без аж в 2013 году.
1. Шляпа так как рхх остался
2. Через костыли что самому смешно
Кстати- в 2013 году тоже с двойной проверкой?))))
У актуатора золоченые контакты? Watchdog на актуаторе с какой частотой мониторит?)))
1. Шляпа для тех у кого руки кривые и не умеет в железо. Опять же ХХ на егазе — на половине кальков лишь влажные фантазии. Как и запуск в минуса. Далее — мы взяли систему и добавили 1 элемент не меняя исходной концепции. Ты предлагаешь ДРУГОЙ ЭБУ- ДРУГОЙ ДРОССЕЛЬ-ДРУГУЮ ПЕДАЛЬ — ДРУГУЮ ПРОВОДКУ — ты хочешь, чтоб у клиента что, ради одной НЕ ПОНЯТНО НУЖНОЙ ЛИ ВООБЩЕ функции — штаны рухнули что-ли?!
2. В железе — возможно. Зато в софте вам до такого пилить и пилить! Потому что ваш софт в своих стратегиях — простая "ардуиновская светодиодная мигалка".
У нас одна машина а не миллиард. И у нас на языке процессора софт — а не на корявом наречии говнокод. И то про что я пишу — не ватчдог! ватчдог не достоинство и есть даже в ардуине. (он с середины 90-х везде есть).
Evotsvai
Про задачу кто-то мягко говоря заблуждает нас…
1. Антилаг (который нафиг не нужен)
2. Пресловутый BLIPер который всем нравится. Люди за попкорн готовы платить а тут блип
Кстати про антилаг.
Понятно-же, что это лошня и дуть надо в ВЫПУСК а не во ВПУСК!
Наша концепция это позволяет — причем без каких либо изменений в написанном ПО. Нужен лишь соответствующий исполнительный механизм.
Концепция с Егаз-ом — НЕТ а следовательно — не нужна!
Спасибо за новогодний подарок! Пожалуй лучшие техно статьи на этом ресурсе. Спасибо и с новым годом! (пойду сыну расскажу что он неправильно ардуинку программирует:))
В новогоднюю ночь после оливье и селедки под шубой не осознал и половины. Завтра разберусь подробно. С Наступившим Вас! Всего наилучшего и пишите еще, пожалуйста. У вас лучшие материалы на нынешнем драйве.
Странно, gm performance (это прям gm, который в гоночках участвует), продает свои стэйджи с расширением hpt… Т.е. на кади АТС 2.0 можно купиь прямо у gm тюн файл и залить через hp tuners… Как так?) Hp tuners это не шиночип?)
Ващет шиночип — просто довольно высокого уровня с доступом к Gm-овской сисьеке.
Если бы на тазы был бы такой шиночип — была бы ваще сказка а не жизнь.
А то на тазы современные есть лишь фантазии влажные на базе коротких гляделок в код всяких неясных чуваков и моря опытов по кручению всего подряд во все стороны
Очередное «объяснять 1 день почему это нельзя сделать вообще а потом сделать за 1 час»
Интересно, как реализовано в хороших афтермаркет системах управления (не в Абите конечно).
Думаю что для определенных задач (например 200 и выше сил с литра) такой избыточный дроссельный «грамар наци» не нужен
Конечно же так же как и в ардуинах — никак!
В любой в том числе и хорошей афтермаркет системе написано "не для дорог общего пользования". Одна из причин того, что там это написано — они не безопасны!
а вот в абите нормально все (я думаю, посмотрю поточнее на досуге, но во всяком случае там тоже двухпроцессорная архитектура у егазного мозга и в М74 всяких тоже)…
Ты похвалил Абит.
2019 заканчивается оригинально)
А причем тут абит. Это железо микас 11 — и его профессионалы делали.
А микас кто разрабатывал?
Элкар.
emmibox
А причем тут абит. Это железо микас 11 — и его профессионалы делали.
Архитектуру М10ЕТ и в последующим М11, разрабатывал АБИТ.
ЭЛКАРовский копирайт на абсолютно все эти платы наверно тоже АБИТ поместил когда архитектуру "разрабатывал" …
Там все намного сложнее, чем ты можешь представить. Ладно спорить с тобой бесполезно. Удачи и всего наилучшего!
Тебя тоже с новым годом.
RacingSystemTech
Архитектуру М10ЕТ и в последующим М11, разрабатывал АБИТ.
Вопрос, почему у абита нет блипера при переключении вниз на егазе?)
Проект м11 закрыт и доживает последние дни, уже разработанна и тестируется новая платформа, там все будет/есть.
RacingSystemTech
Архитектуру М10ЕТ и в последующим М11, разрабатывал АБИТ.
Если это так, почему на машинах не существует серийного М11ЕТ с ПО Абит? 100% таких контроллеров идут с ПО ЭЛКАР и идентами ЭЛКАР бутлоадером ЭЛКАР и копирайтами как в ПО так и на платах — ЭЛКАР.
Далее элкаровский бутлоадер имеет надпись M11 BootLoader 2.04 16.10.2006
абитовский ЕТшный бутлоадер: BS12E120 — compilled: oct 13 2008
обычный не ет-шный BS12V110 — Compiled: apr 10 2008
каким образом абитовский появился на 2 года позже если "эту архитектуру правда разрабатывал АБИТ"?
Первый ЕТ, был в блоках М9.хх, потом все переехало в М10.3ЕТ, в 2006 году это ПО уже было доступно для энтузиастов.
Первый ET от Элкара был в блоках Микас-7 разработанных в 1998 году. Никакого мониторинга там конечно не было а вот драйвер и входы под датчики — были…
Макс, да бог с ними с этими датами, больше 14 лет работаю с блоками М11ЕТ, за все время у нас к нему претензии небыло, ниодного сбоя или глюка в работе Е-газ я не встречал, и надеюсь не встречу.
Тогда тебе будет интересно продолжение…
Ардуинщики пали ниц и поползли всё переделывать.))
Насколько остроумно спроектиррваны системы в эбу. А как система определяет величину момента на валу и мониторит его? Если кто нибудь влезет и сменит УОЗ, то момент должен поменяться, а система это отследить.
Двумя действиями по 3-м переменным (обороты-УОЗ-нагрузка) — через собственную мелкую таблицу оптимального момента и через собственную таблицу оптимального УОЗ+эффективности по УОЗ. Сверхточность не нужна поэтому температуры например вообще не учитываются.
Отличный новогодний подарок!
наверно, самое исчерпывающее объяснение, которое можно прочитать в не-специализированной литературе на русском… да и не только русском языке, которое даст даже мигающим светодиодиками на ардуинах некоторое понятие, как эта хренотень до сих пор всех не поубивала, а по остаточному принципу еще и дросселем подвигала
хотя не, в интернетах пишут, что кого-то все же отправила в лучший мир
я помню историю про Ренаульт весатис с зависшим дросселем.
Обычный ОБС. Если исключить банальности в виде педалей западающих за ковер — люди или просто нагло врут в свою пользу, или жмут газ в полной уверенности что жмут тормоз. Да еще жмут так что панель выгибается.
Людям в этом вопросе — вот точно нельзя доверять!
Т.е. теперь нужно городить цепь доверия к человеку… хм.
Камеру смотрящую на педали. И чтоб вместе с крешем последняя минута писалась.
Макси и вот нафег это в предновогоднюю ночь? :) чтобы оливье не лезло и водка не лилась? бггг
Ну не хочешь не читай — иди на куб котов лайкать…
Почему не хочешь? Читаю… Там смайл к стоит — еслишо.
Spike-5577
Макси и вот нафег это в предновогоднюю ночь? :) чтобы оливье не лезло и водка не лилась? бггг
а чего, вот обязательно было прямо так вот сразу читать? :)