Обработка сигнала ДМРВ/MAF

Про байтики и логику ЭБУ
Post Reply
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Обработка сигнала ДМРВ/MAF

Post by AndreyB »

Итак, у нас есть датчик ДМРВ с известной тарировкой в кг/час.

Вопрос: какая нам нужна логика считывания сигнала с этого датчика, чтоб умножить полученное значение на время цикла и получить массу воздуха за время цикла?

Варианты:
1) читаем датчик ДМРВ 100 раз в секунду, радуемся
2) читаем датчик ДМРВ один раз за цикл двигателя в конкретном угловом положении двигателя
3) другие варианты?

Нужна ли для получения массы воздуха за цикл поправка VE, аналогичная поправке в случае ДАД? Какое будет значение этот поправки по умолчанию?

Конкретные датчики и распиновки обсуждаем в http://rusefi.com/forum/viewtopic.php?f=8&t=792
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

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

Тогда расчет циклового наполнения воздухом для стационарных режимов----
Считываем за пол оборота тысячу раз в секунду, суммируем. Получившееся число это количество миллиграмм воздуха за цикл на один цилиндр
Затем множим на значение из "поправка наполнения по дросселю" она же таблица ПЦН обороты-дроссель. что то типа VE для ДМРВ
готово..

P.S.
Форсунки так же тарированны милиграм в милисек потому после деления воздуха на афр достаточно получившееся разделить на значение форсунки(производительность) получится время в милисек

Чтобы обратно высчитать кг/ч для диагностики например цикловое наполнение множим на RPM множим на количество цилиндров и умножаем на 0.00003 получается расход воздуха двигателем мгновенный в кг/ч

Пример двигатель 4цилиндра на 6000 RPM на 100лс(300кг/ч) пол оборота 5 милисекунд то есть 5 значений ДМРВ(300кг/ч это 83.2 милиграм/милисек в среднем) 80+82+83+85+86 = 416 416 милиграмм на цикл , целевой AFR допустим 13 , форсунки допустим 2.5милиграмм/милисек(200cc при плотность бензина 0.75)
416/13=32 32 миллиграмма топлива нужно впрыснуть
32/2.5=12.8 12.8 время открытия форсунки в фазированном режиме в миллисек
останется добавить время дедтайма форсунки(динамическая производительность)
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

Если пол оборота длится 5.43 милисек то пятое значение предлагаю умножить на 0.43 надеюсь мысль ясна
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Обработка сигнала ДМРВ/MAF

Post by Sergey89 »

Обрабатывать примерно так же как и ДАД, потому что ДМРВ точно так же регистрирует пульсации на впуске, но при этом ещё врёт в переходных режимах, что придётся учитывать отдельно.

Красный - ДМРВ
Зелёный - ДАД

Image
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

Если тоже усреднять, как и ДАД - то мне нужно переименовать файл map_averaging.cpp
и возникает вопрос - как бы этот файл назвать?
intake_air_averaging.cpp? fast_sensor_averaging.cpp?
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Обработка сигнала ДМРВ/MAF

Post by Sergey89 »

И кстати усреднять надо не напряжение, а полученное значение расхода воздуха, т.к. передаточная характеристика ДМРВ в отличии от ДАД нелинейная. Это в свою очередь увеличивает накладные расходы.

fast_sensor_averaging по смыслу подходит
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

Sergey89 wrote:И кстати усреднять надо не напряжение, а полученное значение расхода воздуха
Да, естественно. Там будет

Code: Select all

	/**
	 * fast MAF decoding lookup table with ~0.2 volt step
	 * This table is build based on MAF decoding curve
	 */
	float mafDecodingLookup[MAF_DECODING_CACHE_SIZE];
оно там из 12 бит АЦП сделает 8 бит индекс в таблице декодирования датчика, будет быстро и надеюсь достаточно точно.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

Sergey89 wrote:И кстати усреднять надо не напряжение, а полученное значение расхода воздуха, т.к. передаточная характеристика ДМРВ в отличии от ДАД нелинейная. Это в свою очередь увеличивает накладные расходы.

fast_sensor_averaging по смыслу подходит

А для чего усреднять???

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

Другое дело это потом полученную массу поправить по оборотам дросселю.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

mivaol wrote:А для чего усреднять???

В окне полуоборота будет посчитан прошедший воздух как сумма миллисекундных отрезков потока, что в приближении и дает как бы сумму расхода, то есть массу всего прошедшего воздуха за пол оборота.
Ты сам предлагаешь усреднять, просто ты предлагаешь за счёт хитрости с частотой и заранее делением на 1000 усреднять без деления. Давайте сейчас в такие детали вдаваться не будем, главное суть - а суть здесь то, что нам нужно много замеров за один цикл.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

Как быть с тем что пол оборота может занять заметно некратное количество замеров ацп ?
Даже для 1500 пол оборота это всего 20 миллисек
Возможно ли будет учитывать это?
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

