Всем прив. Опять хочется попинать старых "пердунов" по поводу осциллограммы Алекса, но не буду. Позиция Админа им обозначена и понятна. Его задолбали.
Цитата:
Потому что втереть людям в мозг даже элементарную арифметику ... это НЕ реально.
Вроде и соображают, а простых вещей хоть ты тресни ... не понимают
|
Остальные могут просто не знать элементарной работы ЭБУ с ДК.
Алекс, у вас замечательно получается снимать данные с двигателя, вам бы ещё научиться работать с источниками информации и правильно эти данные анализировать.
Итак , разберём ваши графики с напряжением ДК. Я надеюсь вы ничего не перепутали в подключении, и по оси У у вас реальное напряжение на датчике.
Для ЭБУ ваш график ни в пи..., ни в красную армию !!! Период около двух секунд, размах сигнала 0,2 в, время изменения сигнала 800 мс-1000 мс , форма пилообразная. Из нормы в нем только период(но и то, это норма для ДК в длинных трубах, у вас 30 см от головки блока). Если немного глубже копнуть интернет, можно найти с каким сигналом работает ЭБУ машины. Признак бедной смеси - напряжение ниже 0,2 в. Признак богатой смеси- выше 0,7 . То есть размах сигнала должен быть более 0,5 в ! . Время изменения сигнала, по фронту не более 250 мс, по спаду не более 450 мс(есть другие данные - не более 200 мс для обеих значений). Если сигнал не соответствует, ЭБУ считает ДК не исправным и данные с него игнорируются.
Перейдём ко второму графику.
Здесь с сигналом ДК так же всё очень плохо. Напряжение должно было подняться сразу гораздо выше 0,8 в и держаться на этом уровне(немного уменьшаться с прогревом ДК), у вас же наблюдается плавное нарастание. Я уже высказывал предположение, что у вас стоит "обманка" лямбда-зонда. Вот его схема
Анализируя оба ваших графика, прихожу к выводу- электронная обманка у вас стоит ! обычно она ставиться на второй ДК, после катализатора. Но судя по всему, вам её влепили на первый зонд ! Пилу из меандра делает RC цепочка, это видно по графику ХХ. Заряд-разряд конденсатора видно из второго графика разгона. Сравните свой график ДК во время разгона и этот заряда-разряда конденсатора.
У вас есть доступ к разъёму, ЭБУ прозвоните провод ДК напрямую, если сопротивление будет больше 1 ома ищите "обманку". Конечно смущает наличие китайского АФ-метра, может и он так сигнал усаживать, но это легко проверить отключив его.
Вы должны увидеть у себя примерно такой сигнал.
Добавлено через 29 минут
Цитата:
Сообщение от Admin
Другими словами.
Я вовсе не при делах …. и это какой-то аппаратный косяк ардуины.
И кстати …
Не видел в интернете примеров, чтобы с usb-порта с такой скоростью = 1 мс выводили сразу два значения.
|
Ну как же не при делах ? Вы программист, вам и карты в руки. Хорошо что поняли -ардуино не выполняет параллельных программ. Конечно не видя кода, который вы зачем то засекретили(наверное мечтаете впарить кому нибудь за много денех
), я не могу точно указать на ваш косяк. Но из моих опытов, совершенно бесплатно, могу сказать , обращение к Serial.print и вывод 3-х значений занимает 0,45 мс. реального времени. То есть выводить в порт значения можно только когда не производиться измерение времени сигналов, иначе, неизбежно будет пропущена часть сигнала и измерение будет некорректно.
Например в моем скетче вывод в порт происходит когда форсунка закрылась и время открытия и период уже подсчитаны.
Код:
#define INJECTOR_PIN 6 // Номер ноги для форсунки
unsigned long dur_injector_open ; //Продолжительность импульса форсунки
unsigned long t;//время изменения сигнала
unsigned long pre_t;// предыдущее время изменения сигнала
unsigned long t_injector_open ; //время открытия форсунки
unsigned long t_injector_closed ; //время закрытия форсунки
unsigned long period_injector ;//период открытия форсунки
boolean injector ;
boolean pre_injector ;
void setup() {
Serial.begin(115200);
pinMode(INJECTOR_PIN, INPUT_PULLUP);
}
void loop() {
pre_injector = injector ;
injector = digitalRead(INJECTOR_PIN) ;
if (injector != pre_injector) { //если состояние форсунки изменилось
t = micros();
if (!injector) {//если форсунка открыта
pre_t = t_injector_open ;
t_injector_open = t;
period_injector = (t_injector_open - pre_t) ; //период открытия
}
if (injector) { // если форсунка закрыта
t_injector_closed = t;
dur_injector_open = (t_injector_closed - t_injector_open) ;
Serial.print(dur_injector_open);//вывод в порт длины импульса
Serial.print(",");//разделитель для эксель
Serial.println(period_injector);//вывод в порт периода импульса
}
}
}
К этому коду легко можно добавить опрос аналогового входа и выводить в порт вместе с длиной и частотой импульсов на форсунке. Естественно частота опроса "напряжения ДК" будет зависить от оборотов двигателя но это не критично.