вторник, 28 октября 2014 г.

Система зажигания Оки на ардуино




РАБОЧАЯ СХЕМА

ПРОШИВКА (№ 18, 15.03.15)
   
int dh = 2;   //вход - датчик холла. спаду импульса (с 1 на 0) должен происходить момент зажигания
int dh2 = 5;   //вход - другой датчик холла.
int sz1 =  3;  //выходы на полевики свечей зажигания
int sz2 =  4;
int ind =  13;

bool dh_old =LOW;//старое и текущее состояние сигнала от ДХ
bool dh_new = LOW;
bool dh_front=LOW; 
bool dh_spad=LOW;//по спаду импульса с дх срабатывает
bool dh2_old =LOW;
bool dh2_new = LOW;
bool dh2_spad=LOW;
bool dh2_front=LOW;

bool first;//чередовать искры
unsigned long t0;//фиксированный момент времени. Использую для засекания промежутков времени
unsigned long t1;//время первого  фронта ДХ2
unsigned long dt;//временной интервал между текущим сигналом с ДХ и предыдущим.
unsigned long oborot;//количество оборотов в минуту
unsigned long oborot_old;
unsigned int i=8;//для завода
unsigned int j=1;//для завода

bool flag;//фронт ДХ2 был
bool flag2;//спад от ДХ2 был и между фронтом и спадом не больше 2 секунд, причем этот спад и фронт ПЕРВОГО ИМПУЛЬСА после включения зажигания
bool flag_front;//флаг фронта импульса
bool flag_nak;//идет накопление
unsigned long t_nak;//время с момента накопления
unsigned long t_front;//время c фронта импульса с ДХ

void setup() {
  Serial.begin(115200);
  pinMode(dh, INPUT);      //инициализация входов и выходов
  pinMode(dh2, INPUT);    
  pinMode(sz1, OUTPUT);   
  pinMode(sz2, OUTPUT);   
  pinMode(ind, OUTPUT);
  dh_old=digitalRead(dh);
  digitalWrite(sz1, LOW); //берегу полевики
  digitalWrite(sz2, LOW);
  digitalWrite(ind, LOW);
  first=HIGH;
  flag=LOW;
  flag2=LOW;
  t0=0;
  t1=0;
  flag_front=LOW;
  flag_nak=LOW;
  }

