Здравствуйте.
Имеется 20 мини шаговых двигателя и драйверы для них. Мне нужно подключить их к ардуино мега.
Все двигатель будут работать в одинаковом цикле: 4 полных оборота по часовой, секунда паузы, 4 полных оборота против часовой, секунда паузы и цикл начинается заново.
Но, есть 5 программ по времени:
4 полных оборота за 12 сек., 4 двиг.
4 полных оборота за 10 сек., 4 двиг.
4 полных оборота за 8 сек., 4 двиг.
4 полных оборота за 7 сек., 4 двиг.
4 полных оборота за 6 сек., 4 двиг.
На данном этапе меня интересует именно физическое подключение двигателей к ардуино, а не программный код.
У него необходимо 4 сигнала управления. Движки которые работают одинаково их драйвера можно подключать к одним и тем же ногам меги. Итого для 5 разных оборотов надо 20 ног. У меги их 54. Но затык может случится с тем, что логику работы каждой обмотки движка придётся писать отдельно. Т.е. на один шаг движка придётся подать 16 команд переключения ног. Учитывая что таких задач пять, очень может получиться что отдельные команды будут пересекаться и при этом движки будут крутиться не равномерно.
Задача точной синхронизации не стоит, это больше творческий проект. Каждый движок работает самостоятельно и его работа никак не влияет на другие движки. Нет необходимости их точно синхронизировать, как на ЧПУ станках. если будет разсинхрон в пределах секунды это не страшно.
Про сдвиговый регистр я думал, но хотелось бы обойтись малой кровью. Можно ли использовать расширитель портов типа grove mega shield?
И ещё, если заменить драйверы на А4988 можно ли будет обойтись одной ардуинкой? на этом драйвере вроде через два пина подключается.
Вот как здесь:
Да можно. Но может быть я плохо объяснил? Даже с MX1508 и мегой можно всё сделать и потребуется только 20 ног. Особенно если не заморачиваться на синхронизацию.
посмотрел драйвер по входу, вытекающий ток 10 микроампер, втекающий 180 микроампер, да их в параллель накидать можно много, тут уже емкости проводов будут более значительную роль играть
Вот мне интересно с чего ты взял емкость проводов будет играть какую то роль? Цифра 20 на боку мотора как бы намекает на количество шагов на оборот. Если самый быстрый мотор должен сделать 4 оборота за 6 секунд. Множим делим получаем смену напряжения на ногах около 10 мс. Или 100 Гц. Какая емкость проводов может повлиять на такой медленной скорости?
Спасибо большое.
Объяснили все предельно ясно. Просто решил задать вопросы крутящиеся в голове.
Попробую собрать по вашему совету. Думаю в процессе сборки появятся ещё вопросы.
Этот шилд исключительно для более удобного физического подключения проводов к ардуине. Но он никак не расширяет возможностей платы в плане количества ног и т.п. Сколько их у Меги есть, столько и останется.
Для аналогичного драйвера один шаг одного мотора получался так. Для нескольких моторов delayMicroseconds(dstep) надо убрать и вызывать функцию ustep по принципу blink without delay.
Спойлер
for (ss = 0; ss < 8; ss++) ustep(ss);
...
void ustep(uint8_t s) {
switch (s) {
case 0:
digitalWrite(AIA, HIGH);
digitalWrite(AIB, LOW);
digitalWrite(BIA, LOW);
digitalWrite(BIB, LOW);
break;
case 1:
digitalWrite(AIA, HIGH);
digitalWrite(AIB, LOW);
digitalWrite(BIA, HIGH);
digitalWrite(BIB, LOW);
break;
case 2:
digitalWrite(AIA, LOW);
digitalWrite(AIB, LOW);
digitalWrite(BIA, HIGH);
digitalWrite(BIB, LOW);
break;
case 3:
digitalWrite(AIA, LOW);
digitalWrite(AIB, HIGH);
digitalWrite(BIA, HIGH);
digitalWrite(BIB, LOW);
break;
case 4:
digitalWrite(AIA, LOW);
digitalWrite(AIB, HIGH);
digitalWrite(BIA, LOW);
digitalWrite(BIB, LOW);
break;
case 5:
digitalWrite(AIA, LOW);
digitalWrite(AIB, HIGH);
digitalWrite(BIA, LOW);
digitalWrite(BIB, HIGH);
break;
case 6:
digitalWrite(AIA, LOW);
digitalWrite(AIB, LOW);
digitalWrite(BIA, LOW);
digitalWrite(BIB, HIGH);
break;
case 7:
digitalWrite(AIA, HIGH);
digitalWrite(AIB, LOW);
digitalWrite(BIA, LOW);
digitalWrite(BIB, HIGH);
break;
}
delayMicroseconds(dstep);
}