Управление шаговым двигателем

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем AndAsh, 17 май 2019 в 11:40.

  1. AndAsh

    AndAsh Нуб

    Здравствуйте, никак не могу разобраться как с помощью библиотеки AccellStepper плавно запустить двигатель, а потом вращать его с постоянной скоростью.
    Пробовал так:
    Код (C++):
    current_position = stepper.currentPosition();
    if(current_position <= 0){
        stepper.moveTo(6000);
    }
    stepper.run();
    if (stepper.isRunning() && current_position >= 6000 ) stepper.runSpeed();
    Двигатель начинает плавный разгон, достигает указанной позиции и останавливается - нет дальнейшего движения с постоянной скоростью. А мне необходимо движение двигателя до достижения концевика.
    Помогите пожалуйста советом.
     
  2. witt64

    witt64 Гик

    так 6000 вероятно количество шагов, поэтому при достижении этого значения мотор останавливается, пробуй значение увеличить
     
  3. Belkin

    Belkin Гик

    В представленном вами кусочке программы совершенно не понятно, где обрабатывается концевик... ;)
     
  4. Onkel

    Onkel Гуру

    в примерах есть пример установки скоростей и ускорений для моторов

    Код (C++):
    // 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: MultiStepper.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $

    #include <AccelStepper.h>

    // Define some steppers and the pins the will use
    AccelStepper stepper1; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
    AccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
    AccelStepper stepper3(AccelStepper::FULL2WIRE, 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();
    }