mivaol wrote:Пример двигатель 4цилиндра на 6000 RPM на 100лс(300кг/ч) пол оборота 5 милисекунд то есть 5 значений ДМРВ(300кг/ч это 83.2 милиграм/милисек в среднем) 80+82+83+85+86 = 416 416 милиграмм на цикл , целевой AFR допустим 13 , форсунки допустим 2.5милиграмм/милисек(200cc при плотность бензина 0.75)
416/13=32 32 миллиграмма топлива нужно впрыснуть
32/2.5=12.8 12.8 время открытия форсунки в фазированном режиме в миллисек
Спасибо за пример!
Написал код формул - fuel_math.cpp

на 6000 оборотов при 200cc форсунках и 300кг/ч и AFR 13 получил полное время открытия за цикл двигателя 26.7099мс
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
puff
contributor
contributor
Posts: 2961
Joined: Mon Nov 11, 2013 11:28 am
Location: Moskau

Re: Обработка сигнала ДМРВ/MAF

Post by puff »

какая-то непонятность: весь цикл при 6000RPM длится (если я не глючу) 20мс. то есть нужны другие, более производительные форсунки?
sasha.kams
Posts: 33
Joined: Thu Aug 21, 2014 5:30 pm
Location: Russia, Saratov

Re: Обработка сигнала ДМРВ/MAF

Post by sasha.kams »

russian wrote:на 6000 оборотов при 200cc форсунках и 300кг/ч и AFR 13 получил полное время открытия за цикл двигателя 26.7099мс
У вас ошибка где то врасчёте.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

puff wrote:какая-то непонятность: весь цикл при 6000RPM длится (если я не глючу) 20мс. то есть нужны другие, более производительные форсунки?
"полное время" я имел ввиду суммарное время всеми форсунками. Если форсункок 4 штуки, то делим на 4 и сразу становится проще.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
sasha.kams
Posts: 33
Joined: Thu Aug 21, 2014 5:30 pm
Location: Russia, Saratov

Re: Обработка сигнала ДМРВ/MAF

Post by sasha.kams »

russian wrote: "полное время" я имел ввиду суммарное время всеми форсунками. Если форсункок 4 штуки, то делим на 4 и сразу становится проще.
Всё равно не понятно, 6,677475мс на форсунку. 6,677475*2,5*13=217,0179375мг/цикл
Last edited by sasha.kams on Sat Feb 14, 2015 2:06 pm, edited 1 time in total.
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

float injectorFlowRate = cc_minute_to_gramm_second(engineConfiguration->injector.flow);

В каких единицах планируется ввести это значение? Из названия выходит два способа указания кубический сантиметр минуту грамм в секунду
А что пойдет в прошивку?

float afr = afrMap.getValue(airSpeed, rpm);

советую поиск АФР по дросселю throttle , так определение нагрузки более понятно а ведь именно от этого зависит целевой афр.

float afr = afrMap.getValue(throttle, rpm);


float fuelMassGramm = airMassKg / afr * 1000;

afr все таки заносится в прошивку в чистом виде ? например 14.74 так и хранится 14.74 не проще при переносе сделать из 14.74 - 0.0678426 ( то есть 1/x ) тогда не будет деления будет умножение.
Так же и airMassKg килограмм в час заменить в прошивке на милиграмм в милисек тогда не нужно деление в исполняемом коде вообще.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Обработка сигнала ДМРВ/MAF

Post by AndreyB »

mivaol wrote:float injectorFlowRate = cc_minute_to_gramm_second(engineConfiguration->injector.flow);
конфигурация идёт в cc_minute
прошивка потом конвертирует в бензиновый gramm_second
оптимизации какие-то будут чуть позже, пока нужно, чтоб функциально всё заработало. потом уже и оптимизации.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
mivaol
Posts: 260
Joined: Thu Jan 30, 2014 6:00 pm

Re: Обработка сигнала ДМРВ/MAF

Post by mivaol »

sasha.kams wrote:
russian wrote:на 6000 оборотов при 200cc форсунках и 300кг/ч и AFR 13 получил полное время открытия за цикл двигателя 26.7099мс
У вас ошибка где то врасчёте.
Если получилось 26 милисек при 200сс форсунках на 6000 при 300кг воздуха реально где то ошибка!

83.2 милиграмма воздуха в милисек цикл(два оборота) 20мс 1664 милиграмма воздуха за цикл делим на 13 равно 128 милиграмм бенза на четыре форсунки это 32 милиграмма на форсунку 32/2.5= 12.8 ДЛИТЕЛЬНОСТЬ ОТКРЫТИЯ ОДНОЙ ФОРСУНКИ ПРИ ЧЕТЫРЕХ ЦИЛИНДРАХ.

128 милиграмм на 6 форсунок по 200сс милиграмм бензина на форсунку 21.33(3) / 2.5 равно 8.53(3)



грамм_секунда пойдет! в принципе то же самое что милиграмм в милисекунду просто написано по другому
Post Reply