Страница 1 из 1

медленное вращение ШД

Добавлено: 03 мар 2017, 08:18
blur
Здравствуйте Эдуард.
После изучения вашего урока №29 для знакомства с библиотекой StepMotor пробую использовать мотор 28BYJ-48-5V (стандартный моторчик из КИТ-набора)
команда MT.step(х) — работает. но почему то эти х шагов двигатель делает со скоростью примерно 3-4 шага в секунду… хотя судя по его характеристикам он должен делать 2048 шагов (оборот) — за 4 секунды.
не знаете, в чем причина такого его поведения?


з.ы. программа минимальная - обьявлены библиотеки StepMotor, Button
по нажатию кнопки исполняется команда MT.step(10)

Re: медленное вращение ШД

Добавлено: 03 мар 2017, 09:50
Эдуард
Здравствуйте!

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

Проверьте все эти составляющие, вычислите время переключения шага.

Re: медленное вращение ШД

Добавлено: 03 мар 2017, 09:57
blur
Эдуард писал(а):Здравствуйте!

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

Проверьте все эти составляющие, вычислите время переключения шага.


Да, сейчас еще раз перечитал урок. когда пробовал пользоваться библиотекой - писАл на память, поэтому у меня не было паралельного процесса и метод control() не вызывался вообще. я в основном цикле void loop() писал команду step(x) и все.
наверное, дело в этом? вечером попробую дома.

спасибо Вам за вашу работу и прекрасный ресурс.

Re: медленное вращение ШД

Добавлено: 03 мар 2017, 14:13
blur
сорри я вас обманул. пришел вечером домой, глянул код, все на месте:

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

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

#define BUTTON_PIN 8
#define LED_PIN 13

boolean buttonState, flagPress, flagClick;
Button buttonT(BUTTON_PIN,15);
StepMotor SM(2,3,4,5);
void setup() {
  // put your setup code here, to run once:
pinMode(LED_PIN,OUTPUT);
MsTimer2::set(1,timerInterupt);
MsTimer2::start();
}

void loop() {
if (buttonT.flagClick==true){
  buttonT.flagClick=false;
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  SM.step(20);}

}

void timerInterupt() {
buttonT.scanState();
SM.control();
}


шагает примерно 3-4 шага в секунду.
заметил одну странность: если команду SM.control(); писать несколько раз друг за другом - то скорость шагов возрастает... ничего не понимаю...

Re: медленное вращение ШД

Добавлено: 03 мар 2017, 14:35
Эдуард
А где вы устанавливаете режим коммутации фаз и делитель?

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

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

Re: медленное вращение ШД

Добавлено: 03 мар 2017, 14:51
blur
капец, стыдно то как! :)

спасибо.