+7-960-0655211 (Билайн)
+7-987-4207734 (МТС)
интернет-магазин
доставка по России и СНГ
нам больше 10 лет!

Форум

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Вопрос в том, почему Processing не обрабатывает команду:
Код
arduino.digitalWrite(pin_step, Arduino.HIGH);
 
???
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Сам скетч:
3 часть
Код
  lastButton= currentButton;
  arduino.digitalWrite(ledPin,ledOn);
  
  if(joyPadUse==true){
    int joy1aVal=arduino.analogRead(joy1aPin);
    int joy1bVal=arduino.analogRead(joy1bPin);
    int joy1Val=joy1aVal-joy1bVal+329-123;
    if (joy1Val>0 && joy1Val<62)joy1Val=0;
    if (joy1Val<0 && joy1Val>-22)joy1Val=0;
  
    if (joy1Val>0) joy1ValTemp= (int)map(joy1Val,63,204,maxVal,1); //112 
    if (joy1Val<0) joy1ValTemp= (int)map(joy1Val,-141,-23,-1,-maxVal); //-135
    if (joy1ValTemp==maxVal || joy1ValTemp==-maxVal || joy1Val==0)joy1ValTemp=0;
  }else{
    joy1ValTemp=speedValSlider;
  }
  //println(joy1Val);  // for testing
  /*
  if (joy1ValTemp<0){
    upd ate(-1, abs(joy1ValTemp), D9, D10);
    println("delay = "+joy1ValTemp);
  }
  if (joy1ValTemp>0){
    upd ate(1, joy1ValTemp, D9, D10);
    println("delay = "+joy1ValTemp);
  }
  */
  //********************************************

}

public void speed(int speedValue) {
  myColor = color(speedValue);
  speedVal=speedValue;
  println("Slider Speed = "+speedValue);
}

void toggle(boolean theFlag) {
  //if(theFlag==true) {
   // col = color(255);
  //} else {
  //  col = color(100);
 // }
  println("a toggle event.");
}

void keyPressed() {
  // default properties load/save key combinations are 
  // alt+shift+l to load properties
  // alt+shift+s to save properties
  if(key=='1') {
    cp5.saveProperties(("hello.ser"));
  } else if(key=='2') {
    cp5.loadProperties(("hello.ser"));
  }
  
    switch(key) {
    case('1'):myKnobB.setValue(180+135);break;
    case('2'):myKnobB.setValue(360+135);break;
    case('3'):myKnobB.se tValue(135);break;
  }

}

public void update(int steps, int time, int pin_step, int pin_dir){
  if(steps>0) arduino.digitalWrite(pin_dir, Arduino.HIGH);
  else{
    arduino.digitalWrite(pin_dir, Arduino.LOW);
    steps=-steps;
  }

  for(int a=0; a<steps*2; a++){
    delay(time);
    if (arduino.digitalRead(pin_step)==Arduino.LOW){
      arduinoPinStep=Arduino.HIGH;  
    }
    if (arduino.digitalRead(pin_step)==Arduino.HIGH){
      arduinoPinStep=Arduino.LOW;  
    }
    arduino.digitalWrite(pin_step, arduinoPinStep);
  }
}

// Blink the rese t LED:
void blink(int howManyTimes, int delaytime) {
  for (int i=0; i< howManyTimes; i++) {
    arduino.digitalWrite(ledPin, Arduino.HIGH);
    delay(delaytime);
    arduino.digitalWrite(ledPin, Arduino.LOW);
    delay(delaytime);
  }
}

int debounce(int last){
  int current = arduino.digitalRead(switchPin);
  if (last != current){
    delay(10);
    current= arduino.digitalRead(switchPin);
  }
  return current;
}
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Сам скетч:
Код
void controlEvent(ControlEvent theEvent) {
  if(theEvent.isController()) {  
    if (theEvent.controller().name()== "direction") { 
      directionVal=theEvent.controller().value()-135;

      if (directionVal>359){ 
        directionVal=directionVal-360+135;
        myKnobB.setValue(directionVal);       
      }
      if (directionVal<0 && directionVal>-360){ 
        directionVal=360-abs(directionVal);     
      }  
      if (directionVal<-359){ 
        directionVal=135;
         myKnobB.setValue(135);   
      }
    }  
    if (theEvent.controller().name()== "speed") { 
      //speedSlider.setValue(speedVal+135);
      speedValSlider=maxVal-(int)theEvent.controller().value();
    }
        
    print("control event from : "+theEvent.controller().name());
    println(", value : "+directionVal);    
  }  
}

