Шаговый двигатель на AccelStepper

Пользовательские блоки для управления шаговыми двигателями и сервоприводами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

Шаговый двигатель на AccelStepper

Сообщение Ingwar »

Davit07 писал(а): 23 ноя 2020, 22:11 Если не ошибаюсь , то предел у ШД 2000об/мин.
При экспериментах легко разгонял шаговик (от 3д принтера) 3000+. Тут решающим будет напряжение питание шаговика. Соответственно и драйвер должен "переваривать" более 30В.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

Ingwar писал(а): 23 ноя 2020, 22:25
Davit07 писал(а): 23 ноя 2020, 22:11 Если не ошибаюсь , то предел у ШД 2000об/мин.
При экспериментах легко разгонял шаговик (от 3д принтера) 3000+. Тут решающим будет напряжение питание шаговика. Соответственно и драйвер должен "переваривать" более 30В.
Есть у меня комплект ШД драйвер блок на 48 или 60 в . Проверю и отпишусь
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Шаговый двигатель на AccelStepper

Сообщение ingener »

Вопрос не в возможностях мотора, а в использовании микрошага (деление сигнала) в драйвере. Просто сравните, как работает мотор (лучше с нагрузкой) на одной и той же частоте при делении на 1 и, к примеру, на 8.
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

Добрый день. При загрузки одного и того же скетча, с 2 блоками управления ШД с кнопки , МЕГА работает хорошо . Загружаею в Дуе, соответственно с блоками под Дуе , на кнопку реагирует при 2 илр 4 нажатии . В чем может быть ошибка?

Отправлено спустя 3 часа 1 минуту 28 секунд:
Забыл указать самое главное
С блоком меню и LCD d проекте

Отправлено спустя 2 минуты 52 секунды:
ingener писал(а): 24 ноя 2020, 08:45 Вопрос не в возможностях мотора, а в использовании микрошага (деление сигнала) в драйвере. Просто сравните, как работает мотор (лучше с нагрузкой) на одной и той же частоте при делении на 1 и, к примеру, на 8.
У меня есть много разного железа. Укажи более подробно, проведу эксперименты и отвечу на поставленный вопрос, если есть интерес
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

Доброго дня .
Функция "Защита от зависания " может как то повлиять на работу блока ?
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

ingener писал(а): 24 ноя 2020, 08:45 Вопрос не в возможностях мотора, а в использовании микрошага (деление сигнала) в драйвере. Просто сравните, как работает мотор (лучше с нагрузкой) на одной и той же частоте при делении на 1 и, к примеру, на 8.
Протестировал несколько видов шд , nema 34, без и с обратной связью . В первом примере , шд без обратной связи, нагрузка плоншайпа Ф360 мм закреплена в ступице на подшибникех , привод ременной , шкивы 1:10. Дробление шага 1/16, 32 000 импульса на оборот , с лёгкостью разогнал до 200 об/мин ( дальше страшно стало ).
Шд с обратной связью: перемещение шпинделя в втулке графитовой капролон. Втулка разрезна и находиться в корпусе похожие на хомут, болты м16 затянуты без сильного усилия . В очнм вес будет не меньше 30 кг ( по моему мнению). Шд работает без проблем до скорости 150 об мин ( выше скорость дать не получилось ) дробление шага от 400 до 40 000 . Приводиться в действие шкивом 1:3 и швп 1604. Бремя отврнмеги драйвер уход в ошибку из- за нагрузки.
Плата DUE

Отправлено спустя 20 минут 47 секунд:
viktorz1 писал(а): 24 сен 2020, 00:24 Подскажите пожалуйста, на этом блоке можно собрать просто крутилку с регулировкой скорости вращения? Хочу собрать станочек свивки провода. Так как диаметр провода будет разный то скорее всего нужно будет подстраивать соотношение скоростей двух моторов (тип Nemo 17). Второе, это плавный старт с начальной скоростью вращения и если всё устраивает то по необходимости увеличение оборотов до номинальной.
Может есть у кого подходящий пример нечто похожего? Был бы очень признателен в помощи.
viktorz1 писал(а): 24 сен 2020, 00:24 Подскажите пожалуйста, на этом блоке можно собрать просто крутилку с регулировкой скорости вращения? Хочу собрать станочек свивки провода. Так как диаметр провода будет разный то скорее всего нужно будет подстраивать соотношение скоростей двух моторов (тип Nemo 17). Второе, это плавный старт с начальной скоростью вращения и если всё устраивает то по необходимости увеличение оборотов до номинальной.
Может есть у кого подходящий пример нечто похожего? Был бы очень признателен в помощи.
Доброго дня .
На днях закончил проект, пример сырой , требуеться подбор оптимальной скорости шд . Завтра выложу, уверен весь проект Вам не подпйдет , возможно частично используете. Работа 2 шд состоит из 2х контролёров , DUE , Nano , управление ШД и меню с передачей переменной UART , Due от блоков I2C висит постоянно , по этой причине было принято решение создать передачу данных между платами
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