void loop(){
dh_new=digitalRead(dh);  
dh2_new=digitalRead(dh2);
dh_front=LOW;
dh_spad=LOW;
dh2_front=LOW;
dh2_spad=LOW;
//ДХ спад
if((dh_new==LOW)&&(dh_old==HIGH)) {
if (digitalRead(ind)) {digitalWrite(ind, LOW);} else {digitalWrite(ind, HIGH);}
dh_spad=HIGH;
dt=millis()-t0;
oborot=60000.0/dt;
if (oborot<150||oborot>6000) {dh_spad=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_spad=LOW;}
t0=millis();
oborot_old=oborot;
}

//ДХ фронт
if((dh_new==HIGH)&&(dh_old==LOW)) {
dh_front=HIGH;
if (oborot<150||oborot>6000) {dh_front=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_front=LOW;}
}

//ДХ2 спад
if((dh2_new==LOW)&&(dh2_old==HIGH)) {
dh2_spad=HIGH;
}

//ДХ2 фронт
if((dh2_new==HIGH)&&(dh2_old==LOW)) {
dh2_front=HIGH;
if (!flag) {t1=millis();}
flag=HIGH;
Serial.println("");
Serial.print("dh2 front");Serial.print("\t");Serial.print(flag);
}


dh_old=dh_new;
dh2_old=dh2_new;
////////////////////////////////////////////////////




if (dh2_spad) {//формирования flag2 - спад 1-го импульса, общая длительность импульса не более 2 с.
flag2=LOW;
if((millis()-t1<=1000)&&(t1>0)) {flag2=HIGH;}
Serial.println("");
Serial.print("dh2 spad");Serial.print("\t");Serial.print(flag2);
}


if (!flag){
//завод машины
//4 мс = 8 градусов. т.е. сдвишка УОЗ первых искр 32 градуса. Затем убывает до 4 градусов.
// схема завода: 8 8 7 7 6 6 5 5...2 2 2 2...

if(dh_front){//обработка фронта от ДХ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print("front, ojidanie");
}


if(dh_spad){//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print(oborot);Serial.print("\t");Serial.print(dt);
digitalWrite(sz1, HIGH); //формирую импульсы на катушку зажигания
digitalWrite(sz2, HIGH);
if ((i>2)&&(j==3)) {i-=1;j=1;}
delay(i);
if (i>2) {j+=1;}
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
Serial.print("\t");Serial.print("ot spada zaderjka i iskra");Serial.print("\t");Serial.print(i);
}//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
} else {///если железо попало в щель и первый фронт дх2 сформировался.
///////////////////////////////////////////////////////////////////////////////////
if(dh_front){//обработка фронта от ДХ
Serial.println("");Serial.print(millis());Serial.print("\t");Serial.print("front");
flag_front=HIGH;//флаг фронта, сохраняется до спада
t_front=millis();
}


//поочередное накопление энергии на катушках
if(!flag_nak&&flag_front){//формируется флаг на накопление//1
if (dt/3<12) {//2
flag_nak=HIGH;//пора накоплять
t_nak=millis();
Serial.println("");Serial.print(millis());Serial.print("\t");Serial.print("nakopl, dt/3 menshe 12");
if(first) {digitalWrite(sz1, HIGH);Serial.print("\t");Serial.print("1 svecha nakoplenie");} else {digitalWrite(sz2, HIGH);Serial.print("\t");Serial.print("2 svecha nakoplenie");}
} else {      //накопление с задержкой  //2
if (millis()-t_front>dt/3-10) {//3
flag_nak=HIGH;t_nak=millis();Serial.println("");Serial.print(millis());Serial.print("\t");Serial.print("hakopl s zaderjkoi");Serial.print("\t");Serial.print(dt/3-10);
if(first) {digitalWrite(sz1, HIGH);Serial.print("\t");Serial.print("1 svecha nakoplenie");} else {digitalWrite(sz2, HIGH);Serial.print("\t");Serial.print("2 svecha nakoplenie");}
}//3
}//2
}//1

if (flag_nak&&(millis()-t_nak>50)) {//защита ключей (если заглохла как-то неудачно)
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print("ZACHITA KLUCHEI!!!");
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
flag_nak=LOW;
Serial.print("\t");Serial.print("spad, iskra!!!");
}

if(dh_spad){//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print(oborot);Serial.print("\t");Serial.print(dt);
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
flag_nak=LOW;
flag_front=LOW;
Serial.print("\t");Serial.print("spad, iskra!!!");
if (!flag2) {first=!first;} else {flag2=LOW;}//реализация чередования искр, если flag2=HIGH, то пропустить ОДИН раз чередование искр
}//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
}///


}//loop

 
КОМПЛЕКТУЮЩИЕ

НАИМЕНОВАНИЕ
ГДЕ ДОСТАТЬ
СТОИМОСТЬ (ПО СОСТОЯНИЮ НА 2015 Г.)
1
ПРОГРАММНО-АППАРАТНАЯ ПЛАТФОРМА ARDUINO PRO MINI 16МГц 5В.

miniinthebox.com
350
2
2 КАТУШКИ ЗАЖИГАНИЯ ОТ ВАЗ2108 (27.3706)

Автомагазин

2*500=1000
3
2 ПОЛЕВЫХ ТРАНЗИСТОРА N-КАНАЛА. IRFB3077

Радиорынок
2*300=600
4
КОНВЕРТЕР DC/DC

miniinthebox.com
300
5
ДАТЧИК ХОЛЛА НА ОКУ

Автомагазин
120
6
КОРПУС
Хозяйственный магазин (купил там пластиковый корпус – распред-коробку)
50
7
ПРОВОД 4 КВ. ММ ДЛИННОЙ 2,5 М

Магазин электротоваров
20
8
4 РЕЗИСТОРА 250 мВт 1,8 КОм

В старом телевизоре
Бесплатно
9
2 РЕЗИСТОРА 250 мВт 1 КОм

В старом телевизоре
Бесплатно
10
ПЛАТА ИЗ ГЕТИНАКСА
В старом телевизоре
Бесплатно
11
КРЕПЕЖ
В гараже
Бесплатно
12
РАЗЪЕМНАЯ КОЛОДКА
В старом телевизоре
Бесплатно
Итого: 2440 руб и уйма времени



