Чего там скринить-то? После описания версии в начале файла, есть такие строки: // Type declarations global to everything #define LC1_WB_SENSOR //#define AEM_WB_SENSOR Хотите LC1, оставляете как есть, хотите AEM, делаете так: // Type declarations global to everything //#define LC1_WB_SENSOR #define AEM_WB_SENSOR
вопрос скорее к михафедору можно ли добавить в список используемых контроллеров ШДК вот такой вот http://wbo2.narod.ru/ покупать жаба душит, а попаять всегда можно ) сталкивался ли кто с данным контроллером, возникают ли какие проблемы?
Что-то не пойму, залил последнюю версию что выкладывал mihafedor, заполнил таблицу VE и весь конфиг с 8*8 перенес. Но время открытия форсунок на работающем двигателе(на джетронике, к MS пока только датчики подключены) по нулям стоит. Только при включении зажигания дает 3мс впрыск, дальше 0.
Для mihafedor. Нашел несколько косяков в коде. Вот здесь Спойлер /***************************************************************************/ /*** VE table lookup ***/ /***************************************************************************/ void ve_table_lookup(void) { uint8_t ve_11, ve_12, ve_21, ve_22; uint8_t ve_low_kpa, ve_high_kpa; uint8_t afr_low_kpa, afr_high_kpa; struct search_table_t kpa, rpm; if (config.config13 & _BV(CONTROL_STRATEGY)) { //Alpha-N engine.kpa = engine.tps; } search_table(config.kparangeve, sizeof(config.kparangeve), engine.kpa, &kpa); search_table(config.rpmrangeve, sizeof(config.rpmrangeve), engine.rpm, &rpm); ve_11 = *(config.VE+12*(kpa.index-1)+(rpm.index-1)); ve_12 = *(config.VE+12*(kpa.index-1)+rpm.index); ve_21 = *(config.VE+12*kpa.index+(rpm.index-1)); ve_22 = *(config.VE+12*kpa.index+rpm.index); ve_low_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_11, ve_12, engine.rpm); ve_high_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_21, ve_22, engine.rpm); corr.ve = linear_interp(kpa.lbound, kpa.ubound, ve_low_kpa, ve_high_kpa, engine.kpa); ************************************************* думаю это нужно обернуть в if и если не используеться ШЛЗ, то незачем считать. ************************************************ ve_11 = *(AFR+12*(kpa.index-1)+(rpm.index-1)); ve_12 = *(AFR+12*(kpa.index-1)+rpm.index); ve_21 = *(AFR+12*kpa.index+(rpm.index-1)); ve_22 = *(AFR+12*kpa.index+rpm.index); afr_low_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_11, ve_12, engine.rpm); afr_high_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_21, ve_22, engine.rpm); corr.afr = linear_interp(kpa.lbound, kpa.ubound, afr_low_kpa, afr_high_kpa, engine.kpa); ********************************************** } Здесь Спойлер /***************************************************************************/ /*** calc total enrichment ***/ /***************************************************************************/ void calc_total_enrichment(void) { uint8_t fuel_tmp, batt_tmp, pw; uint8_t batt_high, batt_low; uint16_t res; // 8-bit x 16-bit multiplications res = (uint16_t)corr.warm; res = mult_div100(corr.tpsfuelcut, res); res = mult_div100(corr.air, res); res = mult_div100(corr.ego, res); res = mult_div100(corr.baro, res); if ((res >> 8) != 0) /* проверка на переполнение */ corr.gammae = 0xFF; else corr.gammae = (uint8_t)res; /* используется для ведения логов */ res = mult_div100(corr.ve, res); ******************************************************* Здесь думаю необходимо обернуть в if ******************************************************* res = mult_div100(corr.afr, res); /* корректируем состав смеси до нужного из таблицы */ ******************************************************* if (!(config.config13 & _BV(CONTROL_STRATEGY))) // speed-density res = mult_div100(engine.kpa, res); res = mult_div100(config.req_fuel, res); if ((res >> 8) != 0) // противное переполнение "... синий экран смерти!" fuel_tmp = 0xFF; else fuel_tmp = (uint8_t)res; /* battery voltage compensation */ /* вспомним, низкое напряжение бортовой сети только увеличивает время открытия форсунок */ batt_low = config.injopen + config.battfac; if (config.injopen <= config.battfac) batt_high = 0; else batt_high = config.injopen - config.battfac; #warning "this should be configurable via configuration struct" batt_tmp = linear_interp(61, 164, batt_low, batt_high, sensors[BATT]); // final pulsewidth calculation, wuhuw! if (fuel_tmp) { res = batt_tmp + fuel_tmp + corr.tpsaccel - config.injocfuel; if ((res >> 8) != 0) pw = 0xFF; else pw = (uint8_t)res; } else { pw = 0; } cli(); inj_port1.pwcalc = pw; inj_port2.pwcalc = pw; sei(); } PS: Проверил свои предположения на машине - заработало.
Вот любите Вы пустоту писать, никакой конкретики. Или всем надо весь ваш ресурс перечитать, чтоб найти и гдеж там о газе написано? Бегло глянул, не нашел. Нельзя привести конкретно в каком месте написано, форсунки ставил такие, редуктор такой и т.д. ?
TriZet, а таблицу желаемого состава смеси вы заполняли? Просто если в таблице будут нули, то и время впрыска тоже будет 0. А РХХ не пробовали крутить? Если нет желания работать с этой таблицей, то как вариант можно добавить конфигурационный бит, т.к в принципе коррекция по УДК всё-равно будет утягивать смесь к 14.7 или же как вы и предложили завернуть расчёт топлива в if
Так эта таблица вроде для фирокополосного датчика? Таблицу afr не заполнял, так-как думал что она не используеться(да и не должна вроде) при работе с узкополоской. Я сделал так Спойлер if (config.config13 & _BV(O2_WB_SENSOR)) { ve_11 = *(AFR+12*(kpa.index-1)+(rpm.index-1)); ve_12 = *(AFR+12*(kpa.index-1)+rpm.index); ve_21 = *(AFR+12*kpa.index+(rpm.index-1)); ve_22 = *(AFR+12*kpa.index+rpm.index); afr_low_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_11, ve_12, engine.rpm); afr_high_kpa = linear_interp(rpm.lbound, rpm.ubound, ve_21, ve_22, engine.rpm); corr.afr = linear_interp(kpa.lbound, kpa.ubound, afr_low_kpa, afr_high_kpa, engine.kpa); } } И второе Спойлер if (config.config13 & _BV(O2_WB_SENSOR)) { res = mult_div100(corr.afr, res); /* корректируем состав смеси до нужного из таблицы */ } Работает с пустой таблицей, проверено. Дальше не разбирался, пока нет необходимости в ШЛЗ.
Для тех кто не хочет изменять код или у кого VE уже откатано, можно просто заполнить таблицу Target AFR значениями 14,7
Здравствуйте все) Очень хочется посмотреть на исходники MSAVR, но не те старенькие B@G'овские. А те что были позже, до перехода на третью версию. Да, пускай они не работают или не компилируются или еще что-то. У кого есть, очень прошу поделиться, можно в личку. Насколько помню, Mentat-VVO успел их скачать, до того как их везде потёрли. Народ, отзовитесь!
http://homos.vl.ru/fornext/VEMS_1030_forV2.zip Можно компилить как под версию 3, так и под версию 2. для энтузиастов
Большое спасибо! А другие версии с исходниками есть (промежуточные)? В частности интересовала часть, отвечающая за зажигание.
edis.c отвечает за зажигание. Проект может быть скомпилён под V3, где уже есть выделенные 8 каналов на зажигание через защелку i259. Но поддержка платы V2 для этой версии исходников пока еще оставлена. Других вариантов у меня нет, кроме версии 0.1, мало чем от B&G кода отличающегося.
сделал индикатор, показывающий мгновенный расход в литрах/час. весьма своеобразный показатель. форсунки DEKA 1, от волги. насколько понял производительность 200мл/мин. в таком случае формула довольна простая: длительность импульса впрыска умножается на половину оборотов двигателя и делится на 1000. на холостом ходу получается порядка 1.1-1.2 литра. уменьшая значение VE машина начинает "подтраивать". длительность импульса на ХХ - 2.7-3 мсек. похоже на разумные значения, но итоговый расход, судя по залитому бензину значительно превышает желаемые цифры. подтекают магистрали? но тогда и запах должен быть... на 50 литрах проехал 270км, УЖАС
Народ, кто по узкой лямбде отстраивался, реально отстроить прошивку, или разоряться на ШДК? кто как отстраивал, подскажите
Очень стоит поставить ШДК. Если нет желания покупать, то вот __http://www.waltech.com/site/index.php/open-source-projects Пользуюсь им, есть небольшие скачки в показаниях. Но всегда можно подправить код, он открытый. И есть эмуляция узкополосной лямбды) На счет рассчетов. Посчитал так: Расход(л/ч) = A/1000*(B/1000)*C*D A - Производительность B - Длительность впрыска C - Обороты D - Количество отработавших форсунок за оборот Если попарно-параллельный, то получается как раз 1,2л/ч при 3мс впрыска. Но это же на холостом. а на ходу частенько ускорительное обогащение, да и карта может быть не точной, потому и расход (ИМХО). Может дело в моменте начала впрыска? То есть может стоит изменить время начала впрыска относительно положения датчика холла, кто задумывался над этим? Просто в прошивке не реализованы моменты впрыска Even/Odd и он начинается сразу после сигнала по датчику холла. Возможно тогда смесь будет лучше сгорать?
над капиталкой думали. компрессию проверили - в норме, порядка 12 во всех горшках. сказали, что в принципе и маслосъемные кольца могут создавать компрессию при измерениях. решили проверить открутив сопун. если при рабочем двигателе сильно дует из него, то взрыв мимо кассы идет. все в порядке. еле еле то ли дым то ли пар оттуда струится, как от сигареты. плюс ко всему до замены впрыска расход порядка 13 литров был. тяги не было, плохо заводилась и не ровно работал движок на ХХ. сейчас же ХХ весьма ровный. каких либо внешних признаков капиталки не установлено. масло ест в разумных пределах, в глаза не бросается. капиталку делать оооочень не хочется. колечки и вкладыши поменять не проблема, а мысль о расточке убивает ) движок то большой, снимать его совершенно не хочется. откуда уверенность в необходимости капиталки?