Этот проект появился из-за нежелания покупать бывшую в употреблении около 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 раз больше памяти, но пока шла посылка эту машину внезапно купили, и ДМРВ так и остался с не идеальным алгоритмом).
Комментарии (40)
Rumlin
29.12.2015 16:20Идея для дальнейшего развития: Бывший коллега у такого авто мозги пытался заменить на MegaSquirt-III daughterboard kit. Не знаю что вышло, но энтузиазма было много.
diller61
29.12.2015 16:27+1А этот ваш коллега случайно свои наработки не выкладывал ни куда? Мне кажется я где-то читал о подобном…
Rumlin
29.12.2015 16:30Скорее он чьи-то прочитал. Начал это этим летом. Из его рассказа я понял, что эту плату можно как на авто, так и на мотоцикл ставить, а дальше просто чудеса.
P.S. Первая же ссылка на гуглилась How to MegaSquirt your BMW E30 325i and other M20 / M30 applications . Плюс нашлось видео про E28.
mark_ablov
29.12.2015 19:50Есть и готовые мозги. Причём с открытой прошивкой.
Но, конечно, цена у них не так и низка ($500+).
С другой стороны и стоковые мозни тоже стоят дорого.
amarao
29.12.2015 16:29Удивлён ценами на мерседессы 86ого года. Заглянул — 70-150круб. На Кипре — сравнимо (750-2500).
diller61
29.12.2015 16:32Это БМВ. Цены на Кипре вы в рублях или в какой валюте написали?
amarao
29.12.2015 16:37В местной валюте (РФ — рубль, Кипр — евры).
Для bmw — 600-2000. (чур не смеяться — вот такие тут сайты www.bestcypruscar.com/index.php?rind=2400&ord=sys_creation_date&sens=DESC&cond=make=3)diller61
29.12.2015 16:52+1И правда, цены очень похожи. Насчет сайтов — будто окунулся в начало 2000х. Хотя с таким климатом и природой нечего по сайтам сидеть, загорать нужно, да по горам лазать
Rumlin
30.12.2015 08:23Там полно авто по старше. Читаю ЖЖ автора живущего на Кипре, где часто публикуются фото старых авто (по тегу авто, раритет).
Кипрские дороги и парковки в некотором роде музей.
Благодаря климату и не очень напряженному трафику (практически пустые дороги в сравнении с российскими улицами), многие раритеты остаются на ходу в то время, когда в других странах их ровесники уже существуют лишь в фотографиях и редких коллекциях. Консерватизм киприотов, конечно, тоже имеет свое значение.
MacIn
30.12.2015 03:19А что вас удивляет? Мало? Много по вашим меркам? Да и «Мерседесы 86 года» это средняя по больнице. Это может быть 2.0 дизель компакт-класса, а может быть топовый S класс.
HWman
29.12.2015 22:34Может кому пригодиться, вот когда-то игрался с БДПДЗ
HWman
29.12.2015 22:37А вот так выглядят реальные характеристики у этого датчика:
diller61
30.12.2015 10:13+1картинка слегка не верна, за 100 процентов нужно принимать не весь диапазон поворота магнита. KMA-200 позволяет программировать максимальный угол поворота от 0 до 180 градусов, все это описано в документации, ссылку на которую я разместил в статье. Конкретно в этом датчике максимальный угол запрограммирован заводом-изготовителем на меньший угол чем физически доступный угол поворота детали с магнитом. Сделано это специально для того чтобы нивелировать разницу в позиционировании магнита на заводе и возможности при установке выставить необходимое значение напряжения при закрытом дросселе.
И сразу вопрос: как сделали эту картинку? Осциллографом?HWman
31.12.2015 08:11Arduino + моя любимая программка — Serial oscilloscope.
Полагаю что теперь и Ваша тоже.
diller61
30.12.2015 10:25кажется ответ на мой вопрос в видео, к сожалению с работы не могу посмотреть, посмотрю из дома
darkfrei
30.12.2015 01:49Попадался интересный проект измерения массы без зависимости от давления газа в системе.
Имеется два термосенсора, одновременно нагревательных элементов. Один подогревается, а второй без подогрева. Так вот, проходящий поток охлаждает оба сенсора, причем на показания измерения влияет лишь масса и удельная теплоёмкость каждой из молекул, скорость расчитывается через дельту температур, теоретической и фактической.alaev
30.12.2015 02:50вы только что описали стандартный тойотовский ДМРВ который ставится последние 20 лет, а может и больше. На машине 96 года точно стоял.
Один минус — элементы через некоторое время пылью зарастают что снижает теплопроводность, потому периодически чистить надо. (стоит датчик за фильтром, но немного пыли всё равно фильтр проходит)MacIn
30.12.2015 03:23В старых БМВ (следующее поколение после описанной в статье) тоже так.
diller61
30.12.2015 10:16нее, в следующем поколении все еще подобный механический датчик, а вот через поколение там, вероятно уже именно то о чем вы пишете.
MacIn
02.01.2016 02:15На М50 же не механический? Да, все верно написал: речь идет о Е30, следующая — Е36, на ней (если брать M50) не механика.
diller61
02.01.2016 11:58Правильно, в М50 и М52 нитевого типа, но это так сказать более продвинутые в технологическом плане моторы
намного чаще Е36 встречаются с моторами М40, М42, М43, вот там такой как описан в статье, только с питанием 5в и независимым снятием показаний датчика температуры воздуха на впуске (IAT)
В общем то да, частично я был не прав отвечая на ваш предыдущий комментарий
AllexIn
30.12.2015 10:12На ВАЗ по такому же принципу ДМРВ сделан…
Вот только надо ДМРВ выкидывать и ставить ДАД+ДТВ.
Кстати, diller61, если вдруг текущая реализация будет плохо работать — подумайте о замене ее на ДАД+ДТВ. Обычно такая замена требует перепрошивки контроллера, но ничего не мешает также использовать ATiny и отдавать контроллеру данные как-будто это ДМРВ, хотя по факту работает ДАД+ДТВ.diller61
30.12.2015 10:23Спасибо за идею, я думал о чем-то похожем, но меня остановило то что нужно составить трехмерную матрицу значений где по осям будут ДАД, ДТВ, расходомер ВАЗа, после чего имея значение расхода воздуха сконвертировать его в некий уровень напряжения который бы выдал родной ДМРВ при таком расходе воздуха текущей температуры, а для этого необходимо снять характеристику зависимости массы прокачанного воздуха от напряжения с исправного ДМРВ. Исправного ДМРВ с несбитой калибровкой нет, измерить поток воздуха тоже нечем. Поэтому я пошел по пути наименьшего сопротивления и оставил механическую часть
token
На драйве выложили?
diller61
Нет, много лет назад я ушёл оттуда
token
Ок ) А по теме, нечто похожее есть в т. н. «ингибиторе» — датчике положения селектора АКПП, и там точно такая же засада и со стоимостью и с ремонтопригодностью, решения со столь радикальной переделкой я еще не видел.
diller61
Во многих иномарках, особенно старых хватает таких вот технических решений. Есть где разгуляться