Индикатор расхода топлива для инжекторного двигателя – версия 2  P

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

В конструкцию прибора были внесены некоторые изменения, касающиеся стабилизации питания и отображения результатов измерений.image

Поговорим обо всем по порядку. Итак – начну с питания. Несмотря на то, что схема понижения и стабилизации напряжения питания микроконтроллера, примененная в первой версии устройства работала без нареканий, ее решено было переделать. По большей части причиной послужило то, что в моем распоряжении появилась горсть low-drop регуляторов напряжения на 5 вольт – TLE4275.

Регуляторы эти хороши тем, что имеют специальный выход, подключаемый к ноге reset микроконтроллера. Таким образом, регулятор напряжения включает микроконтроллер только тогда, когда питающее напряжение устаканится. В случае повторных скачков или просадки напряжения, регулятор самостоятельно перезагрузит микроконтроллер. Величина временной задержки, между моментом, когда питающее напряжение устаканивается, и моментом, когда регулятор включает микроконтроллер, устанавливается емкостью одного из конденсаторов в обвязке регулятора. Такая схема позволяет гарантировано избежать фатальных зависаний микроконтроллера при проблемах с питающим напряжением.

Лирическое отступление: при проблемном питании, как например, в бортовой сети авто, не стоит надеяться на вотч-дог в микроконтроллере. По своему опыту могу однозначно сказать, что при скачках напряжения зависает он не хуже всего остального оборудования на чипе. Следует отдавать себе отчет, что встроенный вотч-дог предназначен главным образом для борьбы с программными зависонами – например, если программа наглухо застрянет в каком-то непредусмотренном цикле и т.п. С аппаратными проблемами встроенный вотч-дог не всегда может бороться.

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

Второе изменение в конструкции моего прибора коснулось отображения информации. Во время использования первой версии устройства, я заметил, что при особенно интенсивном разгоне, потребление топлива становится настолько большим, что если принять его за 100%, потребление во время не особо напористого движения не превышает 20-40%. Таким образом, на приборе редко загоралось больше 4-5 делений из 10.

Для борьбы с этим явлением в устройство было добавлено две кнопки, позволяющие задать порог отображения расхода. Поясню на примере. Как вы помните, устройство самообучающееся – каждый раз, обнаружив новое максимальное потребление топлива за единицу времени, система запоминает его, и впоследствии ведет отображение относительно этого нового максимального значения. Примем его за 100%. В новой версии устройства, я могу принудительно заставить шкалу заполниться полностью при, к примеру, 70% от максимума. Таким образом, при потреблении 35% от максимума, будет гореть половина шкалы, при 70% и выше – вся шкала. Меня такое положение дел вполне устроило – устройство не предназначено для точного учета расхода (хотя и этот функционал может быть совсем просто реализован – нужно лишь подключиться к датчику скорости и дописать несколько строк кода), а для эффектного визуального отображения информации.

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

Для экономии ног микроконтроллера, дисплей подключен через доступные сдвиговые регистры 74HC164 – соответственно написаны функции для динамичного вывода информации. Этот геморрой занял больше всего времени при написании софта.

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

Таким образом, всего есть 4 кнопки – они разведены на плате, а также предусмотрена возможность подключения внешних кнопок, через разъемы на плате.

На плате предусмотрен разъем для внутрисхемного программирования чипа – ISP. Да кстати, контроллер поменялся на Atmel Atmega8 в стандартном DIP корпусе.

Так уж получилось, что совершенно случайно я просверлил в дешборде 11 дырок для светодиодов, вместо 10. В итоге в системе появился 11тый светодиод, который постоянно неспешно мигает, сигнализируя о текущем статусе работы устройства. Например, если он мигает раз в 5 секунд, то устройство находится в штатном режиме работы. Если мигает раз в секунду – то устройство обнаружило новый максимальный расход, но еще не записало его в постоянную память EEPROM (запись произойдет в течение минуты, при этом во время записи светодиод загорится постоянно на несколько секунд). Также, светодиод мигнет пять раз и останется гореть постоянно, при входе в режим настройки отображения информации.

