Скетч нескольких ШД

лемираред
Offline
Зарегистрирован: 20.12.2015
// MultiStepper.pde
// -*- mode: C++ -*-
//
// Shows how to multiple simultaneous steppers
// Runs one stepper forwards and backwards, accelerating and decelerating
// at the limits. Runs other steppers at the same time
//
// Copyright (C) 2009 Mike McCauley
// $Id: HRFMessage.h,v 1.1 2009/08/15 05:32:58 mikem Exp mikem $
 
#include <AccelStepper.h>
 
// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to 4 pins on 2, 3, 4, 5
AccelStepper stepper2(4, 6, 7, 8, 9);
AccelStepper stepper3(2, 10, 11);
 
void setup()
{  
    stepper1.setMaxSpeed(200.0);
    stepper1.setAcceleration(100.0);
    stepper1.moveTo(24);
    
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(1000000);
    
    stepper3.setMaxSpeed(300.0);
    stepper3.setAcceleration(100.0);
    stepper3.moveTo(1000000); 
}
 
void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
    stepper1.run();
    stepper2.run();
    stepper3.run();
 
Использовала такой скетч. Только в двигателе 2 поключила к пинам 9,10,11,12
Первый шаговый двигатель крутиться, а второй нет. Что делать?
vvadim
Offline
Зарегистрирован: 23.05.2012

если в своём коде всё правильно пропишите - будет работать
 

лемираред
Offline
Зарегистрирован: 20.12.2015

но не работает. я заменила только эту строчку....

AccelStepper stepper2(9, 10, 11, 12);

 

остальное оставила

лемираред
Offline
Зарегистрирован: 20.12.2015

ДА! И крутиться очень медленно, даже если увеличиваю скорость

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Попробуйте так

#include <AccelStepper.h>
 
// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to 4 pins on 2, 3, 4, 5
AccelStepper stepper2(9, 10, 11, 12);
//AccelStepper stepper3(2, 10, 11);
 
void setup()
{  
    stepper1.setMaxSpeed(200.0);
    stepper1.setAcceleration(100.0);
    stepper1.moveTo(24);
    
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(1000000);
    
    stepper3.setMaxSpeed(300.0);
    stepper3.setAcceleration(100.0);
    stepper3.moveTo(1000000); 
}
 
void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
     stepper1.moveTo(-stepper1.currentPosition());
    stepper1.run();
    stepper2.run();
    //stepper3.run();
} 

 

лемираред
Offline
Зарегистрирован: 20.12.2015

первый крутиться, а второй нет. загрузила Ваш vosara скетч

лемираред
Offline
Зарегистрирован: 20.12.2015
AccelStepper stepper2(4, 6, 7, 8, 9);
AccelStepper stepper3(2, 10, 11);
 
 
а почему тут больше пинов стоит, или меньше. у меня 4, а тут 5 или 3? может, причина в этом?
 
И как увеличить скорость, может, не хватает питания от юсби компа?
 
Думала, мотор брачный, поменяла местами, но не фига!
vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Скетч не мой я просто Ваш подправил, а сейчас посмотрел пример в библиотеке и там он выглядит так

#include <AccelStepper.h>
 
// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to 4 pins on 2, 3, 4, 5
AccelStepper stepper2(AccelStepper::FULL4WIRE, 9, 10, 11, 12);
//AccelStepper stepper3(2, 10, 11);
 
void setup()
{  
    stepper1.setMaxSpeed(200.0);
    stepper1.setAcceleration(100.0);
    stepper1.moveTo(24);
    
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(1000000);
        
}
 
void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
     stepper1.moveTo(-stepper1.currentPosition());
    stepper1.run();
    stepper2.run();
    //stepper3.run();
} 

 

лемираред
Offline
Зарегистрирован: 20.12.2015

ООООООООО!!!! Я тоже по библиотекам шарила, но такого не видела. сейчас попробую! Спс.

 

FULL4WIRE не видит ключевого слова! Что этот параметр означает?

AccelStepper::FULL4WIRE не является членом AccelStepper

может, библиотека липовая. где скачать нормальную ветку?

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Прошу прощения это из старой библиотеки а вот из новой

#include <AccelStepper.h>

// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to 4 pins on 2, 3, 4, 5
AccelStepper stepper2(4, 9, 10, 11, 12);
AccelStepper stepper3(2, 10, 11);

