Регулятор оборотов диз.двигателя.

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Уважаемые мастера, добрый день.
Прошу проверить скетч для регулятора оборотов диз.двигателя (сам я новичок в программировании, поэтому прошу помощи у более опытных спецов))).
Для контроля оборотов планируется датчик холла, который считывает обороты с зуб.колеса (фото)
IMG_20200618_180241.jpg.
За один оборот коленвала над датчиком пройдет 5 зубов.
Управление подачей топлива осуществляется моторчиком на ТНВД.
IMG_20200618_181345.jpg
Моторчик будет управляться через релюшки, которыми будем управлять 8 и 9-м пинами.

Скетч:
C++:
//-----------дисплей-----------

#include <Arduino.h>

#include <TM1637Display.h>



// Контакты для подключения модуля (цифровые контакты)

#define CLK 5

#define DIO 4







TM1637Display display(CLK, DIO);

//--------дисплей-------

unsigned long lastflash;

int RPM;



void setup() {

  Serial.begin(9600);  //открыть порт



  //-------Счетчик оборотов на датчике холла----------



  attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала

  pinMode(3, OUTPUT);   //3 пин как выход

  digitalWrite(3, HIGH);  //подать 5 вольт на 3 пин

}

void sens() {

  RPM=60/((float)(micros()-lastflash)/1000000);  //расчет

  lastflash=micros();  //запомнить время последнего оборота

}



void loop() {

  display.setBrightness(2);

  display.showNumberDec(RPM/5, false);  //вывод на дисплей оборотов коленвала (обороты зуб.колеса делим на 5)

  if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды

    RPM=0;  //считаем что RPM 0

  }

  //---------контроль оборотов-------



  if (RPM>8050){ //если обороты увеличатся на 10 об/мин

    digitalWrite(8, HIGH);  //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;

  }

  if (RPM=8000){ //когда обороты уменьшатся до 1600 (1600*5=8000)

    digitalWrite(8, LOW);  //снять 5 вольт с 8 пина для откл мотора ТНВД на уменьшение оборотов;

  }

  if (RPM<7950){ //если обороты уменьшатся на 10 об/мин

    digitalWrite(9, HIGH);  //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;

  }

  if (RPM=8000){ //когда обороты увеличатся до 1600 (1600*5=8000)

    digitalWrite(9, LOW);  //снять 5 вольт с 9 пина для откл мотора ТНВД на увеличение оборотов;

  }

  Serial.println(RPM);   //вывод в порт

  delay(1000);  //задержка для стабильности

}
 

Вложения

Изменено:

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
а что такое тнвд? насос топливный что ли?
обороты же регулируются какой-то там заслонкой, которую тянет трос от педали газа или электромагнит

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

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Заслонка - это про маленькие бензиновые двигатели.
В больших дизелях подача топлива, и, соответственно, изменение оборотов, регулируются топливной рейкой в ТНВД (топливный насос высокого давления).
В данном случае рейка двигается мотором, скорость движения такова, что обороты изменяются со скоростью примерно 3-5% в сек., т. ч. "калбасит" не будет.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@tpga2008, непонятно же, какой двигатель Вы имеете ввиду. Для каждого - по разному. Сколько цилиндров, мощность в конце концов... Скажу сразу: линейное регулирование, как в Вашем скетче, там не прокатывает. Нужен PID регулятор с таблицами регулирования по обратным связям. Я имею опыт работы с подобными девайсами. Например, двигатель комбайна John Deere серии 9x00. Там тоже контроллер управляет топливной рейкой, которая находится внутри ТНВД , наружу только несколько проводов идут. Так эти провода идут в этот отдельный контроллер, который только тем и занимается, что собирая инфу от датчиков, поддерживает обороты и вращающий момент на уровне, заданном оператором. И это совсем не Ардуина, там применяется контроллер Siemens, 32 bit. Хотите сделать такой же контроллер Ардуино? Ну-ну, удачи! Вы просто не представляете, в какую сложную систему Вы пытаетесь влезть! Ей-богу, лучше не нужно...
 
