ФУОЗ на ардуино НАНО с 328 чипом

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

Итак версия 2 ФУОЗа готова.

ФУОЗ - формирователь угла опережения зажигания.

По сути плата ставится в разрыв проводов коммутатор-датчик Холла. Нюанс - перекинуть провод на коммутаторе с пина 5 на 4, т.к. через резистор 150 Ом ардуине не хватает тока.

 

Искру нужно установить четко в ВМТ. Тут как кто умеет... 

Непосредственно скетч (огромное спасибо dimax и SU-27-16)
















volatile unsigned int zaderg = 0;
volatile int m, p =0;
unsigned int Zaderg[] = {138, 140, 141, 143, 145, 146, 148, 150, 152, 153, 155, 157, 158, 160, 162, 164, 165, 167, 169, 170, 172, 174, 176, 177, 179, 181, 182, 184, 186, 188, 189, 191, 193, 194, 196, 198, 200, 201, 203, 205, 206, 208, 210, 212, 213, 215, 217, 218, 220, 222, 224, 225, 227, 229, 230, 232, 234, 236, 237, 239, 241, 242, 244, 246, 248, 249, 251, 253, 255, 257, 259, 261, 264, 266, 268, 270, 272, 274, 276, 278, 281, 283, 285, 287, 289, 291, 293, 295, 297, 300, 302, 304, 306, 308, 310, 312, 314, 316, 319, 321, 323, 325, 327, 329, 331, 333, 335, 338, 340, 342, 344, 346, 348, 350, 352, 354, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 431, 433, 435, 437, 439, 441, 443, 445, 447, 450, 452, 454, 456, 458, 460, 462, 464, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 551, 553, 555, 557, 559, 562, 564, 566, 568, 570, 572, 574, 576, 578, 581, 583, 585, 587, 589, 591, 593, 595, 598, 600, 602, 604, 606, 608, 610, 612, 614, 617, 619, 621, 623, 625, 627, 629, 631, 633, 636, 638, 640, 642, 644, 646, 648, 650, 652, 655, 657, 659, 661, 663, 665, 667, 669, 671, 674, 676, 678, 680, 682, 684, 686, 688, 690, 693, 695, 697, 699, 701, 703, 705, 707, 710, 712, 714, 716, 718, 720, 722, 724, 726, 729, 731, 733, 735, 737, 739, 741, 743, 745, 748, 750, 752, 754, 756, 758, 760, 762, 764, 767, 769, 771, 773, 775, 777, 779, 781, 783, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 841, 843, 845, 847, 849, 851, 853, 855, 857, 860, 862, 864, 866, 868, 870, 872, 874, 876, 879, 881, 883, 885, 887, 889, 891, 893, 895, 898, 900, 902, 904, 906, 908, 910, 912, 915, 917, 919, 921, 923, 925, 927, 929, 931, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 972, 974, 976, 978, 980, 982, 984, 986, 988, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1196, 1198, 1200, 1202};
int Vak = 0;
void setup() {
pinMode (3,INPUT_PULLUP); //вход
pinMode (9,OUTPUT); //выход
EICRA=(1<<ISC11)|(0<<ISC10); //настройка внешнего прерывания (falling )
EIMSK|=1<<INT1; //разрешение внешнего прерывания
TCCR1B=0; //настройка таймера1
TCCR1A=0; //настройка таймера1
TIMSK1=(1<<TOIE1); //разрешить прерываение для таймера 1

TCCR1B= _BV(WGM13)|_BV(CS10); //запуск таймера 1
TCCR1A=0; 
ICR1=256;//установка частоты прерывания - 32us	 
}

ISR(INT1_vect) {  //вектор внешнего прерывания
PORTB &= ~(1<<1);
p = m/2-85;
zaderg = Zaderg[p] - Vak; // значение задержки из массива
m = 0; //сбрасываем счёт
}