Прошу строго не судить
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ElectronicRTC
Рядовой
Сообщения: 49
Зарегистрирован: 09 июл 2019, 06:13
Откуда: Москва
Имя: Евгений

Шаговый двигатель на AccelStepper

Сообщение ElectronicRTC »

Доброго дня всем, возможно не совсем по теме вопрос: а для этого блока используется какая то микросхема или модуль для ардуино есть ?
Хотел понять в железе как реализовать управление для шагового двигателя, да и к тому же разные двигатели бывают: просто 2 обмотки, обмотки со средними точками. Можно ссылочку на модуль
Промышленная электроника и оборудование
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

ElectronicRTC писал(а): 12 дек 2020, 09:45 Доброго дня всем, возможно не совсем по теме вопрос: а для этого блока используется какая то микросхема или модуль для ардуино есть ?
Хотел понять в железе как реализовать управление для шагового двигателя, да и к тому же разные двигатели бывают: просто 2 обмотки, обмотки со средними точками. Можно ссылочку на модуль
Доброго дня .
Блок созданный, AlexCrane работает с сигналами Step, Dir. Управляющий сигнал Step отвечает за шаги , Dir направление. Шаговым двигателем управляет драйвер, принимающий эти сигналы. Данный блок может управлять любым двигателем , с помощью драйвера.
Не ленитесь искать в интернете, примеров очень много
ztekem
Рядовой
Сообщения: 3
Зарегистрирован: 04 дек 2018, 17:51
Имя: Андрей

Шаговый двигатель на AccelStepper

Сообщение ztekem »

День добрый!
при заливке выдаёт такую вот ошибку

#include "user_interface.h";

^

pr7:17:1: error: 'AccelStepper' does not name a type

AccelStepper Stepper01(1, 10, 11); //1 - режим "external driver" (A4988)

^

C:\Users\zteke\AppData\Local\Temp\flprog\pr7\pr7.ino: In function 'void setup()':

pr7:44:1: error: 'Stepper01' was not declared in this scope

Stepper01.setMinPulseWidth(lengthPulse);

^

pr7:44:28: error: 'lengthPulse' was not declared in this scope

Stepper01.setMinPulseWidth(lengthPulse);

^

C:\Users\zteke\AppData\Local\Temp\flprog\pr7\pr7.ino: In function 'void loop()':

pr7:107:2: error: 'Stepper01' was not declared in this scope

Stepper01.setMaxSpeed(MaxSpeed01);

^

pr7:111:2: error: 'Stepper01' was not declared in this scope

Stepper01.setAcceleration(Acceleration01);

^

pr7:117:2: error: 'Stepper01' was not declared in this scope

Stepper01.setSpeed(SpeedContinuous01*(curCCW01 ? -1 : 1));

^

pr7:120:25: error: 'Stepper01' was not declared in this scope

if (SetZeroPosition01) {Stepper01.setCurrentPosition(0); curSpeed01=0; }

^

pr7:125:18: error: 'Stepper01' was not declared in this scope

if (AbsSteps01) {Stepper01.moveTo(Steps01*(curCCW01 ? -1 : 1));}

^

pr7:126:8: error: 'Stepper01' was not declared in this scope

else {Stepper01.move(Steps01*(curCCW01 ? -1 : 1));}

^

pr7:128:19: error: 'Stepper01' was not declared in this scope

if (StopAccel01) {Stepper01.stop();}

^

pr7:131:14: error: 'Stepper01' was not declared in this scope

Position01 = Stepper01.currentPosition();

^

exit status 1
'AccelStepper' does not name a type
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

Шаговый двигатель на AccelStepper

Сообщение AlexCrane »