Изменено:

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Да, знакомая ситуация, когда человеку сказать нечего, а сказать хоть что нибудь хочется...
Спрашиваешь, будет ли работать скетч, а в ответ глубокомысленные рассуждения про пидрегуляторы и сименовские контроллеры на джондировских комбайнах.
Двигатель этот 1973г.в. и стоит на генераторной установке с оборонки.
И как же глубоко вляпались его конструкторы, когда его спроектировали, они ж, бедные не знали что такое сименовские контроллеры, их же тогда в СССР просто не было. И как же это все могло работать...
И вот ведь чудеса: работает и сейчас без таблиц регулирования и заданий операторов, а на простых релюшках без единого транзистора в схеме.
Действительно, давайте уж простим глупеньких военных конструкторов, которые в 70-х посмели делать управление двигателями без 32-битных контроллеров.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
Нужен PID регулятор с таблицами регулирования по обратным связям.
тоже хотел написать
Вы просто не представляете, в какую сложную систему Вы пытаетесь влезть! Ей-богу, лучше не нужно...
полностью поддерживаю
И как же глубоко вляпались его конструкторы, когда его спроектировали, они ж, бедные не знали что такое сименовские контроллеры, их же тогда в СССР просто не было. И как же это все могло работать...
так если работает столько лет, то зачем туда контроллер совать?

к тому же у тебя код не обернут в тег, поэтому нечитаемый

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

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

вот что будет с твоим двигателем, если насос постоянно будет под напряжением и выдвинет рейку? в нем концевики есть для отключения?
сколько двигатель проработает на максимальных оборотах? чем это чревато?
 
  • Лойс +1
Реакции: PiratFox

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
ействительно, давайте уж простим глупеньких военных конструкторов, которые в 70-х посмели делать управление двигателями без 32-битных контроллеров.
Ага, а Вы теперь решили, что Вы умнее, и давай микросхемы пхать...
И как же глубоко вляпались его конструкторы, когда его спроектировали, они ж, бедные не знали что такое сименовские контроллеры, их же тогда в СССР просто не было. И как же это все могло работать...
Конечно, они даже и не предполагали, и в страшном сне инженерам сне не снилось, что кто-то будет творить ху.... йню, и в их конструкцию этот "кто-то" засунет микропроцессор. @tpga2008, Поймите меня правильно, я не собираюсь с Вами спорить. Просто Вы, судя по скетчу, пытаетесь применить линейное регулирование к процессам более сложным, чем Вы себе их представляете. И к тому же, простите, Вы даже и не знакомы с ТАУ. "Теория Автоматического Управления." Будет неплохо хотя бы ознакомиться с ней. Для Вас.
А впрочем, дело Ваше. Что же, удачи!!!

@kalobyte, , человек просто не понимает, с чем он имеет дело. Он думает, что "дизели" все одинаковые. А то, что уже лет 30 как применяется к ним электронное управление, так это пох. Я уж молчу про Common Rail.
 
Изменено:

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
@PiratFox,
так у него на движке нет датчиков для продвинутого управления
но даже в такой ситуации обратную связь можно построить и пид регулятор приделать

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

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@tpga2008, не делайте этого! Не лезьте в управляемый ТНВД сраной Ардуиной линейным управлением. Наделаете беды. Хотя, если хотите экспериментов и в результате убить двигатель - то вперёд. Дело Ваше.

так у него на движке нет датчиков для продвинутого управления
да там в ТНВД пару датчиков есть. Во всяком случае, должны бы быть Конец и начало. А уж если нет - так пусть прикончит движок. Может поймёт, что не нужно туда без базовых знаний свой нос совать, тем более ещё и ардуину. А когда, к тому же с написанием и отладкой скетча никак... Ядерная смесь.

И вот ведь чудеса: работает и сейчас без таблиц регулирования и заданий операторов, а на простых релюшках без единого транзистора в схеме.
Открою Вам большую тайну, но все эти процессы записаны на валу управления. Вы не знали? Вот беда. Скажу больше - релюшки даже там не нужны. Например, двигатель ЯМЗ-236 работает вообще без какого-либо электричества. А все процессы регулирования выполняет приводной вал ТНВД. Чудеса, правда? Так какого же хрена туда свой нос совать, да ещё и с ардуиной?
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Да блин!
Никто вас не спрашивает про опасность, целесообразность и возможные последствия!

