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

Форум

ГлавнаяОбщениеФорумТехнологииПодключение Arduino UNO и A4988 Stepper Motor Driver
Страницы: 1 2 След.
Подключение Arduino UNO и A4988 Stepper Motor Driver, Пожалуйста, подскажите чайнику...
 
Здравствуйте!
Не могу подключить...

Arduino UNO http://s019.radikal.ru/i600/1204/4f/c9f080014a0d.jpg
A4988 Stepper Motor Driver Carrier with Voltage Regulators http://s019.radikal.ru/i600/1204/4f/c9f080014a0d.jpg
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 -"-"?
Вообщем, вопросов много, незнаю с чего начать. Надеюсь на помощь грамотных товарищей :)
 
Ну вот же схемка. STEP, DIR вы программируете сами, т.е. выбираете (почти любую) лапку на контроллере. Только не забудьте, что неследует подавать на мотор напряжение выше номинального.
 
STEP, DIR я вставляю в мк в блок DIGITAL (PWM) или в Analog in ? И в digital есть разъемы с ~ и без них. Чем они отличаются?
 
Цитата
Александр Коробцов пишет:
STEP, DIR я вставляю в мк в блок DIGITAL (PWM)

Да. На STEP подаешь саму ШИМ, а на DIR даёшь VDD или GND и от этого меняется направление вращения.

Цитата
Александр Коробцов пишет:
И в digital есть разъемы с ~ и без них. Чем они отличаются?

"~" - означает аппаратный ШИМ. Конечно же псевдоаппаратный, т.к. таймеры в Arduino уже зарезервированы. В любом случае желательно покопаться в архитектуре AVR, иначе все будет работать на честном слове.

Цитата
Александр Коробцов пишет:
STEP, DIR

Я думаю ты понял что делать, втыкаешь разъемы и находишь в Arduino IDE примерчики с ШИМ, и не забываешь указать там свой пин для STEP и DIR(если используешь и его). Для начала конечно лучше DIR заграундить и поиграться со STEP'ом. Подай на него в начале слабую частоту, а потом увеличивай и смотри на результаты!
 
Кстати, 5V и VDD сначала соединять НЕ СЛЕДУЕТ:!:. Т.к. встроенный регулятор скорее всего работать не будет (требует 8-35V). Дайте на VDD отдельные 5 вольт. Когда прочтете A4988 datasheet и научитесь пользоваться встроенным резистором, тогда подавайте на VMOT большое напряжение и можете соединить 5V и VDD.
Изменено: Сергей Скляров - 10.04.2012 19:28:09
 
Не ясно, в примере Arduino MotorKnob сказано, что назначаем пины МК с 8 по 11, но я ШД подключаю через Драйвер, так с каких раъемов Драйвера вести провода на пины МК с 8 по 11? А step подключать к аналоговым разъемам, например А0, или можно подключить к цифровому 12? Нужно ли подавать доп. питание на МК? Счас МК подключен только по usb.
Подскажите, пожалуйста, в Arduino IDE примерчики с ШИМ, названия их.
Изменено: Александр Коробцов - 10.04.2012 21:31:59
 
Цитата
Александр Коробцов пишет:
Не ясно, в примере Arduino MotorKnob

Походу в примерах и правда ничего путнего.

Попробуйте это (ЧИМ, подключить STEP к D9):

Код
void begin(uint16_t i_move_a)
{
  TCCR1A = 1<<WGM11;
  TCCR1A |= 1<<COM1A1;
  DDRB |= 1<<1;   
  //---
  TCCR1B = 1<<WGM12  | 1<<CS10 | 1<<CS12; // CTC and 1024
  TIMSK1 = 0;
  TIFR1  = 0;
  ICR1   = 0;
  OCR1A  = i_move_a;
  OCR1B  = 0;
  TCNT1  = 0;
}
//---------------------------------------------------------------

void upd ate(uint16_t i_move_a)
{
  OCR1A = i_move_a;
}
//---------------------------------------------------------------
 
