Имитация работы трамблёра автомобиля.

bifurkas
Offline
Зарегистрирован: 27.10.2013

Появилась у меня интересная задача - заменить высоковольтный распределитель зажигания на автомобиле низковольтным. Имеем 6 цилиндров, импульсы на высоковольтную катушку зажигания формируются Электронным блоком управления (ЭБУ)на основе датчиков положения коленвала и распредвала (ДПКВ и ДПРВ), и далее распределяются по цилиндрам с помощью механического высоковольтного распределителя - трамблёра (это для тех, кто не знает как работает зажигание автомобиля). Вот этот высоковольтный распределитель и нужно заменить низковольтным.

Идея такая: используем сигнал ДПРВ и импульсы с ЭБУ на катушку зажигания.

ДПРВ 180градусов поворота выдаёт "+", дрругие 180 градусов - "-"

Импулльсы с ЭБУ идут в 6 раз чаще, чем нужно каждому цилиндру, их то и нужно распределить по цилиндрам, используя данные с ДПРВ.

Нарисовалась вот такая программа:

[code]
const int buttonIGN = 10;     //
const int buttonCAM = 9;     //
const int syl1 = 7;
const int syl2 = 6;
const int syl3 = 5;
const int syl4 = 4;
const int syl5 = 3;
const int syl6 = 2;
int CAMstate = 0; //переменная состояния входа ДПРВ
int A = 0; // переменная состояния входа ЭБУ
int B = 0; //переменная для проверки смены сигнала ДПРВ
int I = 0; // переменная цикла тройного

 void setup()     
 {   
      pinMode(buttonIGN, INPUT); //ЭБУ       
      pinMode(buttonCAM, INPUT);  //ДПРВ
      pinMode(syl1, OUTPUT); 
      pinMode(syl2, OUTPUT);
      pinMode(syl3, OUTPUT); //выходы
      pinMode(syl4, OUTPUT);
      pinMode(syl5, OUTPUT);
      pinMode(syl6, OUTPUT); 
     A = digitalRead(buttonIGN);
     B = A; 
 } 

 void loop() 

 {
  CAMstate = digitalRead(buttonCAM); //опрос входа ДПРВ
    A = digitalRead(buttonIGN); //присвоение переменной А значения входа ЭБУ
      if (A != B) { //проверка смены сигнала входа ЭБУ
        I=I+1;  // увеличиваем счётчик циклов на 1
        B=A; //
        if (A==HIGH) { // если вход ЭБУ "+", то ...
        switch(I) { // ... производим выбор цилиндра
          case 1: 
          if (CAMstate==HIGH)
          {digitalWrite(syl1, HIGH);}      //зажигание в первом цилиндре
          else {digitalWrite(syl4, HIGH);} //в четвёртом и т.д.
          break;
          case 2: 
          if (CAMstate==HIGH)
          {digitalWrite(syl2, HIGH);}
          else {digitalWrite(syl5, HIGH);}
          break;
          case 3:
          if (CAMstate==HIGH)
          {digitalWrite(syl3, HIGH);}
          else {digitalWrite(syl6, HIGH);}
          break;
          case 4: I=0;             //проверка, не достиг ли цикл переполнения
        }
        }
        else {                     // если IGN "-"...
          digitalWrite(syl1, LOW); //... то все выходы в ноль
          digitalWrite(syl2, LOW);
          digitalWrite(syl3, LOW);
          digitalWrite(syl4, LOW);
          digitalWrite(syl5, LOW);
          digitalWrite(syl6, LOW);
        }
      }
      }    

но, как обычно что-то не хочет работать, на входящие сигналы не реагирует, выходных сигналов нет. Может ткнёте носом, где я напортачил, я всё-же автомобилист а не программист (а одно другому бывает и мешает)

bifurkas
Offline
Зарегистрирован: 27.10.2013

Что, нет добрых людей?

Я реализовал эту идею на логических элементах:

http://s010.radikal.ru/i314/1511/12/0353b06a4b80.jpg

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

bwn
Offline
Зарегистрирован: 25.08.2014

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

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Я думаю что для контактов  в 

