Установка для проверки/промывки топливных форсунок

MaksVV
Offline
Зарегистрирован: 06.08.2015

библиотека работает на таймере вроде как, у меги они на других пинах висят. Из пушки по воробьям получается, мегу сюда втыкать. А так ковыряйте библиотеку PWM

на меге на сколько помню нужно ШИМ пин использовать не 9,  а 11. 

And_N
Offline
Зарегистрирован: 19.02.2019

Я уже понял, что как с экраном не прокатит. За наводку спасибо, будем копать.

MaksVV
Offline
Зарегистрирован: 06.08.2015

а че копать то? подключите сигнал на мосфет с 11 пина, а не с 9. В скетче #99 в строке 004 заменить 9 на 11

And_N
Offline
Зарегистрирован: 19.02.2019

Спасибо. Все заработало.

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:

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

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

 

как уже говорил мензурки заказал в интернет магазине школьных принадлежностей (в т.ч. для уроков химии). Уголок алюминиевый легко сверлится и пилится, поэтому каркас довольно легко поддался. Основной интструмент болгарка и шурик, трещётка на 10. многа болтов и гаек М6. и аккуратность не помешает, у меня с этим беда. 

Бачок от омывателя классики, туда поместился бензонасос от форд мондео4, т.к  топливных стаканов валяется вагон и маленькая тележка, а дохнут там не насосы а, подгарает эл. разъём на крышке стакана, поэтому кто в Е-бурге обращайтесь за насосами. 

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

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

Топливная рампа от дэу нексия (уши подогнуть пришлось). На разборках рампы разные есть, от 300 руб. 

