2 / 2 / 0
Регистрация: 13.05.2015
Сообщений: 45
1

Шаговый двигатель: как управлять?

10.10.2015, 21:21. Показов 1237. Ответов 11
Метки нет (Все метки)

Парни, наставьте на путь истинный, научите, как управлять шаговиком?
В какой последовательности нужно подавать сигналы?
Выложил фото шаговика в разобранном виде и поставил метки на обмотках.
Объясните пожалуйста "на пальцах", как с этим чудом обращаться?

Шаговый двигатель: как управлять?


Шаговый двигатель: как управлять?


Шаговый двигатель: как управлять?


Шаговый двигатель: как управлять?


Шаговый двигатель: как управлять?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2015, 21:21
Ответы с готовыми решениями:

Дешифровка сигналов на шаговый двигатель
Добрый день, Подскажите, как сделать "дешифровку" сигналов на шаговый двигатель, чтобы понять на...

Шаговый двигатель работает с вибрацией
Прошу помощи. В данном скетче работает шаговый двигатель крутя диск, только диск начинает крутится...

Шаговый двигатель и аналоговые входы не работают
Всем здравствуйте. Купил на Али ардуину. Стартер кит. Столкнулся со следующими проблемами:...

Перемещение платы по оси X вращая шаговый двигатель
Добрый день. Ничего подобного в сети ненашел поэтому обращаюсь к Вам.Возможно ли реализовать такое...

