библиотека работает на таймере вроде как, у меги они на других пинах висят. Из пушки по воробьям получается, мегу сюда втыкать. А так ковыряйте библиотеку PWM
на меге на сколько помню нужно ШИМ пин использовать не 9, а 11.
я ещё сам стенд то не собрал)) Но пересилил себя и уже начал потихоньку собирать. Планирую шланг такой снаружитряпичный использовать.
ага, прошло пол года. Нашёл на даче какие то алюминиевые уголки, довольно много, но все разнопрофильные. В итоге дело немного, но продвигается))) пару дней пособирал стенд. Может ещё через годик закончу ))
как уже говорил мензурки заказал в интернет магазине школьных принадлежностей (в т.ч. для уроков химии). Уголок алюминиевый легко сверлится и пилится, поэтому каркас довольно легко поддался. Основной интструмент болгарка и шурик, трещётка на 10. многа болтов и гаек М6. и аккуратность не помешает, у меня с этим беда.
Бачок от омывателя классики, туда поместился бензонасос от форд мондео4, т.к топливных стаканов валяется вагон и маленькая тележка, а дохнут там не насосы а, подгарает эл. разъём на крышке стакана, поэтому кто в Е-бурге обращайтесь за насосами.
здесь же в бачке (в отверстие для залива омывайки) регулятор давления топлива, от того же мондюка. Не вижу смысла делать регулировку дваления. Буду мерить всегда на 4 бар, как делает регулятор давления.
БП от компа. Кстати заднюю часть стенда, ступил, можно было взять готовый корпус от компа, все равно в итоге что то подобное и получилось. мог и не мучиться.
Топливная рампа от дэу нексия (уши подогнуть пришлось). На разборках рампы разные есть, от 300 руб.
Планирую просверлить (пока не знаю чем) мензурки внизу, диаметр 10мм. заказал такие штуцеры (1/8" на 8мм) , гайки и сборку кранов 4шт. , чтобы слив с мензурок делать. Решил не связываться с эл.магн. клапанами. дороже и менее надёжно, имхо.
Стены стенда сделал из такого материала, лист нашёл на помойке (такой лист бутерброд - с двух сторон алюминий, втутри пластик. одна сторона заклеена пленкой, убрав которую - очень красивый крашенный материал.), легко пилится болкаркой.
Как доделаю обязательно отпишусь. Пока на стенд потрачено около 2 дней. Больше лени. Но когда начинает что-то получаться это мотивирует.
Сделал две проводки под разные разъемы на форсунках:
можно ещё третий шлейф будет сделать универсальный: с пинами-мамами.
Были проблемы с креплением топливной рампы от нексии:
На разборках этих рамп как гов.... много короче. Лучше брать например от 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);}
}
}
чуть позже выложу печатную плату для промини и принипиальную схему.
рампа, которая на последнем фото, по виду да, из нержавейки (это фото с сайта разборки). Моя рампа от нексии, не знаю, она покрашена снаружи краской, но думаю не простая чернина, может с цинком сплав какой.
Отлично проделанная работа! Меня на стенд не хватило(
Единственное добавил драйвер шагового двигателя, чтобы разобрать и помыть РХХ на ваз2115. В эту суботу форсунки у себя мыл - результат отличный. Жижу давил воздухом. В качестве ресивера балон из под фреона, емкость под жижу - балон от мапп газа, качал автомобильным компрессором.
Забыл еще добавить, что в скетче в меню выбора времени теста поменял фигурные скобки на обычные и ограничил минимальное время в 5 сек. Иначе за минимум и за максимум убегало время при настройке. Может это у меня из-за меги такое. Рисовалась абракадабра из цифр - помогал только ресет.
Макс, "просверлить мензурки" будет не просто, это я говорю как человек, давно работающий с лабораторной посудой :) Да и не нужно это нафик. Существуют готовые "мензурки с кранами", называется "делительная воронка": думаю, в магазинах хим стекла их найти не проблема
Макс, "просверлить мензурки" будет не просто, это я говорю как человек, давно работающий с лабораторной посудой :) Да и не нужно это нафик. Существуют готовые "мензурки с кранами", называется "делительная воронка": думаю, в магазинах хим стекла их найти не проблема
блин я предполагал что с этим будут проблемы. Но 5 -я запасная колба есть. Всё равно на ней попробую, вдруг получится, а за идею с делительной воронкой с краном пасиб, поищу в случае неудачи.
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)
Меня нет в соц.сетях. На форуме все расписано очень даже хорошо. Если не брать другие комплектующие, то все работает с первого включения и в скетче править ничего не надо: соединили, прошили и все работает. А раз на первых шагах возникают, заданные вами вопросы, то лучше изменений в проэкт не вносить.
Где t= 4.5. При плавном увеличении frequency, имитация повышения оборотов двигателя, в диапозоне ~ 1500-2500 оборотов форсунки находятся в открытом состоянии (как буддто зависают). В чем может быть проблема? Менять значение t?
Подскажите, не нужно ли ставить диод на форсунки для борьбы с самоиндукцией?
Я просто не силен в этом, спрашиваю потому что видосы на ютюбчике смотрел на тему стендов, так вот та в одном из роликов говорилось что с одной форсунки все норм, а вот если 4 в параллель...
Здравствуйте MaksVV! Смотрел сигнал с 9 пина осциллографом, вот такая картина. Ранее вы писали что открывающий импульс равен 2мс. Это FULL MODE, Impedans 5om. Далее следуют импульсы удержания в 4кГц как и обещано. Если вас еще интересует данная тема, посмотрите что может быть не так.
Я собрал на макетке схему, все заработало. Не понял только должен ли насос выключаться по повторному нажатию кнопки фуел? И как можно сделать что бы насос отключался по завершению теста?? И допустим при старте теста сделать автоматическое вкл. насоса, пауза пара сек для того чтобы давление стабилизировалось и пуск теста
Я собрал на макетке схему, все заработало. Не понял только должен ли насос выключаться по повторному нажатию кнопки фуел? И как можно сделать что бы насос отключался по завершению теста?? И допустим при старте теста сделать автоматическое вкл. насоса, пауза пара сек для того чтобы давление стабилизировалось и пуск теста
кнопка "насос" меняет состояние насоса на противоположное. Соответственно если уже был включен, то, нажав её, выключим насос.
я специально не стал выключать насос по завершению теста, чтобы была возможность контролировать гермететичность закрытых клапанов форсунок под давлением. Не понимаю зачем нужно это автоматическое включение насоса перед тестом. Что трудно кнопочку нажать ? Зато так проще контролировать. Сделаешь автоматически - будет бесить, что например давление не успело стабилизироваться или , например, нужно давление в рейке стравить, нажимаем тест "полное открытие" без насоса - давление стравливается. А в вашем случае так не получится.
Разобрался с неотключающимся бензонасосом, оказалось не верная библиотека для платы wavgat про мини(при покупке не предал значения что на ней не совсем атмега))). С либой от вавгаг не работало, залил другую именно для проца lgt и все как часики. Спасибо автору за проект!
библиотека работает на таймере вроде как, у меги они на других пинах висят. Из пушки по воробьям получается, мегу сюда втыкать. А так ковыряйте библиотеку PWM
на меге на сколько помню нужно ШИМ пин использовать не 9, а 11.
Я уже понял, что как с экраном не прокатит. За наводку спасибо, будем копать.
а че копать то? подключите сигнал на мосфет с 11 пина, а не с 9. В скетче #99 в строке 004 заменить 9 на 11
Спасибо. Все заработало.
я ещё сам стенд то не собрал)) Но пересилил себя и уже начал потихоньку собирать. Планирую шланг такой снаружитряпичный использовать.
ага, прошло пол года. Нашёл на даче какие то алюминиевые уголки, довольно много, но все разнопрофильные. В итоге дело немного, но продвигается))) пару дней пособирал стенд. Может ещё через годик закончу ))
как уже говорил мензурки заказал в интернет магазине школьных принадлежностей (в т.ч. для уроков химии). Уголок алюминиевый легко сверлится и пилится, поэтому каркас довольно легко поддался. Основной интструмент болгарка и шурик, трещётка на 10. многа болтов и гаек М6. и аккуратность не помешает, у меня с этим беда.
Бачок от омывателя классики, туда поместился бензонасос от форд мондео4, т.к топливных стаканов валяется вагон и маленькая тележка, а дохнут там не насосы а, подгарает эл. разъём на крышке стакана, поэтому кто в Е-бурге обращайтесь за насосами.
здесь же в бачке (в отверстие для залива омывайки) регулятор давления топлива, от того же мондюка. Не вижу смысла делать регулировку дваления. Буду мерить всегда на 4 бар, как делает регулятор давления.
БП от компа. Кстати заднюю часть стенда, ступил, можно было взять готовый корпус от компа, все равно в итоге что то подобное и получилось. мог и не мучиться.
Топливная рампа от дэу нексия (уши подогнуть пришлось). На разборках рампы разные есть, от 300 руб.
Планирую просверлить (пока не знаю чем) мензурки внизу, диаметр 10мм. заказал такие штуцеры (1/8" на 8мм) , гайки и сборку кранов 4шт. , чтобы слив с мензурок делать. Решил не связываться с эл.магн. клапанами. дороже и менее надёжно, имхо.
Стены стенда сделал из такого материала, лист нашёл на помойке (такой лист бутерброд - с двух сторон алюминий, втутри пластик. одна сторона заклеена пленкой, убрав которую - очень красивый крашенный материал.), легко пилится болкаркой.
Как доделаю обязательно отпишусь. Пока на стенд потрачено около 2 дней. Больше лени. Но когда начинает что-то получаться это мотивирует.
собрал, наконец, я стенд. видос
Сделал две проводки под разные разъемы на форсунках:
можно ещё третий шлейф будет сделать универсальный: с пинами-мамами.
Были проблемы с креплением топливной рампы от нексии:
На разборках этих рамп как гов.... много короче. Лучше брать например от 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);} } }чуть позже выложу печатную плату для промини и принипиальную схему.
Отлично получилось! Рампа из нержавейки?
рампа, которая на последнем фото, по виду да, из нержавейки (это фото с сайта разборки). Моя рампа от нексии, не знаю, она покрашена снаружи краской, но думаю не простая чернина, может с цинком сплав какой.
Отлично проделанная работа! Меня на стенд не хватило(
Единственное добавил драйвер шагового двигателя, чтобы разобрать и помыть РХХ на ваз2115. В эту суботу форсунки у себя мыл - результат отличный. Жижу давил воздухом. В качестве ресивера балон из под фреона, емкость под жижу - балон от мапп газа, качал автомобильным компрессором.
Забыл еще добавить, что в скетче в меню выбора времени теста поменял фигурные скобки на обычные и ограничил минимальное время в 5 сек. Иначе за минимум и за максимум убегало время при настройке. Может это у меня из-за меги такое. Рисовалась абракадабра из цифр - помогал только ресет.
Планирую просверлить (пока не знаю чем) мензурки внизу, диаметр 10мм. заказал такие штуцеры (1/8" на 8мм) , гайки и сборку кранов 4шт. , чтобы слив с мензурок делать.
Макс, "просверлить мензурки" будет не просто, это я говорю как человек, давно работающий с лабораторной посудой :) Да и не нужно это нафик. Существуют готовые "мензурки с кранами", называется "делительная воронка": думаю, в магазинах хим стекла их найти не проблема
блин я предполагал что с этим будут проблемы. Но 5 -я запасная колба есть. Всё равно на ней попробую, вдруг получится, а за идею с делительной воронкой с краном пасиб, поищу в случае неудачи.
поправил скетч для экрана 1602 #106. Исправил косяки с выходом за крайние положения времени теста.
Даров парни, в чем проблема кто подскажет?
Думаю что с библиотеками беда, есть у кого файлы библиотек необходимые?
По форуму полистай, там все написано. С телефона скинуть не могу.
А все нашел) Спасибо
Классный проект.Удалось отрепетировать данный скетч до совершенства?
Можно взглянуть на последние изменения в программе?
поправил скетч для экрана 1602 #106. Исправил косяки с выходом за крайние положения времени теста.
#106 и есть последняя версия скетча
#106 и есть последняя версия скетча
А можно взглянуть на печатные платы и принципиальные схемы сея устройства?
На форуме всё есть. Необходимые библиотеки, кстати, тоже. Печатных плат в принципе нет, потому как все собирается из готовых модулей. По желанию можешь развести сам), но смысл?!)
Я могу с вами пообщаться?Адрес страницы
https://m.vk.com/lapster777
Я могу с вами пообщаться?Адрес страницы
https://m.vk.com/lapster777
#106 и есть последняя версия скетча
Вы мне не поможете?
в чем помощь то нужна?
Меня нет в соц.сетях. На форуме все расписано очень даже хорошо. Если не брать другие комплектующие, то все работает с первого включения и в скетче править ничего не надо: соединили, прошили и все работает. А раз на первых шагах возникают, заданные вами вопросы, то лучше изменений в проэкт не вносить.
Добрый, господа подскажите.
PWM=frequency*t*0.255
Где t= 4.5. При плавном увеличении frequency, имитация повышения оборотов двигателя, в диапозоне ~ 1500-2500 оборотов форсунки находятся в открытом состоянии (как буддто зависают). В чем может быть проблема? Менять значение t?
Да, замечал такое. Не разбирался - не напрягает. С практической точки зрения никакого смысла разбираться в этом нет.
с#include <Button.h> // библиотека для создания различных видов нажитий на кнопки плюс защита от дребезга, спасибо КЛАПАУЦИЮ!
подскажите где скачать ?
титановый велосипед для кнопок
Подскажите, не нужно ли ставить диод на форсунки для борьбы с самоиндукцией?
Я просто не силен в этом, спрашиваю потому что видосы на ютюбчике смотрел на тему стендов, так вот та в одном из роликов говорилось что с одной форсунки все норм, а вот если 4 в параллель...
Вобщем вот ссылка https://youtu.be/ulrZwCPRPTs
Да, лучше поставить
Диод обязателен для защиты транзистора, форсункам без разницы. В транзисторе присутствует, так называемый паразитный диод, но его может не хватить.
Здравствуйте! Тема еще жива? меня очень заинтересовало ваше устройство.
Готов добавить разве что готовые сценарии типа ХХ, средние нагрузки, мощностной режим.
Если можете это реализовать это будет очень круто!!!
Здравствуйте MaksVV! Смотрел сигнал с 9 пина осциллографом, вот такая картина. Ранее вы писали что открывающий импульс равен 2мс. Это FULL MODE, Impedans 5om. Далее следуют импульсы удержания в 4кГц как и обещано. Если вас еще интересует данная тема, посмотрите что может быть не так.
скетч #106 строка 265 . изменить 1000 на 10 например (мс).
получилось только вот так. изменил на 5
Привет, печаткой поделишься?
чуть позже выложу печатную плату для промини и принипиальную схему.
MaksVV,привет, печаткой поделишься?
Домой приеду поищу
было бы не плохо. а то я уже собрался на макетке собирать)
мосфет использовал такой . Плата 6 кнопок управления. Право, Лево, Меню, Насос, Слив, Полный стоп. Плата под ардуино промини.
Я собрал на макетке схему, все заработало. Не понял только должен ли насос выключаться по повторному нажатию кнопки фуел? И как можно сделать что бы насос отключался по завершению теста?? И допустим при старте теста сделать автоматическое вкл. насоса, пауза пара сек для того чтобы давление стабилизировалось и пуск теста
дописать программу. код ее вроде открыт
кнопка "насос" меняет состояние насоса на противоположное. Соответственно если уже был включен, то, нажав её, выключим насос.
я специально не стал выключать насос по завершению теста, чтобы была возможность контролировать гермететичность закрытых клапанов форсунок под давлением. Не понимаю зачем нужно это автоматическое включение насоса перед тестом. Что трудно кнопочку нажать ? Зато так проще контролировать. Сделаешь автоматически - будет бесить, что например давление не успело стабилизироваться или , например, нужно давление в рейке стравить, нажимаем тест "полное открытие" без насоса - давление стравливается. А в вашем случае так не получится.
Разобрался с неотключающимся бензонасосом, оказалось не верная библиотека для платы wavgat про мини(при покупке не предал значения что на ней не совсем атмега))). С либой от вавгаг не работало, залил другую именно для проца lgt и все как часики. Спасибо автору за проект!
Всем привет! решил собрать стенд и наткнулся на вас! ну вообщем я с вами)))
Скетч для 16x2 экрана.
скомпилировал скетч залил в плату, а на экране точки в первом ряду! что я делаю нетак?
Бог помощь! Я год собирался))