Шаговый двигатель, драйвер L298N и ФД ID103

Вопросы об управлении шаговыми двигателями
Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Serg42 » 25 окт 2017, 17:08

Эдуард, приветствую! Залил Ваш скетч, пока тестирую...вроде бы всё нормально...В данном случае логика работы не очень важна, если жалюзи, к примеру, открыты, а должны быть закрыты, достаточно потянуть их за веревочку и перевести в необходимое положение. Потом двигатель их уже сам переведёт в состояние, соответствующее освещенности.


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Эдуард » 25 окт 2017, 18:46

Здравствуйте!
Если все окончательно заработает и есть желание, то выложите схему и фотографию устройства. Еще надо в программу сторожевой таймер добавить. Все таки устройство в круглосуточном режиме работает.

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Serg42 » 29 окт 2017, 12:53

Эдуард писал(а):Здравствуйте!
Если все окончательно заработает и есть желание, то выложите схему и фотографию устройства. Еще надо в программу сторожевой таймер добавить. Все таки устройство в круглосуточном режиме работает.

Приветствую! Конечно выложу, хотя эти схемы вдоль и поперёк изъзжены в паутине :D

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Serg42 » 21 янв 2018, 18:48

Приветствую, Эдуард! Что то после НГ затишье, пора уж начинать что то делать... :) Я к Вам снова за помощью...Задача кажется простейшая, проще некуда, но я что то уже запутался.
Две кнопки, один шаговик, драйвер все тот же. Нажимаешь кнопку1, двигатель вращается, отпускаешь-останавливается. Нажимаешь кнопку2 двигатель вращается в обратную сторону на n-количество шагов.

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

#include <MsTimer2.h>
#include <StepMotor.h>
#include <Button.h>

StepMotor myMotor(8, 9, 10, 11);  // создаем объект типа StepMotor, задаем выводы для фаз
const int right_buttonPin = 6;    // создание объекта для кнопки вверх
const int left_buttonPin = 5;     // создание объекта для кнопки вниз
const int control_Pin = 7;        // задание выхода управления
int buttonState = 0;              // переменная для считывания статуса кнопок

//boolean buttonState;

void setup() {
    pinMode(6, INPUT_PULLUP); // инициализация вывода 6 как вход, подтянутый к +5В
    pinMode(5, INPUT_PULLUP); // инициализация вывода 5 как вход, подтянутый к +5В
    pinMode(7, OUTPUT);       // инициализация вывода 7 как выход
   
  MsTimer2::set(1, timerInterrupt); // задаем период прерывания по таймеру 1 мс
  MsTimer2::start();               // разрешаем прерывание по таймеру
  myMotor.setMode(1, true);        // полушаговый режим, с фиксацией при остановке
  myMotor.setDivider(8);           // делитель частоты 21 (при прерывании 1 мс период коммутации фаз 21 мс)
}

void loop() {
  buttonState = digitalRead(right_buttonPin); // чтение состояния кнопок-------
  buttonState = digitalRead(left_buttonPin);
 
    if (buttonState == LOW) { // проверяем, нажата ли кнопка, если да, то на 7-ом выводе  HIGH:
    digitalWrite(control_Pin, HIGH);
  }
  else {
    digitalWrite(control_Pin, LOW);
  }
 
  myMotor.step(1000);
}
//-------------------------------------- обработчик прерывания 1 мс
void  timerInterrupt() {
  myMotor.control(); // управление двигателем
//  button.scanState();
}

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

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Эдуард » 21 янв 2018, 23:20

Здравствуйте!
Попробуйте так:

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

#include <MsTimer2.h>
#include <StepMotor.h>
#include <Button.h>

StepMotor myMotor(8, 9, 10, 11);  // создаем объект типа StepMotor, задаем выводы для фаз

Button buttonUp(6, 20);  // создание объекта для кнопки вверх
Button buttonDown(5, 20);  // создание объекта для кнопки вниз

const int control_Pin = 7;        // задание выхода управления


void setup() {
    pinMode(7, OUTPUT);       // инициализация вывода 7 как выход
   
  MsTimer2::set(1, timerInterrupt); // задаем период прерывания по таймеру 1 мс
  MsTimer2::start();               // разрешаем прерывание по таймеру
  myMotor.setMode(1, true);        // полушаговый режим, с фиксацией при остановке
  myMotor.setDivider(8);           // делитель частоты 21 (при прерывании 1 мс период коммутации фаз 21 мс)
}

void loop() {

  if( buttonUp.flagPress == true ) myMotor.step(1);

  if( buttonDown.flagClick == true ) {
      buttonDown.flagClick= false;
      myMotor.step(-100);
  } 
}

//-------------------------------------- обработчик прерывания 1 мс
void  timerInterrupt() {
  myMotor.control(); // управление двигателем
  buttonUp.scanState();
  buttonDown.scanState();
}

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Serg42 » 22 янв 2018, 05:01

Спасибо за оперативность! Блин, как все просто!! Я в Си не силён(((((...Что означают 20-ки для кнопок?

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Эдуард » 22 янв 2018, 10:38

Здравствуйте!
Смотрите аргументы конструктора класса Button. Это время усреднения состояния кнопок (* период прерывания, в вашем случае 20*1 мс = 20 мс).

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Шаговый двигатель, драйвер L298N и ФД ID103

Сообщение Serg42 » 23 янв 2018, 16:07

Эдуард, спасибо ещё раз! Все работает как мне хотелось! Теперь буду пытаться через DRV8825 запускать...


Вернуться в «Шаговые двигатели и драйверы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей