Проблема в управлении шаговым мотором
- Войдите на сайт для отправки комментариев
Втр, 29/12/2015 - 14:21
Привет всем. Делаю первые шаги в изучении adruino, в программировании на C++ ничего не знаю, начинаю изучать, я механик, но немного понимаю и электронику.
Первый проект сделал часы с указанием даты и температуры. Теперь взял от сюда http://our-factory.com/arduino/28-arduino-visual-c проект. Подключил двигатель через драйвер как тут http://ecnc.ru/articles/tb6560a .
Проблема в том что двигатель при установленных параметрах 200 шагов, вместо оборота делает примерно 1\4.
Прошу помощи, драйвер менял на другой, та же история, как и при смене arduino.
Двигатель Nema 17 менял то-же.
#include <Stepper.h>
#define steps 100 //Количество шагов вправо
#define steps2 200 //Количество шагов влево
int inSize=0; // Переменная которая будет содержать размер буфера
char str[128]; // Так как типа string тут нет, будем использовать массив символов
Stepper stepper(steps, 8, 9);
const int stepsPerRevolution = 200;
void setup()
{
stepper.setSpeed(100);//обороты в минуту
Serial.begin(9600); // Открываем порт с скоростью передачи в 9600 бод(бит/с)
}
void right()
{
stepper.step(steps);
delay(100);
}
void left ()
{
stepper.step(-1*steps2);
delay(100);
}
void loop()
{
inSize=0; // Сбрасываем переменную
memset(str, '\0', 128); // Очищаем массив
if(Serial.available() > 0)
{
delay(20); // Ждем, для того, чтобы пришли все данные
inSize = Serial.available(); // Получаем длину строки и записываем ее в переменную
for (int i = 0; i < inSize; i++)
{
str[i] = Serial.read(); // Читаем каждый символ, и пишем его в массив
}
// Сравнять массив с строкой будем используя функцию strcmp
if (strcmp(str, "right") == 0) // Если было передано строку "right" - вращаем вперед
{
Serial.println(steps); // Отправляем сообщение компьютеру
right();
}
else if (strcmp(str, "left") == 0) // Если было передано строку "left" - вращаем назад
{
Serial.println(steps2);
left();
}
else
{
Serial.println("Error command!");
}
}
}
у вас скорее всего стоит микрошаг на драйвере. Попробуйте увеличить количество шагов или перенастройте драйвер.
Микрошаг стоит 1 к одному, ставлю 1 к 2 пробегает в два раза меньше.
Настраивал по этой статье http://totcnc.com/tblog/9_instruction-bl-tb6560-v2-0
Попробуйте перевести S3 и S4 на противоположную сторону - он должен в 8 раз меньше крутануться.
Попробовал так и есть меньше в 8 раз. Насчет напряжения я уверен, подключил драйвер к аккумулятору, напряжение 12.6V при работе не изменяется.
const int stepsPerRevolution = 200;
Поставьте 400 или 800
const int stepsPerRevolution = 200;
Поставьте 400 или 800
Поставил 800 ничего не изменилось, всеравно 1\4 оборота
stepper.step(stepsPerRevolution); насколько крутит?
крутит на 1/8 оборота
попробовал этот код крутит на пол оборота?
int Distance = 0; // записываем количество шагов, которое было совершено void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); } void loop() { digitalWrite(9, HIGH); delayMicroseconds(600); digitalWrite(9, LOW); delayMicroseconds(600); Distance = Distance + 1; // записываем этот шаг // проверяем, не находимся ли мы в конце перемещения // два поворота при мосте 1/8 и 1 поворот для моста 1/6 (для этого скетча) if (Distance == 200) { // Мы добрались до крайней точки, начинаем вращение в противоположном направлении if (digitalRead(8) == LOW) { digitalWrite(8, HIGH); } else { digitalWrite(8, LOW); } // Обнуляем расстояние, так как мы начинаем новое движение Distance = 0; // Делаем паузу на пол секунды delay(500); } }S3, S4 в " Off " ( на красном дипсвиче, как на картинке) - должен шаг в шаг работать.....
При предыдущем испытании забыл S3, сделал off и этот код заработал, но все-таки хотелось бы по первому коду разобратся. Он так и работает на 1\4
В последнем коде 19 и 23 строка если значение 500 двигатель пропускает шаги, а еще ниже вообще не работает.
Вот и закрались сомнения о библиотеке Stepper, возможно просто там малое время для отработки и ардуина не успевает? А может и мотор? Как увеличить время в библиотеке есть ли такая возможность?
Сейчас заряжаю еще один аккумулятор, хочу подать на драйвер не 12, а 24 вольта, есть вероятность что малое напряжение не успевает создать нужную ЭДС из за кратковременности импульса.
Запитал драйвер 25.6V, не чего не изменилось, при steps =400 крутит пол оборота. В чем загвоздка?
И не изменится. Ток остался прежний.
Для регулировки тока служат другие переключатели
Попробуйте на 12 Вольтах ( для начала) поднять Running Current - это переключатели SW1, SW2, Sw3, S1
Там табличка есть и похоже токи в Амперах обозначены.
Но похоже ваши шаги не из-за нехватки мощьности.
Попробуйте погонять мотор много раз в одну-другую сторону.
Если он собьётся - тогда или ток мал ( или напряжения для его роста мало) или частота слишком высокая.
400- полоборота? умножайте на два.
Попробуйте другую более продвинутую библиотеку- https://www.pjrc.com/teensy/td_libs_AccelStepper.html
У меня двигатели с током 0,4 А, выставлял от 0,3 до 1,0А реакции ноль.
Двигатели брал у этого продавца http://ru.aliexpress.com/item/Free-shipping-1set-Hybrid-Nema17-bipolar-step-stepper-motor-0-4A-34mm-length-26Ncm-4-leads/32268465289.html?detailNewVersion=2
я был в шоке прешли на пятый день. Драйвера с руганью пришли через 70 дней из Брюсселя, может нам скидывают возврат?
Пробовал такой код stepper.step(4*steps); крутят правильно, но поскольку код нестандартный, посматриваю в сторону вторго кода. Задача проста, прокрутить влево или вправо всегда на одну позицию при получению команды с компьютера. Установил vb6 на свой компьютер неделю назад после семи летнего перерыва, написал программу передачи и приема, через сом порт, писал на API. В бейсеке была возможность прервать операцию по достижению равенства(например х=а then End If), как здесь остановить пока не пойму. Может поможете со вторым скетчем? Смысл в чем, пришла команда двигатель повернулся, а на комп передано например(ОК) тогда он пришлет вторую, если нет, то ждет команды.
Какая разница какой у вас там ток.
Вам мощьность нужна или вы шаги не можете отработать те что подали?
Подайте двести шагов влево, пауза, двести шагов вправо, пауза и так 10000 раз.
Попробуйте несильно ( или сильно) пальцами тормозить.
Когда слетит с фаз - вы это услышите и почувствуете.
Если вернётся в начальное положение значит с драйвером, его питанием, током, стартом и торможением всё в порядке.
Попробовал, диаметр шкива 20мм, остановить руками не могу, шаги не слетают.
Попробовал AccelStepper, все что нужно в одной библиотеке trembo спасибо, за подсказку.