Планирую просверлить (пока не знаю чем) мензурки внизу, диаметр 10мм. заказал такие штуцеры (1/8" на 8мм) , гайки и сборку кранов 4шт. , чтобы слив с мензурок делать. Решил не связываться с эл.магн. клапанами. дороже и менее надёжно, имхо. 

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

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

собрал, наконец, я стенд.  видос 

 

Сделал две проводки под разные разъемы на форсунках:

 

можно ещё третий шлейф будет сделать универсальный: с пинами-мамами. 

Были проблемы с креплением топливной рампы от нексии: 

На разборках этих рамп как гов.... много короче.  Лучше брать например от chery QQ6.  Там ось отверстий и ось форсунок параллельны и плоскость отверстий крепления близка к оси рампы, поэтому перекоса не будет и крепить проще. Цены на разборках не кусаются. Примерно такая 

Скетч для 16x2 экрана. 


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <PWM.h>
#define outPWM  9   //пин для генератора сигналов (не менять) - это выход на Мосфет управления форсунками. 

#define buzzer         3    // пин пищалки
#define FUELRelay      4    // пин реле топливного насоса
#define VALVERelay     7    // пин реле клапанов слива

#define pressBut       650  // частота тона нажатия клавиш
#define time_presstone 90   // длительность тона нажатия клавиш

#include <Button.h> // библиотека для создания различных видов нажитий на кнопки плюс защита от дребезга, спасибо КЛАПАУЦИЮ!. 
Button test;    

LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес LCD на шине i2c и  строчность LCD 
         


byte PWM = 128;         //стартовое значение ШИМ (от 0 до 255)

byte frequency = 7; //стартовое значение частоты в Гц
                    //(соответсвует 840 об/мин)

byte Menu=4;    // номера меню, по умолчанию меню "старт теста"

bool last5 = 0;

bool pwm = 1;   // ЗДЕСЬ НУЖНО ВЫБРАТЬ ЛОГИКУ ВЫХОДА ШИМ - ПРЯМАЯ ИЛИ ОБРАТНАЯ,
//В ЗАВИСИМОСТИ ОТ ТОГО, КАКАЯ ЛОГИКА НА ВХОДЕ МОСФЕТА. РУЛИМ ПРИ ЭТОМ "МИНУСОМ" ФОРСУНКИ!!! Т.Е. ОДИН ВЫВОД ФОРСУНКИ +12В, ВТОРОЙ - К ВЫХОДУ МОСФЕТА. 
//  0 - ОБРАТНЫЙ ШИМ,   1 - ПРЯМОЙ ШИМ
// ОБРАТНЫЙ ШИМ - 100% ШИМ СООТВЕТСТВУЕТ ПОЛНОМУ СИГНАЛУ "GND" НА ВЫХОДЕ МОСФЕТА
// ПРЯМОЙ ШИМ -   100% ШИМ СООСТВЕТСВУЕТ ПОЛНОМУ СИГНАЛУ "12В" НА ВЫХОДЕ МОСФЕТА 

float t = 3.00;              // время впрыска, мсек
uint32_t testtime = 30;      // время теста, сек
bool full = 1;               // флаг режима полное открытие форсунок
unsigned long time, timer=0; // для таймера отсчета времени теста
bool timerenabled=false;     // для таймера отсчета времени теста
bool Delay = 0;              // для таймера delay
uint32_t  timerDelay = 0;    // для таймера delay

bool timerenabledOPENvalve = 0; // для таймера отсчета времени на открытие иглы форсунки
uint32_t  timerValve = 0;       // для таймера отсчета времени на открытие иглы форсунки
uint32_t prev = 0;              // для таймера периодического вывода инфы на экран



enum but {LEVO, MENU, PRAVO, FUEL, STOP, VALVE};  // кнопки стенда


bool longpressLEVO = 0;   // флаг длительного удержания кнопки
bool longpressPRAVO = 0;  // флаг длительного удержания кнопки
bool longpressMENU = 0;   // флаг длительного удержания кнопки

bool menu = 0;       // флаг вывелось или нет на экран новое меню 

bool Impedance = 1;  // сопротивление обмотки форсунки true - больше 10 Ом, false - менее 5 Ом

void setup()
{
//ниже настройка пина пищалки
pinMode (buzzer,     OUTPUT); digitalWrite (buzzer,     LOW);
pinMode (FUELRelay,  OUTPUT); digitalWrite (FUELRelay,  LOW);
pinMode (VALVERelay, OUTPUT); digitalWrite (VALVERelay, LOW);  


//ниже настройка библиотеки работы кнопок
test.NO(); // N.O. Normal Open
test.pullUp();
test.duration_bounce       (  50);
unsigned long duration_check = 200;
test.duration_click_Db     (duration_check);
test.duration_inactivity_Up(duration_check);
test.duration_inactivity_Dn(600);
test.duration_press        (500);

//enum but {LEVO, MENU, PRAVO, FUEL, STOP, VALVE};
test.button( 10,   11,    12,    6,    5,    8  ); // соответствующие пины ардуино, к которым подключены кнопки

//ниже настройка LCD
lcd.begin();
lcd.backlight();

//ниже настройка выхода PWM
 InitTimersSafe(); 
 SetPinFrequencySafe(outPWM, frequency); 

if (!pwm){ pwmWrite(outPWM, 255);}
else {pwmWrite(outPWM, 0);}

//ниже мелодия при включении
tone(buzzer,659,150);
delay(150);
tone(buzzer,659,300);
delay(300);
tone(buzzer,659,150);
delay(300);
tone(buzzer,523,150);
delay(150);
tone(buzzer,659,300);
delay(300);
tone(buzzer,784,600);
    }   


void loop() {

test.read();   // обновление состояния кнопок

// ниже опрос длительных нажатий на кнопки
if (test.event_inactivity_Dn(LEVO) ==1)   longpressLEVO = 1;
if (test.event_click_Up (LEVO) == 1)      longpressLEVO = 0;
if (test.event_inactivity_Dn(PRAVO) ==1)  longpressPRAVO =1;
if (test.event_click_Up (PRAVO) == 1)     longpressPRAVO =0;

if (test.event_click_Dn  (FUEL)) {digitalWrite (FUELRelay, !digitalRead(FUELRelay)); tone (buzzer, pressBut, time_presstone);}

if (test.event_click_Dn  (STOP)) {   // при нажатии кнопки "экстренный стоп" всё выключаем
    digitalWrite (FUELRelay, 0);
 if (!pwm){pwmWrite(outPWM, 255);}
      else {pwmWrite(outPWM, 0);}
      timerenabled=false;
      tone (buzzer, 1500, 1500);
                                 }

if (test.event_click_Dn  (VALVE)) {digitalWrite (VALVERelay, 1); tone (buzzer, pressBut, time_presstone);}
if (test.event_click_Up  (VALVE)) {digitalWrite (VALVERelay, 0); }



if (Menu==0){//меню выбора Частоты вращения ДВС
             
             if (!menu){lcd.setCursor(3,1);
             lcd.print("   N/min"); 
             lcd.print("   >>"); menu=1;}
             
             if (test.event_click_Dn  (LEVO) == 1 || (longpressLEVO && !Delay)) {
              
              full=0;
              frequency--;
              if(frequency<1){frequency=1;}
              if (longpressLEVO) {Delay = 1; timerDelay = time;}
              else tone (buzzer, pressBut, time_presstone);
              PWMrefresh();
            }
            if (test.event_click_Dn  (PRAVO) == 1 || (longpressPRAVO && !Delay)) {
           
              full=0;
              frequency++; if (frequency>83) frequency=83;
              if (longpressPRAVO) {Delay = 1; timerDelay = time;}
              else tone (buzzer, pressBut, time_presstone);
              PWMrefresh();
            }  
}
if (Menu==1){//меню выбора длины импульса (времени) впрыска
            
            if (!menu){lcd.setCursor(3,1);
            lcd.print("     ms");
            lcd.print("    >>"); menu=1;}
          
            if (test.event_click_Dn  (LEVO) == 1 || (longpressLEVO && !Delay)) {
              full=0;
              t-=0.1;
              if (t<1.00) t=1.00;
              if (longpressLEVO) {Delay = 1; timerDelay = time;}
              else tone (buzzer, pressBut, time_presstone);
              PWMrefresh();
                                                                      }
            
            
            if (test.event_click_Dn  (PRAVO) == 1 || (longpressPRAVO && !Delay)) {
              full=0;
              t+=0.1;
              if (t>11.00) t=11.00;
              if (longpressPRAVO) {Delay = 1; timerDelay = time;}   
              else tone (buzzer, pressBut, time_presstone);
              PWMrefresh();     
                                                                        }
            
            }

if (Menu==2) {  // меню выбора/отмены режима постоянного открытия форсунок

if (!menu){lcd.setCursor(3,1);
lcd.print(" Full OPEN ");
lcd.print(">>"); menu=1;} 
  
  if(!timerenabled) if (test.event_click_Dn  (LEVO) == 1 ||  test.event_click_Dn  (PRAVO) == 1) 
  {full=!full; tone (buzzer, pressBut, time_presstone);}
  
             }

            
if (Menu==3) {  // меню выбора времени теста

if (!menu){lcd.setCursor(3,1);
lcd.print("   TIME");
lcd.print("    >>"); menu=1;}

if( !timerenabled){
              if (test.event_click_Dn  (LEVO) == 1 || (longpressLEVO && !Delay)) {
              if (testtime>=5) testtime-=5;
              
              if (longpressLEVO) {Delay = 1; timerDelay = time;}
              else tone (buzzer, pressBut, time_presstone);                                                          }
              
              if (test.event_click_Dn  (PRAVO) == 1 || (longpressPRAVO && !Delay)) {
              testtime+=5;
              if(testtime>600){testtime=600;} 
              if (longpressPRAVO) {Delay = 1; timerDelay = time;}
              else tone (buzzer, pressBut, time_presstone);                                                             }
            
            }          }  

if (Menu==4) { // меню старт

 if (!menu){lcd.setCursor(3,1);
 lcd.print("STOP START");
 lcd.print(" >>");  menu=1;}

if (!timerenabled && test.event_click_Dn  (PRAVO) == 1){ 
  timer=time; 
  timerenabled=true; 
  tone (buzzer, 1500, 700);   
  PWMrefresh();
  
  }
  
  
            
if (test.event_click_Dn  (LEVO) == 1){
  if (!pwm){pwmWrite(outPWM, 255);}
  else {pwmWrite(outPWM, 0);}
  timerenabled=false;
  tone (buzzer, pressBut, time_presstone);  
  }
  

}

if (Menu==5) {// меню выбора сопротивления обмотки форсунки

if (!menu){lcd.setCursor(3,1);
lcd.print(" IMPEDANCE");
lcd.print(" >>"); menu=1;}

if (!timerenabled) {if (test.event_click_Dn  (LEVO) == 1 ||  test.event_click_Dn  (PRAVO) == 1) 
{last5 = 1; Impedance=!Impedance; lcd.setCursor(0,0);
lcd.print("Imp: ");
if (Impedance) lcd.print (">10 Ohm ");
else lcd.print ("<5 Ohm  "); tone (buzzer, pressBut, time_presstone);  }} 
}




// ниже работа таймера времени теста

time = millis();

if (Delay && time - timerDelay>93 ) Delay = 0;

  if (timerenabled) {
if (timerenabledOPENvalve && time - timerValve > 1000) timerenabledOPENvalve = 0;
  
   if (!timerenabledOPENvalve && full) 
    {
      if (Impedance){
       if (!pwm)pwmWrite(outPWM, 10);
       else     pwmWrite(outPWM, 245);    
                    }
      else {
        if (!pwm)pwmWrite(outPWM, 90);
        else     pwmWrite(outPWM, 165);    
           }
    }

        
    if ((time-timer)>(testtime*1000)) {
      if (!pwm){pwmWrite(outPWM, 255);}
      else {pwmWrite(outPWM, 0);}
      timerenabled=false;
      tone (buzzer, 1500, 1500); 
      
            }
                    }

    
if (test.event_click_Dn (MENU) == 1){ //переключение менюшек
  Menu++; menu = 0; tone (buzzer, pressBut, time_presstone);
  if(Menu>=6){Menu=0;}
} 


// ниже обновление информации на LCD

if (millis () - prev>100){

if(Menu !=5){
if (last5) lcd.setCursor(0,0), lcd.print("           "), last5=0;
lcd.setCursor(0,0);
if (!full){
lcd.print(t,1);
lcd.print(" ");
long frequencyX=frequency*120;
lcd.print(frequencyX); 
if (frequencyX<1000 && t < 10.0 ) lcd.print("  ");
if (frequencyX<1000 && t >= 10.0 ) lcd.print(" ");
if (frequencyX>=1000 && t < 10.0 ) lcd.print(" ");

}
else {lcd.print ("Full     ");}

}

lcd.setCursor(9,0);
int sec; sec= testtime - ((time - timer)/1000);
    if (timerenabled){  lcd.print(sec);lcd.print("   ");}
  else if (Menu !=5) lcd.print ("00 ");


lcd.setCursor(13,0);

if (testtime < 10) lcd.print("  ");
if (testtime >= 10 && testtime < 100) lcd.print(" "); 
lcd.print(testtime); 

  lcd.setCursor(0,1);

   lcd.print("<< ");    
      
      
lcd.display();
prev = millis();
}
}



// ниже фукнция включения выхода PWM

void PWMrefresh(){
  SetPinFrequencySafe(outPWM, frequency);
  if (!full)PWM=frequency*t*0.255;
    else PWM=255; 
    if(PWM<0)PWM=0;
    if(PWM>255)PWM=255;
  if (full) {timerenabledOPENvalve=1; timerValve = time; SetPinFrequencySafe(outPWM, 4000);}
  if (timerenabled){
  if (!pwm){ pwmWrite(outPWM, 255-PWM);}
  else {pwmWrite(outPWM, PWM);}
                   }
  }

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

agromir
Offline
Зарегистрирован: 17.09.2018

Отлично получилось! Рампа из нержавейки?

MaksVV
Offline
Зарегистрирован: 06.08.2015

рампа, которая на последнем фото, по виду да, из нержавейки (это фото с сайта разборки). Моя рампа от нексии, не знаю, она покрашена снаружи краской, но думаю не простая чернина, может с цинком сплав какой.

And_N
Offline
Зарегистрирован: 19.02.2019

Отлично проделанная работа! Меня на стенд не хватило(
Единственное добавил драйвер шагового двигателя, чтобы разобрать и помыть РХХ на ваз2115. В эту суботу форсунки у себя мыл - результат отличный. Жижу давил воздухом. В качестве ресивера балон из под фреона, емкость под жижу - балон от мапп газа, качал автомобильным компрессором.

And_N
Offline
Зарегистрирован: 19.02.2019

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

b707
Онлайн
Зарегистрирован: 26.05.2017

MaksVV пишет:

Планирую просверлить (пока не знаю чем) мензурки внизу, диаметр 10мм. заказал такие штуцеры (1/8" на 8мм) , гайки и сборку кранов 4шт. , чтобы слив с мензурок делать.

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

b707 пишет:
Макс, "просверлить мензурки" будет не просто, это я говорю как человек, давно работающий с лабораторной посудой :) Да и не нужно это нафик. Существуют готовые "мензурки с кранами", называется "делительная воронка": думаю, в магазинах хим стекла их найти не проблема

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

поправил скетч  для экрана 1602    #106. Исправил косяки с выходом за крайние положения времени теста. 

Vadim163RUS
Offline
Зарегистрирован: 26.03.2019

Даров парни, в чем проблема кто подскажет?

Думаю что с библиотеками беда, есть у кого файлы библиотек необходимые?

And_N
Offline
Зарегистрирован: 19.02.2019

По форуму полистай, там все написано. С телефона скинуть не могу.

Vadim163RUS
Offline
Зарегистрирован: 26.03.2019

А все нашел) Спасибо

Saperawi
Offline
Зарегистрирован: 17.04.2019

Классный проект.Удалось отрепетировать данный скетч до совершенства?

Saperawi
Offline
Зарегистрирован: 17.04.2019

Можно взглянуть на последние изменения в программе?

 

Saperawi
Offline
Зарегистрирован: 17.04.2019

MaksVV пишет:

поправил скетч  для экрана 1602    #106. Исправил косяки с выходом за крайние положения времени теста. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

#106 и есть последняя версия скетча

Saperawi
Offline
Зарегистрирован: 17.04.2019

MaksVV пишет:

#106 и есть последняя версия скетча


А можно взглянуть на печатные платы и принципиальные схемы сея устройства?

And_N
Offline
Зарегистрирован: 19.02.2019

На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)

Saperawi
Offline
Зарегистрирован: 17.04.2019

And_N пишет:
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)

Я могу с вами пообщаться?Адрес страницы
https://m.vk.com/lapster777

Saperawi
Offline
Зарегистрирован: 17.04.2019

And_N пишет:
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)

Я могу с вами пообщаться?Адрес страницы
https://m.vk.com/lapster777

Saperawi
Offline
Зарегистрирован: 17.04.2019

MaksVV пишет:

#106 и есть последняя версия скетча

Вы мне не поможете?

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Saperawi пишет:

Вы мне не поможете?

 

в чем помощь то нужна?

And_N
Offline
Зарегистрирован: 19.02.2019

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

gergi
Offline
Зарегистрирован: 15.06.2016

Добрый, господа подскажите. 

PWM=frequency*t*0.255

Где t= 4.5. При плавном увеличении frequency, имитация повышения оборотов двигателя, в диапозоне ~ 1500-2500 оборотов форсунки находятся в открытом состоянии (как буддто зависают). В чем может быть проблема? Менять значение t?

MaksVV
Offline
Зарегистрирован: 06.08.2015

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