Всем привет. Копаюсь с шаговиками и наткнулся на проблему пропуска шагов. Имею: Шаговый двигатель 42STH47 Драйвер для него Н-мост Arduino nano Так как движок униполярный с 6-тью выходами решил подключать его без центральных проводов на обмотках как расписано вот тут (Вариант 6А). Всё собрано по схеме с офсайта: Выводы 1,2,3,4in отправил на ардуинку 8,9,10,11. V1,1-4 en дал 5 вольт с 5v ардуины. на Vin ардуины и V2 моста подал 12 вольт (источник питания мощностью 1А). скетч опять же с офсайта: #include <Stepper.h> // change this to the number of steps on your motor (Если я правильно понял то здесь задаётся количество шагов на оборот, у меня 200) #define STEPS 200 // create an instance of the stepper class, specifying // the number of steps of the motor and the pins it's // attached to Stepper stepper(STEPS, 8, 9, 10, 11); (тут понятно прописываем пины управления) // the previous reading from the analog input void setup() { // set the speed of the motor to 60 RPMs (Вот тут как я понял указывается скорость вращения в оборотах/сек) stepper.setSpeed(60); } void loop() { stepper.step(100); (количество шагов за цикл) } Теперь собственно проблема: Судя по описанию двигателя он должен крутить 2500 оборотов в минуту. Мне надо 1000 оборотов в минуту. т.е. 16 оборотов в секунду. Однако. когда ставишь параметр stepper.setSpeed(16); мотор крутится со скоростью один оборот в 4 секунды. при этом жрёт 0.52 ампера. когда ставишь параметр stepper.setSpeed(60) мотор крутится со скорость 1 об/секунду. и жрёт 0,29 ампера. Начинаешь давать значение > 60 (из предположения что setSpeed задаёт таки об/мин а не об/сек) так двигатель начинает пропускать шаги, хотя токопотребление ещё больше падает. Собственно теперь вопрос: 1) правильно ли я понял что можно подключать униполярник таким способом. 2) может я чего не так понимаю в коде... Спасите! я чайник =)
судя по даташиту, он биполярный с возможностью работы в униполярном режиме Stepper.h она для биполярных движков
нет конечно, эта библиотека проста перебирает выхода и написана для работы в полношаговом реиме , соответственно, их дергать можно и без библиотеки. 2500 оборотов в минуту, это максимальная скорость, с учетом что на входе будет синусоида.
Шаговый двигатель не высокооборотный и для достижения максимальной скорости (которую данный тип двигателя может достигнуть ) его нужно РАЗГОНЯТЬ. В противном случае будут проблемы с шагами, зависания, вой, скачки в скорости.
А могли бы вы рассказать как это можно сделать. попытался таким вот циклом - результат нулевой. крутится 1 об/с и всё тут =( void loop() { for (int x=40; x<1001; x++) { stepper.setSpeed(x); if(x=1000) stepper.step(5000); stepper.step(3); } delay (1000); }
уф... нарыл библиотеку AccelStepper. Обсуждение живёт тут: http://forum.arduino.cc/index.php?topic=194671.0 Там же и сама библиотека. здесь описание её http://www.airspayce.com/mikem/arduino/AccelStepper/index.html но я вообще никак не пойму как мне простую задачу выполнить - разогнать мотор до 1000 и оставить крутиться 15 секунд. по этому скечу получается только разогнать до какого-то значения и потом он останавливается: #include <AccelStepper.h> // Define some steppers and the pins the will use AccelStepper stepper(4, 8, 9, 10, 11); // The first argument '5' indicates that we're using a 28byj-48 geared motor. The rest is just pin numbers. //You can still use all the other types of motors supported by accelstepper library (e.g. 4 for a normal 4 wire step motor, 8 for a halfstepped normal 4 wire motor etc.) void setup() { stepper.setMaxSpeed(1000.0); //max speed of the first motor - modify if you want to stepper.setAcceleration(100.0); // rate at which the first motor accelerate - } void loop() { stepper.moveTo(7000); stepper.run(); }
ТАКИХ ОБОРОТОВ НА ШАГОВОМ НЕ ПОЛУЧИТЕ, НЕ ДЛЯ ЭТОГО ОН СДЕЛАН. Шаговый двигатель для точного позиционирования. По вашему скетчу 7000 это количество шагов. Можете посчитать, сколько шагов мотор пройдёт за 15 сек - потом останавливать
на пурелоджиковских драйверах и контроллерах у меня получается 2500 с шаговиков снимать. как-то они это делают. на этих контроллерах собрал ЧПУ станок, на 1500 даже нагрузки на двигатель не заставляют его пропускать шаги. проблема в том что мне полка постоянных оборотов нужна. ну пусть не 1000, 600 уже будет достаточно. MoveTo разгоняет до точки и сразу начинает останавливать.
Если честно, тема -какая то пурга. Автор не формулирует задачу и упёрся в имеющийся шаговый мотор. Хотите услышать разные мнения и получить помощь - напишите, какая ЗАДАЧА.