Для входа в режим настройки достаточно несколько секунд подержать нажатыми кнопки SW3 и SW4. После того как сигнальный светодиод отмигает свои пять раз, на цифровом дисплее отобразится процент порога отображения расхода, как я и объяснял раньше. Тот же порог отобразится и на шкале, но с разрешением в 10% – большего от простой шкалы добиться невозможно. Порог можно двигать, нажимая те же кнопки SW3 и SW4. По окончанию процесса настройки нажмите кнопки SW3 и SW4 на несколько секунд снова.

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

Еще одно изменение в схеме коснулось подключения к форсунке – теперь оно осуществляется через оптрон (я использовал 4N37). Это гарантирует отсутствие фатальных помех по сигнальной линии.

В остальном схема осталась без изменений – более конкретные объяснения есть в упомянутых мной статьях о первой версии устройства.

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

Дальше под катом »

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

imageПоследняя часть цикла статей о индикаторе расхода топлива. Первые две части находятся здесь и здесь.

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

Саму программу и файл прошивки можно сказать здесь.

Программа пользуется обоими таймерами, имеющимися на борту микропроцессора. Восьмибитный таймер, запущенный с делителем 1024 (т.е. работающий на частоте 8МГц/1024=7812Гц), при переполнении вызывает прерывание. За 1 секунду происходит примерно 30 таких прерываний, так что отсчитав 6 из них, можно точно отмерять промежутки времени в примерно 0.2 секунды. Это и есть те самые 0.2 секунды, задающие такт всей системе.

Шестнадцатибитный таймер использует внешнее прерывание для включения и выключения – он включается по спадающему и выключается по возрастающему фронту. Иными словами, таймер считает, когда инжектор открыт. Каждые 0.2 секунды главная функция программы сравнивает текущее значение таймера с максимально известным значением, и на основании этого сравнения, принимает решение, насколько заполнить индикатор. Теперь о максимальном значении – у программы есть два режима работы, в точности как у Терминатора – помните, у него был переключатель в мозгах, который позволял или запрещал Терминатору учиться новым вещам. Изначально программа учится – каждый раз, обнаружив новое значение таймера, которое больше предыдущего максимума, она запоминает его в энергонезависимую память EEPROM (в переменную maximum). Там-же хранится флаг (переменная learning), отвечающий за включение и отключение режима обучения – соответственно, когда этот режим выключен, программа не будет запоминать новые максимальные значения подсчетов таймера.

Возможность смены режима обучения была сделана вот для чего: как выяснилось, на максимальном “газе” (а-ля “pedal to the metal”) подача бензина столь велика, что после запоминания значений таймера в таких режимах работы, при обычном, спокойном стиле езды, индикатор заполняется всего на 2-3 деления из 10. Естественно, это не совсем удобно и устройство теряет смысл существования, при обычной езде, без гонок. Поэтому я обучил его немного газанув на разгоне, и отрубил обучающий режим. Теперь при прогреве например, горят 2 деления. При обычной езде – до 6ти, при резвом разгоне – 9-10, ну и если вообще притопить, то все 10 постоянно.

Для сброса сохраненного в EEPROM максимально известного значения таймера и переключения режимов обучения устройства, существует кнопка SW2 (смотрите схему). Если во время работы устройства подержать ее нажатой несколько секунд, то EEPROM обнулится. Если держать ее нажатой в момент инициализации микропроцессора (читай –  подачи питания на устройство), то оно переключится на другой режим обучения.

Для визуализации процессов инициализации, запоминания в EEPROM новых значений и переключения режимов обучения реализованы простые схемы подмигивания индикатором – этим занимаются функции running_bar и blinking_bar.

Поскольку запись в EEPROM процесс довольно медленный, обнаружив необходимость записать в EEPROM новое значение таймера, программа ждет примерно минуту (300 циклов по примерно 0.2 секунды), прежде чем записать его (этим занимается переменная e_eprom_w_timer). Если в течении этой минуты будет обнаружено очередное, еще более высокое значение таймера, то отсчет минуты начинается заново.