void setup()    
16  {  
17       pinMode(buttonIGN, INPUT); //ЭБУ      
18

      pinMode(buttonCAM, INPUT);  //ДПРВ

 необходимо сделать подтяжку попитанию.

bifurkas
Offline
Зарегистрирован: 27.10.2013

bwn пишет:

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

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

Машина, для которой это делается - внедорожник для трофи. До места старта он доставляется или на жёсткой сцепке, или на эвакуаторе.

С кодом поможет кто? На логических элементах не всё гладко работает, требуются корректировки сигнала.

nik182
Offline
Зарегистрирован: 04.05.2015

Вопросы:

1: Оба фронта импульса ЭБУ рабочие или нет? В программе оба.

2: Длительность выходного импульса? В программе очень короткий.

3: ЭБУ уже вносит задержку зажигания?

4: Нужна ли привязка первого цилиндра к переходу -+  ДПРВ?

 

bifurkas
Offline
Зарегистрирован: 27.10.2013

nik182 пишет:

Вопросы:

1: Оба фронта импульса ЭБУ рабочие или нет? В программе оба.

2: Длительность выходного импульса? В программе очень короткий.

3: ЭБУ уже вносит задержку зажигания?

4: Нужна ли привязка первого цилиндра к переходу -+  ДПРВ?

 

1. Да, оба рабочие.

2. Длительность выходных импульсов на ключи катушек зажигания должна быть равна длительности входного импульса с ЭБУ.

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

4. Привязка первого цилиндра не нужна.

nik182
Offline
Зарегистрирован: 04.05.2015

Попробуй строку 35 поставить перед 38, строки 53 и 54 убрать.

I = 0 поставить под

case 3:

до IF

В таком варианте каждый положительный фронт ЭБУ будет включать выход - отрицательный выключать.

Не будет пропуска каждого 4 импульса ЭБУ. 

Перед 37 строкой нужна небольшая задержка, иначе дребезг положительного фронта ЭБУ может давать ложные пропуски. 

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

В остальном, если входные сигналы от 3 до 5 вольт, всё должно работать. Для проверки можно вставить дополнительно моргание светодиодом на плате в место где включаются - выключаются цилиндры.  

 

bifurkas
Offline
Зарегистрирован: 27.10.2013

Спасибо, попробую.

И Вы меня не совсем правильно поняли, привязка нужна, но не к первому цилиндру конкретно. Привязка происходит к одному из двух цилиндров, в зависимости от того, что первым придёт с ДПРВ, фронт или спад.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bifurkas пишет:

Спасибо, попробую.

И Вы меня не совсем правильно поняли, привязка нужна, но не к первому цилиндру конкретно. Привязка происходит к одному из двух цилиндров, в зависимости от того, что первым придёт с ДПРВ, фронт или спад.

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

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

вы на каждый горшок поставили по ВВ катушке ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

штатная - один датчик , один коммутатор , одна ВВ катушка и механический трамблёр ?
новая схема - один датчик , шесть коммутаторов и шесть ВВ катушек ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

На логических элементах не всё гладко работает, требуются корректировки сигнала.

если на логических элементах отработать - то не нужно корректировки....
это будет работать и точнее ,  и быстрее МК !!!!

bifurkas
Offline
Зарегистрирован: 27.10.2013

SU-27-16 пишет:

На логических элементах не всё гладко работает, требуются корректировки сигнала.

если на логических элементах отработать - то не нужно корректировки....
это будет работать и точнее ,  и быстрее МК !!!!

Я уже всё на логических элементах отработал, работает как часы. На микроконтроллере остался чисто спортивный интерес.

Штатная схема: на основе ДПРВ и ДПКВ ЭБУ формирует сигнал и подаёт его на одну катушку, с неё уже высокий сигнал (читаем - искра) идёт на механический высоковольтный распределитель и далее на свечи.

Реализовано мною: сигнал, сформированный ЭБУ подаётся на мою схему, с неё на 6 индивидуальных катушек.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Я уже всё на логических элементах отработал, работает как часы. На микроконтроллере остался чисто спортивный интерес.

нууууу , понятно...
расчленить сигнал на 6 фаз.....
....вот только без синхронизации - никак :(

"охота пуще неволи....."

bifurkas
Offline
Зарегистрирован: 27.10.2013

SU-27-16 пишет:

....вот только без синхронизации - никак :(

 

Синхронизация идёт с ДПРВ.

bifurkas
Offline
Зарегистрирован: 27.10.2013

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

согласен ! но не как вы писали в начале - 1-2-1-2-1-2-1.... ( 180 - + , 180 - - )
а - 1-2-3-1-2-3-1-2-3-.....
кататак....

bifurkas
Offline
Зарегистрирован: 27.10.2013

SU-27-16 пишет:

согласен ! но не как вы писали в начале - 1-2-1-2-1-2-1.... ( 180 - + , 180 - - )
а - 1-2-3-1-2-3-1-2-3-.....
кататак....

Я писАл правильно, штатный ДПРВ 180 фронт - 180 спад и задача стояла использовать его именно как сигнал синхронизации для правильного распределения сигнала с ЭБУ по шести катушкам.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bifurkas пишет:

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

1996 , переделка ОКИ с 1 ДХ-искрообразования , одного коммутатора и одной ВВ-катушки на два горшка....
....на 1 ДХ-искрообразования , два коммутатора и две катушки ВВ от "девятины"

....и такое было :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bifurkas пишет:

SU-27-16 пишет:

согласен ! но не как вы писали в начале - 1-2-1-2-1-2-1.... ( 180 - + , 180 - - )
а - 1-2-3-1-2-3-1-2-3-.....
кататак....

Я писАл правильно, штатный ДПРВ 180 фронт - 180 спад и задача стояла использовать его именно как сигнал синхронизации для правильного распределения сигнала с ЭБУ по шести катушкам.

не спорю :) , вашу авто не изучал....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bifurkas пишет:

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

ЗИЛ-131 - хоть там и , типа , герметичная система - были попытки сделать как вы сделали
....тогда и тырнета-то не было :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bifurkas ,   в каком регионе болота бороздите ?

bifurkas
Offline
Зарегистрирован: 27.10.2013

Н.Новгород.

bifurkas
Offline
Зарегистрирован: 27.10.2013

[/quote]

не спорю :) , вашу авто не изучал....

[/quote]

94 год, фирма Крайслер сделала распределённый впрыск, но смелости (или ума) не хватило сделать распределённое зажигание. В 2000 исправились, но мне от этого не легче, вот и изгаляюсь.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

:)
понятно....
Питер... но в болота не ходун... не ходец...