Вопрос стоит о проверке полсотни строчек простейшего (для опытных) кода, и все.

Но по видимому эта задача несколько сложнее, нежели блюистать нагугленными знаниями. Мы ж крутые специалисты в области дизелей "...а что такое тнвд? насос топливный что ли?..." и наверняка лучше знаем как работает дизель.
За время существования моей фирмы мы не одну сотню таких ДГУшек перебрали и уж какие то базовые знания за 16 лет накопили.
Ну а уж ежели мы такие умные, давайте попробуем решить реальную элементарнейшую задачку (человек, имеющий хоть какое то представление о работе дизельгенератора решит (и решил) ее минут за 15):
Генератор на 200 КВа с 12-цилиндровым судовым движком, при остановке штатной стоповой кнопкой срабатывает приборчик отмеченный на фото (фото и схема ниже).
Где собака порылась?
Попытаюсь предугадать ответ: "...мне это нафик не надо... это не интересно... стану я еще время тратить...".
Что будет вполне предсказуемым ответом, ведь в гугле описания таких схем нет, тут надо свои мозги и опыт иметь.щит.jpgсхема1.jpgсхема2.jpgсхема3.jpgсхема4.jpgсхема5.jpgсхема6.jpgсхема7.jpgсхема8.jpgсхема9.jpgсхема10.jpg
 

Вложения

Изменено:

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
Попытаюсь предугадать ответ: "...мне это нафик не надо... это не интересно... стану я еще время тратить...".
Что будет вполне предсказуемым ответом, ведь в гугле описания таких схем нет
Ну почему же, вот теперь всё ясно. А то всё вокруг да около... Видел бы вживую - сказал бы сразу. А то у меня штатный экстрасенс в запое... Что же сразу-то не сказали? И к тому же, зачем это всё, если:
человек, имеющий хоть какое то представление о работе дизельгенератора решит (и решил) ее минут за 15
если вопрос решен, то непонятно, что Вы хотите.
 
Изменено:

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
ну и? даже в твоей схеме этого щита есть цепь защиты от разноса и там присутствует регулятор
вот эти регулировки и вносятся в пид регулятор на реальной установке и процесс подборки констант довольно долгий с учетом инерции двигателя

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

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Садись, 2!
Причем тут разнос, если ошибка (а этот приборчик - сигнализатр ошибки) выходит при остановке?

Ну почему же, вот теперь всё ясно. А то всё вокруг да около... Видел бы вживую - сказал бы сразу. А то у меня штатный экстрасенс в запое... Что же сразу-то не сказали? И при чём здесь собственно двигатель?
Понимающему информации достаточно.
Мне этот запрос пришел на мыло из соседнего региона, ДГУ этот я в глаза не видел, хватило схемы и фото.
И это не тот ДГУ, на который я собираюсь микросхемы пхать...
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,044
406
Москва
wan-derer.ru
Друзья! Больше толерантности!
Не превращайте форум в срач чат! Высказывайтесь взвешенно и аргументированно. Иначе придётся посносить ваши какашки остроумные высказывания вместе с крупицами полезной информации, которые там содержатся.
 
  • Лойс +1
Реакции: Un_ka и Arhat109

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Друзья! Больше толерантности!
Не превращайте форум в срач чат! Высказывайтесь взвешенно и аргументированно. Иначе придётся посносить ваши какашки остроумные высказывания вместе с крупицами полезной информации, которые там содержатся.
Так я ж и прошу только
о проверке полсотни строчек простейшего (для опытных) кода, и все.

