Библиотека Accelstepper

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Azret, 13 мар 2017.

  1. vvr

    vvr Инженерище

    не знаю кто вам , настолько упёртому, сможет помочь.....
     
  2. AlexArt

    AlexArt Нуб

    Здравствуйте... подскажите пожалуйста функцию плавного торможения мотора... Если я плавно стартую функцией Stepper1.setAcceleration(100)... есть ли функция плавной остановки... или нужно останавливать циклами....
     
  3. Onkel

    Onkel Гуру

    остановка с предопределенным ускорением - .stop(); - эта команда останавливает мотор не сразу, а с предписанным ускорением
     
    DetSimen и ДеКодер нравится это.
  4. AlexArt

    AlexArt Нуб

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


    Выше Выкладывали скетч... Я в нем убираю функцию stepper.stop(); что с ней что без нее... ничего не меняется...



    // Quickstop.pde
    // -*- mode: C++ -*-
    //
    // Check stop handling.
    // Calls stop() while the stepper is travelling at full speed, causing
    // the stepper to stop as quickly as possible, within the constraints of the
    // current acceleration.
    //
    // Copyright (C) 2012 Mike McCauley
    // $Id: $
    #include <AccelStepper.h>
    // Define a stepper and the pins it will use
    AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
    void setup()
    {
    stepper.setMaxSpeed(150);
    stepper.setAcceleration(100);
    }
    void loop()
    {
    stepper.moveTo(500);
    while (stepper.currentPosition() != 300) // Full speed up to 300
    stepper.run();
    stepper.stop(); // Stop as fast as possible: sets new target
    stepper.runToPosition();
    // Now stopped after quickstop
    // Now go backwards
    stepper.moveTo(-500);
    while (stepper.currentPosition() != 0) // Full speed basck to 0
    stepper.run();
    stepper.stop(); // Stop as fast as possible: sets new target
    stepper.runToPosition();
    // Now stopped after quickstop
    }
     
    Последнее редактирование: 12 авг 2019
  5. Onkel

    Onkel Гуру

    Ну у меня примеров коротких нет, вот команда (в вашем случае)
    Stepper1.stop()
    остановит максимально быстро по заданному ускорению.
    Sets a new target position that causes the stepper to stop as quickly as possible, using the current speed and acceleration parameters.
     
  6. AlexArt

    AlexArt Нуб

    Вы пробовали эту функцию на практике ... или Вы утверждаете теоретически?
    выше приведен код ... который работает успешно без функции stepper.stop();
    А знаете почему... потому что функция stepper.moveTo(-500); отрабатывает количество шагов... при старте плавно стартует и на финише плавно тормозит.... У меня задача стоит в том... чтобы при нажатии кнопки плавно остановить мотор... на жаль... плавно не получается(((
     
  7. Onkel

    Onkel Гуру

    Пробовал. Работает. Я Вам показал как плавно остановить мотор. Может у вас библиотека старая или левая? Грузите AccelStepper последнюю версию и будет Вам счастье.
     
  8. AlexArt

    AlexArt Нуб

    Извините меня... что я не так делаю... Обновил все драйвера и сам AccelStepper ...Все равно... плавно набирает скорость и жестко останавливается мотор при єтой процедуре:
    //================================= TIME =========================

    if (millis() - last_time >= 10000) // таймер на 10 сек... 5 секунд (5000) {
    {
    Stepper1.stop();

    delay(5000);

    last_time = millis(); // сброс таймера

    }

    //================================================================
     
  9. Onkel

    Onkel Гуру

    После stepper.stop() дайте шаговику докрутиться нужным количеством команд stepper.run(); пока он не остановится.

    stepper0.stop();
    while( stepper0.isRunning())
    stepper0.run();
     
    AlexArt нравится это.
  10. AlexArt

    AlexArt Нуб

    Большое спасибо!!!
    наконец то работает!!!

    Вы настоящий ГУРУ!
     
  11. Onkel

    Onkel Гуру

    Без проблем. Обращайтесь.
     
  12. AlexArt

    AlexArt Нуб

    Если не сложно... ответьте на такой вопрос... если шаговый мотор крутится на определенной скорости... и мы хотим понизить обороты или увеличить... меняем перемененную скорости.... Обороты мотора будут плавно увеличиваться или понижаться... или жестко заданной переменной?
     
  13. Onkel

    Onkel Гуру

    В AccelStepper есть разные команды "крутиться". Если неблокирующие команды (move() или moveTo()) и с run(), то с предписанным ускорением.
     
  14. AlexArt

    AlexArt Нуб

    Получается если скорость Stepper1.setMaxSpeed(1000); и я хочу ее повысить или понизить... можно с помощью команды moveTo(1500) и она плавно повыситься от 1000 до 1500?


    stepper0.moveTo(1500)
    while( stepper0.isRunning())
    stepper0.run();
     
  15. vvr

    vvr Инженерище


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

    http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
     
  16. AlexArt

    AlexArt Нуб

    помогите пожалуйста... Вот автор (AccelStepper) пишет:

    computeNewSpeed()
    void AccelStepper::computeNewSpeed (
    )
    protected
    Forces the library to compute a new instantaneous speed and set that as the current speed. It is called by the library:

    References _direction, DIRECTION_CCW, DIRECTION_CW, and distanceToGo().

    Referenced by moveTo(), run(), setAcceleration(), and setMaxSpeed().

    Не могу понять без примера.... как вноситься плавно новая скорость движения мотора.... при движении старой скорости...
     
    Последнее редактирование: 13 авг 2019
  17. vvr

    vvr Инженерище

    вы думаете здесь школа ?
    берите примеры из библы и играйтесь с ними - так быстрее разберётесь.
     
  18. AlexArt

    AlexArt Нуб

    Сложно подсказать... ок.. и на этом спасибо...
     
  19. vvr

    vvr Инженерище

    это не подсказка - сидеть и разжевывать что расписано.
    это пустая трата времени своего и вашего.
    вам это вообще пользы не принесёт и вы так и не поймёте как с помощью этой библиотеки работать с шаговиком.
    а читая описание и играясь с примерами за день всё легко освоите и сами будете советы давать.
     
  20. b707

    b707 Гуру

    Там прямо в библиотеке есть пример - Stepper Speed Control. как раз то, что вам надо, посмотрите его.
    Функция computeNewSpeed() совсем не для этого...Она вообще не для пользователя, это внутренний метод библиотеки.
    Дело не в том, что сложно подсказать, а в том, что редко кто знает все методы библиотеки наизусть. Когда нам нужно, мы просто идем и читаем описание. Привыкайте и Вы так делать, а не задавать очевидные вопросы на форумах. Форум не замена документации и не учебник для ламеров - он для общения