Программист
0,1
рейтинг
29 декабря 2015 в 16:03

Делаем «вечный» датчик массового расхода воздуха на ATiny13 из песочницы



Этот проект появился из-за нежелания покупать бывшую в употреблении около 30 (тридцати) лет деталь за совсем немаленькую сумму в 3000 — 5000 руб. Можно сказать что это будет проба пера в схемотехнике и программировании микроконтроллеров. Если интересно — продолжение под катом.

Осторожно много фото!


Итак, начинаем подпирать велосипеды костылями.

Вводные данные


BMW E30 в кузове купе 1986г с мотором M10B18 (4 цилиндра, 1.8л, инжектор):



Проблемы

1. Чихает
2. Не едет
3. Жрет и не толстеет

Годы в России не пощадили её. Высококачественный бензин, соляные ванны, «пористые дороги». Однако, больше всего ей досталось от бывших хозяев и суровых Русских автомехаников, бессмысленных и беспощадных, производивших ремонты сомнительной необходимости и эффективности. Ярким примером одного из таких ремонтов вы можете полюбоваться на КДПВ. А что это там такое беленькое, все в припое? Это керамическая плата— основная деталь ДМРВ, на нее нанесены пленочные резисторы и дорожка по которой должен бегать подвижный контакт. Как видно на фото она треснула, и некто пытался восстановить ее таким вот варварским методом. Безуспешно. Вот он — корень всех проблем! Тут нужно сказать что ДМРВ является основным датчиком, влияющим на смесеобразование.

Немного теории


Наша машинка оснащена чудом Немецкой промышленности системой распределенного впрыска L-Jetronic.

Гугл гласит:
Система распределенного впрыска L-Jetronic является системой импульсного впрыска с электронным управлением количественным и качественным составом топливно-воздушной смеси. Для обеспечения импульсного впрыска топлива в системе применены форсунки с электромагнитным управлением.





Ну, распределённого — это громко сказано, тут все 4 форсунки соединены параллельно и, соответственно пшикают одновременно, хотя да, это я придираюсь, установлены они каждая напротив своего цилиндра в разных местах впускного коллектора — т.е. распределённо. Мозг здесь довольно глупенький — холостым ходом, зажиганием, прогревочными оборотами не управляет.

Все что ему подвластно — это несколько датчиков и форсунки.

Вернемся к ДМРВ. Здесь установлен электро-механический ДМРВ, в народе именуемый «лопата», очевидно за характерную форму подвижной заслонки.



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

Варианты решения проблемы:


1. Купить новый ДМРВ — стоит космических денег 35000-60000 руб, сопоставимо со стоимостью авто.
2. Купить БУ ДМРВ — 30 лет эксплуатации, никаких гарантий, стоит 3000 — 5000 руб.
3. Купить новую плату (неоригинал, делают малыми партиями) — цена 300р+пересыл, выглядит так:



Как видно, конструкция отличается от заводской. Надежность под вопросом, в интернете можно найти негативные отзывы о якобы недолговечности сего решения, подтвержденные фотографиями изношенных плат подобного типа.

4. Купить ДМРВ современного типа без движущихся деталей + так называемый конвертер — цена вопроса немного отпугивает, так же необходимо будет адаптировать впускной тракт, наращивать длину патрубков и т. д.

5. Придумать что-то своё.

Для меня выбор был очевиден.

Я решил оставить механическую часть, так как никаких признаков износа не обнаружил. Думаю она прослужит дольше чем остальная машина.

Задача немного упростилась, необходимо преобразовывать угол поворота в напряжение. Хотя нет, постойте, не все так просто… Дело в том что как я уже говорил мозг здесь довольно глупенький и, соответственно на вход он хочет получать максимально готовые данные. Это отразилось в конструкции ДМРВ — график зависимости выходного напряжения от угла поворота оси заслонки нелинеен, и дополнительная сложность — он масштабирован сопротивлением датчика температуры воздуха, который так же встроен в ДМРВ. Соответственно характеристика датчика должна меняться в зависимости от температуры воздуха.

Поиск готового схемотехнического решения не привел к успеху. Проблема с износом ДМРВ подобного типа многих коснулась, много тем на специализированных форумах где на десятках страниц люди обсуждают как же её решить.

Для начала хотелось бы получить данные об угле поворота оси. Переменные резисторы и прочую механику я сразу отбросил, как ненадежные. Оптический датчик — хорошо, но пыль может доставить неприятности, а пыли в дороге хватает. Магнитные датчики — вероятно это то что нужно.

Нашёл вот такой: KMA-200.



С ходу не смог купить его в своей глуши. И случайно наткнулся на вот такой готовый ДПДЗ в котором и применен KMA-200.



В нагрузку получаю магнит с креплением, датчик уже на плате с необходимой обвязкой, покрыт лаком, защищающим от влаги и статики. Нашёл кстати похожий проект.

Отлично!

На выходе у такого датчика напряжение от 0 до 5 вольт зависимость от угла поворота линейная. Нужно как-то преобразовать ее в нужную нам характеристику. Аналоговые схемы в принципе могли бы обеспечить это, но были бы довольно сложны в проектировании и наладке, например какой-нибудь интегратор на операционниках с термокомпенсацией, но это для меня сложновато…

Тут я вспомнил что у меня есть горсть ATiny13, почему бы не использовать их?

Набросал и смоделировал схемку:



Немного о схеме.

  • Микроконтроллер тактируется от внутреннего генератора частотой 8МГц.
  • Использованы 2 канала АЦП, считывается угол поворота оси заслонки и уровень напряжения на резистивном делителе частью которого является датчик температуры.
  • Выходной сигнал ШИМ с частотой около 18кГц

Далее простой фильтр и операционный усилитель LM358 из старой материнки (КУ=1+(330000/100000)=4.3), управляющий полевиком (из той же материнки). Максимальное выходное напряжение = 4.3 * 2.5 = 10,75В.

Зачем полевик спросите вы? А кто его знает отвечу вам я! Лишним не будет. С помощью этой схемы я управлял мощной нагрузкой в виде нескольких автомобильных ламп соединенных параллельно просто для проверки что она это тоже может.

Вообще все детали у меня были в наличии кроме датчика поворота.

Время писать прошивку! Это первая моя прошивка МК, так что конечно все не оптимально, и конечно я выбрал немного странноватый инструмент BascomAVR, в котором писать приходится на каком-то псевдо-кубейсике. Очевидно встроенный туда компилятор не очень оптимизирован, прошивка получается жирная, и полиномиальная интерполяция которую я хотел туда впихнуть к сожалению не влезла. Пришлось реализовать аппроксимацию тремя прямыми отрезками. Почему тремя? Потому что больше не влезло (Bascom + 1 кб flash).

$regfile = "attiny13.dat"
$hwstack = 8
$swstack = 16
$framesize = 16
Config Portb.1 = Output
Config Timer0 = Pwm , Prescale = 1 , Compare B Pwm = Clear Up
Config Adc = Single , Prescaler = Auto
Start Timer0


Dim Adcval As Word , Temp As Single

Do

   Adcval = Getadc(2)                       'считываем угол

   Select Case Adcval                      'в зависимости от участка характеристики выбираем нужную прямую
      Case 0 To 306
         Temp = Adcval * 2.2
         Adcval = Temp
      Case 307 To 613
         Temp = Adcval * 0.9377
         Adcval = Temp
         Adcval = Adcval + 384
      Case 614 To 1023
         Temp = Adcval * 0.15
         Adcval = Temp
         Adcval = Adcval + 870
   End Select


   Temp = Adcval * 0.0009765625 'масштабируем полученное значение

   Adcval = Getadc(3)                    'считываем температуру
   Temp = Temp * Adcval               'перемножаем значение температуры и отмасштабированное значение угла поворота

   Pwm0b = Temp * 0.25                'масштабируем полученное значение

Loop

End
$prog &HFF , &H7A , &HFF , &H00                             ' generated. Take care that the chip supports all fuse bytes.
$prog &HFF , &H6A , &HFF , &H00                             ' generated. Take care that the chip supports all fuse bytes.
$prog &HFF , &H7A , &HFF , &H00                             ' generated. Take care that the chip supports all fuse bytes.
$prog &H00 , &H00 , &H00 , &H00                              ' generated. Take care that the chip supports all fuse bytes.
$prog &H00 , &H00 , &H00 , &H00                              ' generated. Take care that the chip supports all fuse bytes.

Чтобы выяснить уравнения прямых буквально минут за 10 набросал тупую софтинку в Qt Creator, пошевелил контрольными точками, определился с положением прямых.



Красная линия это искомая характеристика, синяя это аппроксимация прямыми. Далее компиляция и заливка прошивки в эмулятор. Все шевелится так как я и ожидал.

