Электронный Блок Управления на авто

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

infyniti пишет:

Ветеранов я так понимаю и надо пинать....ни одново совета))))

И не будет! И это правильно! Вы выкладываете код, плюя при этом на правила форума.

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

Ну, а если Ваш код не читают, то разумеется, никакой помощи Вам не будет - один глум.

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

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

ЕвгенийП пишет:

infyniti пишет:

Ветеранов я так понимаю и надо пинать....ни одново совета))))

И не будет! И это правильно! Вы выкладываете код, плюя при этом на правила форума.

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

Ну, а если Ваш код не читают, то разумеется, никакой помощи Вам не будет - один глум.

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

Вот совет номер один.

Но читать код смысла нет там две строчки получение сигнала и передача что там читать?

Вопрос как пользоватся прерыванием какие варианты?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

И да, "как пользоваться прерываниями?" - это не конкретный вопрос. Представьте, что Вы зашли на форум переводчиков и спросили "как говорить по-английски?". Вы уверены, что Вам начнут объяснять как открывать рот и куда девать язык? Или Вас всё-же пошлют? И Вы, наверняка, даже знаете куда именно. Вот и здесь также.

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

Jeka_M пишет:

 

 

Ну так и должно быть. Пока функция delay() не завершится, программа дальше не выполняется. Такую функцию разработчики Ардуино написали для новичков, типа для облегчения программирования... Хотя новички об неё постоянно спотыкаются...

Вам нужно отказаться от delay() и переписать скетч с использованием функции millis(), она не блокирует выполнение скетча. Использование millis() чуть сложней, чем delay() и алгоритм нужно будет немного изменить.

http://arduino.ru/tutorials/BlinkWithoutDelay

http://robocraft.ru/blog/arduino/385.html

infyniti пишет:

Язык сильный а не работает как Ява точно без нареканий 

Опять же - обычный С/С++

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

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

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

ЕвгенийП пишет:

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

И да, "как пользоваться прерываниями?" - это не конкретный вопрос. Представьте, что Вы зашли на форум переводчиков и спросили "как говорить по-английски?". Вы уверены, что Вам начнут объяснять как открывать рот и куда девать язык? Или Вас всё-же пошлют? И Вы, наверняка, даже знаете куда именно. Вот и здесь также.

Вполне конкретный вопрос.

Я не спрасил как писать на Си я спросил как пользоватся прерываниями а их много,и каким из ни пользоватся я не знаю.

Временные внешние простые какие еще есть?как я могу просить очем я не знаю.

Мне нужна функция, которая не остоновит скечь как(delay) а будет остонавливать временным интервалом только что выполненое действие  

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

 

Jeka_M пишет:

 

 

Ну так и должно быть. Пока функция delay() не завершится, программа дальше не выполняется. Такую функцию разработчики Ардуино написали для новичков, типа для облегчения программирования... Хотя новички об неё постоянно спотыкаются...

Вам нужно отказаться от delay() и переписать скетч с использованием функции millis(), она не блокирует выполнение скетча. Использование millis() чуть сложней, чем delay() и алгоритм нужно будет немного изменить.

http://arduino.ru/tutorials/BlinkWithoutDelay

http://robocraft.ru/blog/arduino/385.html

 

 

Единственный дельный совет.СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

infyniti пишет:

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

А при чём здесь прерывания? Это вообще из другой оперы. delay() это не прерывание.

"Временные внешние простые какие еще есть?" - это что за классификация? "Временные", "простые" - нет таких в микроконтроллере. Есть только внешние прерывания и прерывания от различных переферийных блоков (внутренние). Например от аппаратных таймеров, SPI, UART и т.д.

 

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

Jeka_M пишет:

infyniti пишет:

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

А при чём здесь прерывания? Это вообще из другой оперы. delay() это не прерывание.

"Временные внешние простые какие еще есть?" - это что за классификация? "Временные", "простые" - нет таких в микроконтроллере. Есть только внешние прерывания и прерывания от различных переферийных блоков (внутренние). Например от аппаратных таймеров, SPI, UART и т.д.

 

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

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

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

