Официальный сайт компании Arduino по адресу arduino.cc
шаговик 28byj-48 + ардуино уно
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 10/04/2018 - 21:40
Приветствую дорогие форумчане! Задумал я один проект в котором участвует шаговик 28byj-48 в связке с ардуино уно через драйвер ULN2003/ вся суть в том чтобы двигатель проварачивался на определенный угол, делал паузу, затем те же действия бесконечное количество раз. В програмирование я новичок, но все таки разобравшись заливаю скейч с библиотеки stepper
#include <Stepper_28BYJ.h>
// количество шагов на один оборот
const int stepsPerRevolution = 815.155; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
// инициализируем библиотеку Stepper_28BYJ на выходы 8-11
Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 8,9,10,11);
void setup() {
// set the speed at 3 rpm:
// установим скорость 3 об/мин
myStepper_28BYJ.setSpeed(30);
// initialize the serial port:
// инициализируем последовательный порт
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
// шагаем 1 оборот в одном направлении
Serial.println("clockwise");
myStepper_28BYJ.step(stepsPerRevolution);
delay(5000);
}
мне нужно чтоб шаговить кнутился и останавливался в 5 местах,т.е. 4075.775(полный оборот двигателя) делим на 5 получается 815.155 шагов на нужный мне угол.
Теперь суть проблемы такова- шаговик после 3-4 полных оборотов начинает отставать, остановка уже происходит не в том месте, а раньше. не понимаю в чем погрешность.
Ели нет вариации как написать программу чтобы исключить эту погрешность, то помогите написать программу чтобы сначала прокручивал вперед на 5 равных углов(815.155 шагов), затем 1 оборот назад без остановок , затем те же операции бесконечное количество раз. Думаю таким образом может добиться точного позицианирования.
Заранее намного благодарен)
Переменная типа int не может быть равной 815.155, 0.155 будут утеряны. Поэтому и отставание начинается. А на float шаги Stepper.h не крутит.
const int stepsPerRevolution = 815.155;
int - это целое число.
Я пробовал ставить целое число и 815 и 816, все равно происходит отставание
Как же исправить этот недочёт, или как то возможно эти хвосты в конце каждого оборота добавить
В данном комплекте (мотор-драйвер) можно перейти на полушаг, тогда градус поворота будет меньше вдвое и корректировать будет проще (каждые n шагов делать лишний). Не знаю, правда, удовлетворит ли такая точность.
Сделать это можно через альтернативные библиотеки. AccelStepper, вроде есть и CustomStepper. Но и вручную покрутить двигатель тоже легко. Вопрос только в том - сумеете ли управиться с фором и ифами.
Я тут глянул на спецификацию этого мотора: полушаг тоже не поможет, потому что у него "Step Angle (8-Step sequence: Internal Motor alone): 5.625° (64 steps per revolution)". Таким образом - вы не получите 1/5 круга на полном числе шагов/полушагов. Если нужна более-менее точная позиция, переходите на двигатель с шагом 1.8°, такой как двигатель формфактора NEMA 17, например (https://www.pololu.com/product/2267). Но к нему уже и драйвер другой полагается и питание не от ардуины.
А никого не смутила это дикая цифра - 4075.775 шагов на оборот? Автор, откуда эти данные?
Что касается сути вопроса - по-моему. дело не в углах. Все проще, кмк - отставание есть, потому мотор явно пропускает шаги - либо библиотека работает не вполне верно, либо питание слабое, или , банально - усилие на валу слишком велико.
Что касается пропускания шагов, двигатель 5v питается отдельно от блока питания такого же номинала. усилие на вал небольшое, двигатель крутит диск массой примерно 30 г. Ну а библиотека, вы сами видете стандартная, не знаю на сколько она правильная
может кто поможет написать скетч, о том что я описывал выше
Какая разница сколько шагов и какое передаточное ?
Если вы подали N импульсов ( N - число целое , обычно называемое шагом от которого и пошло название двигателя)
сначала в одну сторону, а потом в другую ,
то вал ДОЛЖЕН вернуться в стартовое положение .
И так 100500 раз подряд вплоть до выключения питания.
Это шаговик, детка!
Изначально первозадачей было крутить только вперёд бесконечное количество раз, но ситуация такова что с каждым оборотом все больше не доходит до нуля. Поэтому я обращаюсь за помощью, как решить данную задачку
Для начала вам нужно определиться - какая нужна точность позиционирования. Если +/- 10 шагов устроит - плюсуйте или минусуйте шаги на каждом секторе. Не устроит - переходите на другой мотор с кратным необходимому углу поворота на шаг. Можете, конечно, еще через доп. редуктор всё это протащить. Но его придется расчитать, естественно. И изготовить. И люфты учесть.
Я бы на вашем месте тупо взял другой шаговик по габаритам.
Для начала вам нужно определиться - какая нужна точность позиционирования. Если +/- 10 шагов устроит - плюсуйте или минусуйте шаги на каждом секторе. Не устроит - переходите на другой мотор с кратным необходимому углу поворота на шаг. Можете, конечно, еще через доп. редуктор всё это протащить. Но его придется расчитать, естественно. И изготовить. И люфты учесть.
Я бы на вашем месте тупо взял другой шаговик по габаритам.
какой командой это можно сделать, на первом обороте каждый сектор более менее точно.думаю нужно в конце каждого оборота добавляь шаги , чтобы оборот доходил до нуля.как это все провернуть в скетче?
А никого не смутила это дикая цифра - 4075.775 шагов на оборот?
Да там хоть что напиши - это скажется только на скорости. Степать мотор будет всё равно на угол минимального полушага- 5.625° . А 360/5 никак не кратно этому углу. В любом случае начнутся ошибки позиционирования, если не предпринимать каких-то мер.
Кстати, FRAM пришел ли? А то что-то этот продавец почтой занзибара мне отправил... Даже и не знаю, где эта посылка теперь - может ее уже мартышки дербанят.
на первом обороте каждый сектор более менее точно.думаю нужно в конце каждого оборота добавляь шаги , чтобы оборот доходил до нуля.
Вы подумали о том, что написали? Если на каждом обороте добавлять шаги, то ситуация никак не изменится. Нужно на каждом N-ном добавлять K шагов.
как это все провернуть в скетче?
Нужна переменная счетчик оборотов. Или цикл for(). Знаете такие слова? 2 раза делаете нормальный оборот на stepsPerRevolution, третий - на stepsPerRevolution+K.
...Прямо вот последовательно даже в луп напишите три эти строки. Только K будете подбирать экспериментально.
на первом обороте каждый сектор более менее точно.думаю нужно в конце каждого оборота добавляь шаги , чтобы оборот доходил до нуля.
Вы подумали о том, что написали? Если на каждом обороте добавлять шаги, то ситуация никак не изменится. Нужно на каждом N-ном добавлять K шагов.
как это все провернуть в скетче?
Нужна переменная счетчик оборотов. Или цикл for(). Знаете такие слова? 2 раза делаете нормальный оборот на stepsPerRevolution, третий - на stepsPerRevolution+K.
...Прямо вот последовательно даже в луп напишите три эти строки. Только K будете подбирать экспериментально.
к сожалению для меня это просто слова, опыта по созданию программ, подробнее можете описать на этом примере
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
что за код?
Ваш скейч - это код. Если вы настолько торопитесь, что вам некогда вникать в простые вещи - то и мне недосуг вам разжевывать.
Ваш скейч - это код. Если вы настолько торопитесь, что вам некогда вникать в простые вещи - то и мне недосуг вам разжевывать.
вы меня просто в пропасть закинули и там оставили))вы говорили про переменную счетчик оборотов
int
brightness = 0;
int
fadeAmount = 5;
void
setup() {
pinMode(9, OUTPUT);
}
void
loop() {
analogWrite(9, brightness);
brightness = brightness + fadeAmount;
if
(brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
delay(30);
}
я так понимаю этот код полностью на 3 оборот
Это что вы вообще вставили, для чего тут светодиод? Вставляйте свой скетч с мотором и номерами строк.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
что за код?
эта сылка на что вообще?
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
что за код?
эта сылка на что вообще?
Может все таки попробовать открыть? Поверьте, религиозные чуйства не оскорбит, на похабные картинки не нарветесь.
Кстати, FRAM пришел ли? А то что-то этот продавец почтой занзибара мне отправил... Даже и не знаю, где эта посылка теперь - может ее уже мартышки дербанят.
мне тоже пока не пришло.
Но у меня из 8 посылок. высланных с Али в начале марта, на сегодня пришли только две. Так что этот лот из общей массы не особо выделяется.
мне тоже пока не пришло.
Но у меня из 8 посылок. высланных с Али в начале марта, на сегодня пришли только две. Так что этот лот из общей массы не особо выделяется.
У меня аналогично, тоже где то блукают. Хотя уже и сроки подходят.
С запасом по шагам ставите на упор - это и будет "0".
Чтобы в упор шагать - механизм иметь нужно чугунный. А то ведь можно и зубья шестерням поломать ;) Да и вообще можно получить ошибку позиционирования после отпускания обмоток. Немного, но таки назад откинуть может. К данному мотору не относится, но привычку лучше не формировать.
Спасибо, уже работаю в этом направлении, будет что то вроде магнитной кнопки