А мне начинают читать лекции про комбайны
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
И это не тот ДГУ, на который я собираюсь микросхемы пхать...
Уважаемые господа-товарищи инженеры! О чём мы тогда здесь говорим? Вижу, что моя помощь здесь не нужна (а я искренне хотел помочь), тогда я, как Понтий Пилат, умываю руки.
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Уважаемые господа-товарищи инженеры! О чём мы тогда здесь говорим? Вижу, что моя помощь здесь не нужна (а я искренне хотел помочь), тогда я, как Понтий Пилат, умываю руки.
Искренняя помощь была бы еще здесь: "...Прошу проверить скетч..."
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
засунь скетч тогда к тег для кода, чтобы подсветка была
собственно для этого есть протеус
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
@PiratFox,
слушай
я только что написал 2 мысли и они совпали с твоими
короче у нас установился телепатический канал
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Оберните его в оболочку. А то глаза слезятся читать такое. Кроме того, засуну тогда в IDE. Да и на симуляторе можно будет проверить. :p
Так вроде уже обернуто...
Или как то не тем обернул? (я ж только учусь)

Может так лучше?
C++:
//-----------дисплей-----------
#include <Arduino.h>
#include <TM1637Display.h>
 
// Контакты для подключения модуля (цифровые контакты)
#define CLK 5
#define DIO 4
 
 
 
TM1637Display display(CLK, DIO);
//--------дисплей-------
unsigned long lastflash;
int RPM;
 
void setup() {
Serial.begin(9600); //открыть порт
 
//-------Счетчик оборотов на датчике холла----------
 
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
 
void loop() {
display.setBrightness(2);
display.showNumberDec(RPM/5, false); //вывод на дисплей оборотов коленвала (обороты зуб.колеса делим на 5)
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//---------контроль оборотов-------
 
if (RPM>8050){ //если обороты увеличатся на 10 об/мин
digitalWrite(8, HIGH); //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;
}
else if (RPM<7950){ //если обороты уменьшатся на 10 об/мин
digitalWrite(9, HIGH); //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;
}
else if (RPM > 7990 && RPM < 8010){ //когда обороты больше 7950 и меньше 8050
digitalWrite(9, LOW); //снять 5 вольт с 8 и 9 пина для откл мотора ТНВД на увеличение оборотов
digitalWrite(8, LOW);;
}

Serial.println(RPM); //вывод в порт
delay(1000); //задержка для стабильности
}
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@tpga2008, лучше. Хорошо, вечером посмотрю. Может, сегодня, а может и позже. У на с тут ещё день, и я пока на работе, так что я извиняюся.
 
Изменено:

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
@tpga2008[/USER], @tpga2008, лучше. Хорошо, вечером посмотрю. У на с тут ещё день, и я пока на работе, так что я извиняюся.
Спасибо, а я пока ишшо поковыряюсь кривенкими ручонками, мож че получится посимпатичнее)))

Добавил в сетапе опредение состояния ног, а в лупе защиту от одновременного включения
C++:
//-----------дисплей-----------
#include <Arduino.h>
#include <TM1637Display.h>
 
// Контакты для подключения модуля (цифровые контакты)
#define CLK 5
#define DIO 4
 
 
 
TM1637Display display(CLK, DIO);
//--------дисплей-------
unsigned long lastflash;
int RPM;
 