infyniti пишет:

я не знаю кривой переводчик

па-русски читай Программирование

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

Клапауций 112 пишет:

infyniti пишет:

я не знаю кривой переводчик

па-русски читай Программирование

Чтоб уметь програмировать нужно програмировать.Спасибо за ссылку))

 

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

millis мне тоже не подходит он живет своей жизнью.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так все в цьому світі живе своїм життям, навіть горілка.

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

Мне нужна задержка которая будет выполнять деийствие как delay(); 

 const byte inHallSensorPin1 = 2;     // пин для подключения датчика холла
 const byte inHallSensorPin2 = 3;     // пин для подключения датчика холла2
 const byte inHallSensorPin3 = 4;     // пин для подключения датчика холла3
 const byte inHallSensorPin4 = 5;     // пин для подключения датчика холла4
 int injectorPin1 = 6;           // пин для подключения светодиода1
 int injectorPin2 = 7;           // пин для подключения светодиода2
 int injectorPin3 = 8;           // пин для подключения светодиода3
 int injectorPin4 = 9;           // пин для подключения светодиода4
 int val = 0;                          // переменная для хранения значения


void setup() {
  pinMode(inHallSensorPin1, INPUT);        //
  pinMode(inHallSensorPin2, INPUT);        //
  pinMode(inHallSensorPin3, INPUT);        //
  pinMode(inHallSensorPin4, INPUT);        //
  pinMode(injectorPin1, OUTPUT);           //
  pinMode(injectorPin2, OUTPUT);           //        
  pinMode(injectorPin3, OUTPUT);           //       
  pinMode(injectorPin4, OUTPUT);           //
  
  delay(1500);                             //пусковая задержка после каждого вкл зажигания

  
  Serial.begin(9600);                    //

}

