Форум myROBOT.ru » Лаборатория » Электронная мастерская » Arduino step/dir/enadle

Страниц (2): [1] 2 »
 

1. Mr_incredible. - 02 Января, 2013 - 19:22:00 - перейти к сообщению
Доброго время суток!
Приобрел недавно драйвер шагового двигателя DM420A
http://www.longs-motor.com/produ...l_12_80_148.html
Так же шаговый двигатель 17HS8401.
Отсюда скачал прошивку управления двумя шаговыми двигателями для ардуины
http://www.cerebralmeltdown.com/...d-to-an-arduino/

Подключил все это дело и ничего не работает)
Потом подключил светодиоды на pin4 (step), pin5 (dir), pin6 (enable) и вот что получилось.
http://vimeo.com/56631417
Конечно, извиняюсь за качество, но зеленый - это ENABLE; красный слева - это DIR; красный справа - это STEP.
Это вообще нормально? Улыбка Кто-нибудь знает как работать со step/dir/enable? Улыбка
Помогите пожалуйста разобраться.

Вот код программы
CODE:
//TWO WIRE STEP/DIR DRIVER BOARD CODE
int Motor1StepPin = 4;
int Motor1DirPin = 5;

int Motor2StepPin = 2;
int Motor2DirPin = 3;

//The number of steps required for your stepper to make one revolution. (Don't forget to take into
//account the settings on your driver board. i.e. Microstepping, half stepping etc.)
float steps = 96;
//Set the travel speed for your stepper motors here. (In Rev/Min)
//Note: There is a limit to how fast or slow this code is able to spin the stepper motors.
//You can try experimenting with the "delayMicroseconds" code if you need different speeds.
int altSpeed=60;
int azSpeed=60;

////////////////////////////////

float Motor1Delay, Motor2Delay, doSteps;

void setup()
{
Serial.begin(9600);
////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
pinMode(Motor1StepPin, OUTPUT);
pinMode(Motor1DirPin, OUTPUT);
pinMode(Motor2StepPin, OUTPUT);
pinMode(Motor2DirPin, OUTPUT);
Motor1Delay = ( 1000000 * ( 60 / (steps * altSpeed) ) ) / 2;
Motor2Delay = ( 1000000 * ( 60 / (steps * azSpeed) ) ) / 2;
////////////////////////////////

pinMode(6, OUTPUT);
// pinMode(7, OUTPUT);
// pinMode(13, OUTPUT);



}