void draw() {
  background(stepMode);

  //arduino.digitalWrite(D9, Arduino.HIGH);
//Вот тут проблема, шд должне был повернуться на 100 шагов!!!
  update(100, 10, D9, D10);
    delay(1000);
  
  //***********Arduino
  currentButton = debounce(lastButton);
  if(lastButton == arduino.LOW && currentButton == arduino.HIGH){
  //  ledOn =!ledOn;     
     buttonMode=buttonMode+1;
     if(buttonMode>2) buttonMode=0; 
   }
    
   if (buttonMode == 0){ //запускаем full step
     arduino.digitalWrite(ms1, Arduino.LOW);
     arduino.digitalWrite(ms2, Arduino.LOW);     
     arduino.digitalWrite(ms3, Arduino.LOW);
     ledOn=arduino.HIGH;
   }
   if (buttonMode == 1){ //запускаем дробный шаг 1/4
     arduino.digitalWrite(ms1, Arduino.LOW);
     arduino.digitalWrite(ms2, Arduino.HIGH);     
     arduino.digitalWrite(ms3, Arduino.LOW);
     blink(1,10);
   }
   if (buttonMode == 2){ //запускаем дробный шаг 1/16
     arduino.digitalWrite(ms1, Arduino.HIGH);
     arduino.digitalWrite(ms2, Arduino.HIGH);     
     arduino.digitalWrite(ms3, Arduino.HIGH);
     ledOn=Arduino.LOW;
   }

Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Сам скетч:
Код
import controlP5.*;
import processing.serial.*;
import cc.arduino.*;

Arduino arduino;
ControlP5 cp5;
public int myColor = color(0,0,0);
public int speedVal; 
public int stepMode = 100;
public int speedValSlider=10;
public boolean joyPadUse=true;

public float directionVal=0;
Knob myKnobB;
Slider speedSlider;

///**********Arduino
public int joy1ValTemp=0;
public int D9=9;
public int D10=10;
public int switchPin= 8;
public int ledPin= 13;
public int ledOn =Arduino.LOW;
public int ms1 =2;
public int ms2 =3;
public int ms3 =4;
public int maxVal=20;
public int lastButton = Arduino.LOW;
public int currentButton = Arduino.LOW;
public int buttonOn = Arduino.LOW;
public int buttonMode=0;//0-full step, 1-1/4 step, 2-1/16 step
public int joy1aPin=4;
public int joy1bPin=5;
public int arduinoPinStep;
//*********************************

void setup() {
  size(400,400);
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[2], 57600);//57600
  smooth();
  noStroke();
  cp5 = new ControlP5(this);
  
  // change the default font to Verdana
  PFont p = createFont("Bookman Old Style",10); 
  cp5.setControlFont(p);
  
  myKnobB = cp5.addKnob("direction")
               .setRange(0,359)
               .setValue(0)
               .setPosition(25,140)
               .setRadius(120)
               .setNumberOfTickMarks(0)
               .setTickMarkLength(0)
               .snapToTickMarks(false)
               .setColorForeground(color(255))
               .setColorBackground(color(0, 160, 100))
               .setColorActive(color(255,255,0))
               ;
  myKnobB.setConstrained(false).hideTickMarks().setMin(0).setMax(270);  
  myKnobB.setValue(135);
  
  // create a toggle and change the default look to a (on/off) switch look
  cp5.addToggle("toggle")
     .setPosition(80,20)
     .setSize(80,40)
     .setValue(true)
     .setMode(ControlP5.SWITCH)
     ;
 
  // add a vertical slider
  speedSlider=cp5.addSlider("speed",0,maxVal,0,width-110,20,80,height-100);
  cp5.addSlider("stepMode",0,255,10,10,10,100);
  Slider s1 = (Slider)cp5.controller("stepMode");
  s1.setNumberOfTickMarks(5);
  
  //********Arduino
  // set up the LED pin:
  arduino.pinMode(ledPin, Arduino.OUTPUT);
  // blink the LED:
  blink(3,200);

  arduino.pinMode(ms1, Arduino.OUTPUT);
  arduino.pinMode(ms2, Arduino.OUTPUT);
  arduino.pinMode(ms3, Arduino.OUTPUT);

  arduino.pinMode(D9, Arduino.OUTPUT);
  arduino.pinMode(D10, Arduino.OUTPUT);
  //arduino.digitalWrite(D9, Arduino.HIGH);
  //arduino.digitalWrite(D10, Arduino.HIGH);
  
  arduino.pinMode(switchPin, Arduino.INPUT);
  arduino.pinMode(joy1aPin,Arduino.INPUT);//a analog enter for joystick 1 axe
  arduino.pinMode(joy1bPin,Arduino.INPUT);//b analog enter for joystick 1 axe

  
 //************************************
}
Пожелания по ассортименту товара
 