На скорую руку разводим плату и расчехляем лазерный утюг.



Травим, паяем, исправляем косяки разводки (ну куда же без них).





Внимательный читатель и опытный радиолюбитель заметит 2 ошибки которые я допустил при запайке.

Далее включение, проверка основных параметров, и суточная прогонка в разных режимах. Проверка показала что все работает так как и задумывалось. Время сборки и установки на авто.







После настройки подстроечником, машина начинает работать так как и должна, в дальнейшем был проверен расход бензина и динамика, все оказалось в норме, те соответствовало заявленным характеристикам. Машинка каталась на юга из средней полосы России, никаких проблем не появилось.



Я считаю, что первый опыт программирования микроконтроллеров, да в принципе и создания схем, был для меня удачен. Конечно есть огрехи: например выбор среды программирования. В следующем проекте я уже использовал CVAVR, прошивка получается намного компактнее. Выбор микроконтроллера тоже можно было бы назвать не удачным, хотя я его и не выбирал, он у меня был, и было желание его использовать. Сразу по окончанию работы с этим проектом я заказал несколько ATiny85, которые имеют в 8 раз больше памяти, но пока шла посылка эту машину внезапно купили, и ДМРВ так и остался с не идеальным алгоритмом).
Антон @diller61
карма
12,0
рейтинг 0,1
Программист
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (40)

  • 0
    На драйве выложили?
    • +1
      Нет, много лет назад я ушёл оттуда
      • 0
        Ок ) А по теме, нечто похожее есть в т. н. «ингибиторе» — датчике положения селектора АКПП, и там точно такая же засада и со стоимостью и с ремонтопригодностью, решения со столь радикальной переделкой я еще не видел.
        • +1
          Во многих иномарках, особенно старых хватает таких вот технических решений. Есть где разгуляться
  • 0
    Идея для дальнейшего развития: Бывший коллега у такого авто мозги пытался заменить на MegaSquirt-III daughterboard kit. Не знаю что вышло, но энтузиазма было много.
    image
    • +1
      А этот ваш коллега случайно свои наработки не выкладывал ни куда? Мне кажется я где-то читал о подобном…
      • 0
        Скорее он чьи-то прочитал. Начал это этим летом. Из его рассказа я понял, что эту плату можно как на авто, так и на мотоцикл ставить, а дальше просто чудеса.

        P.S. Первая же ссылка на гуглилась How to MegaSquirt your BMW E30 325i and other M20 / M30 applications . Плюс нашлось видео про E28.
        • 0
          Спасибо, повникаю на досуге
    • 0
      Есть и готовые мозги. Причём с открытой прошивкой.
      Но, конечно, цена у них не так и низка ($500+).
      С другой стороны и стоковые мозни тоже стоят дорого.
      • +1
        Новые так вообще космических денег стоят
  • 0
    Удивлён ценами на мерседессы 86ого года. Заглянул — 70-150круб. На Кипре — сравнимо (750-2500).
    • 0
      Это БМВ. Цены на Кипре вы в рублях или в какой валюте написали?
      • 0
        В местной валюте (РФ — рубль, Кипр — евры).

        Для bmw — 600-2000. (чур не смеяться — вот такие тут сайты www.bestcypruscar.com/index.php?rind=2400&ord=sys_creation_date&sens=DESC&cond=make=3)
        • +1
          И правда, цены очень похожи. Насчет сайтов — будто окунулся в начало 2000х. Хотя с таким климатом и природой нечего по сайтам сидеть, загорать нужно, да по горам лазать
          • 0
            Там полно авто по старше. Читаю ЖЖ автора живущего на Кипре, где часто публикуются фото старых авто (по тегу авто, раритет).
            Кипрские дороги и парковки в некотором роде музей.
            Благодаря климату и не очень напряженному трафику (практически пустые дороги в сравнении с российскими улицами), многие раритеты остаются на ходу в то время, когда в других странах их ровесники уже существуют лишь в фотографиях и редких коллекциях. Консерватизм киприотов, конечно, тоже имеет свое значение.

            image
            image
            image
            image
    • 0
      А что вас удивляет? Мало? Много по вашим меркам? Да и «Мерседесы 86 года» это средняя по больнице. Это может быть 2.0 дизель компакт-класса, а может быть топовый S класс.
  • 0
    Отличная работа! Есть над чем подумать.

    Для дрифта куплена? Или веление души?

    • 0
      Рад что понравилось. Конкретно вот эта машина брата, он её уже продал, но у меня такая же, только с мотором m20b20, да, для души
  • 0
    Может кому пригодиться, вот когда-то игрался с БДПДЗ

    • 0
      А вот так выглядят реальные характеристики у этого датчика:

      image
      • +1
        картинка слегка не верна, за 100 процентов нужно принимать не весь диапазон поворота магнита. KMA-200 позволяет программировать максимальный угол поворота от 0 до 180 градусов, все это описано в документации, ссылку на которую я разместил в статье. Конкретно в этом датчике максимальный угол запрограммирован заводом-изготовителем на меньший угол чем физически доступный угол поворота детали с магнитом. Сделано это специально для того чтобы нивелировать разницу в позиционировании магнита на заводе и возможности при установке выставить необходимое значение напряжения при закрытом дросселе.

        И сразу вопрос: как сделали эту картинку? Осциллографом?
        • 0
          Arduino + моя любимая программка — Serial oscilloscope.
          Полагаю что теперь и Ваша тоже.
          • 0
            Ага, спасибо, надо потестировать
      • 0
        кажется ответ на мой вопрос в видео, к сожалению с работы не могу посмотреть, посмотрю из дома
  • 0
    Попадался интересный проект измерения массы без зависимости от давления газа в системе.

    Имеется два термосенсора, одновременно нагревательных элементов. Один подогревается, а второй без подогрева. Так вот, проходящий поток охлаждает оба сенсора, причем на показания измерения влияет лишь масса и удельная теплоёмкость каждой из молекул, скорость расчитывается через дельту температур, теоретической и фактической.
    • 0
      вы только что описали стандартный тойотовский ДМРВ который ставится последние 20 лет, а может и больше. На машине 96 года точно стоял.
      Один минус — элементы через некоторое время пылью зарастают что снижает теплопроводность, потому периодически чистить надо. (стоит датчик за фильтром, но немного пыли всё равно фильтр проходит)
      • 0
        В старых БМВ (следующее поколение после описанной в статье) тоже так.
        • 0
          нее, в следующем поколении все еще подобный механический датчик, а вот через поколение там, вероятно уже именно то о чем вы пишете.
          • 0
            На М50 же не механический? Да, все верно написал: речь идет о Е30, следующая — Е36, на ней (если брать M50) не механика.
            • 0
              Правильно, в М50 и М52 нитевого типа, но это так сказать более продвинутые в технологическом плане моторы
              намного чаще Е36 встречаются с моторами М40, М42, М43, вот там такой как описан в статье, только с питанием 5в и независимым снятием показаний датчика температуры воздуха на впуске (IAT)

              В общем то да, частично я был не прав отвечая на ваш предыдущий комментарий
    • 0
      На ВАЗ по такому же принципу ДМРВ сделан…
      Вот только надо ДМРВ выкидывать и ставить ДАД+ДТВ.
      Кстати, diller61, если вдруг текущая реализация будет плохо работать — подумайте о замене ее на ДАД+ДТВ. Обычно такая замена требует перепрошивки контроллера, но ничего не мешает также использовать ATiny и отдавать контроллеру данные как-будто это ДМРВ, хотя по факту работает ДАД+ДТВ.
      • 0
        Спасибо за идею, я думал о чем-то похожем, но меня остановило то что нужно составить трехмерную матрицу значений где по осям будут ДАД, ДТВ, расходомер ВАЗа, после чего имея значение расхода воздуха сконвертировать его в некий уровень напряжения который бы выдал родной ДМРВ при таком расходе воздуха текущей температуры, а для этого необходимо снять характеристику зависимости массы прокачанного воздуха от напряжения с исправного ДМРВ. Исправного ДМРВ с несбитой калибровкой нет, измерить поток воздуха тоже нечем. Поэтому я пошел по пути наименьшего сопротивления и оставил механическую часть
  • 0
    ШЛЗ купи
  • 0
    Напомнило, как я лет 10 назад делал эмулятор помершего контроллера «ELMOS 10417A» в приборке на пассате. Удалось разобраться и сэмулировать на AVRке.
    • 0
      самое хреновое в этом деле — нет полной информации, все приходится опытным путем выяснять
  • 0
    Ничего не скажешь… Шедеврально!)
    • 0
      Рад что понравилось)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.