СБОРКА
1.      Прошей прогу в arduino.
2.      Настрой адаптер питания. Запитай его от аккума на заведенной машине (напряжение около 14 В) и выстави на выходе 5 В. Настройка осуществляется часовой отверточкой плоской.
3.      Собери на плате из гетинакса схему
4.      Закрепи на машине
5.      Проведи провода (от коммутатора к 2-й катушке зажигания проведи провод сечением 4 кв. мм. К 1-й катушке проведи штатный провод (коричневый), провод синий+черный запаяй на выводы Б обоих катушек (+12В ЗАЖИГАНИЕ))
6.      Запаяй провода. Разъем папа-мама на коммутатор лучше не делай – так запаяй. Лучше паянного соединения ничего нет. Массу делай ОДНУ – нак корпус машины в одной точке. Делал для надежности две массы: корпус машины и двигатель и нарвался на сильные наводки.
7.      Трамблер поставь на 2 деления в плюс.


ОПИСАНИЕ РАБОТЫ СИСТЕМЫ, ТЕОРЕТИЧЕСКИЙ БАЗИС

На первичную обмотку катушки зажигания подается кратковременно напряжение от аккумулятора. На вывод Б - +12В от реле зажигания, на вывод К – сток полевого транзистора (при его открытии земля подается, т.е. полевик является силовым ключом). При попадании шторки в щель ДХ он вырабатывает 1, при уходе шторки вырабатывается 0. Этот сигнал принимает 2 цифровой вывод Arduino. Arduino прожевывает этот сигнал и открывает полевики на время не более 10 мс, управление полевиками осуществляется с цифровых выходов 3 и 4. Больше 10 мс катушку запитывать нельзя!!! Иначе она насытится и через первичку пойдет большой постоянный ток (24А), транзистор пробъется и замкнет катушку, катушка взорвется, ПРОВРЕНО!!! За временем насыщения тщательно следит МК.
При появлении сигнала 0 с ДХ должна проскочить искра. Искра формируется в момент закрытия полевика, т.е. при размыкания земли с катушки зажигания. А сам ДХ играется с УОЗ с помощью центробежного регулятора и вакуумного корректора в трамблере – трамблер не трогать, настроен заводом (дойдут руки и до него).
В программе реализован режим защиты от угонщика, режим завода (бегущий УОЗ), режим защиты от перенасыщения катушки зажигания (чтобы не вывести из строя полевик и затем катушку), режим чередующейся искры!!!
Поршни в цилиндрах двигаются синхронно, только в одном поршне происходит взрыв (ВМТ), а в другом конец такта выпуска газов и начало такта впуска топливо-воздушной смеси! А в каком цилиндре сейчас взрыв – не угадаешь. Поэтому по команде водителя МК переходит в режим чередования искры. Если двигатель начинает глохнуть – водитель сообщает об этом МК и чередование изменяется – двигатель восстанавливает обороты. В автомате сделать не получилось, но и так хорошо, а Вам есть над чем подумать.
Сначала для включения режима чередования была кнопка. Но он регулярно давала сбои (как потом разобрался наводка с двигателя, и не только), и слишком резко надо ее было ее нажимать. Догадался использовать еще один ДХ. При попадании в щель шайбочки формируется отличная 1, при вынимании - 0. Этот сигнал подаю на 5 цифровой вход Arduino. Гораздо удобней, чем кнопка!!!



ПОРЯДОК ЭКСПЛУАТАЦИИ

1.      Вынь подсос на середину.
2.      При холодной машине несколько раз интенсивно нажми на педаль газа. Затем вынь шайбочку и заведи машину. Зима кончилась, на холодную заводить не пробывал. При горячей машине просто заведи.
3.      Вставь шабочку, если машина начала глохнуть, тут же ее вынь. Потом, после того как работа двигателя нормализовалась, обратно вставь.
4.      По мере прогревания двигателя плавно убери подсос.


СТОИТ ЛИ ЗАМОРАЧИВАТЬСЯ?

            В горку стала тянуть намного живее. Из грязи отлично выхожу. Субъективно лошадок прибавилось. Замерил расход. Было 4,5 л, стало 4 л на 100 км. Т.е.  упал расход на 10%. Двигатель работает очень хорошо, равномерно. Ни одного выстрела в глушитель. Доработкой доволен.

Фотоматериал:



Сборка

ПРОШИВАЮ



Новый коммутатор

Щель

Система зажигания в сборе

 ИСТОРИЯ РАЗРАБОТКИ


15.12
Собрал схему-прототип на полевиках на 170А 70В мощных: F2907Z.
К сожалению напортачил с прораммой и сжег катушку зажигания - она лопнула!!!
Подал меандр наверно длительностью импульса 1 мс...
Потом исправил прогу, но было поздно.

В силовой цепи полевиков использовать провод потолще - там токи приличные.

Самое главное - завелся!!!! Очень стабильно работает машина - вместо неисправной катушки зажигания применил оковскую. Оборотов 600 в минуту спокойно держит. Докупил катушку зажигания на ВАЗ 2108, позже продолжу. Уже сделаю на постоянку - проведу провода красиво и схемку в коробочку оформлю. Предусмотрю третий полевик для воды.

25.12

Все никак не зафурычит. Сначала распотрошил трамблер. ЦР и ВК убрал. Реализовывал УОЗ программно. Так ничего и недобился...

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

Теперь рассматриваю вопрос с карбюратором. Хочу старый собрать и поставить.

ОКАЗЫВАЕТСЯ DELAY НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ!!!! ЭТО УЖЕ ПОТОМ ВЫЯСНИЛ. ВОЗНИКАЕТ НЕСИХРОНКА. ПОЧЕМУ НЕ ЗНАЮ.

16.02.15

Стартер не тянул. Втулка улетела, стартер сломался. Купил новый. Втулку сделал латунную. Щас отлично прокручивает и заводится.

17.02

Покатался. Плохо тянет машина. До 50 км/ч еле разгоняюсь. Похоже в момент спада импульса от ДХ должна пробивать искра уже, а у меня только начинается накопление магнитного поля.

01.03.15
Сделал на днях с кнопкой. Кнопкой можно выбирать чередование искр! Стартер опять сломался - взял домой и перепаял - провод отпаялся. С задержкой так ничего и не получилось - сделал на прямую. По фронту-открывает полевики и по спаду закрывает.

05.03.15
Сделал второй ДХ вместо кнопки. Отлично!!! И ничего не нажимается зря!!! С ДХ гораздо удобней включать режим чередования искры.



  БАЗОВЫЕ ПРОШИВКИ РАННИХ ВЕРСИЙ 
(БЕЗ РЕЖИМА ЧЕРЕДОВАНИЯ, С КНОПКОЙ)

На закуску старые базовые прошивки. Работают хорошо:



Версия № 9 (23.02.15)
Синхронно полевики работают. Нет кнопки.
По фронту ДХ накопление при оборотах больше 600.

//искра подается точно по спаду импульса с ДХ. До этого происходит накачка катушки в течение 10 мс или сколько есть времени. При более 4000 об в минуту времени меньше.

int dh = 2;   //вход - датчик холла. спаду импульса (с 1 на 0) должен происходить момент зажигания
int sz1 =  3;  //выходы на полевики свечей зажигания
int sz2 =  4; 
int ind =  13; 
unsigned int zad;
bool dh_old =LOW;//старое и текущее состояние сигнала от ДХ
bool dh_new = LOW;
bool dh_front=LOW;  
bool dh_spad=LOW;//по спаду импульса с дх срабатывает
unsigned long t0;//фиксированный момент времени. Использую для засекания промежутков времени
unsigned long dt;//временной интервал между текущим сигналом с ДХ и предыдущим.
unsigned long oborot;//количество оборотов в минуту
unsigned long oborot_old;
unsigned long i=0;//счетчик оборотов просто
unsigned long j=0;//счетчик оборотов просто

void setup() {
  Serial.begin(115200);
  pinMode(dh, INPUT);      //инициализация входов и выходов
  pinMode(sz1, OUTPUT);    
  pinMode(sz2, OUTPUT);    
  pinMode(ind, OUTPUT); 
  dh_old=digitalRead(dh); 
  digitalWrite(sz1, LOW); //берегу полевики
  digitalWrite(sz2, LOW);
  digitalWrite(ind, LOW);
}

void loop(){
dh_new=digitalRead(dh);   
dh_front=LOW;
dh_spad=LOW;
//ДХ спад
if((dh_new==LOW)&&(dh_old==HIGH)) {
if (digitalRead(ind)) {digitalWrite(ind, LOW);} else {digitalWrite(ind, HIGH);}
dh_spad=HIGH;
dt=millis()-t0;
oborot=60000.0/dt;
if (oborot<150||oborot>6000) {dh_spad=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_spad=LOW;}
t0=millis();
oborot_old=oborot;
}

//ДХ фронт
if((dh_new==HIGH)&&(dh_old==LOW)) {
dh_front=HIGH;
if (oborot<150||oborot>6000) {dh_front=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_front=LOW;}
}

dh_old=dh_new;
////////////////////////////////////////////////////

if(dh_front){//обработка фронта от ДХ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print("front");Serial.print("\t");Serial.print(i);
if(oborot>=600) {//
//zad=dt-dt/1.5-5.0;
//delay(zad);
//Serial.print("\t");Serial.print(millis());
digitalWrite(sz1, HIGH); //подключаю землю к катушке СРАЗУ
digitalWrite(sz2, HIGH);
//Serial.print("\t");Serial.print(zad);
}//



}


if(dh_spad){//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
i=0;
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print(oborot);Serial.print("\t");Serial.print(dt);
if(oborot<600) {//немножко задерживаюсь перед накачкой катушки, чтобы ее не сжечь
digitalWrite(sz1, HIGH); //формирую импульсы на катушку зажигания
digitalWrite(sz2, HIGH);
delay(4);
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
Serial.print("\t");Serial.print("ot spada 4ms i iskra");
} else {
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
Serial.print("\t");Serial.print("spad, iskra!!!");
}


}



i+=1;


}//loop




Прошивка при использовании кнопки (старая версия № 13):
//при остановке двигателя с вкл. зажиганием если останавливался после фронта и до спада импульса - перегрев транзистора по току (он был открытый). щас устранил. если глохнет, то при оборотах менее 600 искра не вырабатывается.
//после нажатия на кнопку чередования искр звук двигателя меняется!!! не нужен светодиод!!! Добился уменьшением УОЗ где-то на 30 градусов, что соответсвует 3 мс на 1500 оборотах в минуту.
//сама кнопка нажималась!!! щас глянул - наверно где-то перемыкало. нормально стало (28.02.15).
int dh = 2;   //вход - датчик холла. спаду импульса (с 1 на 0) должен происходить момент зажигания
int bt = 5;   //вход - кнопка ненажимающаяся.
int sz1 =  3;  //выходы на полевики свечей зажигания
int sz2 =  4; 
int ind =  13; 
int j;//количество нажатий на кнопку
int i;//пирамидка задержек
bool dh_old =LOW;//старое и текущее состояние сигнала от ДХ
bool dh_new = LOW;
bool dh_front=LOW;  
bool dh_spad=LOW;//по спаду импульса с дх срабатывает
bool bt_old =LOW;
bool bt_new = LOW;
bool bt_ok;//нажата сейчас кнопка
bool first;//чередовать искры
unsigned long t0;//фиксированный момент времени. Использую для засекания промежутков времени
unsigned long t1;
unsigned long dt;//временной интервал между текущим сигналом с ДХ и предыдущим.
unsigned long oborot;//количество оборотов в минуту
unsigned long oborot_old;
//unsigned long i=0;//счетчик оборотов просто

void setup() {
  Serial.begin(115200);
  pinMode(dh, INPUT);      //инициализация входов и выходов
  pinMode(bt, INPUT);     
  pinMode(sz1, OUTPUT);    
  pinMode(sz2, OUTPUT);    
  pinMode(ind, OUTPUT); 
  dh_old=digitalRead(dh); 
  digitalWrite(sz1, LOW); //берегу полевики
  digitalWrite(sz2, LOW);
  digitalWrite(ind, LOW);
  first=HIGH;
  j=0;
  i=16;
}