ISR (TIMER1_OVF_vect) {

if ( p > 516) {//1172 - 780 - холостой ход, УОЗ = 0, т.е. повторитель заднего фронта

  if      (m==75 || m==147) PORTB &= ~(1<<1);   //отключаем d9
  else if (m==5 || m==77 || m==150) PORTB |= 1<<1; // включаем d9
  }

else { //больше 780 об

  if (m==30) PORTB |= 1<<1; //если 30 вход включаем d9
  if (m==zaderg){ // если (№ из массива) вход 
  PORTB &= ~(1<<1);  //отключаем d9
  };};
 m++;}

void loop() {Vak = map(analogRead(0), 375, 225, 0, 6);}

Миниатюрки: 

Коммутатор 0529

слева - 2 стабилизатора 12 (L7812CP) и 5 В (L7805CP) и кондер. Коннекторы - Коммутатор, он же питание, земля и выходной сигнал, ну и датчик Холла (справа). 

Так же усилитель (на фотке под чипом) на n-p-n (STBV42) и p-n-p (2N2907A) транзисторах

Провода - подключен датчик Холла (аналоговый) на вакуум-корректор. На штанге - магнит

Упаковываем...

и проверяем работу...

...обороты двигателя от 600 до 5500 с интерватол 1 Гц.

Видео

 

nobitaemon
Offline
Зарегистрирован: 08.08.2015

Как я могу получить Zaderg [], чтобы преуспеть?

RuleZZZZ
Offline
Зарегистрирован: 16.02.2015

del

Борода Столлмана
Offline
Зарегистрирован: 23.09.2015

Где вы его применяете ? Принцип работы опишите в кратце.

nobitaemon пишет:

Как я могу получить Zaderg [], чтобы преуспеть?

То же интересно откуда данные для массива ?

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

сорри, что так долго не отвечал((

данные для массива

https://dropmefiles.com/8lXAv

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

Применяю - установлен на 2108, езжу по сегодня)

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

Борода Столлмана
Offline
Зарегистрирован: 23.09.2015

dmitriykisliy пишет:

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

Попробуйте лак plastik 71.

 

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

Залить всю Ардуинку???

Борода Столлмана
Offline
Зарегистрирован: 23.09.2015

Да, погуглите про этот лак, он неплохо работает.

 

 

nobitaemon
Offline
Зарегистрирован: 08.08.2015

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

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

nobitaemon пишет:

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

Вопрос поконкретнее)

В файле Excel есть графический рисунок, от него ноги и растут,

ну или http://www.qrz.ru/schemes/contribute/auto/ignition-pic/

maxam-007
Offline
Зарегистрирован: 06.03.2016

есть схема сборки платы?

Buldakov
Offline
Зарегистрирован: 17.01.2016

Теорию с формулами можно почитать сдесь: В журнале радиоежегодник за 1991 г. Стр 99 - 149. Скачать по ссылке.

http://publ.lib.ru/ARCHIVES/R/''Radioejegodnik''/_''Radioejegodnik''.html

 

knopas811
Offline
Зарегистрирован: 27.01.2017

dmitriykisliy пишет:

...Нюанс - перекинуть провод на коммутаторе с пина 5 на 4, т.к. через резистор 150 Ом ардуине не хватает тока...

 

 

Это как??? На 5м питание коммутатора, а на 4м питание ДХ!!! Как их можно менять? И можно подробную схему подключения?

amator
Offline
Зарегистрирован: 27.03.2017

Подскажите пожалуйста, можно ли эту программу адаптировать под один цилиндр и шторку датчика с двумя лепестками по 120 градусов, и обороты 500-5500, очень нужно...

Bogdan_ck
Offline
Зарегистрирован: 04.04.2017

Автору респект и уважуха.

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

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

Мной был переделан код под индуктивный датчик установленый на коробке, импульс формировался штифтом на маховике (ВАЗ-2109).

Один импульс на оборот коленвала, искра два раза за оборот.

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

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

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

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

На авто пока не ставил (тайм и лень).

Датчик давления купил в радиомагазине, соответственно в програме изменения на даный датчик.