[ref]ztekem[/ref], установите библиотеку, или из шапки или с сайта автора (есть в описании)
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
ztekem
Рядовой
Сообщения: 3
Зарегистрирован: 04 дек 2018, 17:51
Имя: Андрей

Шаговый двигатель на AccelStepper

Сообщение ztekem »

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

Отправлено спустя 7 минут 21 секунду:
extern "C" {
#include "user_interface.h";
}
bool Continuous01;
int SpeedContinuous01;
bool SetZeroPosition01;
bool EnSteps01;
float MaxSpeed01;
float Acceleration01;
int Steps01;
bool CCW01;
bool AbsSteps01;
bool StopAccel01;
bool Ready01;
long Position01;
AccelStepper Stepper01(1, 10, 11); //1 - режим "external driver" (A4988)
int curSpeed01= 0;
int curMaxSpeed01= 0;
int curAcceleration01= 0;
bool curCCW01=false;
bool EnSteps01temp= false;
int _gtv1;
bool _bounseInputD2S = 0;
bool _bounseInputD2O = 0;
unsigned long _bounseInputD2P = 0UL;
bool _bounseInputD14S = 0;
bool _bounseInputD14O = 0;
unsigned long _bounseInputD14P = 0UL;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _count1I = 0;
bool _count1_SCST = 0;
int _count1_Value = 0;

void setup()
{
pinMode(14, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);


_bounseInputD2O = digitalRead(2);
_bounseInputD14O = digitalRead(14);
Stepper01.setMinPulseWidth(lengthPulse);

}
void loop()
{

int _tempVariable_int;

bool _bounceInputTmpD2 = (digitalRead (2));

if (_bounseInputD2S)
{
if (millis() >= (_bounseInputD2P + 40))
{_bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0;}
}
else
{
if (_bounceInputTmpD2 != _bounseInputD2O )
{_bounseInputD2S=1; _bounseInputD2P = millis();}
}
bool _bounceInputTmpD14 = (digitalRead (14));

if (_bounseInputD14S)
{
if (millis() >= (_bounseInputD14P + 40))
{_bounseInputD14O= _bounceInputTmpD14; _bounseInputD14S=0;}
}
else
{
if (_bounceInputTmpD14 != _bounseInputD14O )
{_bounseInputD14S=1; _bounseInputD14P = millis();}
}




//Плата:1
if (!(_bounseInputD14O)){
if ( ! _count1I) {
_count1I = 1;
_count1_Value = _count1_Value + 1;
}} else {
_count1I = 0;}
if (_bounseInputD2O){
if ( ! _count1_SCST) {
_count1_SCST = 1;
_count1_Value = _count1_Value - 1;
}} else {
_count1_SCST = 0;}
if (_changeNumber1_Out) {_changeNumber1_Out = 0;} else {_tempVariable_int = _count1_Value;
if (_tempVariable_int != _changeNumber1_OLV) {_changeNumber1_OLV = _tempVariable_int; _changeNumber1_Out = 1;}
}
Continuous01 = 0;
SpeedContinuous01 = 0;
SetZeroPosition01 = 0;
EnSteps01 = _changeNumber1_Out;
MaxSpeed01 = 800.00;
Acceleration01 = 400.00;
Steps01 = (_count1_Value)*(500);
CCW01 = (_count1_Value) > (_gtv1);
AbsSteps01 = 0;
StopAccel01 = 0;
if (curMaxSpeed01 != MaxSpeed01) {
Stepper01.setMaxSpeed(MaxSpeed01);
curMaxSpeed01 = MaxSpeed01;}

if (curAcceleration01 != Acceleration01) {
Stepper01.setAcceleration(Acceleration01);
curAcceleration01 = Acceleration01;}

if (curCCW01 != CCW01) {curCCW01 = CCW01;}

if (curSpeed01 != SpeedContinuous01) {
Stepper01.setSpeed(SpeedContinuous01*(curCCW01 ? -1 : 1));
curSpeed01 = SpeedContinuous01;}

if (SetZeroPosition01) {Stepper01.setCurrentPosition(0); curSpeed01=0; }
if (Continuous01) { curSpeed01=0;}
else{
if (EnSteps01) {

if (AbsSteps01) {Stepper01.moveTo(Steps01*(curCCW01 ? -1 : 1));}
else {Stepper01.move(Steps01*(curCCW01 ? -1 : 1));}
}
if (StopAccel01) {Stepper01.stop();}
}

Position01 = Stepper01.currentPosition();

_gtv1 = Position01;






}

bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}

Ругается на эту строчку. в коде нет обычного подключения библиотеки вида
#include "AccelStepper";
так и должно быть?
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

Шаговый двигатель на AccelStepper

Сообщение AlexCrane »

[ref]ztekem[/ref], Добавь блок ШД Основной
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Аватара пользователя
Davit07
Сержант
Сообщения: 175
Зарегистрирован: 05 янв 2020, 03:39
Откуда: Краснодар
Имя: Давит
Благодарил (а): 7 раз

Шаговый двигатель на AccelStepper

Сообщение Davit07 »

Доброго дня .
Хочу всех поздравить с Рождеством и наступающем Новым годом

Создалась потребность в управление шаговиком с помощью энкодера . Как можно использовать данный энкодер с блоком ШД?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

Шаговый двигатель на AccelStepper

Сообщение Di123 »

как к блоку подключить шд 28byj-48 ?
там тока 2 пина и то не понятно на какой провод подключать
2020-12-27_113639.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

Шаговый двигатель на AccelStepper

Сообщение AlexCrane »

[ref]Di123[/ref], Использовать блоки ШД1_v1.3_UNI и ШД основной для 1х ШД v1.3
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
ztekem
Рядовой
Сообщения: 3
Зарегистрирован: 04 дек 2018, 17:51
Имя: Андрей

Шаговый двигатель на AccelStepper

Сообщение ztekem »

Спасибо что помогаете, но теперь вот такое
теперь ругается на
ПРЕДУПРЕЖДЕНИЕ: библиотека TimerOne должна запускаться на архитектурах avr и может быть несовместима с вашей платой на архитектуре esp8266.
C:\Users\zteke\AppData\Local\Temp\flprog\pr2\pr2.ino:7:28: warning: extra tokens at end of #include directive [enabled by default]

#include "user_interface.h";

^

C:\Users\zteke\AppData\Local\Temp\flprog\pr2\pr2.ino: In function 'void setup()':

pr2:51:8: error: 'class TimerOne' has no member named 'initialize'

Timer1.initialize( 100 ); // инициализация таймера 1,

^

pr2:52:8: error: 'class TimerOne' has no member named 'attachInterrupt'

Timer1.attachInterrupt ( timerInterrupt, 100 ); // задаем обработчик прерываний

^

Несколько библиотек найдено для "AccelStepper.h"
Используется: c:\Program
Не используется: c:\Program
exit status 1
'class TimerOne' has no member named 'initialize'

проверил начие дублей, нет нигде. почему ругается не пойму.
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

Шаговый двигатель на AccelStepper

Сообщение AlexCrane »

[ref]ztekem[/ref], Для esp8266 вот такой попробуй без основного
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Vadimbol
Рядовой
Сообщения: 1
Зарегистрирован: 24 янв 2021, 09:27
Имя: Vadim

Шаговый двигатель на AccelStepper

Сообщение Vadimbol »

Добрый день. Спасибо за блок. Не могли бы Вы подсказать в чем может быть проблема - при использовании 6 шаговых моторов происходит полный ужас, моторы начинают прыгать и пропускать шаги. Но если использовать 3 ШД то все плавно и без пропусков. Плата MEGA питание 24 вольта, 10 ампер. Межет быть проблема с библиотекой TIMERONE ? с прерыванием? Или только на каких-то определенных выводах нужно работать ? Я подключил на следующие STEP - 44,45,46,6,7,8 и DIR- 26,27,28,29,30,31.
Wadim77
Рядовой
Сообщения: 21
Зарегистрирован: 20 авг 2020, 19:23
Имя: Wadim

Шаговый двигатель на AccelStepper

Сообщение Wadim77 »

Ребята, доброго времени суток. Помогите пожалуйста! Не могу сообразить ((( Нужна блок-схема основанная на данной теме (Шаговый двигатель на AccelStepper). суть очень простая - при запуске шаговик крутит назад (лево) пока не упрется в концевой датчик. ЗАмыкается контакт концевика и Устанавливается как нулевая позиция. Затем количество оборотов от нулевой точки меняться относительно значений со входа с потенциометра. Большое спасибо! Буду примного признателек если выложите здесь такой блок-программу. МИР.
Ответить

Вернуться в «Управление шаговыми двигателями и сервоприводами»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя