Скетч нескольких ШД
- Войдите на сайт для отправки комментариев
Вс, 20/12/2015 - 13:45
// 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
Первый шаговый двигатель крутиться, а второй нет. Что делать?
если в своём коде всё правильно пропишите - будет работать
но не работает. я заменила только эту строчку....
AccelStepper stepper2(9, 10, 11, 12);
остальное оставила
ДА! И крутиться очень медленно, даже если увеличиваю скорость
Попробуйте так
#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(); }первый крутиться, а второй нет. загрузила Ваш vosara скетч
Скетч не мой я просто Ваш подправил, а сейчас посмотрел пример в библиотеке и там он выглядит так
#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(); }ООООООООО!!!! Я тоже по библиотекам шарила, но такого не видела. сейчас попробую! Спс.
FULL4WIRE не видит ключевого слова! Что этот параметр означает?
AccelStepper::FULL4WIRE не является членом AccelStepper
может, библиотека липовая. где скачать нормальную ветку?
Прошу прощения это из старой библиотеки а вот из новой
#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(); }Так, у меня всё работает, но очень уж медленно. Что делать? 28BYJ-48/ такие моторчики.
Я подправила код на :
if(stepper1.distanceToGo() == 0)27stepper1.moveTo(-stepper1.currentPosition());28stepper1.run();if(stepper2.distanceToGo() == 0)27stepper2.moveTo(-stepper2.currentPosition());28stepper2.run();А как остановить? Меняла вот эту строчку на число
if(stepper2.distanceToGo() == 10)допустип 10, и , останавливается, но мне нужен полный поворот, или 10 поворотов. Что значит параметр 10 или 0, константа чего? Секунд?от параметра FULL4WIRE крутится туда-обратно на несколько шажков.В этом моторе стоит встроеный редуктор, Самой большой скорости какую я смог от него добиться это ~ 1 оборот в 4 секунды. с библиотекой не работал надо разбираться
А какие параметры лучше поставить, чтобы было 1 оборот в 4 секунды. У меня намного медленнее, или прокручивается без движения.(((((
Все. Подогнала параметры, быстренько крутиться. Спасибо!
А остановить как? Всё крутиться! Работает!
/* 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; }Но не проверял. Изучайте.
А остановить, скорей всего
stepper1.moveTo(0); или stepper1.step(0);
а время остановки как поставить?
а время остановки как поставить?
Что Вы имеете в виду, через сколько должен стать или сколько должен стоять. Так вот по первому - он движется не по времени (хотя можно настроить) а по шагам А по второму - будет стоять пока не запустите снова
stepper1.moveTo(24);
это на 24 шага? тогда как остановить через 24 шага?
Просто у меня вообще стоит и не движется.
У него полный оборот составляет больше 2000 шагов и Ваши 24 шага Вы просто не заметите он их прошол и остановился а по даному коду он будет делать 24 туда - 24 назад но увидеть 1/100 движения тяжело. А если нужно чтобы прокрутился 1 раз надо делать проверку. Скиньте код я покажу как
#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(); }#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(); }я так пробовала уже, стоит на месте.
нашла функцию
на заданное количество шагов и останавливается.
Только вначале двигается один двигатель, потом второй, а мне нужно оба сразу!
Я делаю, что-то типа пэйнта, а там может быть нужно, чтобы крутились оба сразу! (если диагональ)
Не понятно. Вам надо остановить непрерывное действие или сменить позицию? Это же разные действия
в библиотеке куча примеров
поставьте шаги под свой мотор и наслаждайтесь...
А! Тогда понятно! Мне надо остановить непрерывное действие, конечно.
Но с вашим условием и счётчиком не вышло. Стоят двигатели.
а ссылолчку на кучу примеров не дадите?
Всё, ребят. Всё работает! поставила цикл. И заработало. Цикл с проверкой, до тех пор, пока. УРААААААААААААААА