Помогите построить алгоритм..

Ответить
ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#1

Сообщение ssql » 13.04.2020{, 17:08}

Приветствую!
Есть задача создать программу, которая будет управлять шаговым двигателем..
GIAAAgE0ieA-1920.jpg
Моторчик
Двигатель должен тягать
ть воздушную заслонку карбюратора на генераторе.
За основу взял алгоритм Калинникова Николая.
1.png
Сам алгоритм
111.png
параметры счетчика
1111.png
параметры генератора
1111.png (17.43 КБ) 1037 просмотров
Но программа работает не нормально.. Пропуски шагов и самопроизвольно меняет направление вращения.
На осциллографе. Это в протеусе, но на живом тоже самое..
11.png
11.png (10.55 КБ) 1037 просмотров
А вот по такому алгоритму все пучком..

Код: Выделить всё

#define A    4    
#define B    5
#define C    6
#define D    7


int delStep = 3;

void setup()
{
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
}

void loop()
{
  for (int i = 0; i < 20; i++) rotateRH(); // вниз на 20мм (полушаг)
  for (int i = 0; i < 20; i++) rotateLH(); // вверх на 20мм
  stopStep(); // вырубаем обмотки
  while (1);  // закончили 
}


// +++++ ОСНОВНЫЕ ФУНКЦИИ +++++

void stopStep() { // выключение двигателя
  StepH(0, 0, 0, 0);
}




void rotateRH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх
{
  for (byte i = 0; i < 6; i++) { 
    StepH(1, 0, 1, 0);           
    StepH(0, 0, 1, 0);
    StepH(0, 1, 1, 0);
    StepH(0, 1, 0, 0);
    StepH(0, 1, 0, 1);
    StepH(0, 0, 0, 1);
    StepH(1, 0, 0, 1);
    StepH(1, 0, 0, 0);
  }
}

void rotateLH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх
{
  for (byte i = 0; i < 6; i++) { 
    StepH(1, 0, 0, 1);           
    StepH(0, 0, 0, 1);
    StepH(0, 1, 0, 1);
    StepH(0, 1, 0, 0);
    StepH(0, 1, 1, 0);
    StepH(0, 0, 1, 0);
    StepH(1, 0, 1, 0);
    StepH(1, 0, 0, 0);
  }
}

void StepH(boolean a, boolean b, boolean c, boolean d) // один шаг
{
  digitalWrite(A, a);
  digitalWrite(B, b);
  digitalWrite(C, c);
  digitalWrite(D, d);
  delay(delStep / 2);
}
Подскажите, где ошибка..

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите построить алгоритм..

#2

Сообщение Ingwar » 13.04.2020{, 20:09}

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

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#3

Сообщение ssql » 13.04.2020{, 21:42}

Ingwar писал(а):
13.04.2020{, 20:09}
У Николая все отрабатывает отменно... Плюс производится расчет пройденных шагов, и периодическая отправка по УАРТ..
Может я изначально пошел не по тому пути? Драйвер на основе L298N, иного пока, по известным причинам не достать.. Для данного мотора длина импульса нужна 3-4 мс, низкий уровень около 5мс.. Может кто присоветует другие варианты..
Задача, по показаниям 18В20 и оборотам дергать двигатель на какое то кол-во шагов, если много, то чуть обратно.. Наверное можно обозвать - автоподсос..

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#4

Сообщение ssql » 14.04.2020{, 13:35}

av писал(а):
14.04.2020{, 01:00}
ssql, вы поищите поиском здесь были темы по вашему драйверу L298. Там много всяких вариантов управления двигателем.
Спасибо! Посмотрел, но все ответы сводятся к смене L298 на драйвер степ дир, но сейчас конечно это не возможно....
Хотя по примеру (код) выше все работает без замечаний..
Пока что сделал из кода блок в флпроге, попытаюсь дотумкать как крутить в одну или другу сторону по значению на пине или переменной.. Может кто еще чего подскажет.. Лет много назад писал на вижуал бэйсик, сейчас конечно тяжеловато)) плюс язык другой..

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#5

Сообщение ssql » 14.04.2020{, 16:44}

Пока входов нет. Есть только выходы на пины для управления мотором..
(CODE).ubi
(9.45 КБ) 47 скачиваний

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#6

Сообщение ssql » 14.04.2020{, 17:05}

Спасибо :smile9: ! А у меня с этим еще хуже :smile390:

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#7

Сообщение ssql » 14.04.2020{, 17:32}

1 оборот=1мм, кол-во шагов на один оборот, как я понял =24

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#8

Сообщение ssql » 14.04.2020{, 19:52}

4

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#9

Сообщение ssql » 15.04.2020{, 11:05}

av писал(а):
15.04.2020{, 10:18}
Спасибо за потраченное на меня время))
водяное охлаждение, рабочая температура до 95 градусов, 18В20 вполне..
планирую брать сигнал с катушки
типа этого
вход с катушки.png

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

Помогите построить алгоритм..

#10

Сообщение rw6cm » 15.04.2020{, 12:25}

ssql,
что то не пойму, это электрогенератор?
Тогда о кокой регулировке по температуре речь?
обороты должны быть стабильно 3000об/м, а при превышении температуры аварийно выключаться.
Win10-64, FLProg (portable)

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#11

Сообщение ssql » 15.04.2020{, 12:58}

Электрогенератор 17 кВт.
ДВС видимо не может выдавать номинальную мощность без прогрева.. Изначально была штатная система на блочке электронном, залитым компаундом.. блок за 20 лет уже не работает..
пока шел прогрев генератор захлебывался и глох, заливая свечи..
Приходится стоять и держать заслонку, пока не прогреется хотя бы до 30-40 градусов..

Отправлено спустя 2 минуты 26 секунд:
с первички катушки зажигания..
да, скорее всего оптопара буде, это я для примера просто картинку вставил..
Температура скорее для полного открытия заслонки, а так основное регулирования заслонки по оборотам..
Таблица регулирования хз, надо будет по факту выставлять, например через блоки масштабирования.. Например до 0 град. - максимум, 0-20град. - 1300об/мин, 20-40град. - 1100об/мин, >40 полное открытие..
Обороты можно считывать не постоянно..
Мотор прогревается примерно за 15 минут, до того момента, когда можно отпускать заслонку..

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

Помогите построить алгоритм..

#12

Сообщение rw6cm » 15.04.2020{, 13:38}

ssql,
может за это время поршневая износилась, потому и заливает?
Возможно карб (настроить/поменять на лучший)
Для автоматики нюансов очень много, (качество топлива, время сезона, погода, итд)
Win10-64, FLProg (portable)

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#13

Сообщение ssql » 15.04.2020{, 14:02}

Две заслонки, нижняя регулирует обороты в рабочем режиме, она работает от вакуума из приемного коллектора через какой то блок с кучей трубок, их дофига там, несколько трубок идут на какой то блок между ДВС и генератором(может вариатор или еще чего там).. Нижняя при запуске всегда приоткрыта.. При прогреве она остается в одном положении, регулировка начинается только на теплом моторе. Еще заметил, что пока мотор не прогрет сам генератор вращается с меньшими оборотами, чем ДВС. Верхняя работала от того блочка и встроенного в него моторчика, этот болк который помер..
В карбе особо ничего не настроишь.. Поршневая отличная, движок сам был новый, когда тот блочек работа, все было гуд.. .. Сам генератор хз откуда, достался много много лет назад с закрывшегося завода.. Там нет шильдиков, и рама вся заколхожена..

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

Помогите построить алгоритм..

#14

Сообщение rw6cm » 15.04.2020{, 14:39}

ssql писал(а):
15.04.2020{, 14:02}
нижняя регулирует обороты в рабочем режиме, она работает от вакуума из приемного коллектора
прям как у меня на тайоте спринтер (конца 70х) двигатель был. Все на трубочках как сердце с артериями.
Первое время было страшно капот открывать ))) потом разобрался что к чему. Верой и правдой 25лет отслужила.
Думаю если сильно захотеть все можно сделать, главное желание и терпение.
Чем смогу помогу, а пока Алексей инициативой горит )
Win10-64, FLProg (portable)

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#15

Сообщение ssql » 15.04.2020{, 14:56}

rw6cm писал(а):
15.04.2020{, 14:39}
ssql писал(а):
15.04.2020{, 14:02}
нижняя регулирует обороты в рабочем режиме, она работает от вакуума из приемного коллектора
прям как у меня на тайоте спринтер (конца 70х) двигатель был. Все на трубочках как сердце с артериями.
Первое время было страшно капот открывать ))) потом разобрался что к чему. Верой и правдой 25лет отслужила.
Думаю если сильно захотеть все можно сделать, главное желание и терпение.
Чем смогу помогу, а пока Алексей инициативой горит )
ДААА, вот техника была то... К тойоте тоже приятные чувства остались))

ssql
Рядовой
Сообщения: 15
Зарегистрирован: 11.04.2020{, 21:45}
Репутация: 0
Имя: Федор

Помогите построить алгоритм..

#16

Сообщение ssql » 15.04.2020{, 15:24}

av писал(а):
15.04.2020{, 15:20}
Здорово, спасибо!! Допилим, доделаем!! :D

Ответить

Вернуться в «Помогите, а то я "нимагу"»