Важный момент в работе шестнадцатибитного таймера – при выключении двигателя, таймер включается по спадающему фронту внешнего прерывания, и остается включенным. Это не есть хорошо, поскольку работа всего устройства будет скомпрометирована. Решение проблемы очень простое: таймер работает с делителем 64, т.е. на частоте 8МГц/64=125КГц, следовательно он переполнится примерно за 0.5 секунды. Включаем прерывание на переполнение этого таймера. Если такое прерывание наступает, то система понимает, что двигатель остановлен, вырубает таймер, обнуляет его, отменяет запись в EEPROM нового, нереального значения таймера (ведь он продолжает непрерывно считать почти полсекунды, думая что инжектор открыт) и инициализирует систему по новой (замещает неверные максимальные значения таймера правильными, из EEPROM).

Дальше под катом »

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

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

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

Дальше под катом »

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

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

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

И тогда я понял, что мне нужен простой “прогресс бар” (вообще это это называется “бар граф” от англ. bargraph, но прогресс бар как то понятнее звучит Smile), который будет показывать расход топлива в единицу времени. Вот такой вот:

image

Такая система, разумеется, не будет показывать никакого числового расхода топлива, ни в единицу времени, ни в единицу пробега, но тем не менее даст четкое представление о моментальном расходе бензина.

Дальше под катом »

Внутри цилиндра работающего двигателя (видео)  P

Класс. Любопытно как именно это снимали…

Установка зажигания (УОЗ) на примере Nissan Almera N15 (GA16DE)  P

image Случилось так, что мой Nissan несмотря на то, что неплохо тянул, жрал бензина немеряно. На трассе получалось около 10 литров на 100 км. О городе я вообще молчу. Я разумеется рылся на форумах, но ничего конкретного никто порекомендовать не мог. Люди писали проверить смесь, проверить то, проверить сё. Я проверял – все было ок. И вот наконец пришла очередь проверить угол опережения зажигания, и выяснилось, что угол был конкретно сбит, и зажигание стояло очень позднее. Минутная регулировка (о которой чуть ниже) больше чем в полтора раза уменьшила расход бензина, а мотор будто подменили – тянуть стал значительно лучше.

А логика тут вот какая. Всех нас учили в школе, что когда поршень находится в верхней точке, искра поджигает сжатую поршнем топливную смесь, она воспламеняется, и сгорая превращается в массу раскаленных выхлопных газов, которые с большой силой давят на стенки цилиндра и поршень. Ну и так как сдвинуть поршень гораздо проще, чем разнести цилиндр, газы его и двигают, вырабатывая для нас лошадиные силы. Это все в теории. На практике, так как поршни присоединены к коленвалу двигателя, и вся эта система обладает некоторой инерцией, поршень будет некоторое время двигаться вниз сам, увлекаемый крутящимся по инерции коленвалом, даже если топливная смесь по какой-либо причине не воспламенится. Вдобавок, сгорание топливной смеси вовсе не мгновенное. От момента появления искры до момента, когда вся смесь загорится, и давление газов достигнет максимальной величины, проходит некоторое время. Этот отрезок времени очень мал, но так как скорость вращения коленвала весьма велика, то даже за это время поршень успевает пройти некоторый путь от того положения, при котором началось воспламенение смеси. В итоге, газы начинают давить на поршень слишком поздно, КПД двигателя и мощность снижаются а расход бензина значительно возрастает.

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

Разница в градусах, между положением коленвала при котором поршень находится в верхней точке и положением при котором происходит зажигание топливной смеси называют углом опережения зажигания. Оптимальное значение угла опережения зажигания зависит от массы факторов – скорость работы двигателя, составом топливной смеси и т.п. В двигателе есть несколько систем, оптимизирующих угол автоматически в процессе работы, но начальное значение должно быть выставлено вручную. Именно эту процедуру я и разберу сейчас, на примере двигателя Nissan GA16DE.

Дальше под катом »

Облако меток:

  • самопал обзор поржать модернизация доработка компьютер Almera измерения гараж ремонт паяльники и пайка водянка двигатель N15 прошивка кулер Nissan Софт технологии блок питания интрумент микропроцессоры Windows чистка смартфон тюнинг помпа история бред интрукция браузер GA16DE GPS автоматика unlock рабочее место мышка программирование процессор электрогитара

  • Подняться вверх