Обработка сигнала ДМРВ/MAF
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Обработка сигнала ДМРВ/MAF
Итак, у нас есть датчик ДМРВ с известной тарировкой в кг/час.
Вопрос: какая нам нужна логика считывания сигнала с этого датчика, чтоб умножить полученное значение на время цикла и получить массу воздуха за время цикла?
Варианты:
1) читаем датчик ДМРВ 100 раз в секунду, радуемся
2) читаем датчик ДМРВ один раз за цикл двигателя в конкретном угловом положении двигателя
3) другие варианты?
Нужна ли для получения массы воздуха за цикл поправка VE, аналогичная поправке в случае ДАД? Какое будет значение этот поправки по умолчанию?
Конкретные датчики и распиновки обсуждаем в http://rusefi.com/forum/viewtopic.php?f=8&t=792
Вопрос: какая нам нужна логика считывания сигнала с этого датчика, чтоб умножить полученное значение на время цикла и получить массу воздуха за время цикла?
Варианты:
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
Для уменьшения математических действий, значения в таблицу в памяти эбу заносить уже пересчитанными из кг/ч в мг/милисек.
Тогда расчет циклового наполнения воздухом для стационарных режимов----
Считываем за пол оборота тысячу раз в секунду, суммируем. Получившееся число это количество миллиграмм воздуха за цикл на один цилиндр
Затем множим на значение из "поправка наполнения по дросселю" она же таблица ПЦН обороты-дроссель. что то типа 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 время открытия форсунки в фазированном режиме в миллисек
останется добавить время дедтайма форсунки(динамическая производительность)
Тогда расчет циклового наполнения воздухом для стационарных режимов----
Считываем за пол оборота тысячу раз в секунду, суммируем. Получившееся число это количество миллиграмм воздуха за цикл на один цилиндр
Затем множим на значение из "поправка наполнения по дросселю" она же таблица ПЦН обороты-дроссель. что то типа 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 время открытия форсунки в фазированном режиме в миллисек
останется добавить время дедтайма форсунки(динамическая производительность)
Re: Обработка сигнала ДМРВ/MAF
Если пол оборота длится 5.43 милисек то пятое значение предлагаю умножить на 0.43 надеюсь мысль ясна
Re: Обработка сигнала ДМРВ/MAF
Обрабатывать примерно так же как и ДАД, потому что ДМРВ точно так же регистрирует пульсации на впуске, но при этом ещё врёт в переходных режимах, что придётся учитывать отдельно.
Красный - ДМРВ
Зелёный - ДАД
Красный - ДМРВ
Зелёный - ДАД
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
Если тоже усреднять, как и ДАД - то мне нужно переименовать файл map_averaging.cpp
и возникает вопрос - как бы этот файл назвать?
intake_air_averaging.cpp? fast_sensor_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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
И кстати усреднять надо не напряжение, а полученное значение расхода воздуха, т.к. передаточная характеристика ДМРВ в отличии от ДАД нелинейная. Это в свою очередь увеличивает накладные расходы.
fast_sensor_averaging по смыслу подходит
fast_sensor_averaging по смыслу подходит
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
Да, естественно. Там будет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];
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
Sergey89 wrote:И кстати усреднять надо не напряжение, а полученное значение расхода воздуха, т.к. передаточная характеристика ДМРВ в отличии от ДАД нелинейная. Это в свою очередь увеличивает накладные расходы.
fast_sensor_averaging по смыслу подходит
А для чего усреднять???
В окне полуоборота будет посчитан прошедший воздух как сумма миллисекундных отрезков потока, что в приближении и дает как бы сумму расхода, то есть массу всего прошедшего воздуха за пол оборота.
Другое дело это потом полученную массу поправить по оборотам дросселю.
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
Ты сам предлагаешь усреднять, просто ты предлагаешь за счёт хитрости с частотой и заранее делением на 1000 усреднять без деления. Давайте сейчас в такие детали вдаваться не будем, главное суть - а суть здесь то, что нам нужно много замеров за один цикл.mivaol wrote:А для чего усреднять???
В окне полуоборота будет посчитан прошедший воздух как сумма миллисекундных отрезков потока, что в приближении и дает как бы сумму расхода, то есть массу всего прошедшего воздуха за пол оборота.
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
Как быть с тем что пол оборота может занять заметно некратное количество замеров ацп ?
Даже для 1500 пол оборота это всего 20 миллисек
Возможно ли будет учитывать это?
Даже для 1500 пол оборота это всего 20 миллисек
Возможно ли будет учитывать это?
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
Спасибо за пример!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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
какая-то непонятность: весь цикл при 6000RPM длится (если я не глючу) 20мс. то есть нужны другие, более производительные форсунки?
-
- Posts: 33
- Joined: Thu Aug 21, 2014 5:30 pm
- Location: Russia, Saratov
Re: Обработка сигнала ДМРВ/MAF
У вас ошибка где то врасчёте.russian wrote:на 6000 оборотов при 200cc форсунках и 300кг/ч и AFR 13 получил полное время открытия за цикл двигателя 26.7099мс
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
"полное время" я имел ввиду суммарное время всеми форсунками. Если форсункок 4 штуки, то делим на 4 и сразу становится проще.puff wrote:какая-то непонятность: весь цикл при 6000RPM длится (если я не глючу) 20мс. то есть нужны другие, более производительные форсунки?
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
-
- Posts: 33
- Joined: Thu Aug 21, 2014 5:30 pm
- Location: Russia, Saratov
Re: Обработка сигнала ДМРВ/MAF
Всё равно не понятно, 6,677475мс на форсунку. 6,677475*2,5*13=217,0179375мг/циклrussian wrote: "полное время" я имел ввиду суммарное время всеми форсунками. Если форсункок 4 штуки, то делим на 4 и сразу становится проще.
Last edited by sasha.kams on Sat Feb 14, 2015 2:06 pm, edited 1 time in total.
Re: Обработка сигнала ДМРВ/MAF
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 килограмм в час заменить в прошивке на милиграмм в милисек тогда не нужно деление в исполняемом коде вообще.
В каких единицах планируется ввести это значение? Из названия выходит два способа указания кубический сантиметр минуту грамм в секунду
А что пойдет в прошивку?
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 килограмм в час заменить в прошивке на милиграмм в милисек тогда не нужно деление в исполняемом коде вообще.
- AndreyB
- Site Admin
- Posts: 14360
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Обработка сигнала ДМРВ/MAF
конфигурация идёт в cc_minutemivaol wrote:float injectorFlowRate = cc_minute_to_gramm_second(engineConfiguration->injector.flow);
прошивка потом конвертирует в бензиновый 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Обработка сигнала ДМРВ/MAF
Если получилось 26 милисек при 200сс форсунках на 6000 при 300кг воздуха реально где то ошибка!sasha.kams wrote:У вас ошибка где то врасчёте.russian wrote:на 6000 оборотов при 200cc форсунках и 300кг/ч и AFR 13 получил полное время открытия за цикл двигателя 26.7099мс
83.2 милиграмма воздуха в милисек цикл(два оборота) 20мс 1664 милиграмма воздуха за цикл делим на 13 равно 128 милиграмм бенза на четыре форсунки это 32 милиграмма на форсунку 32/2.5= 12.8 ДЛИТЕЛЬНОСТЬ ОТКРЫТИЯ ОДНОЙ ФОРСУНКИ ПРИ ЧЕТЫРЕХ ЦИЛИНДРАХ.
128 милиграмм на 6 форсунок по 200сс милиграмм бензина на форсунку 21.33(3) / 2.5 равно 8.53(3)
грамм_секунда пойдет! в принципе то же самое что милиграмм в милисекунду просто написано по другому