void se tup()
{
  begin(78); // 200 step's per second
}

void loop()
{
  update(78);                // 10 step's per second.
  delay(1000);              // wait for a second
  update(1562);            // 10 step's per second.
  delay(1000);              // wait for a second
}

Получается что 15625 степов делить на i_move_a = ваши степы.
begin() инициируешь один раз в se tup(), а update() сколько хочешь в loop'е, т.е. задаёшь скорость.

Цитата
Александр Коробцов пишет:
Нужно ли подавать доп. питание на МК? Счас МК подключен только по usb.

Наоборот - запитайте Драйвер от Контроллера. 5V от МК к VDD драйвера.
 
В коде функции разорваны, нужно соединить - глюк на форуме (не исправляется).
 
Сергей, спасибо за подробные разъяснения. Сегодня попробую подключить.
 
Исправьте функцию:

Код
void begin(uint16_t i_move_a)
{
  TCCR1A = 1<<COM1A0;
  DDRB |= 1<<1;   
  //---
  TCCR1B = 1<<WGM12  | 1<<CS10 | 1<<CS12; // CTC and 1024
  TIMSK1 = 0;
  TIFR1  = 0;
  ICR1   = 0;
  OCR1A  = i_move_a;
  OCR1B  = 0;
  TCNT1  = 0;
}
//---------------------------------------------------------------
 
 
Сигнал с МК идет, но ШД не крутит. С МК подал 5V на VDD драйвера, а GND мк на GND драйвера. С D9 мк на step драйвера, а с gnd мк на dir драйвера. К VMOT и gnd драйвера подключил соответственно питание для ШД. Обмотки шд подключил к драйверу 1А,1В,2А,2В. Питание мк от usb. Может что-то не верно подключил?
 
Может проблема в том, что для питания ШД я использую 5В, а у драйвера для VMOT требуется 8-35В?
 
Цитата
Александр Коробцов пишет:
у драйвера для VMOT требуется 8-35В

Попробуйте подать на VMOT 12 V через 10 Ом.

Цитата
Александр Коробцов пишет:
Обмотки шд подключил к драйверу 1А,1В,2А,2В

Убедитесь что обмотки подключены правильно и по схеме (проверте очень внимательно)!

Цитата
Александр Коробцов пишет:
Сигнал с МК идет, но ШД не крутит.

Попробуйте отключить от STEP МК и поклацайте проводом 5V от МК по STEP'у через резистор 1 кОм.
 
Обязательно посмотрите чтобы одна обмотка была 1А и 1В, а вторая 2А и 2В.

Цитата
Александр Коробцов пишет:
VMOT требуется 8-35В

Возможно мосфеты открываются при напряжении от 8V. Питание 12 вольт через 7-10 Ом может решить проблему.
 

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

ШД подключен верно, еще раз проверил.

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

Поклацал- эффекта нет. Я так понимаю шд должен был проявить признаки жизни :)

Попробую напряжение на VMOT подать 12В через резистр.
 
Цитата
Александр Коробцов пишет:
Попробую напряжение на VMOT подать 12В через резистр.

Если и это не сработает, тогда попробуйте повторить все действия снова, но RESET драйвера соедените с GND'ом драйвера.

Мне остается верить что вы всё делаете правильно, т.к. самого устройства у меня нет.
 
Заработало! :)
Сопротивление на 10 Ом помогло.
Огромное спасибо, Сергей!
А как заставить шд вращаться в обратную сторону программно? Изменение знака на "-" в update не дает требуемого результата.
Насколько я понимаю минимальный шаг составляет 1,8 град? А дробный шаг можно реализовать? 1/4, 1/16?
Откуда взялось значение 15625? Оно чем-то обусловлено? Значение 78 -это 1 шаг шд?
 
Цитата
Александр Коробцов пишет:
А как заставить шд вращаться в обратную сторону программно?

