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

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

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

RuslanRec
Offline
Зарегистрирован: 02.11.2016

Согласен что сформулировал не пойми как, дисплей подключил к контроллеру, подскажите как в скетч прикрутить его, а что то заплутал

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

Это сами, если для вас это тёмный лес, тогда нужно было сабжевый дисплей брать

RuslanRec
Offline
Зарегистрирован: 02.11.2016

вот подправил код, но не компилиться, идут ошибки, подскажите что не так?

вот такой вывод идет

C:\TEMP\ccfYY6aY.ltrans0.ltrans.o: In function `setup':
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:45: undefined reference to `InitTimersSafe()'
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:46: undefined reference to `SetPinFrequencySafe(signed char, unsigned long)'
C:\TEMP\ccfYY6aY.ltrans0.ltrans.o: In function `loop':
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:60: undefined reference to `SetPinFrequencySafe(signed char, unsigned long)'
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:66: undefined reference to `SetPinFrequencySafe(signed char, unsigned long)'
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:126: undefined reference to `pwmWrite(unsigned char, unsigned char)'
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:90: undefined reference to `pwmWrite(unsigned char, unsigned char)'
C:\Users\Ruslan\Documents\Arduino\5110 промывка/5110 промывка.ino:99: undefined reference to `pwmWrite(unsigned char, unsigned char)'
collect2.exe: error: ld returned 1 exit status
Compilation error: exit status 1}
 
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <PWM.h>
#define led  9   //пин для генератора сигналов (не менять)

#define levo 10  //кнопка ЛЕВО(можно любой пин)
#define ok 11    //кнопка ОК(можно любой пин)
#define pravo 12 //кнопка ПРАВО(можно любой пин)


#define OLED_RESET 4 
Adafruit_PCD8544 display = Adafruit_PCD8544 (4, 6, 5, 2, 3); // Clk, Din, DC, CE, RST
         

int PWM = 128;//стартовое значение ШИМ от 0 до 255        
int32_t frequency = 8; //стартовое значение частоты в Гц


//###########################################################

byte hag=4;
int mnog=0;
int flag=0;

bool pwm = 1;

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



void setup()
{
pinMode (levo, INPUT); digitalWrite (levo, HIGH);
pinMode (pravo, INPUT); digitalWrite (pravo, HIGH);
pinMode (ok, INPUT); digitalWrite (ok, HIGH);


display.begin();
display.setContrast(60);

 InitTimersSafe(); 
 bool success = SetPinFrequencySafe(led, frequency); 

display.setTextColor(WHITE);
delay(500); 
    }   


void loop() {
display.clearDisplay();  
if (flag==0){//флаг выборов режима настройки Частоты вращения ДВс
            if(digitalRead(levo)==LOW){
              full=0;
              frequency=frequency-mnog;
              if(frequency<0){frequency=0;}
              bool success = SetPinFrequencySafe(led, frequency);
              delay(100);//защита от дребезга 
            }
            if(digitalRead(pravo)==LOW){
              full=0;
              frequency=frequency+mnog;
              bool success = SetPinFrequencySafe(led, frequency);
              delay(100);//защита от дребезга 
            }  
}
if (flag==1){//флаг выборов режима времени впрыска
            if(digitalRead(levo)==LOW){
              full=0;
              t=t-0.1;
              delay(100);//защита от дребезга
            }
            if(digitalRead(pravo)==LOW){
              full=0;
              t=t+0.1;
              delay(100);//защита от дребезга 
            }  
}
if (flag==4) {display.setCursor(80,50);display.setTextSize(2); // меню старт
    int sec; sec= testtime - ((time - timer)/1000);
    if (timerenabled){  display.print(sec);}
  else display.print ("00");
  
if (!timerenabled){ 
if(digitalRead(pravo)==LOW){
  if (!pwm){ pwmWrite(led, 255-PWM);}
  else {pwmWrite(led, PWM);}
  timer=time; 
  timerenabled=true;}
  
  delay(100);//защита от дребезга 
            }
            
if(digitalRead(levo)==LOW) {
  if (!pwm){pwmWrite(led, 255);}
  else {pwmWrite(led, 0);}
  timerenabled=false;}
  

}
if (flag==3) {if (!timerenabled){  // время теста
             if(digitalRead(levo)==LOW){
              testtime=testtime-5;
              if(testtime<0){testtime=0;} 
              delay(100);//защита от дребезга
            }
            if(digitalRead(pravo)==LOW){
             testtime=testtime+5;
             delay(100);//защита от дребезга 
            }  }   }

if (flag==2){if ((digitalRead(levo)==LOW)||(digitalRead(pravo)==LOW)) full=!full;
delay (3);}
if (!full){PWM=frequency*t*0.255;}
else PWM=255; 
if(PWM<0){PWM=0;} 
if(PWM>255){PWM=255;} 

time = millis();
  if (timerenabled) {
    if ((time-timer)>(testtime*1000)) {
      if (!pwm){pwmWrite(led, 255);}
      else {pwmWrite(led, 0);}
      timerenabled=false;}
                    }

    
if(digitalRead(ok)==LOW){//переключение менюшек 
  delay(20);//защита от дребезга
  hag++;
  if(hag>=5){hag=0;}
} 
////////////
display.setTextSize(1);
display.setCursor(0,0);
display.print("PWM=");
display.print(PWM*100/255);
display.print(" %");
if (!full){display.setTextSize(2);
display.setCursor(54,0);
display.print(t);
display.setTextSize(1);
display.print("msec");}
else {display.setTextSize(2);
display.setCursor(67,0);
display.print ("FULL");
display.setTextSize(1);
}
display.setCursor(0,12);
display.print(frequency); display.print("Hz");


///////////    
display.setCursor(0,29);
 display.setTextSize(2);
long frequencyX=frequency*120;
display.print(frequencyX);display.setTextSize(1);display.print("/min");
display.setTextSize(2);
display.setCursor(80,26);
display.print(testtime); display.setTextSize(1); display.print("sec");

display.setCursor(0,57);
display.setTextSize(1);
display.print("<< ");    
      if(hag==0){//выбор множителя частоты
        display.print("N/min"); 
          mnog=1;
          flag=0;
      }
         
      if(hag==1){//выбор  время впрыска
          display.print("millisec");
          flag=1;
         }
         
      if(hag==2){//выбор режима
         display.print("Full On/Off");
        flag=2;
        }

         
       if(hag==3){//выбор  время теста
          display.print("TEST TIME");
          flag=3;
      } 
       if(hag==4){// меню старт
          display.print("START");
          flag=4;
       }
       
       
display.print(" >>"); 
       

delay(100);  
display.display();
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Может не та библиотека PWM.h ? На находит описание функций, которые вы пытаетесь вызвать !

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

А может потому что скетч называется "промывка.ino" RuslanRec попробуйте назвать сам скетч и все каталоги латиницей.

RuslanRec
Offline
Зарегистрирован: 02.11.2016

Pro mini Не поддерживает pwm.h нужно переписывать скетч 

 

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

вы заблуждаетесь

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

RuslanRec пишет:

Pro mini Не поддерживает pwm.h нужно переписывать скетч 

RuslanRec - какая у вас плата? вы сначала пишете Микро-леонардо, потом Промини...  Это принципиально разные платы, на Промини будет работать, на Леонардо нет

RuslanRec
Offline
Зарегистрирован: 02.11.2016

Есть pro micro С ней не взлетело, вот сейчас нашел pro-mini

gekz
Offline
Зарегистрирован: 25.01.2018

Собрал на мини, n-p-n мосфет собрал на кт829а
Жду i2с на экран

Error40_04
Offline
Зарегистрирован: 05.04.2022
 
Так будет правельней:
037 pinMode (levo, INPUT_PULLUP);
038 pinMode (pravo, INPUT_PULLUP);
039 pinMode (ok, INPUT_PULLUP);

 

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

Error40_04 пишет:

Так будет правельней:

уважаемый, это к чему вообще?

zot08
Offline
Зарегистрирован: 02.10.2022

 Здравствуйте. Ткните носом откуда скачать библиотеки. Я тут у Вас новенький.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

https://github.com/

Или в самой IDE...

zot08
Offline
Зарегистрирован: 02.10.2022

Cпасибо. Разобрался.

Ghost_d
Offline
Зарегистрирован: 22.04.2014

Доброго дня. Поясните, кто знающий.

Пытаюсь разобраться с этим куском кода:

1) установка нужной частоты -более менее. А что означает формула: PWM=frequency*t*0.255 ????

void PWMrefresh(){
338   SetPinFrequencySafe(outPWM, frequency);
339   if (!full)PWM=frequency*t*0.255;
340     else PWM=255; 
341     if(PWM<0)PWM=0;
342     if(PWM>255)PWM=255;
343   if (full) {timerenabledOPENvalve=1; timerValve = time; SetPinFrequencySafe(outPWM, 4000);}
344   if (timerenabled){
345   if (!pwm){ pwmWrite(outPWM, 255-PWM);}
346   else {pwmWrite(outPWM, PWM);}
347                    }
348   }

2) Не понимаю странный пересчет частоты с оборотами двигателя ;( «частота в 7 герц соответствует 840 об/минуту». Считаем: 1 минута =60 сек, 840/60=14 об. в секунду. Почему?!? В другом месте кода (при выводе на экран частоты в виде об/мин), частота умножается на 120. (frequencyX=frequency*120). 
3) длительность открытия форсунки (переменная t) в годе регулируется в диапазоне 1..11 миллисекунд с шагом 0.1. Это действительно нужна такая точность?!? И попутно. А длительность открытия форсунки зависит от количества оборотов двигателя?

заранее благодарю за полезные ответы

 

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

1. эта формула нужна для того , что время импульса открытия форсунки задается скважностью . А, так как время форсунки мы хотим задавать как постоянную величину при проверке (не зависящую от оборотов), скважность приходится пересчитывать с помощью такой формулы. Потому что, если так не сделать, то  при одной и той же скважности на разных оборотах будет разное время открытия форсунки. 255 там фигурирует так как разрешение регулирования скважности 8 битное, то есть регулировка представляет собой 256 значений (0...255). а стало 0,255 потому что нужно привести величины к единым единицам измерения  (так как в этой формуле частота в Гц - раз/сек) , то есть t,ms перевести миллисекунды в секунды - надо разделить на 1000. 

2. такой расчет оборотов сделан для 4х тактного ДВС, в которых на один импульс форсунки будет два оборота коленвала. 

3. Сколько стендов видел, везде время открытия форсунки задается с шагом 0,1. В принципе можно и 0,5 сделать. Не принципиально. Мне 0,1  показалось норм. Время открытия форсунки не зависит от оборотов , читай п1.  

 

Ghost_d
Offline
Зарегистрирован: 22.04.2014

Огромное спасибо!