бортовой компьютер на ауди

medvedka777
Offline
Зарегистрирован: 29.06.2017

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

 

одноко оказалась полной, а не как была у меня

и вот захотелось не поставить экран, дабы и расход считало и показывало неисправности, да есть вариант заводской, но хотелось другого и более функционального

это заводской вариант но как видим в стиле 90х) хотя сами приборы красивые, ну вобщем захотелось

medvedka777
Offline
Зарегистрирован: 29.06.2017

и так, основные ошибки бск я сделал, но в упор не могу сделать расчет расхода топлива

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
int oil = 4;    
int water = 5;
int speedtemp = 2;
int injector = 3;
int lichts = 7;
int i = 0;

void setup() {
  // put your setup code here, to run once:
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

pinMode(oil, INPUT);
pinMode(water, INPUT);
pinMode(lichts, INPUT);
i=1; 


}

void loop() {
  
  if (digitalRead(oil)==LOW)
{

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillTriangle (120,0,0,250,240,250,ILI9341_RED);
tft.setTextColor(ILI9341_BLACK);  tft.setTextSize(17);
tft.setCursor(80, 110);
tft.println("!");
tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(6);
tft.setCursor(70, 120);
tft.println("OIL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
i=1; 
}
else if (digitalRead(water)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillRect (0,0,240,250,ILI9341_YELLOW);
tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(70, 30);
tft.println("LOW");
tft.setCursor(40, 90);
tft.println("WATER");
tft.setCursor(40, 150);
tft.println("LEVEL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
   delay(1000);
i=1; 
}

else if (digitalRead(lichts)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);

tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(30, 30);
tft.println("brake");
tft.setCursor(7, 90);
tft.println("lights");


i=1; 
}




else if (i==1)
{i--;     
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    tft.begin();
   tft.fillScreen(ILI9341_BLACK);
    tft.fillRect (0,150,240,3,ILI9341_WHITE);
tft.setCursor(150, 180);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("Litr");
tft.setCursor(150, 210);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("hour");    
    }

else {        


 } 
 
 
 }

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

http://arduino.ru/forum/proekty/bortovoi-kompyuter-dlya-opel-zafira?page=14

в данной теме параметры получали через к-лайн по запросу с ЭБУ. Расчет расхода топлива велся исходя из циклового расхода топлива, т.е. кг/такт. Если в вашем случае через к-лайн не вариант, то с форсунки тоже можно расчитать, но! Сигнал с форсунки аккуратнее берите, там по 100 вольт бывают всплески, самоиндукция однако. 

medvedka777
Offline
Зарегистрирован: 29.06.2017

и немного фоток процесса

MaksVV
Offline
Зарегистрирован: 06.08.2015

собственно нужно знать сколько топлива нальёт форсунка за какое то время, например 1 сек, тогда можно рассчитать.

medvedka777
Offline
Зарегистрирован: 29.06.2017

примерное значение есть в эльзе, а по факту уже можно будет константами подогнать, только вот как это правильно описать, ведь то что бросал не применимо без изменения библиотека экрана другая плюс я не понимаю как организовать вывод значения на экран, его правильного затирания и как организовать подсчет форсунки, ведь есть не только количество импульсов но и качество... форсунки управляются минусом и после оптопара и на ногу

MaksVV
Offline
Зарегистрирован: 06.08.2015

вот как можно время впрыска измерить и обороты, коряво конечно, но чем богаты, вход с оптопары (форсунки) на 2 пин обязательно. Код не проверен.

volatile unsigned long t1=0;
volatile unsigned long t2=0;
volatile unsigned long t3=0;
volatile bool flag = 0;
volatile bool flagRPM = 0;

int InjTime =0;
int Rpm =0;


void setup() 
{

  pinMode(2,INPUT);
  
   attachInterrupt(0, pin_ISR, CHANGE);
}

void loop() 
{
 InjTime = t2-t1;
 Rpm = 1000/(t3-t1)*120;
}


void pin_ISR() 
{
  flag=!flag;
  if (flag)  {t1 = millis(); flagRPM=!flagRPM;}
  else       t2 = millis();
  if (!flagRPM) t3 = millis();
}

 

medvedka777
Offline
Зарегистрирован: 29.06.2017
0-280-150-552 14.25 149.8 107.7

это по форсунке, первое это номер, второе итд

LBS/HR куб.см\мин грамм

 

medvedka777
Offline
Зарегистрирован: 29.06.2017

Суть в том что надо ещё бы научится выводить это все и обновлять, кроме того я не понимаю как делать средний расход, как считать количество израсходованного топлива... я так понимаю в предыдущей теме что то получилось, но кроме формулы надо ещё понимать как это описать, кроме того библиотека экрана очень своеобразная, и отличается от вышепредложенной, можно например для начала попробовать просто попробовать выводить на экран какие то средние значения, тоесть проверить что оно там подаёт на ноги, плюс как оно жил все отрисовывается будет.... но в идеале бы конечно хотелось бы все по максимуму сразу сделать ибо снимать не охота каждый раз, хотя можно попробовать вывести пока шнур с машины..

MaksVV
Offline
Зарегистрирован: 06.08.2015

сначала всё тестриуется на lcd 1602, делаешь отладку всёх параметров, чтоб были корректны, быстро обновлялись и т.д. Потом красоту на tft выводишь 

MaksVV
Offline
Зарегистрирован: 06.08.2015

средний расход можно считать двумя путями.

1.Каким либо макаром измерить уровень топлива, хаха объем израсходаванного топлива и тупо делить на расстояние.

2. Мгновенный расход периодически заносить в ячейки еепром ардуино (штук 100 например) и брать среднее арифметическое. Здесь сложно будет учесть расход, когда машина стоит на месте. 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

сначала мгновенный бы получить, а там видно будет

infyniti
Offline
Зарегистрирован: 15.07.2017

У тебя давление в системе одно тебе нужно знать сколько в какой временной промежуток она наливает и складывать то что налила.и умножать на количество форс

MaksVV
Offline
Зарегистрирован: 06.08.2015

Подставим. Обороты ХХ обычно 800. Время впрыска на ХХ 3,4мс. цилиндра 4

Расход = 150 /60 /1000 * 3,4 / 1000 * 800 / 2 * 60 * 4 = 0,816 л/час очень похоже на правду

 

infyniti
Offline
Зарегистрирован: 15.07.2017

Чтоб измерить точный расход не нужно измерять за какой промежуток наливает фарсунка.

Вернее сказать если фарсунка налила за 1 минуту при импульсе в 1 мили 100 г то эти сто грам делим на количество импульсов в минуту и еще нужно промежуток между импульсом учесть и отнять.

Нужно измерить все временные импульсы.Нужно составить таблицу со всеми временными импульсами и замерами топлива.Потом получать импульсы с ЭБУ и по ним производить подсчет.

medvedka777
Offline
Зарегистрирован: 29.06.2017

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

medvedka777
Offline
Зарегистрирован: 29.06.2017

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

сигнал с форсунки (через оптрон естественно) подать одновременно на пин 2 и на 3 ардуино, Скетч для 6 цил. ДВС 

volatile unsigned long t1=0;
volatile unsigned long t2=0;
volatile unsigned long t3=0;
volatile unsigned long t4=0;
volatile bool flag = 0;
volatile bool flagRPM = 0;
volatile bool ReadyRPM = 0;
volatile bool ReadyINJ = 0;

float InjTime =0.00;
float Lhour = 0.00;
float L100 = 0.00;
int Rpm =0;
float Speed = 0.00;



void setup() 
{

  pinMode(2,INPUT); digitalWrite (2,HIGH);
  pinMode(3,INPUT); digitalWrite (3,HIGH);
  
   attachInterrupt(0, INJTIME, CHANGE);
   attachInterrupt(1, RPM, RISING);
}

void loop() 
{
 if (ReadyINJ) {InjTime = (float)(t2-t1)/1000.00; ReadyINJ=0;}
 if (ReadyRPM) {Rpm = 120000/(t3-t1); ReadyRPM = 0;}
 Lhour = 9.00*(float)InjTime*(float)Rpm/20000.00; // формула расхода топлива л/час
 L100 = (float)Lhour*100.00/(float)Speed;          // формула расхода топлива л/100км
  
}


void INJTIME() 
{
  flag=!flag;
  if (flag)  t1 = micros(); 
  else    {   t2 = micros(); ReadyINJ =1;}
  
}


void RPM () 
{
  flagRPM=!flagRPM;
  if (flagRPM)  t3 = millis(); 
  else       {   t4 = millis(); ReadyRPM =1;}
  
}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

только надо ещё чем то скорость а/м измерять, а прерывания уже закончились

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

Чтоб измерить точный расход не нужно измерять за какой промежуток наливает фарсунка.

Вернее сказать если фарсунка налила за 1 минуту при импульсе в 1 мили 100 г то эти сто грам делим на количество импульсов в минуту и еще нужно промежуток между импульсом учесть и отнять.

Нужно измерить все временные импульсы.Нужно составить таблицу со всеми временными импульсами и замерами топлива.Потом получать импульсы с ЭБУ и по ним производить подсчет.

чушь

medvedka777
Offline
Зарегистрирован: 29.06.2017

И да, холостые обороты где то у меня 650-700, вобщем формула думаю рабочая, теперь надо описать это в коде, и с учётом того что все уже стоит и работает хотяб как бск нет желания курочить и вставлять другой экран, надо отработать на экране чтобы выводило, а подкорректировать расход и расположение это уже мелочи

MaksVV
Offline
Зарегистрирован: 06.08.2015

скетч поправил на 6 цил. 

medvedka777
Offline
Зарегистрирован: 29.06.2017

Не совсем понимаю зачем на два пина подавать??

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:

Чтоб измерить точный расход не нужно измерять за какой промежуток наливает фарсунка.

Вернее сказать если фарсунка налила за 1 минуту при импульсе в 1 мили 100 г то эти сто грам делим на количество импульсов в минуту и еще нужно промежуток между импульсом учесть и отнять.

Нужно измерить все временные импульсы.Нужно составить таблицу со всеми временными импульсами и замерами топлива.Потом получать импульсы с ЭБУ и по ним производить подсчет.

чушь

Лямда работает не по оборотам двигателя а из расчета качества смеси ей пофиг на ваши обороты.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Эмм как бы обяъснить. потому что из меня программист никакой. По другому не знаю как. Суть такая  - на этих пинах сидят аппаратные прерывания. Про прерывания. Сигналы с форсунки очень быстрая штука, и если просто в цикле loop оправшивать форсунки, то в конкретный момент времени считывание скечта может находится в другом месте (не на считывании сигнала форсунки, а делать что то другое в этот момент) и ардуино пропустит импульс с форсунки. Когда используем прерывание, ардуино всё бросает и включает функцию обработчика прерывания, там мы и считываем сигнал с фосунки. 

Но когда нужно подсчитать время импульса, нужен и спад и нарастание фронта, а для подсчета оборотов только либо спад, либо нарастание. 

Поэтому одно прерывание используется для подсчета оборотов, другое - для измерения времени впрыска

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:
Лямда работает не по оборотам двигателя а из расчета качества смеси ей пофиг на ваши обороты.

а при чём тут лямбда? я вообщето не только обороты измеряю, но и время впрыска, что и является качеством

medvedka777
Offline
Зарегистрирован: 29.06.2017

В просторах интернета нашёл одну программу на эту тему, может что то с неё почерпнуть 

 

#include <LiquidCrystal.h>


#define SPEED_PIN A6 // Номер ноги для датчика скорости
#define INJECTOR_PIN A7 // Номер ноги для форсунки
#define PERIOD 1000000 // Период усреднения текущего расхода и обновления дисплея (микросекунды) - пять секунд

#define IDLE_STROKE_DURATION 21000 // Суммарное время открытия форсунок (милисекунды) за период на холостом ходу
#define IDLE_STROKE_HOUR_CONSUMPTION 0.7 // Часовой расход топлива на холостом ходу (литры в час)
#define TEST_SPEED 60.0 // Контрольная скорость (километры в час) для расчёта коэффициента пробега
#define TEST_TICKS 84 // Число импульсов с датчика скорости за период на контрольной скорости

#define HOUR_PERIODS ( 3600000000.0 / PERIOD ) // Число периодов в часу
#define FUEL_FACTOR ( IDLE_STROKE_HOUR_CONSUMPTION / HOUR_PERIODS / IDLE_STROKE_DURATION ) // Коэффициент расхода топлива (литры) за период
#define RANGE_FACTOR ( TEST_SPEED / TEST_TICKS / HOUR_PERIODS ) // Коэффициент пробега (километры) за период
#define CONSUMPTION_FACTOR ( 100.0 * FUEL_FACTOR / RANGE_FACTOR ) // Коэффициент километрового расхода топлива (литры на 100 км)

#define TICKS_TRESHOLD 1 // Порог (импульсы датчика скорости) за период, выше которого можно считать километровый расход
#define DURATION_CORR 0 // Поправка при измерении длительности времени открытия одной форсунки (микросекунды)
#define AVG_LENGTH 10 // Число периодов для усреднения

#define AVG_REFRESH_TIME 1 // Время в часах, после которого сбрасывается усреднённый километровый расход, если не было сброса по расстоянию (1 час)
#define AVG_REFRESH_LENGTH 0.1 // Расстояние в километрах, после которого сбрасывается усреднённый километровый расход (100 м)
#define AVG_REFRESH_PERIODS ( AVG_REFRESH_TIME * HOUR_PERIODS ) // Число периодов между обновлениями среднего расхода
#define AVG_REFRESH_TICKS ( AVG_REFRESH_LENGTH / RANGE_FACTOR ) // Число импульсов датчика скорости между обновлениями среднего расхода

// Строковые константы
#define STR_AVG String(" Cp:")
#define STR_CUR String("M\xB4\xBD:")
#define STR_NA String(" \xBD/\xE3")
#define STR_KMH String("\xBA\xBC/\xC0")

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned long dur;
unsigned long dur_t;
unsigned long t;

boolean last_injector_state;
boolean last_speed_state;

unsigned long total_duration;
unsigned long total_ticks;
unsigned long total_avg_duration;
unsigned long total_avg_ticks;
unsigned long d_avg_duration;
unsigned long d_avg_ticks;
int period_counter;
// int period_counter2;

// Структура, описывающая данные для усреднения
struct consumption_data {
  unsigned int duration;
  word ticks; 
};

struct consumption_data data[AVG_LENGTH];
int avg_counter;

void setup() {
  // Serial.begin(9600);
  lcd.begin(8, 2);
  t = micros() + PERIOD;
  pinMode(INJECTOR_PIN, INPUT);
  pinMode(SPEED_PIN, INPUT);
  last_injector_state = analogRead(INJECTOR_PIN) > 500;
  last_speed_state = analogRead(SPEED_PIN) > 500;
  
  dur = 0;
  dur_t = micros();
  total_duration = 0;
  total_ticks = 0;
  total_avg_duration = total_duration;
  total_avg_ticks = total_ticks;
  d_avg_duration = total_duration;
  d_avg_ticks = total_ticks;
  
  // Инициализация данных для усреднения
  for (int i=0; i < AVG_LENGTH; ++i) {
    data[i].duration = 0;
    data[i].ticks = 0;
  }
  
  period_counter = 0;
//  period_counter2 = 0;
  avg_counter = 0;
}

void loop() {
  boolean injector_state = analogRead(INJECTOR_PIN) > 500;
  boolean speed_state = analogRead(SPEED_PIN) > 500;
  unsigned long new_t = micros();
  
  // Вычисление мгновенных значений
  
  if (injector_state != last_injector_state) {
    if (injector_state) {
      dur = new_t - dur_t;
      if (dur) dur += DURATION_CORR; // Поправочка
      total_duration += dur;
    } else {
      dur_t = new_t;
      dur = 0;
    }
    
    last_injector_state = injector_state;
  }
  
  if (speed_state != last_speed_state) {
    total_ticks++;
    
    last_speed_state = speed_state;
  }
  
  // Действия, которые выполняются раз в секунду
  
  if (new_t >= t) {
    if (!dur) {
      dur = new_t - dur_t;
      if (dur) dur += DURATION_CORR; // Поправочка
      total_duration += dur;
    }
    
    // Отладочная установка значений
    
//    if (period_counter2 < AVG_LENGTH * AVG_REFRESH_PERIODS) {
//      total_duration = 100000;
//      total_ticks = 56;
//    } else if (period_counter2 < 2 * AVG_LENGTH * AVG_REFRESH_PERIODS) {
//      total_duration = 20000;
//      total_ticks = 1;
//    } else {
//      total_duration = 100000;
//      total_ticks = 56;
//    }
    
    d_avg_duration += total_duration;
    d_avg_ticks += total_ticks;
    
    ++period_counter;
//    ++period_counter2;
    
    if (d_avg_ticks >= AVG_REFRESH_TICKS || period_counter >= AVG_REFRESH_PERIODS) {
      // Вычисление средних значений
      
      // total_avg_duration += d_avg_duration - data[avg_counter].duration;
      /// total_avg_ticks += d_avg_ticks - data[avg_counter].ticks;
      
      data[avg_counter].duration = d_avg_duration;
      data[avg_counter].ticks = d_avg_ticks;

      total_avg_duration = 0;
      total_avg_ticks = 0;
      
      for (int i=0; i < AVG_LENGTH; i++) {
        total_avg_duration += data[i].duration;
        total_avg_ticks += data[i].ticks;
      }
      
      period_counter = 0;
      d_avg_duration = 0;
      d_avg_ticks = 0;

      ++avg_counter;
      if (avg_counter >= AVG_LENGTH)
        avg_counter = 0;
    }
    
    // Конвертация значений в физические единицы и вывод на экран

    String s1, s2, s3;
    unsigned int consumption = 0;
    unsigned int avg_consumption = 0;
    
    if (total_ticks > TICKS_TRESHOLD) {
      consumption = 10.0 * CONSUMPTION_FACTOR * total_duration / total_ticks;
    }

    if (total_avg_ticks > TICKS_TRESHOLD) {
      avg_consumption = 10.0 * CONSUMPTION_FACTOR * total_avg_duration / total_avg_ticks;
    }
    
    unsigned int hour_consumption = 10.0 * FUEL_FACTOR * total_duration * HOUR_PERIODS;
    unsigned int spd = RANGE_FACTOR * total_ticks * HOUR_PERIODS;
    
    s1 = String(total_duration, DEC);

    if (total_ticks > TICKS_TRESHOLD) {
      s1 = STR_CUR + format(consumption);
      // s1 = format(consumption);
    } else {
      s1 = STR_CUR + STR_NA;
      // s1 = "n/a ";
    }

    if (total_avg_ticks > TICKS_TRESHOLD) {
      s2 = STR_AVG + format(avg_consumption);
      // s2 = format(avg_consumption);
    } else {
      s2 = STR_AVG + STR_NA;
      // s2 = "n/a ";
    }

    // s2 = "hr: " + format(hour_consumption);
    // s2 = format(hour_consumption);
    
    // s3 = "sp: " + String(spd, DEC);
    // s3 = String(spd, DEC);
    // s3 = String(total_ticks, DEC);
    
    // int iters = 3 - s3.length();
    // int iters = 8 - s3.length();
    
    // for(int i = 0; i < iters; ++i)
    //  s3 = " " + s3;
      
    // int iters2 = 8 - s1.length();
    
    // for(int i = 0; i < iters2; ++i)
    //  s1 = " " + s1;
    
    // s3 += STR_KMH;
    
    lcd.setCursor(0,0);
    lcd.print(s2);
    
    lcd.setCursor(0,1);
    lcd.print(s1);
    
    total_duration = 0;
    total_ticks = 0;
    t = new_t + PERIOD;
  }
}

String format(unsigned int dec) {
  if (dec > 1000) return String("##.#");
  
  unsigned int intPart = dec / 10;
  unsigned int fracPart = dec % 10;
  String result = String(intPart, DEC) + "," + String(fracPart, DEC);

  int iters = 4 - result.length();  
  for(int i = 0; i < iters; ++i)
    result = " " + result;

  return result;
}
MaksVV
Offline
Зарегистрирован: 06.08.2015

мне ниче не понятно в этом скетче, замудрено както

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:
Лямда работает не по оборотам двигателя а из расчета качества смеси ей пофиг на ваши обороты.

а при чём тут лямбда? я вообщето не только обороты измеряю, но и время впрыска, что и является качеством

Подставим. Обороты ХХ обычно 800. Время впрыска на ХХ 3,4мс. цилиндра 4

Расход = 150 /60 /1000 * 3,4 / 1000 * 800 / 2 * 60 * 4 = 0,816 л/час очень похоже на правду

А это что?Вот это чушь.

 

medvedka777
Offline
Зарегистрирован: 29.06.2017

infyniti пишет:

MaksVV пишет:

infyniti пишет:

Чтоб измерить точный расход не нужно измерять за какой промежуток наливает фарсунка.

Вернее сказать если фарсунка налила за 1 минуту при импульсе в 1 мили 100 г то эти сто грам делим на количество импульсов в минуту и еще нужно промежуток между импульсом учесть и отнять.

Нужно измерить все временные импульсы.Нужно составить таблицу со всеми временными импульсами и замерами топлива.Потом получать импульсы с ЭБУ и по ним производить подсчет.

чушь

Лямда работает не по оборотам двигателя а из расчета качества смеси ей пофиг на ваши обороты.

 

 

смотри, нам пофиг что там датчики считывают и лямбда в том числе, мы не лезем в мозги, нам нужно понимать сколько подано форсункой топлива, тоесть сколько раз она сработала за период и сколько времени была открыта, потом добавляем в расчёт количество тиков датчика скорости и высчитываем расход на 100 км

medvedka777
Offline
Зарегистрирован: 29.06.2017

Хотя может ты и прав, если взять с кварца устойчивое значение времени и понимать сколько из этого времени форсунка была открыта то поймём сколько она влила бензина ща эту единицу времени, но есть одно но, если мы так сделаем очень много импульсов форсунки не будем учитывать ибо они будут попадать в промежутках между этим эталонным временем

infyniti
Offline
Зарегистрирован: 15.07.2017

medvedka777 пишет:

В просторах интернета нашёл одну программу на эту тему, может что то с неё почерпнуть 

 

 

Средний расход без учета лямбды

infyniti
Offline
Зарегистрирован: 15.07.2017

Расход на сотну это одно а расход топлива это другое.На сотню берите с поплывка и спидометра это тотже потенциометр что голову морочите.

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti, ты вообще не шаришь походу. Физику учи, тут всё просто. какие нафиг лямбды?

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

MaksVV пишет:

infyniti пишет:
Лямда работает не по оборотам двигателя а из расчета качества смеси ей пофиг на ваши обороты.

а при чём тут лямбда? я вообщето не только обороты измеряю, но и время впрыска, что и является качеством

Подставим. Обороты ХХ обычно 800. Время впрыска на ХХ 3,4мс. цилиндра 4

Расход = 150 /60 /1000 * 3,4 / 1000 * 800 / 2 * 60 * 4 = 0,816 л/час очень похоже на правду

А это что?Вот это чушь.

 

это я подставил в формулу значения, которые обычно наХХ, и получил расход который обычно бывает на ХХ, что подтверждает, что формула правильная. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

Расход на сотну это одно а расход топлива это другое.На сотню берите с поплывка и спидометра это тотже потенциометр что голову морочите.

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti, тебя учитель физики не учил, что когда выводишь формулу, её правильность можно проверить так - вместо параметров подставлять их единицы измерения, какието единицы измерения потом сокращаются и в итоге получим какие останутся единицы измерения.  Важно только приводить к общим единицам, например час в одном параметре и секунда в другом не катят, оба в часы перевести или оба в секунды. 

У меня в итоге как раз получилось л/час а в другой формуле л/100км

infyniti
Offline
Зарегистрирован: 15.07.2017

Ну та и нужна таблица с колько льет форсунка причем здесь обороты и скорость километры?

MaksVV
Offline
Зарегистрирован: 06.08.2015

дак medvedka777  и дал мне таблицу. В которой указана производительность форсунки, измеряется в мл/мин. Также для рачсета используется время впрыска и обороты, а для мгновенного расхода на 100км ещё скорость а/м требуется. В чем вопрос и чё тебя не устраивает не пойму

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

Ну та и нужна таблица с колько льет форсунка причем здесь обороты и скорость километры?

потому что если хоть немного подумать мозгами, не трудно понять,что расход топлива зависит от оборотов. 

с увеличением оборотов в минуту растёт количество впрыскиваний в минуту, а каждое впрыскивание это определённая порция топлива. поэтому растет количество порций в минуту, что и есть расход в минуту. Понятно, не?

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:

Ну та и нужна таблица с колько льет форсунка причем здесь обороты и скорость километры?

потому что если хоть немного подумать мозгами, не трудно понять,что расход топлива зависит от оборотов. 

с увеличением оборотов растёт количество впрыскиваний, а каждое впрыскивание это определённая порция топлива. Понятно, не?

Нет.Какой смысл от оборотов если известно количесиво импульсов и их время. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

а вообще количество импульсов за единицу времени это и есть обороты чтоб ты знал 

MaksVV
Offline
Зарегистрирован: 06.08.2015

всё бесполезно , тебе не понять походу, опять тему засрал

infyniti
Offline
Зарегистрирован: 15.07.2017

У вас есть фарсунка на которую идет импульс с ЭБУ вы получаете этот импульс какой он длинны сколько их в определенный промежуток времени.У вас неизвестная топливо.Зачем вам считать обороты?

MaksVV
Offline
Зарегистрирован: 06.08.2015

medvedka777 пишет:

Хотя может ты и прав, если взять с кварца устойчивое значение времени и понимать сколько из этого времени форсунка была открыта то поймём сколько она влила бензина ща эту единицу времени, но есть одно но, если мы так сделаем очень много импульсов форсунки не будем учитывать ибо они будут попадать в промежутках между этим эталонным временем

че вы сиськи мнёте. Формулу я вывел. сообщение #13. скетч тоже. пробуйте. Формула точно правильная,  измерения оборотов и время впрыска в скетче не уверен. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:
сколько их в определенный промежуток времени.  Зачем вам считать обороты?

это и есть обороты, дурень)) говоря обороты, я имею в виду частоту вращения ДВС

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:
сколько их в определенный промежуток времени.  Зачем вам считать обороты?

это и есть обороты, дурень))

Если я буду двигатся на скорости и отпущу газ он тоже точно мгновенный расход покажет?И если подумать еще примеров могу подкинуть.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Как ты не поймешь что количество оборотов в минуту это и есть количество впрыскиваний в минуту, а количество впрыскиваний это количество топлива, получаем количество топлива в минуту, переводим в часы, получаем количество топлива в час, это и есть расход

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

Если я буду двигатся на скорости и отпущу газ он тоже точно мгновенный расход покажет?И если подумать еще примеров могу подкинуть.

покажет 0, потому как в таком режиме обычно время впрыска 0, сосчитай по формуле