Индикатор расхода топлива для инжекторного двигателя – часть 0b10

imageИтак, в первой части повествования мы с вами разобрались в базовой теории работы инжектора и определились с функционалом и принципом реализации будущего устройства для измерения потребления топлива.
Сердцем устройства станет, разумеется, микроконтроллер (далее МК). Мой выбор пал на самый древний, что завалялся у меня на полке – Atmel AVR AT90S2313. Его скромных возможностей выше крыши хватит для реализации задуманного. В этом МК нет никакого внутреннего резонатора – к нему нужно подключить внешний источник тактовой частоты – как правило это кварцевый резонатор. Я подчеркиваю – выбор пал на этот МК только потому что более простого у меня не оказалось.

Как было сказано, принцип работы индикатора расхода строится на измерении суммарного интервала открытия форсунки в единицу времени. Чем больше замеренный суммарный интервал, тем больше делений загорится на индикаторе. Значит пришла пора определиться с единицей времени, и сделать это можно по следующей логике: по идее, на холостом ходу мотор моего Nissan’a (да и на самом деле на большинстве других легковых авто) работает со скоростью около 700 об/мин (это по паспорту). Допустим он работает даже 600 об/мин, т.е. 10 об/сек. Таким образом, за 1 секунду, коленвал совершит 10 оборотов. Форсунка открывается 1 раз за 2 оборота, во время такта впуска. Таким образом, за секунду, форсунка откроется 5 раз, а значит минимальный отрезок времени, за который она откроется хотя-бы раз (что бы наш измеритель хоть чего-нибудь да измерил) равняется 1/5 секунды или 200мс. Ну вот и возьмем эти 200мс за единицу времени, т.е. будем мерить сколько времени была открыта форсунка за 200мс. Соответственно, с тем же 200от-миллисекундным интервалом будут обновляться показания на индикаторе.

В выбранном мной микропроцессоре есть 2 системных таймера – восьми и шестнадцати-битный. Восьми-битный таймер будет нам отмерять отрезки по 200мс. Шестнадцати-битный таймер будет считать нам суммарное время открытия форсунки. Для этого привяжем его включение и выключение к спадающему и нарастающему фронту импульсов, идущих на схему от одной из форсунок. Тут стоит покурить мануал на ваш двигатель, и выяснить, какие провода идут от бортового компьютера к форсункам. В моем случае это выглядит следующим образом:

fuel_meter_1

Как видно на части схемы электропроводки, форсунки (обозначены красным эллипсом) одним концом подключены к плюсу аккумулятора (номер 1 на схеме), а другим к бортовому компьютеру (к выходам 101, 110, 103, 112), так что  компьютер открывает форсунку, подав на нее 0. Именно по этой причине активировать счетчик в МК будет спадающий фронт на входе, а деактивировать нарастающий.

К одному из проводов, идущих от форсунки к компьютеру подключаем провод, по которому будут идти сигналы к будущему измерителю расхода.

Еще один очень важный момент: несмотря на то, что компьютер посылает на форсунки прямоугольные импульсы, тот факт, что форсунка представляет собой индуктивную нагрузку, делает сигнал приходящий по проводу от форсунки на схему нашего измерителя вот таким кривым:

1
Разумеется такой сигнал подавать на МК никак нельзя. Его, во первых, нужно уменьшить до ТТЛ уровня (форсунка питается от 12 вольт), а во вторых – его просто необходимо “причесать”, потому как иначе ни о каком верном расчете времени открытия форсунки говорить не получится.
Поначалу я подумал “причесать” транзистором:
circiut1
Но затем вспомнил про имеющийся в распоряжении инвертирующий триггер Шмитта (одно из использований триггера – восстановление искаженного цифрового сигнала) 74HC14, и решил его заюзать.
Пример восстановленного сигнала:
2
Обратите внимание – сигнал инвертировался. Но это не проблема, так как его можно снова инвертировать, подав его на еще один триггер Шмитта (их 6 штук в корпусе одной микросхемы 74HC14) или можно просто учесть это в программе.

В итоге я решил делителем напряжения уменьшить амплитуду импульсов, а затем подать их на два последовательно соединенных триггера Шмитта.

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

В итоге родилась вот такая схема измерителя:

На схеме резистор R1 и конденсатор C3 создают примерно одну секунду задержки перед включением микропроцессора, после подачи питания. Кнопкой SW1 можно сбросить микропроцессор, а кнопкой SW2 можно будет обнулить записанное в EEPROM значение максимального времени открытия форсунки (как было упомянуто в первой части статьи, программа будет самообучающейся – обнаружив новое максимальное время открытия форсунки, она запомнит его в EEPROM и впоследствии будет индицировать расход в соответствии с “новым” максимумом). Кварц Х1 – я поставил на 8МГц и все расчеты в программе будут относительно этой тактовой частоты. Резисторы R15 и RV1 представляют собой простой делитель напряжения, так что на триггер Шмитта U3:A поступает сигнал амплитудой не более 5 вольт. На всякий случай есть стабилитрон D2 на 5.1 вольта. Светодиод D1 будет просто мигать в такт открытию форсунки, а U3:B снова инвертирует сигнал, после чего он подается на микропроцессор, на ногу внешнего прерывания INT0.

Цепочка элементов FU1, C9, L1, C4, D3, C6, U4, C5, C7 отвечают за качественное питание МК и обвязки – исчерпывающее объяснение читайте в уже упомянутой статье, про питание чувствительной электроники от сети авто.

J6 – это колодка к которой подключаются светодиоды индикатора.

Схему можно скачать здесь – в архиве 2 файла: final_design_model для отладки и final_design_pcb для будущей разводки схемы.

