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

Спортивные часы на шаговом двигателе

Добавлено: 08 фев 2018, 15:56
vitek1958
Работаю над применением нового шагового двигателяVID60-02 с встроенным датчиком положения.
подскажите что нужно добавить, чтобы двигатель остановился по датчику положения с ИК приемника.
затем после нажатия кнопки работал но на датчик не реагировал.
использую пока скетч

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

#include <Stepper.h>

Stepper motor = Stepper(1000, 4, 6, 5, 7);

void setup()
{
motor.setSpeed(15);
}

void loop()
{
motor.step(10);
delay(10);
}

Это необходимо для позиционирования
VID60-02 является усовершенствованной версией на основе VID69 двигателя часов. Имеется оптико-механическая система обнаружения физического расположения стрелок часов. Алгоритм для синхронизации времени аналоговый дисплей в режиме реального времени.

Нулевая функция обнаружения (построен в OSRAM LPT80A ИК-приемника)
Широкий диапазон рабочих напряжений: 5 ~ 10В.
Низкое потребление тока: 18mA, 5V, 2X90mW
Пиковый ток 18 мА при 5 В
Применение библиотеки не критично.
Скорость нужно менять в скетче.
Спасибо

Re: Спортивные часы на шаговом двигателе

Добавлено: 08 фев 2018, 20:52
Эдуард
Здравствуйте!
Я не понял до конца задачи и для какого устройства это делается. Давайте начнем с того, что просто закрутим двигатель с нужной скоростью.
Я не знаю, какая скорость вращения нужна и сколько в двигателе VID60-02 шагов на оборот. Могу ошибиться, но я попытался повторить скорость вращения из вашей программы.
В отличии от библиотеки Stepper, в этом варианте программы коммутация фаз двигателя происходит параллельным процессом. Значит скорость вращения не будет зависеть от операций в цикле loop и может быть установлена с высокой точностью.

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

#include <TimerOne.h>
#include <StepMotor.h>

StepMotor clockMotor(4, 5, 6, 7);  // создаем объект типа StepMotor, задаем выводы для фаз
void setup() {
  Timer1.initialize(4000);  // инициализация таймера 1, период 4 мс
  Timer1.attachInterrupt(timerInterrupt, 4000);  // задаем обработчик прерываний
  clockMotor.setMode(1, false);  // полушаговый режим, без фиксации при остановке
  clockMotor.setDivider(1);     // делитель частоты 1
}

void loop() {
  clockMotor.step(-200);  // вращать по часовой стрелке
}

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

Период переключения фаз, а значит и скорость вращения определяется аргументами в строках:
Timer1.initialize(4000); // инициализация таймера 1, период 4 мс
Timer1.attachInterrupt(timerInterrupt, 4000); // задаем обработчик прерываний
Сейчас задано время переключения фаз 4000 мкс (4 мс). Вы можете изменить его. При необходимости с помощью этих параметров можно очень точно установить скорость вращения.
Библиотеки есть в уроке 29.
Проверьте, установите нужную скорость вращения, пишите. Будем добавлять кнопку.

Re: Спортивные часы на шаговом двигателе

Добавлено: 09 фев 2018, 17:24
vitek1958
Эдуард спасибо двигатель вращается
задача состоит из двух частей
1 часть это выставить часы в ноль, т.е остановка по опто датчику уровень срабатывания низкий (ноль)
2 часть это вращать с заданной скоростью.
Вторая часть спасибо вам решена.
Осталась задача позиционирования.

Re: Спортивные часы на шаговом двигателе

Добавлено: 09 фев 2018, 22:22
Эдуард
Добрый вечер!
Мне программу проверять не на чем, поэтому я могу ошибиться. Попробуйте. Задумано так.
1. При включении питания двигатель вращается.
2. По нажатию кнопки вращение продолжается до тех пор, пока не поступит сигнал синхронизации (низкий уровень).
3. По сигналу синхронизации двигатель останавливается.
4. По нажатию кнопки продолжается вращение.
5. В режиме синхронизации и ожидания светится светодиод.

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

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

#define LED_SYNHR_PIN 13     // вывода светодиода синхронизации _-_
#define BUTTON_SYNHR_PIN 12  // вывод кнопки синхронизации -_-
#define IN_SYNHR_PIN 11  // вывод входа синхронизации -_-

StepMotor clockMotor(4, 5, 6, 7);  // создаем объект типа StepMotor, задаем выводы для фаз
Button buttonSynhr(BUTTON_SYNHR_PIN, 8);  // создание объекта для кнопки синхронизации

byte  mode=0; // режим 0 - вращение, 1 - синхронизация, 2 - ожидание пуска

void setup() {
  pinMode(LED_SYNHR_PIN, OUTPUT);
  digitalWrite(LED_SYNHR_PIN, LOW);
  pinMode(IN_SYNHR_PIN, INPUT_PULLUP);
 
  Timer1.initialize(4000);  // инициализация таймера 1, период 4 мс
  Timer1.attachInterrupt(timerInterrupt, 4000);  // задаем обработчик прерываний
  clockMotor.setMode(1, false);  // полушаговый режим, без фиксации при остановке
  clockMotor.setDivider(1);     // делитель частоты 1

  for(byte i=0; i<30; i++) {
    buttonSynhr.scanState();
  }
  buttonSynhr.flagClick= false;
}

void loop() {

  if(mode == 0) {
    // вращение
    clockMotor.step(-200);  // вращать по часовой стрелке
    digitalWrite(LED_SYNHR_PIN, LOW);
    if(buttonSynhr.flagClick == true) {
      // переход на синхронизацию
      mode=1; 
    }
  }
 
  else if(mode == 1) {
    // синхронизация
    clockMotor.step(-200);  // вращать по часовой стрелке
    digitalWrite(LED_SYNHR_PIN, HIGH);
    if(digitalRead(IN_SYNHR_PIN) == LOW) {
      // переход на ожидание пуска
      buttonSynhr.flagClick= false;
      mode=2;       
    }   
  }
 
  else if(mode == 2) {
    // ожидание пуска
    clockMotor.step(0); // остановка
    digitalWrite(LED_SYNHR_PIN, HIGH);
    if(buttonSynhr.flagClick == true) {
      // переход на вращение
      buttonSynhr.flagClick= false;
      mode=0;             
    }   
  }

  else mode=0;

}

//-------------------------------------- обработчик прерывания 4 мс
void  timerInterrupt() {
  clockMotor.control(); // управление двигателем
  buttonSynhr.scanState();  // вызов метода ожидания стабильного состояния кнопки
}

Re: Спортивные часы на шаговом двигателе

Добавлено: 09 фев 2018, 22:26
Эдуард
Забыл. Если программа заработает, надо сторожевой таймер добавить.

Re: Спортивные часы на шаговом двигателе

Добавлено: 12 фев 2018, 14:58
vitek1958
Эдуард вас можно привлечь к проекту, в плане написания программы для Ардуино по алгоритму
который я вам пришлю. Фото прибора пришлю.
Правда не нашел как прикрепить фото в быстром ответ .
Программу вторую часть запустил работает, но с кнопками пока не проверял.
Огромное спасибо за оперативность

Re: Спортивные часы на шаговом двигателе

Добавлено: 12 фев 2018, 22:24
Эдуард
Фотография прикрепляется в "Стандартный ответ & предпросмотр".

Re: Спортивные часы на шаговом двигателе

Добавлено: 13 фев 2018, 11:14
vitek1958
Эдуард добрый день!
Фото в 3 Мб не прикрепляется выдает сообщение большой объем.
Вы ответили согласны ли вы участвовать в проекте

Re: Спортивные часы на шаговом двигателе

Добавлено: 13 фев 2018, 11:21
vitek1958
Давайте я Вас скину на Email

Re: Спортивные часы на шаговом двигателе

Добавлено: 14 фев 2018, 08:48
vitek1958
Эдуард доброе утро!
Дайте ваш Email для переписки.
Вы территориально где??

Re: Спортивные часы на шаговом двигателе

Добавлено: 14 фев 2018, 17:40
vitek1958
Аналогичных приборов 13 шт все на Ардуино, работы много и интересной.
Работа ИК позиционирования осциллограмму высылаю.

Re: Спортивные часы на шаговом двигателе

Добавлено: 14 фев 2018, 22:34
Эдуард
Здравствуйте!
Я живу в Новочеркасске, 30 км от Ростова на Дону.
Можно писать по почте mypractic2gmail.com
Пришлите техническое задание, но не знаю, как у меня со временем.

Re: Спортивные часы на шаговом двигателе

Добавлено: 16 фев 2018, 11:16
vitek1958
ОК

Re: Спортивные часы на шаговом двигателе

Добавлено: 20 июл 2018, 11:07
vitek1958
Эдуард добрый день!
Хочу возвратится к нашему разговору по сотрудничеству.
Объем не очень большой, работа по договору подряда с указанным объемом.
Форму договора вышлю в ближайшее время.
СКЕТЧИ нужны для управления шаговыми двигателями, адресной светодиодной лентой, энкодерами,
кнопками коммутации и их взаимодействие по определенному алгоритму.
Надеюсь на сотрудничество.
Если вы не сможете , то может кого порекомендуете.