void loop()
{

delay(1000);
digitalWrite(6, LOW);
delay(100);

moveToPosition(1, 0, -steps * 1);
moveToPosition(1, 0, steps * 1);
moveToPosition(1, -steps * 1, 0);
moveToPosition(1, steps * 1, 0);

digitalWrite(6, HIGH);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This code moves the stepper motors
void moveToPosition(int limitSearch, long altsteps, long azsteps){

// Serial.println("altsteps");
// Serial.println(altsteps);
// Serial.println("azsteps");
// Serial.println(azsteps);

////////////////////////////////
//TWO WIRE STEP/DIR DRIVER BOARD CODE
if (abs(azsteps)==azsteps){digitalWrite(Motor2DirPin, HIGH);}else{digitalWrite(Motor2DirPin, LOW);}
if (abs(altsteps)==altsteps){digitalWrite(Motor1DirPin, HIGH);}else{digitalWrite(Motor1DirPin, LOW);}

for (doSteps=1; doSteps <= abs(azsteps); doSteps++){
digitalWrite(Motor2StepPin, HIGH);
delayMicroseconds(int(Motor2Delay));
digitalWrite(Motor2StepPin, LOW);
delayMicroseconds(int(Motor2Delay));
}

for (doSteps=1; doSteps <= abs(altsteps); doSteps++){
digitalWrite(Motor1StepPin, HIGH);
delayMicroseconds(int(Motor1Delay));
digitalWrite(Motor1StepPin, LOW);
delayMicroseconds(int(Motor1Delay));
}

}
2. killgur - 02 Января, 2013 - 20:02:27 - перейти к сообщению
При всех прочих равных...

ENBL в обычном случае точно не должен мигать. Он включает и отключает драйвер.


Прочтите даташит повнимательней.

Там все разжевано.
3. Mr_incredible. - 02 Января, 2013 - 20:50:41 - перейти к сообщению
То есть можно ENABLE замкнуть на +5В?
Тогда я не понимаю в чем смысл программно управлять выводом enable?
Подключал до этого L298, там было все понятно и все работало. Просто использовал функцию из готовой библиотеки ардуины Stepper(steps, pin1, pin2, pin3, pin4), а тут не могу разобраться.
4. killgur - 02 Января, 2013 - 20:52:44 - перейти к сообщению
Mr_incredible. пишет:
То есть можно ENABLE замкнуть на +5В?
Тогда я не понимаю в чем смысл программно управлять выводом enable?
Подключал до этого L298, там было все понятно и все работало. Просто использовал функцию из готовой библиотеки ардуины Stepper(steps, pin1, pin2, pin3, pin4), а тут не могу разобраться.



Так это и не L298 хоть и похоже.

Что значит замкнуть ... что за дурацкий жаргон.

По Вашей ссылке есть картинка как надо подключать этот девайс к контроллеру.
Там о замыканиях не сказано ни слова.
5. Mr_incredible. - 02 Января, 2013 - 21:02:11 - перейти к сообщению
killgur пишет:
Цитата:
Так это и не L298

Помираю со смеху
А я то уж думал...

Кто сталкивался с такой проблемой, подскажите пожалуйста!
(Добавление)
killgur пишет:
По Вашей ссылке есть картинка как надо подключать этот девайс к контроллеру.


Вопрос темы состоит в другом.
6. killgur - 02 Января, 2013 - 22:02:44 - перейти к сообщению
Расказывайте сказки про L298 другим.
Программа выложенная в топике предназначена для вот этого драйвера шагового мотора, причем для двух сразу.


http://www.avayanelectronics.com...ae-stpr8811.html

P.S.

Китаец жжот, DM420A на верхней фотке 4-х контактная розетка на нижней 6-и а описание вообще от чегото между этими моделями.
Красава.
7. Mr_incredible. - 02 Января, 2013 - 22:23:34 - перейти к сообщению
Что вам не понятно по L298?

killgur пишет:
Программа выложенная в топике предназначена для вот этого драйвера шагового мотора, причем для двух сразу.

А управление этим драйвером осуществляется сигналами step dir enable, а эти сигналы управления являются стандартом управления драйверов шаговых двигателей, а это означает то, что драйвер DM420A скорее всего управляется тоже по этому стандарту step/dir/enable.
8. killgur - 02 Января, 2013 - 22:43:19 - перейти к сообщению
Mr_incredible. пишет:
Что вам не понятно по L298?

killgur пишет:
Программа выложенная в топике предназначена для вот этого драйвера шагового мотора, причем для двух сразу.

А управление этим драйвером осуществляется сигналами step dir enable, а эти сигналы управления являются стандартом управления драйверов шаговых двигателей, а это означает то, что драйвер DM420A скорее всего управляется тоже по этому стандарту step/dir/enable.


Возможно, только программа не под него а под управление одновременно двумя драйверами.


Подключить к одному каналу

Модуль/Дуина
+5В –> 5v
GND –> GND
PUL –> Pin 2
DIR –> Pin 3
Enable –> Pin 6

Как выствить ключи на модуле надо смотреть какой мотор.
9. Mr_incredible. - 02 Января, 2013 - 22:58:40 - перейти к сообщению
Так а какая разница, для скольких драйверов предназначена эта программа?
Там только Enable общий. Каждый драйвер управляется отдельно выводами step и dir для каждого соответственно.
А шаговик можно подключить к pin 2, pin3, либо к pin 4, pin 5.
Вопрос в том, почему на ардуние мигает какая-то ерунда? Учитывая то, что импульсный сигнал (от 2мкс) - только STEP, а на другие (DIR и ENABLE) подается только 1 или 0.
10. killgur - 02 Января, 2013 - 23:07:21 - перейти к сообщению
Mr_incredible. пишет:
Так а какая разница, для скольких драйверов предназначена эта программа?
Там только Enable общий. Каждый драйвер управляется отдельно выводами step и dir для каждого соответственно.
А шаговик можно подключить к pin 2, pin3, либо к pin 4, pin 5.
Вопрос в том, почему на ардуние мигает какая-то ерунда? Учитывая то, что импульсный сигнал (от 2мкс) - только STEP, а на другие (DIR и ENABLE) подается только 1 или 0.



в вашем блоке (при включении стандартном аля дуина)

High level for enabling the driver and low level for disabling the driver.

в блоке от которого программа

A LO on this pin enables the device. A HI on thispin disables the device.

Т.Е. с точностью до наоборот.

Мне дальше искать десять различий в управлении Улыбка.

Таким образом программа ставит низкий уровень на ENABLE вырубает драйвер и крутит моторами впустую когда всевыключено

Насчет мигает ... да диод будет просто светить когда идет ШИМ, уменьшите частоту увидите мигание.
11. Mr_incredible. - 02 Января, 2013 - 23:16:42 - перейти к сообщению
Но, все же, тут нет различий в том, сколько драйверов можно подключить к ардуино.
Насчет Enable я уже заметил.

Значит надо просто поменять местами в программе HIGH и LOW наверно.
CODE:
void loop()
{

delay(1000);
digitalWrite(6, LOW);
delay(100);

moveToPosition(1, 0, -steps * 1);
moveToPosition(1, 0, steps * 1);
moveToPosition(1, -steps * 1, 0);
moveToPosition(1, steps * 1, 0);

digitalWrite(6, HIGH);

}
12. cjA - 02 Января, 2013 - 23:27:03 - перейти к сообщению

можно я сунусь?
steps по определению дискретная величина, она не может плавать. (винюсь, дальше не стал листить) Измените свою тактику с "с наскоку" на "тихим сапом", глядишь и получится.
13. Mr_incredible. - 02 Января, 2013 - 23:42:45 - перейти к сообщению
Работает.
14. cjA - 02 Января, 2013 - 23:57:32 - перейти к сообщению
Mr_incredible. пишет:
Работает.
, так а в чом трабла была? перепутал проводки? У меня это всегда, это признак профессионализма. Голливудская улыбка
15. killgur - 03 Января, 2013 - 01:03:03 - перейти к сообщению
cjA

это диалог на тему

"Если вы все перепробовали и ничего не получается, значит пришла пора читать инструкцию."
Улыбка