Планирую поставить еше переменик типа октан-коректора.

Для amator, думаю, можна переделать судя из алгоритма.

По поводу точности регулировки, не проверял, но думаю достаточная если стравнивать с механикой (5-7 градусов), 0,5 градуса на скорость не влияют.

puschistic
Offline
Зарегистрирован: 04.03.2018

Доброго времени суток. Собираю зажигание на ардуинке (очень нужно сделать опережение/опаздание) зажигания. Выложите или скиньте пожалуйста скетч на электронку puschistic@list.ru 

Ссылки к сожалению не работают по которым как я понял был выложен скетч.

b707
Offline
Зарегистрирован: 26.05.2017

puschistic пишет:

Ссылки к сожалению не работают по которым как я понял был выложен скетч.

скетч в первом сообщении ветки без всяких ссылок

puschistic
Offline
Зарегистрирован: 04.03.2018

Всем привет. Спасибо что отозвались на помощь. Я по ка что новичек в этой теме. Скопировал скетч с первой страницы и вставил его в программу - при компиляции скетча вылетают ошибки:

Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
 
saghiganie:15: error: invalid digit "8" in octal constant
 
saghiganie:17: error: invalid digit "9" in octal constant
 
saghiganie:1: error: expected unqualified-id before numeric constant
 
saghiganie:3: error: expected unqualified-id before numeric constant
 
saghiganie:5: error: expected unqualified-id before numeric constant
 
saghiganie:7: error: expected unqualified-id before numeric constant
 
saghiganie:9: error: expected unqualified-id before numeric constant
 
D:\Users\Александр\Documents\Arduino\saghiganie\saghiganie\saghiganie.ino: In function 'void setup()':
 
saghiganie:12: error: expected ';' before 'pinMode'
 
saghiganie:14: error: expected ';' before 'pinMode'
 
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
 
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
 
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
 
                 from sketch\saghiganie.ino.cpp:1:
 
saghiganie:20: error: expression cannot be used as a function
 
saghiganie:22: error: expression cannot be used as a function
 
saghiganie:24: error: expression cannot be used as a function
 
saghiganie:27: error: expected ';' before numeric constant
 
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
 
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
 
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
 
                 from sketch\saghiganie.ino.cpp:1:
 
saghiganie:30: error: expression cannot be used as a function
 
saghiganie:32: error: expression cannot be used as a function
 
saghiganie:34: error: expected ';' before '}' token
 
D:\Users\Александр\Documents\Arduino\saghiganie\saghiganie\saghiganie.ino: At global scope:
 
saghiganie:35: error: expected unqualified-id before numeric constant
 
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,
 
                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
 
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
 
                 from sketch\saghiganie.ino.cpp:1:
 
D:\Users\Александр\Documents\Arduino\saghiganie\saghiganie\saghiganie.ino: In function 'void __vector_2()':
 
saghiganie:40: error: expression cannot be used as a function
 
saghiganie:42: error: expected ';' before 'p'
 
saghiganie:44: error: expected ';' before 'zaderg'
 
saghiganie:46: error: expected ';' before 'm'
 
saghiganie:48: error: expected ';' before '}' token
 
D:\Users\Александр\Documents\Arduino\saghiganie\saghiganie\saghiganie.ino: At global scope:
 
saghiganie:49: error: expected unqualified-id before numeric constant
 
D:\Users\Александр\Documents\Arduino\saghiganie\saghiganie\saghiganie.ino: In function 'void __vector_13()':
 
saghiganie:55: error: expected ';' before numeric constant
 
saghiganie:67: error: expected ';' before numeric constant
 
saghiganie:84: error: expected '}' at end of input
 
exit status 1
invalid digit "8" in octal constant
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
puschistic
Offline
Зарегистрирован: 04.03.2018

Нумерация впереди скетча не нужна? При ее удалении скетч прогружается.

puschistic
Offline
Зарегистрирован: 04.03.2018