void setup() {
Serial.begin(9600); //открыть порт
display.setBrightness(2);
digitalWrite(8, LOW);
digitalWrite(9, LOW);

 
//-------Счетчик оборотов на датчике холла----------
 
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
 
void loop() {

display.showNumberDec(RPM/5, false); //вывод на дисплей оборотов коленвала (обороты зуб.колеса делим на 5)
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//---------контроль оборотов-------
 
if (RPM>8050){ //если обороты увеличатся на 10 об/мин
digitalWrite(8, HIGH); //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;
digitalWrite(9, LOW);
}
else if (RPM<7950){ //если обороты уменьшатся на 10 об/мин
digitalWrite(9, HIGH); //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;
digitalWrite(8, LOW);
}
else if (RPM > 7990 && RPM < 8010){ //когда обороты больше 7950 и меньше 8050
digitalWrite(9, LOW); //снять 5 вольт с 8 и 9 пина для откл мотора ТНВД на увеличение оборотов
digitalWrite(8, LOW);;
}

Serial.println(RPM); //вывод в порт
delay(1000); //задержка для стабильности
}
строчки 43-44 поменял местами. и 47-48 так же. Чтобы сначала LOW , а потом HIGH.
C++:
//-----------дисплей-----------
#include <Arduino.h>
#include <TM1637Display.h>
 
// Контакты для подключения модуля (цифровые контакты)
#define CLK 5
#define DIO 4
 
 
 
TM1637Display display(CLK, DIO);
//--------дисплей-------
unsigned long lastflash;
int RPM;
 
void setup() {
Serial.begin(9600); //открыть порт
display.setBrightness(2);
digitalWrite(8, LOW);
digitalWrite(9, LOW);

 
//-------Счетчик оборотов на датчике холла----------
 
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
 
void loop() {

display.showNumberDec(RPM/5, false); //вывод на дисплей оборотов коленвала (обороты зуб.колеса делим на 5)
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//---------контроль оборотов-------
 
if (RPM>8050){ //если обороты увеличатся на 10 об/мин
digitalWrite(9, LOW);
digitalWrite(8, HIGH); //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;
}
else if (RPM<7950){ //если обороты уменьшатся на 10 об/мин
digitalWrite(8, LOW);
digitalWrite(9, HIGH); //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;
}
else if (RPM > 7990 && RPM < 8010){ //когда обороты больше 7950 и меньше 8050
digitalWrite(9, LOW); //снять 5 вольт с 8 и 9 пина для откл мотора ТНВД на увеличение оборотов
digitalWrite(8, LOW);;
}

Serial.println(RPM); //вывод в порт
delay(1000); //задержка для стабильности
}
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@tpga2008, , А вообще, опишите подробно ТЗ (техническое задание), тогда, возможно, кто-то и напишет Вам скетч(прошивку). Но боюсь, это будет на платной основе. Ибо разбираться с чужой программой - это как на вилы влезать. А исправлять что-то сложное и путаное в Вашей прошивке никто не будет. Такова жизнь, увы... В общем, решение за Вами.

я пока ишшо поковыряюсь кривенкими ручонками,
не нужно так себя унижать. Вы же инженер, просто в данной области знаний не хватает. Ну и что, каждый профессионал в своём направлении. Я например, не знаю 3-D мах, так что же, я теперь не инженер?
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
не нужно так себя унижать. Вы же инженер, просто в данной области знаний не хватает. Ну и что, каждый профессионал в своём направлении. Я например, не знаю 3-D мах, так что же, я теперь не инженер?
Умный человек обязан критически оценивать свои способности, иначе велик шанс выглядеть глупо)))

@tpga2008, , А вообще, опишите подробно ТЗ (техническое задание), тогда, возможно, кто-то и напишет Вам скетч(прошивку). Но боюсь, это будет на платной основе. Ибо разбираться с чужой программой - это как на вилы влезать. А исправлять что-то сложное и путаное в Вашей прошивке никто не будет. Такова жизнь, увы... В общем, решение за Вами.
Нее, это мне самому нужно, именно научиться хотя бы простым вещам.
В данном конкретном случае можно было бы поставить что то типа dkg-253, причем каких то ощутимых плюсов в надежности или функциональности особо не прибавится, а ценник такой штуки че то около двадцатки или десятки, не помню.
У меня частенько такие задачи возникают, много моих "контроллеров" на релюхах и транзюках по соседним регионам работают, пока ни одного гарантийного случая не было.
Самый показательный случай - замена контролера на 200-кВтном винтовом компрессоре на нашу самоделку. Наши затраты около 200-500 руб., цена для клиента 15т.р., цена оригинала че то около 3,5 тыс $ (!!!), работает пятый год в режиме 24 часа в сутки. Конечно в оригинале и цветной дисплей с тачем, и возможность управления чуть ли не напрямую через спутник и еще куча всяких ништяков красивых, но в реальности надо пара защит от перегрева и регулировка по давлению.
Просто в современных системах (как и в автомобилях, кстати) огромная часть функционала закладывается не соображениями технической необходимости, а маркетологами. И когда ты хорошо представляешь все процессы в оборудовании, начинаешь понимать, что зачастую применение подобных девайсов, это все равно, что на камазе пиццу развозить. Увезти конечно можно, но рациональнее на матизе)))
 
  • Лойс +1
Реакции: Arhat109