void loop() {

  
   val = digitalRead(inHallSensorPin1);       // считываем значение с входа1
   digitalWrite(injectorPin1, val);           // выводим значение на фарсунку1

      
   val = digitalRead(inHallSensorPin2);       // считываем значение с входа1
   digitalWrite(injectorPin2, val);           // выводим значение на фарсунку2 
     
   val = digitalRead(inHallSensorPin3);       // считываем значение с входа1
   digitalWrite(injectorPin3, val);           // выводим значение на фарсунку3
      
   val = digitalRead(inHallSensorPin4);       // считываем значение с входа1
    digitalWrite(injectorPin4, val);           // выводим значение на фарсунку4
Serial.println(val);

     
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Всем нужна.

Если у Вас есть вопросы - задавайте, а нет, так и суда нет.

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

ЕвгенийП пишет:

Так все в цьому світі живе своїм життям, навіть горілка.

Вот и я нифига не могу понять что он от меня хочет

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

ЕвгенийП пишет:

Всем нужна.

Если у Вас есть вопросы - задавайте, а нет, так и суда нет.

Есть вопрос как можно кодом выключить пин?

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

infyniti пишет:

Есть вопрос как можно кодом выключить пин?

чтобы он включился при следующим действии.............вот оно мне нужен цикл!!!!!!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

infyniti пишет:

Есть вопрос как можно кодом выключить пин?

Никак. Пин вообще никак нельзя выключить ни кодом, ни мытьём, ни катаньем - нет у него выключателя.

На пине можно установить одно из трёх состояний: высокий уровень, низкий уровень и высокоимпедансное состояние. Что именно из перечисленного Вас интресует?

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

infyniti пишет:

Есть вопрос как можно кодом выключить пин?

выключить это как . Был 1 стал 0. или был выходом, стал входом. Или же кодом отрезать чипу ногу @^@

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

ЕвгенийП пишет:

infyniti пишет:

Есть вопрос как можно кодом выключить пин?

Никак. Пин вообще никак нельзя выключить ни кодом, ни мытьём, ни катаньем - нет у него выключателя.

На пине можно установить одно из трёх состояний: высокий уровень, низкий уровень и высокоимпедансное состояние. Что именно из перечисленного Вас интресует?

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

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

infyniti пишет:

ни фолс с тру ни лов с хиг не прикручивается 

Я не знаю что такое  "фолс", "тру", "лов" и "хиг", может и полезные вещи, ХЗ. Но если не прикручиваются, то скорее свего отвёртка не той системы.

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

qwone пишет:

infyniti пишет:

Есть вопрос как можно кодом выключить пин?

выключить это как . Был 1 стал 0. или был выходом, стал входом. Или же кодом отрезать чипу ногу @^@

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

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

ЕвгенийП пишет:

Я не знаю что такое  "фолс", "тру", "лов" и "хиг", может и полезные вещи, ХЗ. Но если не прикручиваются, то скорее свего отвёртка нетой системы.

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

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

У меня есть кусок кремния и проволока, я хочу сделать процессор. Просто я начинающий и решил начать с простого. Баян, но ИМХО в тему.

Сколько я читал, джетроник не лучшее изобретение в инжекторной области.

Может, проще поставить Январь 5.1 и датчики с ВАЗа? Проще, надёжнее, все дела...ИМХО, тут это оправдано.

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

Yarik.Yar пишет:

У меня есть кусок кремния и проволока, я хочу сделать процессор. Просто я начинающий и решил начать с простого. Баян, но ИМХО в тему.

Сколько я читал, джетроник не лучшее изобретение в инжекторной области.

Может, проще поставить Январь 5.1 и датчики с ВАЗа? Проще, надёжнее, все дела...ИМХО, тут это оправдано.

Это мое мнение...

1 джетроник осуществляет подачу ттоплива механически ни какая ЭБУ не может в данный момент осущиствить подачу топлива так точно .ЭБУ Январь не может проследить факторы давления воздуха влажность воздуха.Январь, Бош привязаны к датчикам уже устаревшим и не точным.

2 Стоимость ремонта ЭБУ и стоимость ремонта джетроника не сопоставимы.Стоимость Января 100уе стоимость джетроника 30уе.

3 ЭБУне ремонтнопригоден(нет спецов).Джетроник ремонтируется и легко настраивается в домашних условиях(кроме СО).

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Понимаете, что напрягает. Автомобиль - источник повышенной опасности. Вы лезете в его систему управления, а при этом сами спрашиваете "как пин выключить". Может, для начала, светодиодом помигать?

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

ЕвгенийП пишет:

Понимаете, что напрягает. Автомобиль - источник повышенной опасности. Вы лезете в его систему управления, а при этом сами спрашиваете "как пин выключить". Может, для начала, светодиодом помигать?

Диодами я намигался до изжоги,они мне скоро снится будут.Лучше подскажите как этот диод потушить когда датчик холла во включенном состоянии?И чтоб луп продолжал при этом крутится.

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

Да и потом я в прошлом занимался ремонтом и диагностикой КЕ-К-Джетроника и не надо мне писать о том что я лезу в свою стихию.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Не соглашусь. ДАД на Я5.1 поставить можно, стоит рядовой 5.1.1 от тысячи рублей, сам покупал недавно. К тому же, стоить-то он может и стоит 30 уе, да только не продаёт ведь никто, или я ошибаюсь?
Не знаю, чем у вас механический джетроник будет точнее электронного, тогда можно и на карб вернуться, там нет неточных датчиков, а жиклеры даром отдают, настраивай не хочу...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

/*
  ардуино пин 2 <--> датчик холла 1
  ардуино пин 3 <--> датчик холла 2
  ардуино пин 4 <--> датчик холла 3
  ардуино пин 5 <--> датчик холла 4
  ардуино пин 6 <--> инжектор 1
  ардуино пин 7 <--> инжектор 2
  ардуино пин 8 <--> инжектор 3
  ардуино пин 9 <--> инжектор 4
*/
//---------------------------------------------------
class Cl_HallToInject {
    const uint32_t time = 1000; // длительность 1 секунда
    const byte _Hall_pin  ; // пин холла
    const byte _Inject_pin;// пин инжектора
    bool Hall, Hall_old;
    bool Inject;
    uint32_t past = 0;
  public:
    Cl_HallToInject(byte Hall_pin, byte Inject_pin): _Hall_pin(Hall_pin), _Inject_pin(Inject_pin) {}
    void setup() {
      pinMode(_Hall_pin, INPUT);
      Hall_old = digitalRead( _Hall_pin);
      pinMode(_Inject_pin, OUTPUT);
      digitalWrite(_Inject_pin, Inject = 0);
    }
    void loop() {
      Hall = digitalRead( _Hall_pin);
      if (Hall && !Hall_old) { // если сработал датчик Холла
        Hall_old = 1;
        digitalWrite(_Inject_pin, Inject = 1); // то вкл Инжектор
        past = millis();
      }
      else if (!Hall && Hall_old) {
        Hall_old = 0;
      }
      if (Inject && millis() - past >= time) { // если истекло время
        digitalWrite(_Inject_pin, Inject = 0);  // то выкл Инжектор
      }
    }
};
//------------------Компоновка---------------------------------
Cl_HallToInject HallToInject1(/*датчик холла*/2,/*инжектор*/6);
Cl_HallToInject HallToInject2(/*датчик холла*/3,/*инжектор*/7);
Cl_HallToInject HallToInject3(/*датчик холла*/4,/*инжектор*/8);
Cl_HallToInject HallToInject4(/*датчик холла*/5,/*инжектор*/9);
//------------------main()---------------------------------
void setup() {
  HallToInject1.setup();
  HallToInject2.setup();
  HallToInject3.setup();
  HallToInject4.setup();
}

void loop() {
  HallToInject1.loop();
  HallToInject2.loop();
  HallToInject3.loop();
  HallToInject4.loop();
}
infyniti
Offline
Зарегистрирован: 15.07.2017

Yarik.Yar пишет:
Не соглашусь. ДАД на Я5.1 поставить можно, стоит рядовой 5.1.1 от тысячи рублей, сам покупал недавно. К тому же, стоить-то он может и стоит 30 уе, да только не продаёт ведь никто, или я ошибаюсь? Не знаю, чем у вас механический джетроник будет точнее электронного, тогда можно и на карб вернуться, там нет неточных датчиков, а жиклеры даром отдают, настраивай не хочу...

Возможно живя в россии я бы придержался этого мнения.Да и на разборе у нас полно их в отличии от ЭБУ.От этого цена на джетроник низкая так как спроса нет.Я за 1700 на рубли взял,воздухомер,дозатор,датчик прогрева,4 форсунки,магисраль в комплекте.ЭБУ Бош же новый 13000 на рубли,ЭБУ бу 8000.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Друг, ты точно понимаешь что хочешь? В прграмировании всё просто. Можно сделать всё, что ты бы сделал руками. Попробуй с простого. Опиши для себя, можно и нам сюда выложить, что должна делать программа шаг за шагом. Представь что у тебя в руках секундомер, кнопки и лампочки. Типа: датчик хола включил лампочку - запомнить время включения - преверять время пока не пройдёт секунда нажать кнопку первый цилиндр. И.т.д. Если теперь вспомнить, что проверка лампочки это чтение ноги, нажатие кнопки это выставление 1 на другой ноге а отпускание это выставление 0, проверка времени это сравнение с millis или microseconds, то программа составится без проблем. На первом этапе прерывания не нужны. Нужно составить правильный алгоритм работы и его описать в терминах си. Пока мне не понятно что должно быть. Написано много но внятного описания шаг за шагом нет.

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

так еще и датчики с косой тоже 4-5 тысяч легче уж с россии самому привезти

 

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

nik182 пишет:
Друг, ты точно понимаешь что хочешь? В прграмировании всё просто. Можно сделать всё, что ты бы сделал руками. Попробуй с простого. Опиши для себя, можно и нам сюда выложить, что должна делать программа шаг за шагом. Представь что у тебя в руках секундомер, кнопки и лампочки. Типа: датчик хола включил лампочку - запомнить время включения - преверять время пока не пройдёт секунда нажать кнопку первый цилиндр. И.т.д. Если теперь вспомнить, что проверка лампочки это чтение ноги, нажатие кнопки это выставление 1 на другой ноге а отпускание это выставление 0, проверка времени это сравнение с millis или microseconds, то программа составится без проблем. На первом этапе прерывания не нужны. Нужно составить правильный алгоритм работы и его описать в терминах си. Пока мне не понятно что должно быть. Написано много но внятного описания шаг за шагом нет.

Я прекрастно понимаю что хочу...

включение датчика хола 

прерывание\\здесь идет сигнал с датчика температуры устонавливает время открытия форсунки

заносим в переменную

прерывание\\здесь идет сигнал с потенциометра о положении дроселя сигнал устонавлевает время открытия форсунки

складываем переменные

передача сигнала на форсунку

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

infyniti пишет:

Я прекрастно понимаю что хочу...

включение датчика хола 

прерывание\\здесь идет сигнал с датчика температуры устонавливает время открытия форсунки

заносим в переменную

прерывание\\здесь идет сигнал с потенциометра о положении дроселя сигнал устонавлевает время открытия форсунки

складываем переменные

передача сигнала на форсунку

У ардуины нано, или уно есть только ДВА вывода для прерываний. Потенциометр можно померить и без прерываний.

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

qwone пишет:

У ардуины нано, или уно есть только ДВА вывода для прерываний. Потенциометр можно померить и без прерываний.

Спасибо за код и за подсказку.На счет прерываний  я знаю у меня мега на этот случий есть. Нано у меня для испытаний и если сгорит не так жалко.А до потециометра с температурой я пока не дошол.В джетронике все механика.  

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

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

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

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

Yarik.Yar пишет:
Не соглашусь. ДАД на Я5.1 поставить можно, стоит рядовой 5.1.1 от тысячи рублей, сам покупал недавно. К тому же, стоить-то он может и стоит 30 уе, да только не продаёт ведь никто, или я ошибаюсь? Не знаю, чем у вас механический джетроник будет точнее электронного, тогда можно и на карб вернуться, там нет неточных датчиков, а жиклеры даром отдают, настраивай не хочу...

Я тоже не соглашусь 5.1 управляет всеми форсунками одновременно это приводит к расходу на холостых оборотах и к детонации при наборе скорости,так как часть топлива оседает на стенках колектора.И 7.2 тоже кстати.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Секундомер это образное понятие измерения времени. Вы опять несёте всякую пургу, по которой написать программу невозможно. Определитесь уже что должна делать ардуино пошагово. Программа это пошаговое выполнение команд. Даже прерывание выполняется пошагово.
Что значит включение датчика хола? Он всегда включен и дает импульсы. В программе надо писать ожидание фронта импульса датчика хола. Пока ждем фронт можно параллельно померить температуру и педаль акселератора, потом рассчитать времена задержек для каждого цилиндра на основе предыдущего значения скорости вращения. После прихода импульса начать выдавать импульсы по цилиндрам и считать опять скорость вращения. Как то так. Это самая малость. Я не знаю, что вам ещё надо учитывать. Пока не разберёте все действия на отдельные элементарные ничего написать не выдет. Не умеет ардуина оперировать абстрактмыми понятиями типа передача сигнала на форсунку. Эта предача раскладывается как минимум на 4 действия. Для программы их надо расписывать каждое отдельно. Так со всеми действиями.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*
  ардуино пин A0 <--> средний вывод потенциометра
  ардуино пин 2 <--> датчик холла 1
  ардуино пин 3 <--> датчик холла 2
  ардуино пин 4 <--> датчик холла 3
  ардуино пин 5 <--> датчик холла 4
  ардуино пин 6 <--> инжектор 1
  ардуино пин 7 <--> инжектор 2
  ардуино пин 8 <--> инжектор 3
  ардуино пин 9 <--> инжектор 4
*/
//--------------------Cl_Potentiometer---------------------------------------------
class Cl_Potentiometer {
    const byte _pin;
    int *const _pnt;// указатель переменную которая меняет значение по положению ручки потенциометра
    uint32_t past = 0;
  public:
    Cl_Potentiometer(byte pin, int *pnt): _pin(pin), _pnt(pnt) {}
    void setup() {
      *_pnt = map(analogRead(_pin), 0, 1023, 10, 1000);
    }
    void loop() {
      if (millis() - past > 100) {
        *_pnt = map(analogRead(_pin), 0, 1023, 10, 1000);
      }
    }
};
//--------------------Cl_HallToInject-------------------------------
// класс Датчик Холла задает начало открытия инжектора
class Cl_HallToInject {
    uint32_t time = 1000; // длительность 1 секунда
    int *const _pnt;// указатель переменную которая задает новое значение time
    const byte _Hall_pin  ; // пин холла
    const byte _Inject_pin;// пин инжектора
    bool Hall, Hall_old;
    bool Inject;
    bool _invH, _invI; // инверсия выходов датчика Холла и инжектора
    uint32_t past = 0;
  public:
    Cl_HallToInject(byte Hall_pin, bool invH, byte Inject_pin, bool invI, int *pnt)
      : _Hall_pin(Hall_pin), _invH(invH), _Inject_pin(Inject_pin), _invI(invI) , _pnt(pnt) {}
    void setup() {
      pinMode(_Hall_pin, INPUT);
      Hall_old = _invH ^ digitalRead( _Hall_pin);
      pinMode(_Inject_pin, OUTPUT);
      Inject = 0;
      digitalWrite(_Inject_pin, _invI ^ Inject);
    }
    void loop() {
      Hall = _invH ^ digitalRead( _Hall_pin);
      if (Hall && !Hall_old) { // если сработал датчик Холла
        Hall_old = 1;
        Inject = 1;            // то вкл Инжектор
        digitalWrite(_Inject_pin, _invI ^ Inject);
        time = *_pnt; // выставить новое время впрыска
        past = millis();
      }
      else if (!Hall && Hall_old) {
        Hall_old = 0;
      }
      if (Inject && millis() - past >= time) { // если истекло время
        Inject = 0;                            // то выкл Инжектор
        digitalWrite(_Inject_pin, _invI ^ Inject);
      }
    }
};
//------------------Компоновка---------------------------------
int time = 1000; // длительность впрыска
Cl_Potentiometer Potentiometer(/*пин потенциометра*/A0,/*переменая*/&time);// подключить потенциометр
// Замечание: Если вам нужно проинвертировать сигнал, то замените 0 на 1
Cl_HallToInject HallToInject1(/*датчик холла*/2,/*инверт сиг с датХолла*/0,/*инжектор*/6,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject2(/*датчик холла*/3,/*инверт сиг с датХолла*/0,/*инжектор*/7,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject3(/*датчик холла*/4,/*инверт сиг с датХолла*/0,/*инжектор*/8,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject4(/*датчик холла*/5,/*инверт сиг с датХолла*/0,/*инжектор*/9,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
//------------------main()---------------------------------
void setup() {
  Serial.begin(9600);
  Potentiometer.setup();
  HallToInject1.setup();
  HallToInject2.setup();
  HallToInject3.setup();
  HallToInject4.setup();
}

void loop() {
  Serial.println(time);
  Potentiometer.loop();
  HallToInject1.loop();
  HallToInject2.loop();
  HallToInject3.loop();
  HallToInject4.loop();
}

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

5.1.1 - да, одновременный впрыск, а 5.1 просто - нет, либо попарно параллельный, либо фазированный.
В общем, я-то не против, хотите - делайте, но что-то мне подсказывает, что получится не то или не получится вообще... Но удачи!

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

Спасибо..Это то,что мне нужно.

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

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

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

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

nik182 пишет:
Секундомер это образное понятие измерения времени. Вы опять несёте всякую пургу, по которой написать программу невозможно. Определитесь уже что должна делать ардуино пошагово. Программа это пошаговое выполнение команд. Даже прерывание выполняется пошагово. Что значит включение датчика хола? Он всегда включен и дает импульсы. В программе надо писать ожидание фронта импульса датчика хола. Пока ждем фронт можно параллельно померить температуру и педаль акселератора, потом рассчитать времена задержек для каждого цилиндра на основе предыдущего значения скорости вращения. После прихода импульса начать выдавать импульсы по цилиндрам и считать опять скорость вращения. Как то так. Это самая малость. Я не знаю, что вам ещё надо учитывать. Пока не разберёте все действия на отдельные элементарные ничего написать не выдет. Не умеет ардуина оперировать абстрактмыми понятиями типа передача сигнала на форсунку. Эта предача раскладывается как минимум на 4 действия. Для программы их надо расписывать каждое отдельно. Так со всеми действиями.

Моя программа не зависит от оборотов двигателя или поступления воздуха, это все делает механика.Моя программа управляет открытием инжекторов с помощью датчиков хола,температуры и потенциометра(дросселя) .Логика проста,получаем импульс( Что значит включение датчика хола), получение переменных, сложение переменных,передача задержки на открытие инжектора.1 цикл длится должен около 6 милисикунд на 9000 оборотов.Ардуино это осилит.Это основные требования.Что здесь не понятного. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну я не специалист по двигателям, а так же всяким инжекторам. Да и машины у меня нет. Ну не к чему она мне. Так что просто выложу примерный код под ваш алгоритм.

/*
  ардуино пин A1 <--> на вывод термистора // cчитаем еще один потенциометр
  ардуино пин A0 <--> средний вывод потенциометра
  ардуино пин 2 <--> датчик холла 1
  ардуино пин 3 <--> датчик холла 2
  ардуино пин 4 <--> датчик холла 3
  ардуино пин 5 <--> датчик холла 4
  ардуино пин 6 <--> инжектор 1
  ардуино пин 7 <--> инжектор 2
  ардуино пин 8 <--> инжектор 3
  ардуино пин 9 <--> инжектор 4
*/
//--------------------Cl_Temp---------------------------------------------
// класс измерителя температуры
class Cl_Temp {
    const byte _pin;
    int *const _pntTemp;// указатель переменную которая меняет значение температуры по положению ручки потенциометра
    uint32_t past = 0;
  public:
    Cl_Temp(byte pin, int *pntTemp): _pin(pin), _pntTemp(pntTemp) {}
    void setup() {
      *_pntTemp = map(analogRead(_pin), 0, 1023, 10, 100);//<--- здесь функция поворота ручки в значение температуры
    }
    void loop() {
      if (millis() - past > 100) {
        *_pntTemp = map(analogRead(_pin), 0, 1023, 10, 100);//<--- здесь функция поворота ручки в значение температуры
      }
    }
};
//--------------------Cl_Potentiometer---------------------------------------------
// класс потемциометр . Меняет значение внешней переменной в зависимости от ручки потенциометра
class Cl_Potentiometer {
    const byte _pin;
    int *const _pntTemp;// указатель переменную которая меняет значение температуры по положению ручки потенциометра(входящее значение)
    int *const _pntTime;// указатель переменную которая меняет значение времени по положению ручки потенциометра
    uint32_t past = 0;
  public:
    Cl_Potentiometer(byte pin, int *pntTemp, int *pntTime): _pin(pin), _pntTemp(pntTemp), _pntTime(pntTime) {}
    void setup() {
      *_pntTime = _pntTemp + map(analogRead(_pin), 0, 1023, 10, 1000); //<--- здесь функция поворота ручки в значение
    }
    void loop() {
      if (millis() - past > 100) {
        *_pntTime = _pntTemp + map(analogRead(_pin), 0, 1023, 10, 1000); //<--- здесь функция поворота ручки в значение
      }
    }
};
//--------------------Cl_HallToInject-------------------------------
// класс Датчик Холла задает начало открытия инжектора
class Cl_HallToInject {
    uint32_t time = 1000; // длительность 1 секунда
    int *const _pnt;// указатель переменную которая задает новое значение time
    const byte _Hall_pin  ; // пин холла
    const byte _Inject_pin;// пин инжектора
    bool Hall, Hall_old;
    bool Inject;
    bool _invH, _invI; // инверсия выходов датчика Холла и инжектора
    uint32_t past = 0;
  public:
    Cl_HallToInject(byte Hall_pin, bool invH, byte Inject_pin, bool invI, int *pnt)
      : _Hall_pin(Hall_pin), _invH(invH), _Inject_pin(Inject_pin), _invI(invI) , _pnt(pnt) {}
    void setup() {
      pinMode(_Hall_pin, INPUT);
      Hall_old = _invH ^ digitalRead( _Hall_pin);
      pinMode(_Inject_pin, OUTPUT);
      Inject = 0;
      digitalWrite(_Inject_pin, _invI ^ Inject);
    }
    void loop() {
      Hall = _invH ^ digitalRead( _Hall_pin);
      if (Hall && !Hall_old) { // если сработал датчик Холла
        Hall_old = 1;
        Inject = 1;            // то вкл Инжектор
        digitalWrite(_Inject_pin, _invI ^ Inject);
        time = *_pnt; // выставить новое время впрыска
        past = millis();
      }
      else if (!Hall && Hall_old) {
        Hall_old = 0;
      }
      if (Inject && millis() - past >= time) { // если истекло время
        Inject = 0;                            // то выкл Инжектор
        digitalWrite(_Inject_pin, _invI ^ Inject);
      }
    }
};
//------------------Компоновка---------------------------------
int temp = 60; // температура
int time = 1000; // длительность впрыска
Cl_Temp Temp(/*пин потенциометра*/A1,/*переменая*/&temp);// подключить термометр
Cl_Potentiometer Potentiometer(/*пин потенциометра*/A0,/* входная переменая*/&temp,/*выходная переменая*/&time);// подключить потенциометр
// Замечание: Если вам нужно проинвертировать сигнал, то замените 0 на 1
Cl_HallToInject HallToInject1(/*датчик Холла*/2,/*инверт сиг с датХолла*/0,/*инжектор*/6,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject2(/*датчик Холла*/3,/*инверт сиг с датХолла*/0,/*инжектор*/7,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject3(/*датчик Холла*/4,/*инверт сиг с датХолла*/0,/*инжектор*/8,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
Cl_HallToInject HallToInject4(/*датчик Холла*/5,/*инверт сиг с датХолла*/0,/*инжектор*/9,/*инверт сиг на инжектор*/0,/*время впрыска*/&time);
//------------------main()---------------------------------
void setup() {
  Serial.begin(9600);
  Temp.setup();
  Potentiometer.setup();
  HallToInject1.setup();
  HallToInject2.setup();
  HallToInject3.setup();
  HallToInject4.setup();
}

void loop() {
  Serial.println(time);
  Temp.loop();
  Potentiometer.loop();
  HallToInject1.loop();
  HallToInject2.loop();
  HallToInject3.loop();
  HallToInject4.loop();
}

ПС: Код деревяный. Можно загнать опрос температуры и потенциометра(дросселя) в один класс. класс Холл-Инжектор перевести с millis() на micros() . 

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

qwone пишет:

Ну я не специалист по двигателям, а так же всяким инжекторам. Да и машины у меня нет. Ну не к чему она мне. Так что просто выложу примерный код под ваш алгоритм.

ПС: Код деревяный. Можно загнать опрос температуры и потенциометра(дросселя) в один класс. класс Холл-Инжектор перевести с millis() на micros() . 

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

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

СОРРИ! разобрался спасибо.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Один датчик холла управляет одним инжектором.

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

qwone пишет:

Один датчик холла управляет одним инжектором.

Да я понял уже .Просто такой код не могу понять.А как сделать чтоб один датчик четырмя упровлял.Для этого другой код нужен или в этом можно чтото подправить?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

infyniti пишет:

Да я понял уже .Просто такой код не могу понять.А как сделать чтоб один датчик четырмя упровлял.Для этого другой код нужен или в этом можно чтото подправить?

А зачем. Объедините выхода инжекторов и они будут работать синхронно.