Уже "вдоль и поперек" изучил данную схему. Как я понял данная схема работает на 2108. Но я не могу понять как происходит распределение зажигания между цилиндрами (бегунком или катушками на каждую пару цилиндров) Судя по выходам, он один похоже по бегунку.

Суть моей проблемы, мне нужно собрать полностью зажигание на 4 цилиндровый двигатель (установлен на багги). Схема подключения цилиндров 14 и 23. Установлено 2 датчика холла на коленвале, 2 коммутатора ваз и 2 катушки с парным выводом проводов. При такой схеме двигатель работает, но не развивает оборотов выше 5-6 тысяч. 

Сечас я приобрел

2 датчика холла (ардуиновские цифровые), https://ru.aliexpress.com/item/Hall-magnetic-Sensor-with-analog-digital-...

плату ардуино https://ru.aliexpress.com/item/Nano-V3-ATmega328-CH340G-Micro-USB-Pin-he...,

2 ключа https://ru.aliexpress.com/item/MOSFET-5-DC-24/32671829582.html?spm=a2g0s.9042311.0.0.fjfvob

Принцип работы на максимальных оборотах выставляем опережение и от него в низ задержку. Сдесь нашел похожую задачу http://www.cyberforum.ru/arduino/thread1947332.html . Но я ни как не могу понять как делается задержка.

Прошу помощи с освоением этого девайса. 

zilk
Offline
Зарегистрирован: 09.08.2017

puschistic пишет:

Установлено 2 датчика холла на коленвале, 2 коммутатора ваз и 2 катушки с парным выводом проводов.

 

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

 

puschistic
Offline
Зарегистрирован: 04.03.2018

Алгоритм работы следующий. При положении ВМТ в 1 и 4 цилиндре срабатывет 1 датчик хола - соответствено искра, при повороте на 180 градусов положение ВМТ в 2 и 3 цилиндра срабатывет 2 датчик хола - соответствено искра, т.е. каждый датчик холла отвечает за свою пару цилиндров.

Andry
Offline
Зарегистрирован: 11.05.2018

Как поменять направление движения метки? Чем больше обороты тем раньше поджигаем!

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

