Коррекция смеси по МАП сенсору ГБО
- Войдите на сайт для отправки комментариев
Здравствуйте всем, написали скетч для для управления двигателя мерседес w210 104 мотором газовой форсунок.Все отлично работает,теперь хочу подключит МАП(датчик разрежения) сенсор для более точной коррекции газового впрыска.Проверка впрыска с начала проводилась когда еду на бензине при 1500 оборотах скорость составляла 50км/час время впрыска бензина 4,5-5мс МАП сенсор показывал 40кПа,после проехал на газу на тех же оборотах и скоросте время впрыска увеличилась на 6,5-7мс а МАП показал 60кПа. Это показывает что смесь обедняется при нагрузке на двигатель. Теперь нужно написать скетч чтобы с начала можно было бы запомнит время впрыска по разрежению на бензина и когда переключаешь на газ эту разницу добавлял.
Привет, а вы не хотелибы привести свои наработки ? Тогда может быть у кого нибудь и идеи возникнут ?
#include <EEPROM.h> #define IN_1_PIN 2 #define IN_2_PIN 3 #define IN_3_PIN 4 #define IN_4_PIN 5 #define IN_5_PIN 6 #define IN_6_PIN 7 #define OUT_1_PIN 8 #define OUT_2_PIN 9 #define OUT_3_PIN 10 #define OUT_4_PIN 11 #define OUT_5_PIN 12 #define OUT_6_PIN 13 #define OUT_1_PORT PORTB0 #define OUT_2_PORT PORTB1 #define OUT_3_PORT PORTB2 #define OUT_4_PORT PORTB3 #define OUT_5_PORT PORTB4 #define OUT_6_PORT PORTB5 void setup() { // инициализируем входы for (int i = IN_1_PIN; i < IN_6_PIN + 1; i++) { pinMode(i, INPUT); } // инициализируем выходы for (int i = OUT_1_PIN; i < OUT_6_PIN + 1; i++) { pinMode(i, OUTPUT); digitalWrite(i, LOW); } } // p_ext -- знач. в мкс. доб. времени для каждого канала uint16_t p_ext[6] = {1800, 1800, 1800, 1800, 1800, 1800}; static uint32_t pulse[6]; uint8_t prev_in_state = 0xFF; void loop() { int temp=analogRead(A1); if(temp>940){ PORTC |=(1<<PC2);//включит реле на форсунки и на газ клапан while (1) { uint8_t in_state = PIND; // фиксируем состояние всех 6-х входов uint8_t currBit = 2; // бит вх. порта, минус один for (int i = 0; i < 6; i++) { // сканируем все каналы currBit <<= 1; // бит влево к тек. каналу if ((in_state & currBit) != currBit) { // если на канале низкий уровень if ((prev_in_state & currBit) == currBit) { // если в прошлый раз был высокий PORTB |= (1 << i); // ставим высокий уровень на соотв. выходе } } else if ((prev_in_state & currBit) != currBit) { // вх. импульс закончился ? // вычисляем, при каком знач.счетчика micros надо гасить соотв. выход pulse[i] = p_ext[i] + micros(); } else if ((signed long int)(pulse[i] - micros()) <= 0) { // не надо ли гасить выход? PORTB &= ~(1 << i); // гасим выход } } prev_in_state = in_state; // сохраняем текущее состояние входов } } else { PORTC &=~(1<<PC2);PORTB=0x00; } }А хотябы блочную схему того, чем управляете ?
Как видно в скетче импульс пришел включаем соответсвуюший выход и добавляем задержку p_ext 1800 это у нас 1,8мс. Но это добавка к выходу не хватает когда идет нагрузка на двигатель. МАП сенсор работает как потонциометр средней ноги идет сигнал соответсвуюшей разрежение в коллекторе. При холостом ходу разрежение составляет 40кПА это у нас 1,55Вольт идет средней ноги, когда идет нагрузка разрежение увличивается. Теперь можно подать на ардуино вход А1 сигнал с МАП сенора (1,5Вольт это 40кПА - 4,5Вольт 100кПА) так мы можем определить какая нагрузка идет на двигатель. Чтобы определить на газу какая нагрузка идет на двигатель с начала проехал на бензине и проехал на газу сравнил.
Ага, понять принцип всей схемы сложно...
1. Я правильно понял, что от длительности открытия форсунок и от оборотов двигателя зависит давление во впускном коллекторе, которое показывает МАП сенсор ?
2. Т.е. чем больше давление, тем дольше должны быть открыты форсунки, но не выходить за рамки определенных пределов?
3. Как должно меняться вермя открытия в зависимости от давления ? Закон или табличка ?
п.с. Как я это пинимаю )))
Вот так табличка примерно выглядит, тут и для бензина и для газа, но для другого движка. давление на впуске зависит от положения дроссельной заслонки, а импульс это время впрыска за такт впуска и он задается уже в зависимости от давления в коллекторе чтобы создать правильный состав смеси.
А давление в коллекторе показывает у нас МАП сенсор ?
Осталось только у автора узнасть желаемый закон изменения продолжительности импульса в зависимости от давления для газа и для бензина и видимо необходимо учесть абсолютную темпераутру воздуаха, для опоерделения коллва подаваемого воздуха ?
Он самый, мап сенсор, температуру впринципе не так и важно, широты регулирования бензомозгов хватает ии без этой коррекции, а так меряют температуру газа перед форсункой, температуру воздуха меряют бензиновые мозги. А если ТС намеревается отдельные мозги для газа то там надо и кучу других параметров учитывать
long p_dobavka; int MAP; void setup() { } void loop() { if(1.55<MAP>0.85)//если МАП больше 0,85 бар и меньше 1,55 бар { p_dobavka=2.5;//2.5 милисекунд } else p_dobavka=0; }Может так он заработает
long p_dobavka; int MAP; void setup() { } void loop() { if(1.55<MAP>0.85)//если МАП больше 0,85 бар и меньше 1,55 бар { p_dobavka=2.5;//2.5 милисекунд } else p_dobavka=0; }Может так он заработает
Очень интересно, может расскажите подробней о Ваших изысканиях ?