11
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
11.10.2015, 10:11 2
Код
void unStepMotor(int pin_1, int pin_2,int pin_3,int pin_4,int speedMotor){
  digitalWrite(pin_1,HIGH);
  digitalWrite(pin_2,LOW);
  digitalWrite(pin_3,LOW);
  digitalWrite(pin_4,LOW);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,HIGH);
  digitalWrite(pin_2,HIGH);
  digitalWrite(pin_3,LOW);
  digitalWrite(pin_4,LOW);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,LOW);
  digitalWrite(pin_2,HIGH);
  digitalWrite(pin_3,LOW);
  digitalWrite(pin_4,LOW);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,LOW);
  digitalWrite(pin_2,HIGH);
  digitalWrite(pin_3,HIGH);
  digitalWrite(pin_4,LOW);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,LOW);
  digitalWrite(pin_2,LOW);
  digitalWrite(pin_3,HIGH);
  digitalWrite(pin_4,LOW);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,LOW);
  digitalWrite(pin_2,LOW);
  digitalWrite(pin_3,HIGH);
  digitalWrite(pin_4,HIGH);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,LOW);
  digitalWrite(pin_2,LOW);
  digitalWrite(pin_3,LOW);
  digitalWrite(pin_4,HIGH);
  delay(speedMotor + 1);
  //
  digitalWrite(pin_1,HIGH);
  digitalWrite(pin_2,LOW);
  digitalWrite(pin_3,LOW);
  digitalWrite(pin_4,HIGH);
  delay(speedMotor + 1);  
  //
}
void setup(){
  pinMode(8,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(2,OUTPUT);
}
//
void loop(){
  for(int i=0; i<=60; i++) unStepMotor(8,7,4,2,0);
  for(int j=0; j<=60; j++) unStepMotor(2,4,7,8,0);
}
Или:

https://github.com/Makeblock-o... ck-Library
2
2 / 2 / 0
Регистрация: 13.05.2015
Сообщений: 45
12.10.2015, 15:28  [ТС] 3
Спасибо!
Но не помогло... крутит то в одну сторону, через какое-то время в другую... никак не "въеду", как работает шаговик.
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
12.10.2015, 15:58 4
...всегда бездумно копируете код вне зависимости от железа и документации на него? Это примеры, по ним учатся. Начните с обще теории и практики Управление ШД через LPT порт
1
2 / 2 / 0
Регистрация: 13.05.2015
Сообщений: 45
12.10.2015, 18:54  [ТС] 5
Спасибо, друг!
Сейчас я использую ниже приведенный код для управление шаговым двигателем.
Он работает, но есть моменты, которые меня сбивают с толку.

1. Нажатием клавиши, отправляю в буфер символ 'W'. Шаговик послушно делает целый оборот по часовой стрелке. Но шаговик может покрутиться и против часовой стрелки. Потом, при очередной отправке 'W' шаговик снова крутится по часовой. Никакой логической связки в направлении вращения - может 3 раза крутиться по часовой, 7раз против часовой, далее 5 раз снова по часовой и т.д. беспорядочная последовательность. Мне нужно, чтобы при нажатии 'W' шаговик крутился по часовой, без компромиссов

Скорее всего, в чем-то допускаю ошибку... но не могу понять, где косячу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <Stepper.h>
#include <SPI.h>
 
char info = 0; //храним данные с буфера
float stepper = 0;
byte input1 = 6;
byte input2 = 7;
byte input3 = 10;
byte input4 = 11;
int speedMotor;
 
 
void setup() {
  Serial.begin(9600); 
  pinMode (input1, OUTPUT);
  pinMode (input2, OUTPUT);
  pinMode (input3, OUTPUT);
  pinMode (input4, OUTPUT);
}
 
 
void loop () {
 
  if (Serial.available()>0){ // читаем, есть ли что-то в буфере
      info = Serial.read();// если есть, то это значение присваиваем переменной info
    } //if
 
      
  switch (info){ // разноусловная конструкция
    case 'w':    
      while (stepper<50){
        digitalWrite(input1, HIGH);
        digitalWrite(input2, LOW);
        digitalWrite(input3, HIGH);
        digitalWrite(input4, LOW);
        delay(speedMotor + 1);
        
        digitalWrite(input1, LOW);
        digitalWrite(input2, HIGH);
        digitalWrite(input3, HIGH);
        digitalWrite(input4, LOW);
        delay(speedMotor + 1);
 
        digitalWrite(input1, LOW);
        digitalWrite(input2, HIGH);
        digitalWrite(input3, LOW);
        digitalWrite(input4, HIGH);
        delay(speedMotor + 1);
 
        digitalWrite(input1, HIGH);
        digitalWrite(input2, LOW);
        digitalWrite(input3, LOW);
        digitalWrite(input4, HIGH);
        delay(speedMotor + 1);
        
        digitalWrite(input1, HIGH);
        digitalWrite(input2, LOW);
        digitalWrite(input3, HIGH);
        digitalWrite(input4, LOW);
        delay(speedMotor + 1);
        stepper++;
      } //while
      
      if (stepper==50){
        digitalWrite(input1, LOW);
        digitalWrite(input2, LOW);
        digitalWrite(input3, LOW);
        digitalWrite(input4, LOW);
        break;
      } //if
      //while (Serial.available()) Serial.read();
      break;
    
    case 's':
    break;
    
    case 'a':
    break;
    
    case 'd':
    break;
  } //switch
  
  info=0;
  stepper=0;
} //void loop
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
12.10.2015, 19:15 6
...для начала я бы попробовал бегающий циклически одиночный уровень.
1
2 / 2 / 0
Регистрация: 13.05.2015
Сообщений: 45
12.10.2015, 19:32  [ТС] 7
Цитата Сообщение от raxp Посмотреть сообщение
...для начала я бы попробовал бегающий циклически одиночный уровень.
Пожалуйста, объясните, что это значит и чем отличается то, что вы сказали от того, что сделал я?
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
12.10.2015, 19:51 8
...например, тут их два:
Код
digitalWrite(input1, HIGH);
        digitalWrite(input2, LOW);
        digitalWrite(input3, HIGH);
        digitalWrite(input4, LOW);
1
0 / 0 / 0
Регистрация: 20.10.2015
Сообщений: 3
20.10.2015, 13:23 9
А не проще использовать специальный контроллер? К примеру Easy Driver Step Motor, у него цена 1-2 доллара. зато используется 2 ноги ардуины, и можно использовать микрошаговый режим.
0
2 / 2 / 0
Регистрация: 13.05.2015
Сообщений: 45
21.10.2015, 14:50  [ТС] 10
Цитата Сообщение от DIceberg Посмотреть сообщение
А не проще использовать специальный контроллер? К примеру Easy Driver Step Motor, у него цена 1-2 доллара. зато используется 2 ноги ардуины, и можно использовать микрошаговый режим.
Спасибо, мне понравилось это решение!
Кажется, то, что мне нужно!
0
0 / 0 / 0
Регистрация: 20.10.2015
Сообщений: 3
22.10.2015, 13:28 11
Не за что. Есть еще А4988. Погуглите. Он поменьше и у китайцев можно купить сразу с радиатором.
0
16 / 16 / 0
Регистрация: 06.12.2014
Сообщений: 69
15.03.2016, 23:42 12
А есть ли для ардуино что-нибудь помощнее. Ибо во всех примерах двигатель вращается аля "умирающий лебедь", а хотелось чтобы бегал как в струйном принтере. Пытаюсь задрать количество шагов- двигатель не вращается. Что мешает поднять обороты, контроллер или сам двигатель ,
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2016, 23:42

шаговый двигатель в СAD
В какой среде можно смоделировать шаговый двигатель?Задача простая - отследить как меняется ток от...

Как правильно подключать шаговый двигатель?
Доброго времени суток всем присутствующим. Скажу без долгих вступлений. Двигатель MotionKymk...

Шаговый двигатель
Здравствуйте у меня вопрос по шаговому двигателю, а точнее по программе программа дожна следить...

шаговый двигатель
Привет. Как можно поднять обороты шагового двигателя? Напряжения питания 12В, модель шагового...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.