void loop(){
dh_new=digitalRead(dh);   
bt_new=digitalRead(bt);
dh_front=LOW;
dh_spad=LOW;
bt_ok = LOW;
//ДХ спад
if((dh_new==LOW)&&(dh_old==HIGH)) {
if (digitalRead(ind)) {digitalWrite(ind, LOW);} else {digitalWrite(ind, HIGH);}
dh_spad=HIGH;
dt=millis()-t0;
oborot=60000.0/dt;
if (oborot<150||oborot>6000) {dh_spad=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_spad=LOW;}
t0=millis();
oborot_old=oborot;
}

//ДХ фронт
if((dh_new==HIGH)&&(dh_old==LOW)) {
dh_front=HIGH;
if (oborot<150||oborot>6000) {dh_front=LOW;}//некондиция по оборотам, пропускаю сигнал
if (oborot>3*oborot_old) {dh_front=LOW;}
}

if((bt_new==HIGH)&&(bt_old==LOW)) {
j+=1;//считаю количество нажатий на кнопку
bt_ok = HIGH;
//if ((millis()-t1<300)&&(millis()<500)) {bt_ok = LOW;j-=1;}
if (millis()<500) {bt_ok = LOW;j-=1;}
t1=millis();
}



dh_old=dh_new;
bt_old=bt_new;
////////////////////////////////////////////////////



if(j==0){//j=0

if(dh_front){//обработка фронта от ДХ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print("front");
}

if(dh_spad){//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print(oborot);Serial.print("\t");Serial.print(dt);
digitalWrite(sz1, HIGH); //формирую импульсы на катушку зажигания
digitalWrite(sz2, HIGH);
delay(i);
if (i>2) {i-=1;}
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
Serial.print("\t");Serial.print("ot spada 2ms i iskra");
}//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ

}//j=0



///////////////////////////////////////////////////////////////////////////////////
if(j>0){//кнопка нажата хоть один раз
if((millis()<300000)&&bt_ok) {first=!first;Serial.println("");Serial.print("najatie");Serial.print("\t");Serial.print(j);}


if(dh_front){//обработка фронта от ДХ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print("front");
if (oborot>600) {if(first) {digitalWrite(sz1, HIGH);Serial.print("\t");Serial.print("1 svecha");} else {digitalWrite(sz2, HIGH);Serial.print("\t");Serial.print("2 svecha");}} //подключаю землю к катушке СРАЗУ
}

if(dh_spad){//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
Serial.println("");
Serial.print(millis());Serial.print("\t");Serial.print(oborot);Serial.print("\t");Serial.print(dt);
digitalWrite(sz1, LOW);//отключаю землю от катушки, в это время проскакивает ИСКРА!!!
digitalWrite(sz2, LOW);
Serial.print("\t");Serial.print("spad, iskra!!!");
first=!first;//реализация чередования искр
}//обработка спада от ДХ, МОМЕНТ ЗАЖИГАНИЯ
}//кнопка нажата хоть один раз


}//loop

5 комментариев:

  1. Я очень извиняюсь, 2 раза прочитал, но не понял главного. Зачем оно нужно ? За счет чего "Субъективно лошадок прибавилось" ? Вы таким образом избавились от родного проверенного временем коммутатора в угоду ардуине ? Или что вам дало ее применение ?

    ОтветитьУдалить
  2. А есть вариант снять количество оборотов не с датчика холла (его нет, машина 73 года), а с катушки (с управляющего провода от трамблёра) сгладив помехи? (нужен просто тахометр) ... пробовал через делитель 120/100кОм, 340/300кОм, 12/6кОм ... постоянно идёт мусор и импульсы считаются некорректно (((

    ОтветитьУдалить
  3. нет, с высоковольтной части нельзя снимать. нужно снимать с первички, там на одном выводе +12 вольт зажигание, а на другом подается земля и снимается земля, когда пора лупить искру. А уже механический трамблер ваш передает искру на нужную свечку. Вот снятие земли и надо ловить и считать спады импульса. В моем представлении. Там будет делитель 1К и 1,8К, как у меня на схеме.

    ОтветитьУдалить
    Ответы
    1. не не, не с высоковольтной, а с управляющего провода, который от трамблёра идёт на первичную обмотку .. тонкий такой

      http://classic-vaz.info/uploads/posts/2009-10/1255988203_7-201.jpg

      на картинке он чёрный ... Вы про него?

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

    ОтветитьУдалить