Моновприск замість карбюратора К-133А частина 2
Коли ейфорія від перших запусків пройшла і новий рік відійшов на задній план, розпочинаємо фазу "Г". Отже, машина заводиться, але х. нагадує судомні посмикування. Для початку вчимо мізки розпізнавати положення дросельної заслінки - підключаємо датчик дросельної заслінки. 4 дроти: плюс 5 вольт, мінус і два сигнали про положення дроселя. Чому два? Тому що фольксваген. :) Датчик положення дросельної заслінки здвоєний, один працює на всьому діапазоні відкриття, і має лінійну залежність напруги, яка змінюється від 0 до 4,5 вольт (приблизно) при відкритті заслінки від 0 до 90 градусів, друга теж лінійна, теж від 0 до 4,5… але працює у діапазоні малих кутів відкриття заслінки. Справа в тому, що нас цікавить не стільки кут, скільки прохідний перетин дроселя. А це перетин у зоні малих кутів відкриття дуже залежить від кута, а зоні великих — слабко. Тобто. зміна перерізу між 4 і 5 градусами в десятки разів більша від різниці між 74 і 75, т.ч. другий датчик дозволяє точніше виміряти кут на малих відкриттях дроселя. Але ми поки що обмежимося другим датчиком, тим що працює на всьому діапазоні. Підключаємо його вихід до ніжки АЦП контролера та змінюємо програму. ТАК! У наведеній раніше програмі помилка, у другому циклі боротьби з брязкотом я неправильно вказав мітки переходів (WF1 замість WF2), проте, незважаючи на це, вона працювала задовільно. Виправляємо, додаємо канал АЦП. АЦП у нас 10 біт, я поки обмежився чотирма старшими бітами. Підключаємо до контролера 4 світлодіода - при відкритті дроселя вони красиво спалахують, показуючи в двійковому коді 1 з 16 положень дроселя, що розпізнаються. Тепер вчимо мізки розпізнавати оберти двигуна. Є два способи – вимірюватиперіод між іскрами, виходить точніше на малих оборотах, але для отримання оборотів потрібно розподіл, та й точність подає зі зростанням оборотів, а можна вважати число іскор за період часу. Залежність лінійна, щоправда отримання великої точності на малих оборотах потрібен великий інтервал виміру. Практично на 3000 об/хв двигун крутиться 50 об/с, одна іскра на кожний оберт - 50 іскор в секунду. Для того щоб наміряти 50 іскор - потрібна секунда, для 25 - півсекунди і т.д. Для початку чверть секунди та 12-13 умовних одиниць відповідних 3000 об/хв – прийнятний час вимірювання, і я зупиняюся на другому варіанті. Переписуємо програму. Оскільки потрібно одночасно і займатися форсункою, і рахувати, і відміряти точний інтервал — з'являються апаратний таймер (але територіально він усередині мікроконтролера) та переривання. Точніше одне переривання – саме таймера. Для стабільніших вимірювань доводиться прив'язати початок періоду виміру до іскри. Перевіряємо — на тих же світлодіодах видно двійковий код, що змінюється пропорційно до оборотів. Це я так пишу "перевіряємо" — насправді це двадцять перепрограмувань, коригування програми, висмикування волосся з голови та прихлинувань чаю. Але все працює. Що ми тепер можемо? Ми можемо зробити ВІДСІЧКУ! :) Це просто свято якесь :) Все просто - як тільки оберти більші за певну величину - відключаємо форсунку. Програмуємо – перевіряємо. Запуск, набір обертів, форсунка відключається, це видно по осцилографу ... але мотор поводиться якось не так ... Виявилося, що після відключення форсунки мотор працює ще кілька секунд і навіть непогано "газує" ... Що за фігня? Чим газує? Час відкриття форсунки у мене все ще такий самий, як і вперше — 18h помножений на FFh умовних тактів. Насправді це — близько 6 мс. Яквиявилося навіть для холодного двигуна це ДУЖЕ багато. Бензину стільки що на х.х двигун давиться і троїть, а стікаючи по колектору він забезпечує роботу двигуна і після відключення форсунки. Зменшуємо час упорскування. Перебором я зупиняюся на 2 мс. Двигун глухне при невеликому відкритті дроселя, але впевнено пускається. Якщо зробити ще трохи менше - мотор заводиться (при відключенні/включенні запалення форсунка включається на короткий час і в колектор потрапляє трохи палива, збагачуючи суміш у перші секунди запуску), але потім глухне і вже не заводиться, суміш занадто бідна на запуск. Неодружені стали красиві, значно піднялися оберти (означає суміш оптимальніша за попередню), але мотор не дає розігнати його, тут же глухне при відкритті дроселя. Ось як це працює на х.х.
Звук на записі якийсь неправильний, поруч стоїть дизель, що молотить на х.х. Ну це для розуміння, як все працює просто. Переходимо до фази "Д" - вводимо корекцію часу упорскування від кута відкриття дроселя. У нас 16 значень оцифрованих, початкову цифру знаємо - 2 мс на х.х., механічний датчик тиску показує на цьому режимі близько 0,5 бар, варто трохи відкрити дросель - 1 бар відразу. Значить на режимі "газ у підлогу" робимо 4 мс і приблизно такий розподіл: 2,3,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4. Прошиваємо – по осцилографу видно зміну тривалості імпульсу, але все одно реакція на газ незадовільна. Краще ніж було, але гірше, ніж треба. Відсічка теж цікава, я ж просто відключаю форсунку після досягнення певних оборотів, а на практиці це виглядає як - оберти трохи більше порога - відключили, обороти відразу падають - включили, форсунка хаотично відключається/включається поблизу оборотів відсічки, на слух сприймається як робота з перебоями ( тим більше що з "моніка" в цеймомент періодично стріляє полум'ям). Але обороти упираються в цю саму "відсічку". Робимо інакше, на 16 іскрах за період вимикаємо паливо, на 10 вмикаємо. Пробуємо дуже схоже. Тільки двигун у нас повільний, цикл займає близько секунди. Але гарно. Тепер що? Розбираємось із подачею палива далі. Очевидно, що газодинамічний (гарне слово ввернув) опір дроселя потоку повітря залежить не тільки від кута відкриття, а ще й від оборотів. Вчимо мізки змінювати таблицю "подачі палива від кута дроселя" залежно від оборотів. Таблиця фактично стає двовимірним масивом. 16 діапазонів кута дроселя та 16 діапазонів оборотів. 0 - мотор стоїть, 15 - граничні обороти, далі відсікання. Таблиця перетворюється на таку:
2,3,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4 2,2,3,4, 4,4,4,4, 4,4,4,4, 4,4,4,4 2,2,3,3, 4,4,4,4, 4,4,4,4, 4,4,4,4 2,2,2,3, 3,3,4,4, 4,4,4,4, 4,4,4,4