nik182
Offline
Зарегистрирован: 04.05.2015

По синхронизации. Обнулять I нужно по изменению сигнала ДПРВ. Дальше само распределиться правильно.

nik182
Offline
Зарегистрирован: 04.05.2015

Я бы делал как то так

volatile int i=0;
void setup()
{
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT); 
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(2, INPUT);
      pinMode(3, INPUT);
      // Ждем один оборот распредвала для синхронизации
      while(digitalRead(3)<0);
      while(digitalRead(3)>0);
 
   attachInterrupt(0, ebu, CHANGE);  //нога 2 вход ЭБУ 
   attachInterrupt(1, dprv , RISING); //нога 3 вход ДПРВ
}
 
void loop()
{
}
 
void dprv()
{
  i=3;
}

void ebu()
{
 if (digitalRead(2) > 0) 
 { i++; digitalWrite(i, HIGH);} //после положительного фронта ДПРВ проходим 6 выходов с 4 по 9 на каждый положительный фронт ЭБУ
else digitalWrite(i, LOW); //после отрицательного фронта отключаем
}

Здесь проблема дребезга - входные сигналы должны быть чистыми. Первый положительный фронт ЭБУ должен быть всегда после положительного фронта ДПРВ. Шестой отрицательный фронт ЭБУ должен закончится раньше  положительного фронта ДПРВ. Для любого режима двигателя. Если это не выдерживается, то надо ещё думать.

bifurkas
Offline
Зарегистрирован: 27.10.2013

nik182 пишет:

Здесь проблема дребезга - входные сигналы должны быть чистыми. Первый положительный фронт ЭБУ должен быть всегда после положительного фронта ДПРВ. Шестой отрицательный фронт ЭБУ должен закончится раньше  положительного фронта ДПРВ. Для любого режима двигателя. Если это не выдерживается, то надо ещё думать.

Сигналы чистые. Условия, описаные Вами, выполняются при любом режиме работы двигателя, проверено. Буду пробовать.

Спасибо!

УПС! Не сразу заметил у Вас в программе такой момент: первый сигнал с ЭБУ приходит или после фронта, или после спада ДПРВ, в зависимости от того, как встала шторка в ДПРВ. Естественно и цилиндры будут разные, с которых будет начинаться работа.

nik182
Offline
Зарегистрирован: 04.05.2015

Нет. Только после положительного фронта ДПРВ. Дальше 6 цилиндров и по новой.