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

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
1) Внешние переменные которые меняются в прерываниях следует объявлять так:
volatile int RPM;
1а) То же с lastflash;
2) Нулевое прерывание , это пин 2, лучше объявить его на ввод
3) Из кода не понятно как часто будет вызываться прерывание - на что оно срабатывает? На оборот или на каждый зуб? Похоже что на каждый зуб.

Скетч то запуститься, НО кмк в начале он запустить насос на максимум, а при 1-ом превышении вырубит его нафиг. и дергать так будет постоянно.
Это при условии, что управление пинами идет на логическое управление насосом, а не на силовое.
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
3) Из кода не понятно как часто будет вызываться прерывание - на что оно срабатывает? На оборот или на каждый зуб? Похоже что на каждый зуб.
Последние исправления с коментами
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);//яркость дисплея
// определить состояни ног 8 и 9 для исключения ложных сработок при включении
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, т.к. за один оборот коленвала над датчиком пройдет 5 зубов.)
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//---------контроль оборотов-------
 
if (RPM>8050){ //если обороты увеличатся на 10 об/мин
digitalWrite(9, LOW);//защита от одновременного включения с 9 пином
digitalWrite(8, HIGH); //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;
}
else if (RPM<7950){ //если обороты уменьшатся на 10 об/мин
digitalWrite(8, LOW);//защита от одновременного включения с 8 пином
digitalWrite(9, HIGH); //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;
}
else if (RPM > 7990 && RPM < 8010){ //когда обороты больше 7950 и меньше 8050
  //снять 5 вольт с 8 и 9 пина для откл мотора ТНВД на увеличение оборотов
digitalWrite(9, LOW);
digitalWrite(8, LOW);;
}

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

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Скетч то запуститься, НО кмк в начале он запустить насос на максимум, а при 1-ом превышении вырубит его нафиг. и дергать так будет постоянно.
Это при условии, что управление пинами идет на логическое управление насосом, а не на силовое.
1. Это старый советский генератор и скорость регулирования оборотами достаточно медленная (примерно 3-5% в сек.).
2. К тому же изменения оборотов в данном случае - маловероятное событие, т.к. запас мощности двигателя по отношению к мощности генератора двукратный(это же военка) и нагружать его (генератор) будут едва ли % на 60.
3. ТНВД устроен таким образом, что при остановке положение топливной рейки остается в положении, которое было при последнем регулировании, соответственно при запуске обороты будут на уровне, который был при последнем останове.
4. питание на регулятор я планирую подавать с 3-х секундной задержкой после запуска и устоявшихся оборотах, и снимать вместе с командой на остановку.
5. Двигает рейкой моторчик простейший коллекторный на 27в, пара релюшек будет переключать обмотку возбуждения в разные стороны, соответственно 8 и 9 пины будут управлять катушками реле через транзисторные ключи.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Что будет с насососм при постоянной подаче digitalWrite(8, HIGH); ?
Как быстро меняется скорость. отвечено

Я не знаю как устроен этот ТНВД. Я вот знаю, что для совершения шага шаговым двигателем через драйвер нужно подать короткий импульс. 1 импульс - 1 шаг. Что делает ТНВД при подаче на управление сигнала я не знаю, не понимаю как там реализовано уменьшение потока топлива. Если система достаточно инертна, то может и будет работать.

Переменные так и не объявил как надо. И порты не все с pinMode .
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Что будет с насососм при постоянной подаче digitalWrite(8, HIGH); ?
Пока не пробовал)))), но имеется контроль за частотой по напряжению, при изменении на 5 Гц двигатель остановится (это другая система, не связанная с регулированием оборотов, обычный АВР), т.ч. думаю до этого не дойдет.

Я не знаю как устроен этот ТНВД. Я вот знаю, что для совершения шага шаговым двигателем через драйвер нужно подать короткий импульс. 1 импульс - 1 шаг. Что делает ТНВД при подаче на управление сигнала я не знаю, не понимаю как там реализовано уменьшение потока топлива. Если система достаточно инертна, то может и будет работать.
Рейкой двигает коллекторный моторчик с редуктором (не шаговый), есть питание - тихонько крутится, нет - стоит на месте. И да, инертный.
Переменные так и не объявил как надо .
Погоди, мне ж надо подумать))))


А это как? Мне б, дилетанту попонятнее))))
И порты не все с pinMode .
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Переменные которые изменяются в прерывании надо объявлять с параметром volatile
Пример я дал ранее. Это для 2-х переменных
1) Внешние переменные которые меняются в прерываниях следует объявлять так:
volatile int RPM;
Если выход 5 в это управляющий сигнал на реле, которое включает мотор, то как то должно работать, тем более нормальные обороты считаются в интервале с запасом.
 
  • Лойс +1
Реакции: Arhat109

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Тупю...
RPM же расчетная..


Так штоли?
C++:
volatile int unsigned long lastflash;
volatile int RPM;
И порты не все с pinMode
Так?

C++:
pinMode(3, OUTPUT); //3 пин как выход на датчик холла
pinMode(8, OUTPUT); //8 пин как выход на ТНВД в -
pinMode(9, OUTPUT); //9 пин как выход на ТНВД в +
 
  • Лойс +1
Реакции: Старик Похабыч

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Неправильно было
C++:
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
надо

C++:
attachInterrupt(2,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
А INPUT – вроде все пины сконфигурированы так по умолчанию?
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
что за датчик ?
Пока не определился, какойнить автомобильный датчик холла, позже посмотрю в т.ч. по посадочным размерам.
Пока на макетке с датчиком линии, моторчиком с диском через лаб. БП и светодиодами в кач-ве исполнителей поэксперементирую
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
а здесь все правильно?
C++:
display.showNumberDec(RPM/5, false); //вывод на дисплей оборотов коленвала (количество сигналов с зуб.колеса делим на 5, т.к. за один оборот коленвала над датчиком пройдет 5 зубов.)
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
автор, для твоих задач идеально подходит флпрог
при создании проекта ты можеш выбрать фбд или лад
твои схемы с релешками ледаются на лад

фбд же больше похож на рисование цифровых схем

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

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

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

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

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Про дисплей не скажу, надо смотреть библиотеку. Вполне может быть и верно.
Но если честно такой подход мне странен. Писать код непонятно подо что. Был бы датчик - надо было бы научиться с него считывать. Есть дисплей - научись выводить на него что попало и куда попало. Как будет все в сборе - опа - пиши общий скетч. )
Про датчик спросил потому что может он сразу будет тебе давать обороты , а не зубья/5.
 

tpga2008

✩✩✩✩✩✩✩
17 Апр 2020
35
2
Про дисплей не скажу, надо смотреть библиотеку. Вполне может быть и верно.
Но если честно такой подход мне странен. Писать код непонятно подо что. Был бы датчик - надо было бы научиться с него считывать. Есть дисплей - научись выводить на него что попало и куда попало. Как будет все в сборе - опа - пиши общий скетч. )
Про датчик спросил потому что может он сразу будет тебе давать обороты , а не зубья/5.
От датчика мне надо простой 5-вольтовый прямоугольный сигнал 0 или 1, они почти все в принципе такие (автомобильные имею ввиду)
По дисплею неверно сформулировал, сомневался в этом "RPM/5", в остальном этот кусок кода с таким дисплеем у меня на тахометре работает (неделю назад сделал для пробы сил).
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,722
481
засунь скетч тогда к тег для кода, чтобы подсветка была
собственно для этого есть протеус
что же самому мешает в Протеус запхать. Лень, что ли? Так я сам ленивый. В общем, посмотрю я твой код, только не сейчас. Щас мне все мозги съел John Deer Servise Advisor. Ничего не осталось... :cry:
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Читал-читал .. нифига не вьехал с какой целью и на что надо "проверить скетч"?
На ошибки/описки, неверное применение конструкций языка? Так это лучше делает компилятор. Компилируется? Значит таковых в первом приближении нет.
На соответствие заданному алгоритму работы? Тогда где ТЗ или хоть какое-то его описание? Эл.схема релейного управления ТГУ - в качестве ТЗ? Не, увольте. Одно дело сопоставить код с хотелкой и совсем иное выпиливать алгоритм из релейной схемы и сопоставлять с кодом .. ну или попробовать на "протеусах" или FLprog собрать код по релейной схеме.
На "оптимальность решения"? .. тоже непонятно нафига .. если работает то и пофиг.
...
С последним постом - сильно соглашусь, ибо опыт ровно такой же. Очень много чего в ПО "последнего пошиба" заложено маркетологами и "преподами" никогда не работавшими в реальности с реальными вопросами разработки ПО. Но это так .. "лирика".

"Ковчег построил любитель. Титаник строили профессионалы". ;)

В общем вопрос остался нераскрытым: с какой целью надо смотреть на этот код?
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,722
481
для твоих задач идеально подходит флпрог
от профессионалов такое слышать, по меньшей мере, странно.Нужно толкать человека к изучению языков программирования. FL-prog ведь не предполагает знания языков программирования вообще никаких. К тому же эта херня генерит кучу не нужного кода. А если потребуется исправить одну строчку? А языков я не знаю. Вам-то хорошо, Вы С знаете, да и ещё и ассемблер до кучи, чегой-то мне так кажется. Разберётесь. А начинающему, ему-то что делать?
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
@PiratFox, так ТС походу не программер, а как раз больше электронщик. Может ему будет проще.
Я вот попгобовал в нем разобраться, с наскоку нифига не понял .. точно также как лет 15 назад смотрел на SQL с широкооткрытыми глазами: "А где здесь циклы поиска данных?" :) Блин .. уже больше 20-и .. время летит.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,722
481
Блин .. уже больше 20-и .. время летит.
А как Вы думали. Вроде бы вчера... Я ведь С учил по Белинскому, а потом по Страусструппу. Оглянулся - актуален только Страусструпп. И хрен его знает, что важнее...
 
Изменено:
  • Лойс +1
Реакции: Arhat109

kalobyte

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

FL-prog ведь не предполагает знания языков программирования вообще никаких.
именно
это инструмент для решения задач и у автора стоит задача, а не получить зачет в быдловузе
поэтому есть инструменты для решения задач и нужно время, чтобы осилить инструмент

К тому же эта херня генерит кучу не нужного кода.
при нынешних скоростях и размерах памяти это не играет особого значения
сама ардуина генерит много ненужного, но фреймворк позволяет не писать то, что можно не написать 1 раз и юзать
сейчас 95% используют фреймворки и никто не пишет с нуля велосипеды

Вам-то хорошо, Вы С знаете, да и ещё и ассемблер до кучи,
не знаю, ассемблер тем более
А начинающему, ему-то что делать?
потратить часов 10 на просмотр роликов по флпрог и начать решать свои задачи, благо 95% их флпрог решает без строчек кода
главное знать алгоритм работы устройства, а я думаю у автора с этим гимора нет и он лучше всех нас знает, как там его генераторы работают

ну а если ему надо свой блок сделать, то он делается не так уж и трудно
даже я смог один блок сделать