void loop(){Vak=map (analogRead(0), 160, 159, 154, 153);

Serial.println (analogRead(0);

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Господи, это еще где то применяется !

Romhik
Offline
Зарегистрирован: 11.10.2017

dmitriykisliy пишет:

void loop() {Vak = map(analogRead(0), 375, 225, 0, 6);}

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

Briq
Offline
Зарегистрирован: 04.10.2019

Всем доброго дня. Воспроизвожу скетч топикстартера для мотоциклетного двигателя.

Двигатель двухтактный, двухцилиндровый, поршни в противофазе, установлен вот такой оптодатчик https://www.compel.ru/item-pdf/f9aa89e4955802089b277aeaac567a6d/pf/autonics~bs5.pdf, шторка с вырезом 180 градусов. В настоящее время оптодатчик напрямую подключен к двум вазовским коммутаторам https://tov54.ru/components/com_virtuemart/shop_image/product/full/hm/vaz/b01485.jpg и все работает с холостой искрой в нижней мертвой точке. 

Есть давнее желание избавиться от холостой искры и изменять УОЗ в зависимости от оборотов. Скетч автора темы был изменен, вот, что получилось

volatile unsigned int zaderg = 0;
volatile int m=0, rpm, p=0, c = 0;
unsigned int Zaderg[] = {141, 95, 67, 49, 34, 25, 19, 15, 11, 8, 6, 4, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
void setup() {
pinMode (3,INPUT); //вход
pinMode (9,OUTPUT); //выход
pinMode (10,OUTPUT);
//pinMode (10,OUTPUT); //выход на отключение импульсного преобразователя
EICRA=(0<<ISC11)|(1<<ISC10); //настройка внешнего прерывания (Changing )
EIMSK|=1<<INT1; //разрешение внешнего прерывания
TCCR1B=0; //настройка таймера1
TCCR1A=0; //настройка таймера1
TIMSK1=(1<<TOIE1); //разрешить прерываение для таймера 1
TCCR1B= _BV(WGM13)|_BV(CS10); //запуск таймера 1
TCCR1A=0;
ICR1=256;//установка частоты прерывания - 32us
}
ISR(INT1_vect) { //вектор внешнего прерывания
c = digitalRead(3);
p = (4688 / m) - 5;//p - номер элемента в массиве
zaderg = Zaderg[p];// значение задержки из массива
m = 0; //сбрасываем счёт
}
ISR (TIMER1_OVF_vect) {
if (p < 0) {//холостой ход, УОЗ = max
  if (m == 280 && c ==  LOW) digitalWrite(9, HIGH); //включаем d9
  else if (m == 280 && c == HIGH) digitalWrite(10, HIGH); //включаем d10 
  else if (m == 330 && c == LOW) digitalWrite(9, LOW); // отключаем d9 (время горения искры ~ 1.5 мс)
  else if (m == 330 && c == HIGH) digitalWrite(10, LOW); // отключаем d10
}
else {
  if (m==zaderg && c == LOW) digitalWrite(9, HIGH); //включаем d9
  else if (m == zaderg && c == HIGH) digitalWrite(10, HIGH);//включаем d10
  else if (m == zaderg+50 && c == LOW) digitalWrite(9, LOW);//отключаем d9 
  else if (m == zaderg+50 && c == HIGH) digitalWrite(10, LOW);//  отключаем d10
}
m++;
}
void loop()
{
}

 В схемотехнике у меня опыта нет. На основе букваря по подключениям https://www.drive2.ru/c/1735998/сделал вот такую схему. Вход на оптопаре, а выход на транзисторе Дарлингтона.

В Протеусе все работает, даже УОЗ изменяется. После сборки выяснилось, что не работает НИЧЕГО. На выходе оптодатчика напряжение 0,5-0,7 В. При том, что если его подключить напрямую к коммутатору, уровни изменяются 0 - +12 В. Выходные трназисторы, как я понял, замыкая D3 на землю, тоже не работают.

Пожалуйста, помогите сделать вход и выход для ардуины.

walery9
Offline
Зарегистрирован: 22.07.2016

На схеме у 7805 попутаны вход и выход местами и в цепи +5 в нет напряжения.

Briq
Offline
Зарегистрирован: 04.10.2019

Верно. А я и не заметил. Этот 7805 на реальной схеме отсутствует, 3 нога подтянута через 10 кОм к 5 В от стабилизатора ардуины.

Симуляция по прежнему работает, а реальная схема нет.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Классный букварь подключений. Очень понравилось. Особенно череп с костями. 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Buldakov пишет:

Классный букварь подключений. Очень понравилось. Особенно череп с костями. 


Особенно у энкодера:
резисторы на вход вместо привязки на питание....

Romhik
Offline
Зарегистрирован: 11.10.2017

Briq пишет:

Всем доброго дня. Воспроизвожу скетч топикстартера для мотоциклетного двигателя.

...
ISR (TIMER1_OVF_vect) {
if (p < 0) {//холостой ход, УОЗ = max
  if (m == 280 && c ==  LOW) digitalWrite(9, HIGH); //включаем d9
  else if (m == 280 && c == HIGH) digitalWrite(10, HIGH); //включаем d10 
  else if (m == 330 && c == LOW) digitalWrite(9, LOW); // отключаем d9 (время горения искры ~ 1.5 мс)
  else if (m == 330 && c == HIGH) digitalWrite(10, LOW); // отключаем d10
}
else {
  if (m==zaderg && c == LOW) digitalWrite(9, HIGH); //включаем d9
  else if (m == zaderg && c == HIGH) digitalWrite(10, HIGH);//включаем d10
  else if (m == zaderg+50 && c == LOW) digitalWrite(9, LOW);//отключаем d9 
  else if (m == zaderg+50 && c == HIGH) digitalWrite(10, LOW);//  отключаем d10
}
...

А мне кажется, что функция digitalWrite будет медленней работать по сравнению с битовой операцией "PORTB &= ~(1<<1);   //отключаем d9 и PORTB |= 1<<1; // включаем d9"
Это может сказаться на углах зажигания и на высокооборотистых двигателях

и еще мне было лень ставить всякие резисторы, то я сделал вход так:
pinMode (3,INPUT_PULLUP); //вход

Вот моя тестовая схема в протеусе:

А это мой код, который я проверил, тоже работает, ну и на мотоцикле вроде работал тоже:
 

volatile unsigned int zaderg = 0;
volatile int m, p =0;
unsigned int Zaderg[] = {138, 140, 141, 143, 145, 146, 148, 150, 152, 153, 155, 157, 158, 160, 162, 164, 165, 167, 169, 170, 172, 174, 176, 177, 179, 181, 182, 184, 186, 188, 189, 191, 193, 194, 196, 198, 200, 201, 203, 205, 206, 208, 210, 212, 213, 215, 217, 218, 220, 222, 224, 225, 227, 229, 230, 232, 234, 236, 237, 239, 241, 242, 244, 246, 248, 249, 251, 253, 255, 257, 259, 261, 264, 266, 268, 270, 272, 274, 276, 278, 281, 283, 285, 287, 289, 291, 293, 295, 297, 300, 302, 304, 306, 308, 310, 312, 314, 316, 319, 321, 323, 325, 327, 329, 331, 333, 335, 338, 340, 342, 344, 346, 348, 350, 352, 354, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 431, 433, 435, 437, 439, 441, 443, 445, 447, 450, 452, 454, 456, 458, 460, 462, 464, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 551, 553, 555, 557, 559, 562, 564, 566, 568, 570, 572, 574, 576, 578, 581, 583, 585, 587, 589, 591, 593, 595, 598, 600, 602, 604, 606, 608, 610, 612, 614, 617, 619, 621, 623, 625, 627, 629, 631, 633, 636, 638, 640, 642, 644, 646, 648, 650, 652, 655, 657, 659, 661, 663, 665, 667, 669, 671, 674, 676, 678, 680, 682, 684, 686, 688, 690, 693, 695, 697, 699, 701, 703, 705, 707, 710, 712, 714, 716, 718, 720, 722, 724, 726, 729, 731, 733, 735, 737, 739, 741, 743, 745, 748, 750, 752, 754, 756, 758, 760, 762, 764, 767, 769, 771, 773, 775, 777, 779, 781, 783, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 841, 843, 845, 847, 849, 851, 853, 855, 857, 860, 862, 864, 866, 868, 870, 872, 874, 876, 879, 881, 883, 885, 887, 889, 891, 893, 895, 898, 900, 902, 904, 906, 908, 910, 912, 915, 917, 919, 921, 923, 925, 927, 929, 931, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 972, 974, 976, 978, 980, 982, 984, 986, 988, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1196, 1198, 1200, 1202};

void setup() {
pinMode (3,INPUT_PULLUP); //вход
pinMode (9,OUTPUT); //выход
EICRA=(1<<ISC11)|(0<<ISC10); //настройка внешнего прерывания (falling )
EIMSK|=1<<INT1; //разрешение внешнего прерывания
TCCR1B=0; //настройка таймера1
TCCR1A=0; //настройка таймера1
TIMSK1=(1<<TOIE1); //разрешить прерываение для таймера 1

TCCR1B= _BV(WGM13)|_BV(CS10); //запуск таймера 1
TCCR1A=0; 
ICR1=256;//установка частоты прерывания - 32us   
}

ISR(INT1_vect) {  //вектор внешнего прерывания
PORTB |= 1<<1;
p = m/2-85;
zaderg = Zaderg[p]; // значение задержки из массива
m = 0; //сбрасываем счёт
}

ISR (TIMER1_OVF_vect) {

if ( p > 516) {//1172 - 780 - холостой ход, УОЗ = 0, т.е. повторитель заднего фронта

  if      (m==75 || m==147) PORTB |= 1<<1; // включаем d9
  else if (m==5 || m==77 || m==150) PORTB &= ~(1<<1);   //отключаем d9
  }

else { //больше 780 об

  if (m==30) PORTB &= ~(1<<1); //если 30 вход отключаем d9
  if (m==zaderg){ // если (№ из массива) вход 
  PORTB |= 1<<1;  //включаем d9
  };};
 m++;}

void loop() {
  }

С подключением к коммутатору было тоже лень возится, так как в мотоцикле очень мало места было под баком, пришлось найти короткую катушку зажигания на свечу от Шкоды Фабия:

Такие же на вид есть катушки от боша:

Там питание 12 вольт а вход пятивольтовый, я прямо с ардуино подал сигнал на вход катушки "IN" и все прекрасно работало. Тем самым сэкономил себе время чтобы разбираться со всем этим геморйным китайским комутатором, который нужно было еще покупать и дорабатывать, потом его нужно где-то разместить и подключить к катушке зажигания, мы сначала пошли как раз по этому пути, искра была плохая, коммутатор вносил свою задержку и так далее, в общем поверьте мне все очень довольны были и я в том числе, когда избавились от всего этого гемороя. В итоге в случае поломки можно грешить только на 4 вещи - это датчик, ардуино, катушка и свеча. Катушка настолько сделана надежно, что её можно вообще исключить, потому что за время экспериментов и эксплуатации, было все что угодно и свечу пробивало и отваливался датчик, ардуино сгорало 12 вольт попало на 5 вольт. Катушка зажигания всегда оставалась целой.
Если бы было больше места, то поставили катушки от ВАЗ 2110 инжектор, они дешевле стоят, но длиннее, ну и конечно качество у них по хуже и исполнение тоже хуже, но тоже работают по такому принципу.
Если выкините коммутатор, катушку зажигания штатные и поставите эти, то вам будет на много проще жить, поверьте моему опыту!)))

-NMi-
Offline
Зарегистрирован: 20.08.2018

Romhik пишет:

Если бы было больше места, то поставили катушки от ВАЗ 2110 инжектор, они дешевле стоят, но длиннее, ну и конечно качество у них по хуже и исполнение тоже хуже, но тоже работают по такому принципу.

Нет. В катушках 2110 (COP - Coil On Plug  -  катушка на свече) нет встроенного коммутатора и она управляется несколько иначе, чем катухи, которые ты описал выше. В блоке управления IGBT транзюк коммутирует их на землю с токоизмерительной цепью. Так-что вот именно твой вариант прокатит, а с катухами от 2110 не прокатит. Имей это ввиду!  Да и по качеству они есть тоже бошь, то-же фиг сломаешь...

Briq
Offline
Зарегистрирован: 04.10.2019

Спасибо за совет. У меня коммутаторы вот с такой схемой http://ok-t.ru/mydocxru/baza5/452666368193.files/image050.jpg (3-земля, 5 - питание датчика Холла, 6 - сигнал от датчика Холла) с моим оптодатчиком работают отлично. Желания менять коммутаторы нет. Можно ли ими управлять напрямую с ардуины? Не убъют ли скачки напряжения в бортсети выходы платы?

-NMi-
Offline
Зарегистрирован: 20.08.2018

ULN2003 как раз в помощь.

Romhik
Offline
Зарегистрирован: 11.10.2017

-NMi- пишет:

Нет. В катушках 2110 (COP - Coil On Plug  -  катушка на свече) нет встроенного коммутатора и она управляется несколько иначе, чем катухи, которые ты описал выше. В блоке управления IGBT транзюк коммутирует их на землю с токоизмерительной цепью. Так-что вот именно твой вариант прокатит, а с катухами от 2110 не прокатит. Имей это ввиду!  Да и по качеству они есть тоже бошь, то-же фиг сломаешь...

Я просто не помню точно, но какие-то совдеповского автопрома вроде нашли типа аналог советский какого-то нового ваза, а может продавец просто не знал, мы ему объясняли объясняли какую нам катушку нужно, что именно со встроенным коммутатором, он нам пытался впарить какую-то супер новую))) Хорошо, что не влезла под бак))) Потом нашли от мазды катушку, они короткие, но блин провода втыкаются в верху, и как раз из-за этого тоже не влезла, разъем начал упираться в бак. А вообще на разборке иномарок можно найти много чего интересного, ну и в общем то и нашли, что нужно!))
Вот еще, может кому интересная информация по разным катушками и их подключению:
http://www.vems.hu/wiki/index.php?page=IgnitionPage%2FCOP

Romhik
Offline
Зарегистрирован: 11.10.2017

Briq пишет:

Спасибо за совет. У меня коммутаторы вот с такой схемой http://ok-t.ru/mydocxru/baza5/452666368193.files/image050.jpg (3-земля, 5 - питание датчика Холла, 6 - сигнал от датчика Холла) с моим оптодатчиком работают отлично. Желания менять коммутаторы нет. Можно ли ими управлять напрямую с ардуины? Не убъют ли скачки напряжения в бортсети выходы платы?

А датчик индкутивный или полупроводниковый датчик Холла?
Можно проверить тестером.
Ну я бы сначала проверил работу ардуины, изменил бы в программе:
pinMode (9,OUTPUT); //выход на pinMode(ledPin, OUTPUT);
digitalWrite(9, HIGH); //включаем d9 на digitalWrite(ledPin, HIGH);
digitalWrite(9, HIGH); //включаем d9 на digitalWrite(ledPin, LOW);
Ну и посмотреть как светодиод моргает, когда заводишь двигатель, он будет моргать в момент формирования искры, если все ок, то возвращаешь все назад и подключаешь выход с ардуины на вход (1,2,3,4,5,6,7 это входы) ULN2003 а выход (16,15,14,13,12,10 это выходы, порядок соответсвует входам) уже на 6 - сигнал от датчика Холла.  3-земля комутатора соединяешь с землей ардуины и 8 ножкой ULN2003, 5 - питание датчика Холла соединяешь с 9 ножкой ULN2003
Так что правильно сказал тебе -NMi- используй ULN2003
Вот схема ULN2003: https://www.theengineeringprojects.com/wp-content/uploads/2017/06/ULN200...
 

Briq
Offline
Зарегистрирован: 04.10.2019

Датчик оптический BS5-T2M. Спасибо, попробую со встроенным диодом. 

У меня и так выход на двух транзисторах Дарлингтона КТ972А (их просто в протеусе нет). И это не работает.

Romhik
Offline
Зарегистрирован: 11.10.2017

Briq пишет:

Датчик оптический BS5-T2M. Спасибо, попробую со встроенным диодом. 

У меня и так выход на двух транзисторах Дарлингтона КТ972А (их просто в протеусе нет). И это не работает.


Оптический?
Так его же пылью закидает!
Дело в том что на практике ULN2003 c ардуино работает, по входу ULN2003 хорошо совместима с ардуино и я делал проекты просто на микроконтроллерах, в общем в связке с ULN2003 работало хорошо. Ну а по выходу она тоже совместима, там открытый коллектор!
Ах да, забыл еще сказать, что на выход ULN2003  нужно поцепить резистор с контакта коммутатора 5 - питание датчика Холла, иначе я не знаю как работать будет.
А еще может быть такое, что нужно инвертировать сигнал с  выхода с ардуины, но это легко сделать в программе на выходах HIGH на LOW поменять. Ну так как у меня есть осциллограф, то я ним все проследил, чтобы все шло как надо))) Программу осциллограф как для компьютера так и для смартфона можно скачать, в интернете и плеймаркете легко найти, только шнур нужно самому сделать.

Briq
Offline
Зарегистрирован: 04.10.2019

Оптодачтик нормально себя там чувствует. Гораздо лучше .чем датчик Холла рядом с сильным магнитным полем генератора.