Здравствуйте!
Хотелось бы узнать, планируется продажа шаговых двигателей? Интересуют: 1. http://www.pololu.com/catalog/product/1208
Stepper Motor: Bipolar, 200 Steps/Rev, 35x28mm, 10V, 500mA
2. http://www.pololu.com/catalog/product/1204
Stepper Motor: Bipolar, 200 Steps/Rev, 20x30mm, 3.9V, 600mA
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
С праздником!
Возникла проблема при управлении ШД через Processing. Через IDE Arduino все работает ОК, а при выполнении скетча через Processing ШД не реагирует.
Запускаю скетч (upd ate(100,10,D9,D10) запускал и в Se tup и в Draw- ШД не крутит) и тишина, хотя с морганием светодиодов проблем нет.
Библиотеки подключены:
import processing.serial.*;
import cc.arduino.*;

Подскажите, пожалуйста, в какую сторону копать?

Код переделал:
Код
public void update(int steps, int time, int pin_step, int pin_dir){
  if(steps>0) arduino.digitalWrite(pin_dir, Arduino.HIGH);
  else{
    arduino.digitalWrite(pin_dir, Arduino.LOW);
    steps=-steps;
  }

  for(int a=0; a<steps*2; a++){
    delay(time);
    if (arduino.digitalRead(pin_step)==Arduino.LOW){
      arduinoPinStep=Arduino.HIGH;  
    }
    if (arduino.digitalRead(pin_step)==Arduino.HIGH){
      arduinoPinStep=Arduino.LOW;  
    }
    arduino.digitalWrite(pin_step, arduinoPinStep);
  }
}
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Добрый день! В ходе работ появился вопрос: можно ли управлять &quot;скоростью&quot; вращения 1 шага у шд?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Спасибо, все работает отлично!
p.s. с дроблением шага до 1/16 разобрался.
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Цитата
Сергей Скляров пишет:
Двигатель совершит 100 шагов (с интервалом 10 миллисекунд), затем подождет одну секунду и сделает тоже самое, только в другую сторону и так по циклу.
Шд крутится только в одну сторону, игнорирует наличие "-". В чем может быть проблема?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Вопрос: как повернуть ротор шд на 1 шаг?
И еше интересный момент. Задал вращение шд поочередно в разные стороны в loop:
digitalWrite(D10, LOW);
update(78);
delay(1000);
digitalWrite(D10, HIGH);

update(78);
delay(1000);
Но, такое ощужение, что движок не полностью обрабатывает команды. Шд должен повернуться в одну сторону, затем 1 сек ждет, затем поворачивается в другую сторону, потом опять 1 сек ждет и т.д. по кругу. Но по факту некоторые повороты пропускает. Пробывал увеличивать и уменьшать время ожадания с 0,1 сек до 3 сек не результат не повлияло. В чем может быть подвох?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Спасибо за подробные разъяснения. Пошел штудировать datasheet :)
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Заработало! :)
Сопротивление на 10 Ом помогло.
Огромное спасибо, Сергей!
А как заставить шд вращаться в обратную сторону программно? Изменение знака на "-" в update не дает требуемого результата.
Насколько я понимаю минимальный шаг составляет 1,8 град? А дробный шаг можно реализовать? 1/4, 1/16?
Откуда взялось значение 15625? Оно чем-то обусловлено? Значение 78 -это 1 шаг шд?
Изменено: Александр Коробцов - 13.04.2012 11:34:15
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 

Цитата
Сергей Скляров пишет:
Обязательно посмотрите чтобы одна обмотка была 1А и 1В, а вторая 2А и 2В.
ШД подключен верно, еще раз проверил.

Цитата
Сергей Скляров пишет:
Попробуйте отключить от STEP МК и поклацайте проводом 5V от МК по STEP'у через резистор 1 кОм.
Поклацал- эффекта нет. Я так понимаю шд должен был проявить признаки жизни :)