Подключите DIR драйвера к любому цифровому пину МК (например D10) и подайте на него сигнал digitalWrite(D10, HIGH) для вращения в одну сторону, или digitalWrite(D10, LOW) для обратного хода. В setup'е установите pinMode(D10, OUTPUT);

Цитата
Александр Коробцов пишет:
Насколько я понимаю минимальный шаг составляет 1,8 град? А дробный шаг можно реализовать? 1/4, 1/16?

Читайте datasheet к драйверу и ШД там как то можно, мне уже лень.

Цитата
Александр Коробцов пишет:
Откуда взялось значение 15625? Оно чем-то обусловлено? Значение 78 -это 1 шаг шд?

Частота контроллера 16MHz, мы установили делитель таймера на 1024. Делим и получаем 15625Hz. Например нам нужно подать сигнал на пин STEP 200 тактов/сек, считаем 15625/200=78.125, т.е. 78 единиц это наша частота в 200Hz.
 
Спасибо за подробные разъяснения. Пошел штудировать datasheet :)
 
Вопрос: как повернуть ротор шд на 1 шаг?
И еше интересный момент. Задал вращение шд поочередно в разные стороны в loop:

digitalWrite(D10, LOW);
update(78);
delay(1000);
digitalWrite(D10, HIGH);

update(78);
delay(1000);

Но, такое ощужение, что движок не полностью обрабатывает команды. Шд должен повернуться в одну сторону, затем 1 сек ждет, затем поворачивается в другую сторону, потом опять 1 сек ждет и т.д. по кругу. Но по факту некоторые повороты пропускает. Пробывал увеличивать и уменьшать время ожадания с 0,1 сек до 3 сек не результат не повлияло. В чем может быть подвох?
 
Цитата
Александр Коробцов пишет:
Вопрос: как повернуть ротор шд на 1 шаг?

Александр, вам не стоит использовать аппаратный ЧИМ который я вам показал только для проверки. Используйте более простой вариант, а begin сотрите:

Код
void upd ate(int steps, int time, int pin_step, int pin_dir)
{
  if(steps>0) digitalWrite(pin_dir, HIGH);
  else digitalWrite(pin_dir, LOW);
  //---
  for(int a=0; a<steps*2; a++)
  {
    delay(time);
    digitalWrite(pin_step, !digitalRead(pin_step));
  }
}

void se tup() {                
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);   
}

void loop() {
  update(100, 10, 9, 10);
  delay(1000);
  update(-100, 10, 9, 10);
  delay(1000);
}

Двигатель совершит 100 шагов (с интервалом 10 миллисекунд), затем подождет одну секунду и сделает тоже самое, только в другую сторону и так по циклу.

ЧИМ который я показывал позволяет задавать только скорость, но с ним трудно подсчитать шаги.
 
Цитата
Сергей Скляров пишет:
Двигатель совершит 100 шагов (с интервалом 10 миллисекунд), затем подождет одну секунду и сделает тоже самое, только в другую сторону и так по циклу.

Шд крутится только в одну сторону, игнорирует наличие "-". В чем может быть проблема?
 
Попробуйте так:

Код
void upd ate(int steps, int time, int pin_step, int pin_dir)
{
  if(steps>0) digitalWrite(pin_dir, HIGH);
  else
  {
    digitalWrite(pin_dir, LOW);
    steps=-steps;
  }
  //---
  for(int a=0; a<steps*2; a++)
  {
    delay(time);
    digitalWrite(pin_step, !digitalRead(pin_step));
  }
}

void se tup() {                
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);   
}

void loop() {
  update(100, 10, 9, 10);
  delay(1000);
  update(-100, 10, 9, 10);
  delay(1000);
}
 
Спасибо, все работает отлично!
p.s. с дроблением шага до 1/16 разобрался.
 
Добрый день! В ходе работ появился вопрос: можно ли управлять &quot;скоростью&quot; вращения 1 шага у шд?
Страницы: 1 2 След.