Продолжение следует.



У этой записи 14 комментариев

  1. boris

    Доброго времени суток! Об’ясните пожалуйста по индикатору расхода.У меня Приора,надо что-то менять в прошивке(я в этом вообще ничего не понимаю,прошивал знакомый сказал что установил два файла хекс и еще какой-то в результате при включении светодиоды “бегают”как на видео ,а дальше что-то непонятное то горят три то вся шкала.Пробовал на трассе при разгоне горит вся шкала потом все гаснут потом горит 5-6).Второй вопрос-при нажатии sw-1контроллер перезагружается,а sw-2 не дает ни какого эффекта.Хочется чтобы было как на видео.С уважением Борис.

  2. -=MindHunteR=-

    Обязательно помогу вам сегодня вечером – сейчас нужно бежать на работу. =)

  3. -=MindHunteR=-

    Прежде всего – я в приорах не копался, потому ничего о них не знаю. Судя по интернетам – стоит инжекторный двигатель с распределенным впрыском. Т.е. примерно так-же, как у меня. Соотвественно, подключение в авто должно быть такое-же и в теории, но – я не знаю что за форсунки стоят на приоре. У меня форсунки на 12 вольт и управляются минусом. Т.е. на форсунке 2 вывода, один из них всегда присоединен к плюсу, а второй, в нужный момент времени компутер присоединяет к минусу – форсунка открывается, и именно это замечает мой прибор.
    Проверьте прежде всего как это происходит на приоре и отпишитесь.

    В любом случае, так уж совпало, что я решился таки внедрить свою систему прямо в панель приборов, ну и раз уж пошла такая сфистопляска – переделал схему. Ничего не добавил – просто сделал заново, чуть лушче развел, чуть подправил код. Статья как раз в редактировании. Надеюсь закончить сегодня – завтра.

  4. boris

    На приоре то-же самое.Цитата из руководства (В колодке установлены пять контактов: четыре для подачи управляющего сигнала на форсунки и один общий «+12 В» (к нему подсоединен малиновый провод с черной полосой).Меня беспокоит прошивка почему он установил два файла хекс и еще какой-то что-то типа памяти я в этом ни бум-бум и кнопка SW-2 ни на что не влияет.В папке программ 4 файла какой нужно зашить или какие?

  5. -=MindHunteR=-

    hex файл это сама прошивка микроконтроллера, и файл eep это файл для энергонезависимой памяти в контроллере. в этой памяти сохраняется максимальное найденное значение времени открытия форсунки, необходимое для правильного отображения текущего потребления топлива на шкале. кнопка sw2 при длительном нажатии обнуляет это сохраненное в памяти максимальное значение – в вашем случае похоже что система и так ничего не сохранила нового в памяти, потому и нажатие на кнопку ничего не дает.

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

    Для начала скажите, светодиод на плате мигает? Он должен мерцать в такт работе форсунки – на холостом ходу должно быть хорошо различимое мерцание, ну и при увеличении оборотов частота мерцания должна расти, пока глаз перестанет вообще ее различать.

  6. boris

    Светодиод горит постоянно.Я мерил напряжение на входе ножка 1 U3.A 4,7в ножки2.3-2,5в возможно неисправна микросхема 74н14?

  7. -=MindHunteR=-

    О. Вот тут и надо начинать искать проблему. На ножках 1,2,3,4 микросхемы 74HC14 при работающем двигателе напряжение должно скакать в такт работе форсунки. Простым вольтмтром этого не увидите – нужен осциллограф. Если нет осциллографа, для начала я бы взял светодиод поярче, припоял бы в нему резистор на пару килоом, кинул бы + на линию питания 12 вольт, а минусом коснулся бы верхней ноги R15 и посмотрел, будут ли мерцания при работающем двигателе.
    Если мерцать будет – значит сигнал с форсунки идет. Тогда проблему нужно поскать в делителе напряжения R15 и RV1, проверить зенер D2, ну и наконец микросхему 74HC14 – может реально битая (вопрос почему – была такая, или у вас на плате висит сопля и коротит чего-нибудь…).
    Если мерцать не будет – значит нет сигнала с форсунки и проблема где-то там кроется.

  8. boris

    Благодарю за совет завтра этим займусь.

  9. -=MindHunteR=-

    Без проблем. Отпишитесь.

  10. boris

    Доброй ночи.Дошли руки доделать индикатор, причина в невнимательности, плохо была пропаяна 8-я ножка МК.Сейчас все работает.Детали ставил не СМД а простые с выводами.Мне уже далеко не 20 лет.Спасибо.Жду что-то нового.До свидания!

  11. -=MindHunteR=-

    Замечательно! Рад что все получилось. У меня на работе небольшой завал, так что никак не получается дописать статейку про обновленную версию индикатора. Но рано или поздно это произойдет. =)

  12. boris

    Добрый вечер!Ездию с индикатором,все работает отлично.Вы писали про новую плату с стремя семисегминтовыми индикаторами.выдают проценты.Можно-ли программно привязаться к максимуму 20,0 или 19,9(это не расход на 100км просто отвлеченное число)что-бы индикатор показывал цифры например 5,6 или 7,8 цифры более привычны.

  13. -=MindHunteR=-

    Конкретно в моей версии я десятичную точку вообще не подключал. Но в принципе это не проблема. Разумеется, потребуется немного переделать плату и программу.
    Сорри, что несмотря на обещания все еще не выложил статью – этот сайт одно из моих хобби, а хобби оно только в свободное время и когда есть силы и желание. Но тем не менее, полагаю она скоро появится здесь.

Добавить комментарий