Попробую напряжение на VMOT подать 12В через резистр.
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Может проблема в том, что для питания ШД я использую 5В, а у драйвера для VMOT требуется 8-35В?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Сигнал с МК идет, но ШД не крутит. С МК подал 5V на VDD драйвера, а GND мк на GND драйвера. С D9 мк на step драйвера, а с gnd мк на dir драйвера. К VMOT и gnd драйвера подключил соответственно питание для ШД. Обмотки шд подключил к драйверу 1А,1В,2А,2В. Питание мк от usb. Может что-то не верно подключил?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Сергей, спасибо за подробные разъяснения. Сегодня попробую подключить.
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Не ясно, в примере Arduino MotorKnob сказано, что назначаем пины МК с 8 по 11, но я ШД подключаю через Драйвер, так с каких раъемов Драйвера вести провода на пины МК с 8 по 11? А step подключать к аналоговым разъемам, например А0, или можно подключить к цифровому 12? Нужно ли подавать доп. питание на МК? Счас МК подключен только по usb.
Подскажите, пожалуйста, в Arduino IDE примерчики с ШИМ, названия их.
Изменено: Александр Коробцов - 10.04.2012 21:31:59
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
STEP, DIR я вставляю в мк в блок DIGITAL (PWM) или в Analog in ? И в digital есть разъемы с ~ и без них. Чем они отличаются?
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Здравствуйте!
Не могу подключить...
Имею Arduino UNO, A4988 Stepper Motor Driver Carrier with Voltage Regulators, Stepper Motor: Unipolar/Bipolar, 200 Steps/Rev, 42x48mm, 4V, 1200mA
Подскажите в какие разъемы на Arduino и Stepper Motor Driver Carrier включать.
Сам Ардуино


Драйвер

Насколько я понял в Драйвере в VMOT подключается "+" питания для ШД, а в GND "-". В 1А,2А,1В,2В -ноги ШД.
А к каким разъемам Ардуино подключать Драйвер (в Драйвере VDD, GND, STEP, DIR)?
А в разъемы в Драйвере 5V и VDD подключать питание для работы самого Драйвера? В 5V подключать "+", а VDD -"-"?
Вообщем, вопросов много, незнаю с чего начать. Надеюсь на помощь грамотных товарищей :)
Советы бывалых
 
Спасибо за помощь. Так и сделаю.
Советы бывалых
 
Итого беру:
1) ШД http://stepmotor.ru/fl57st/ FL57ST51-0426A на 6 выводов 12В, 0.42А, М 4.97кг*см
2) Контроллер DFRduio Arduino UNO (Atmega 328)
3) Драйвер шагового мотора Pololu на A4988 (<2А на канал)
4) Плата ввода DFRobot для Arduino (встанет ли она без платы расширения Плата расширения ввода/вывода DFRobot для Arduino?)
5) Плата макетная DFRobot для Arduino
6) Плата питания DFRobot для Arduino (встанет ли она без платы расширения Плата расширения ввода/вывода DFRobot для Arduino?)
7) Мотор-редуктор Gekko MR25-275 (вытащить редуктор).
Этого достаточно чтобы запустить и управлять ШД?
Советы бывалых
 
Присмотрел ШД http://stepmotor.ru/fl35st/ FL35ST36-1004A или http://stepmotor.ru/fl57st/ FL57ST41-1564A. Дополнительный редуктор планирую выдрать из MR37-270. Подскажите, как новичку, на каком контроллере лучше делать? Рекомендуете ли использовать Artduino для программирования МК? Что мне нужно докупить для выбранного ШД?
Изменено: Александр Коробцов - 28.02.2012 11:12:24
Советы бывалых
 
На счет сервов не уверен. Сначала думал в сторону шаговых двигателей, но их нет на этом сайте. Хотел взять все в одном месте. На счет моторов, вариант устроит. А что такое энкодеры? Они в инет магазине есть? Вопрос: контроллеры моторов позволят повернуть ротор мотора на заданный угол или на определенное число оборотов? Использование МК не пугает.
Спасибо за проявленный интерес!
Советы бывалых
 
Здравствуйте!

Подскажите новичку. Есть задача сделать управление перемещением столика микроскопа по двум осям при помощи серводвигателей. По характеристикам (по крутящему) остановился на HexTronik HK12K (для работы в непрерывном режиме придется немного доработать). Вопрос: какой минимальный шаг (в град.) сможет обеспечить этот серв? Насколько я понял он сможет развить угловую скорость 0,16 сек/60° (~ 1 об/сек) Это скорость максимальная? Наверное, придется городить дополнительно редуктор, т.к. мне необходимо с вала снимать ~ 0.005-0.01 об/сек. Что мне необходимо приобрести для программирования и управления этими сервами? С чего мне начать?
Страницы: 1