void setup()
{  
    stepper1.setMaxSpeed(200.0);
    stepper1.setAcceleration(100.0);
    stepper1.moveTo(24);
    
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(1000000);
    
    stepper3.setMaxSpeed(300.0);
    stepper3.setAcceleration(100.0);
    stepper3.moveTo(1000000); 
}

void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
	stepper1.moveTo(-stepper1.currentPosition());
    stepper1.run();
    stepper2.run();
    //stepper3.run();
} 

 

лемираред
Offline
Зарегистрирован: 20.12.2015

Так, у меня всё работает, но очень уж медленно. Что делать? 28BYJ-48/ такие моторчики.

Я подправила код на :

 

if (stepper1.distanceToGo() == 0)
27     stepper1.moveTo(-stepper1.currentPosition());
28     stepper1.run();
   
if (stepper2.distanceToGo() == 0)
27     stepper2.moveTo(-stepper2.currentPosition());
28     stepper2.run();

А как остановить? Меняла вот эту строчку на число

if (stepper2.distanceToGo() == 10)

допустип 10, и , останавливается, но мне нужен полный поворот, или 10 поворотов. Что значит параметр 10 или 0, константа чего? Секунд?

 

от параметра FULL4WIRE крутится туда-обратно на несколько шажков.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

В этом моторе стоит встроеный редуктор, Самой большой скорости какую я смог от него добиться это ~ 1 оборот в 4 секунды. с библиотекой не работал надо разбираться

лемираред
Offline
Зарегистрирован: 20.12.2015

А какие параметры лучше поставить, чтобы было 1 оборот в 4 секунды. У меня намного медленнее, или прокручивается без движения.(((((

Все. Подогнала параметры, быстренько крутиться. Спасибо! 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
По моему так, в строчках
void setup()
{  
    stepper1.moveTo(24);
    
    stepper2.moveTo(1000000);
}
Указуем на сколько шагов должен провернуть двигатель
а в сторке 
if (stepper1.distanceToGo() == 0)
он должен проверить - достиг ли конца первый и 
stepper1.moveTo(-stepper1.currentPosition());
вернуть его на прежнюю позицию
лемираред
Offline
Зарегистрирован: 20.12.2015

А остановить как? Всё крутиться! Работает!

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Вот нарыл для понимания работы библиотеки
 
Основное использование
 
Stepper mystepper(steps, pin1, pin2, pin3, pin4);
Создать экземпляр библиотеки Stepper для однополярного типа шагового двигателя. Вам нужно будет создать
экземпляр для каждого двигателя, давая каждому мотору уникальное имя по Вашему выбору.
 
Stepper mystepper(steps, pin1, pin2);
Создать экземпляр библиотеки Stepper для биполярного типа шагового двигателя.
Управления движением
 
mystepper.setSpeed(rpm);
Устанавливает скорость в оборотах в минуту.
 
mystepper.step(number);
Перемещение двигателя 1 или несколько стадий. Число может быть положительным или отрицательным, чтобы
указать направление движения
 
Пример программы
/* MotorKnob ‐ слегка модифицированный * шагового двигателя
следует по очереди потенциометра
. * (или другой датчик) на аналоговый вход 0
*/
#include <Stepper.h>
// Количество шагов на вашем двигателе
#define STEPS 200
// Создаем экземпляр класса степпер, указав количество шагов
//двигателя и выводов он прикрепленных к
Stepper stepper(STEPS, 7, 9, 8, 10);
// Предыдущее значение с аналогового входа
long previous = STEPS / 2;
void setup()
{ // Установить скорость двигателя на 30
оборотах в минуту
stepper.setSpeed(30);
}
void loop()
{
/ * Получить значение датчика. Это уравнение отображает
analogRead диапазон до количества шагов, так что двигатель
хорошо отслеживает положение потенциометра */
long val = (long)analogRead(0) * STEPS / 1024;
// Переместить ряд шагов, равное изменению датчик
// sensor reading
stepper.step(val ‐ previous);
// Запомним, предыдущее значение датчика
previous = val;
}

Но не проверял. Изучайте.

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А остановить, скорей всего 

stepper1.moveTo(0); или stepper1.step(0);

лемираред
Offline
Зарегистрирован: 20.12.2015

а время остановки как поставить?

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

лемираред пишет:

а время остановки как поставить?

Что Вы имеете в виду, через сколько должен стать или сколько должен стоять. Так вот по первому - он движется не по времени (хотя можно настроить) а по шагам А по второму - будет стоять пока не запустите снова

лемираред
Offline
Зарегистрирован: 20.12.2015

stepper1.moveTo(24);

это на 24 шага? тогда как остановить через 24 шага?

Просто у меня вообще стоит и не движется.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

У него полный оборот составляет больше 2000 шагов и Ваши 24 шага Вы просто не заметите он их прошол и остановился а по даному коду он будет делать 24 туда - 24 назад но увидеть 1/100 движения тяжело. А если нужно чтобы прокрутился 1 раз надо делать проверку. Скиньте код я покажу как

лемираред
Offline
Зарегистрирован: 20.12.2015
#include <AccelStepper.h>

  

// Define some steppers and the pins the will use

AccelStepper stepper3 (AccelStepper:: FULL4WIRE, 2,3,4,5);

AccelStepper stepper2 (AccelStepper:: FULL4WIRE, 9,10,11,12);

//AccelStepper stepper3(2, 10, 11);

void setup()

{ 
   
    stepper3.setMaxSpeed(200.0);

    stepper3.setAcceleration(100.0);

    stepper3.moveTo(200);
   
    //stepper3.moveTo(0);
     

    stepper2.setMaxSpeed(300.0);

    stepper2.setAcceleration(100.0);

    stepper2.moveTo(1000000);

    
//    stepper3.setMaxSpeed(300.0);
//
  //  stepper3.setAcceleration(100.0);

    // stepper3.moveTo(1000000);

}

  

void loop()

{

    // Change direction at the limits

    if (stepper3.distanceToGo() == 0)

     stepper3.moveTo(-stepper3.currentPosition());

    stepper3.run();
    if (stepper2.distanceToGo() == 0)

     stepper2.moveTo(-stepper2.currentPosition());

    stepper2.run();
     //

    //stepper3.run();

}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Условий Вы не указали, придумаю свои. 
Пусть один прокрутит 3 раза и остановит а второй 5 раз.
#include <AccelStepper.h>

  

// Define some steppers and the pins the will use

AccelStepper stepper3 (AccelStepper:: FULL4WIRE, 2,3,4,5);

AccelStepper stepper2 (AccelStepper:: FULL4WIRE, 9,10,11,12);

//AccelStepper stepper3(2, 10, 11);
int val = 0;

void setup()

{ 
   
    stepper3.setMaxSpeed(200.0);

    stepper3.setAcceleration(100.0);

    stepper3.moveTo(200);
   
    //stepper3.moveTo(0);
     

    stepper2.setMaxSpeed(300.0);

    stepper2.setAcceleration(100.0);

    stepper2.moveTo(1000000);

    
//    stepper3.setMaxSpeed(300.0);
//
  //  stepper3.setAcceleration(100.0);

    // stepper3.moveTo(1000000);

}

  

void loop()

{

    // Change direction at the limits
 if (val<=2)
 {

   if (stepper3.distanceToGo() == 0)

     stepper3.moveTo(-stepper3.currentPosition());

    stepper3.run();
val++;
 }
    
if (val<=4)
{
  if (stepper2.distanceToGo() == 0)

     stepper2.moveTo(-stepper2.currentPosition());

    stepper2.run();
val++;
}
    
     //

    //stepper3.run();

}

 

 

лемираред
Offline
Зарегистрирован: 20.12.2015

я так пробовала уже, стоит на месте.

нашла функцию

 

stepper.runToNewPosition(100);
  stepper.runToNewPosition(120);

на заданное количество шагов и останавливается.

Только вначале двигается один двигатель, потом второй, а мне нужно оба сразу!

Я делаю, что-то типа пэйнта, а там может быть нужно, чтобы крутились оба сразу! (если диагональ)

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Не понятно. Вам надо остановить непрерывное действие или сменить позицию? Это же разные действия 

vvadim
Offline
Зарегистрирован: 23.05.2012

в библиотеке куча примеров
поставьте шаги под свой мотор и наслаждайтесь...

лемираред
Offline
Зарегистрирован: 20.12.2015

А! Тогда понятно! Мне надо остановить непрерывное действие, конечно.

Но с вашим условием и счётчиком не вышло. Стоят двигатели.

лемираред
Offline
Зарегистрирован: 20.12.2015

а ссылолчку на кучу примеров не дадите?

лемираред
Offline
Зарегистрирован: 20.12.2015

Всё, ребят. Всё работает! поставила цикл. И заработало. Цикл с проверкой, до тех пор, пока. УРААААААААААААААА