0@0
0@0
325
0@-120
187
274
0@0
root
input
output
globalVariable
1
30688aed-93e8-48f3-a22f-a5dc21403825
LibraryGroup-Шаговый двигатель
LibraryGroup-ШД AlexCrane
0@-630
6
2
3
150@150
170@150 corner: 208.0d@170
150@150 corner: 228.0d@170
174@163.5d
340@130
360@130 corner: 516.0d@350
340@130 corner: 536.0d@350
413.5d@144.5d
340@150 corner: 360@170
SpeedContinuous01
500
340@180
360@180
320.0d@183.5d
ШагДвиг_mod
FindEndSwitch
3dd2a884-0b23-4cb1-a919-c8fcdd913331
При true постоянно шагаем для поиска концевика по CCW
dd7e7512-0e44-4b12-a3f1-2bfb7f9fd8e0
SpeedEndSwitch
0da09e76-9abd-4209-8994-3906b4e99e09
Скорость ШД для поиска концевика
e8002159-6d09-4b1f-97de-6f287b7a5e9f
ШагДвиг Установка
En
22502748-2126-49f6-a695-bae1e55d0464
3d062544-2c05-4514-9cbe-cbdff30ee30f
MaxSpeed
b4f1be77-2577-4f2d-8375-3e1ea4216d92
Максимальная скорость вращения ротора двигателя (шагов/секунду)
d146d221-19f1-4a4d-b6ca-5801a5a3af91
Acceleration
12308427-b97e-437d-bd1c-aee97865b6ec
Ускорение вращения (шагов/секунду^2)
e0c65a93-e82f-4d23-a7a7-679313d04991
c4e4c49d-0b43-4310-82ce-026db0767636
Установка параметров шагового двигателя
Step
10
Пин управления шагами контроллера
66f1483d-3159-450f-8e82-e654741e6c57
8bc42495-0960-4300-adb7-22efc1573ceb
Dir
11
Пин направления вращения контроллера
c31d485e-f907-4651-bd19-51f5b0a023b8
72abb887-5e2a-4587-aebd-f3908812b2a9
If (En) {
Stepper1.setMaxSpeed(MaxSpeed);
Stepper1.setAcceleration(Acceleration);
}
83
1 - режим "external driver" (A4988)
Stepper1
(1, Step, Dir);
AccelStepper
EnSteps
Speed
Acceleration
ШагДвиг
En
Скорость
Ускорение
Шагов
4b139470-65a1-49a3-8a95-6418d90824c2
Количество шагов, которые должен сделать двигатель
011babd7-655e-464f-b4be-4f06bf7e3d31
Готов
f75858a5-7f06-4bf0-9caa-3515dd3118a4
Двигатель закончил движение
d1e9f08d-ba11-403b-8751-573ef2a3a8cb
198f8292-fe38-4914-8ded-a59a71b45bbe
Управление шаговым двигателем через контроллер А4988
If (En) {
SetStepperMaxSpeed(Скорость);
SetStepperAcceleration(Ускорение);
StepperMove(Шагов);
}
Готов = Stepper.distanceToGo() == 0;
Stepper.run();
148
#include
<AccelStepper.h>
1 - режим "external driver" (A4988)
Stepper
(1, Step, Dir);
AccelStepper
curMaxSpeed
= 0;
int
curAcceleration
= 0;
int
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
87
void
SetStepperMaxSpeed
int
MaxSpeed
if (curAcceleration != Acceleration) {
Stepper.setAcceleration(Acceleration);
curAcceleration = Acceleration;
}
111
void
SetStepperAcceleration
int
Acceleration
Stepper.move(Distance);
23
void
StepperMove
int
Distance
Steps
CCW
1749a012-0c84-41fa-bf04-5a19d56a9907
По часовой стрелке
385bd673-ed11-4ff5-b385-63a75de09b57
Ready
Позиция
3e95bd51-7ae3-449f-9b9d-986ce8be7e53
Текущая позиция двигателя
0d87726d-d3cb-406f-b42d-bc70bcf6c19c
0681950a-4e83-4f02-b52f-192689d207f9
If (En) {
SetStepperMaxSpeed(Скорость);
SetStepperAcceleration(Ускорение);
StepperMove(Шагов);
}
Готов = !Stepper.run();
Позиция = Stepper.currentPosition();
157
Position
0eeb9b7f-900c-46d1-bb27-99aec13d1572
if (En) {
SetStepperMaxSpeed(Speed);
SetStepperAcceleration(Acceleration);
StepperMove(Steps*(CCW ? 1 : -1));
}
Ready = !Stepper.run();
Position = Stepper.currentPosition();
173
Stepper.move(Distance);
24
SetZeroPosition
60c5b2c1-55c8-41ea-a856-60fc36f95afe
Установка начальной позиции в 0. Использовать через RTrig
b8593427-7917-4c17-a926-7694d939e155
AbsSteps
25f628bb-19fc-47b3-a5c9-e3b95ca997d8
Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последенй позиции
98054e13-9c74-4d04-bede-871f2478e134
8e86d344-9473-4f19-8548-4591a220e880
Управление шаговым двигателем через контроллер А4988 mod
Блог ШагДвиг для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h
Входы:
FindEndSwitch - При true постоянно шагаем для поиска концевика по CCW, имеет больший приоритет перед EnSteps
SpeedEndSwitch - Скорость ШД для поиска концевика
EnSteps - при true начинаем шагать
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения
CCW - true крутить по часовой, иначе против
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
AbsSteps - Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последенй позиции
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
769
if (FindEndSwitch) {Stepper.setSpeed(SpeedEndSwitch*(CCW ? -1 : 1)); Stepper.runSpeed()}
else{
if (EnSteps) {
SetStepperMaxSpeed(Speed);
SetStepperAcceleration(Acceleration);
if (AbsSteps) {StepperMoveA(Steps*(CCW ? -1 : 1));}
else {StepperMove(Steps*(CCW ? -1 : 1));}
}
Ready = !Stepper.run();
Position = Stepper.currentPosition();
if (SetZeroPosition) {Stepper.setCurrentPosition(0);}
}
389
Stepper.move(Distance);
void
StepperMove
long
Distance
Stepper.moveTo(AStep);
22
void
StepperMoveA
long
AStep
340@170 corner: 360@190
SetZeroPosition01
340@200
360@200
340@190 corner: 360@210
17
150@210
170@210 corner: 276.0d@230
150@210 corner: 296.0d@230
174@224.5d
282.0d@210 corner: 296.0d@230
296.0d@220
9.0d
98.0d
Пропорциональное
4
~3
digital
0.0d
282.0d@220
AbsSteps01
340@320
360@320
296.0d@220 corner: 296.0d@320
EnSteps01
340@220
360@220
на переднем фронте начинаем шагать, использовать через RTrig
340@210 corner: 360@230
MaxSpeed01
1000
340@240
360@240
315.0d@243.5d
340@230 corner: 360@250
Acceleration01
340@260
360@260
315.0d@263.5d
340@250 corner: 360@270
170@250
190@250 corner: 250@290
170@250 corner: 270@290
202.5d@263.5d
9
80@270
100@270 corner: 149.0d@290
80@270 corner: 169.0d@290
104@284.5d
169.0d@280
41.0d
Позиция
15
0
14
A0
analogInput
149.0d@280
169.0d@280 corner: 169.0d@280
I
170@280
190@280
170@270 corner: 190@290
250@270 corner: 270@290
270@280
1023
Q
250@280
270@280 corner: 270@280
Steps01
340@280
360@280
340@270 corner: 360@290
CCW01
340@300
360@300
Против часовой стрелки
340@290 corner: 360@310
340@310 corner: 354@330
StopAccel01
340@340
360@340
ШагДвиг_mod_INT_v2
Continuous
SpeedContinuous
MaxSpeed
StopAccel
feb8597c-6c86-4cf8-a3f6-33b79fea3e86
Остановка с использованием текущей скорости и ускорения
e63ef32a-1278-4528-be56-9a9bd875735c
a3ce2693-d1c9-40a7-a191-f8250fdb2d78
ШагДвиг_mod (step/dir) INT
Блог ШагДвиг для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Входы:
Continuous - При true постоянно шагаем, имеет больший приоритет перед EnSteps
SpeedContinuous - Скорость ШД для "постоянно шагаем"
Эти два входа можно использовать для поиска концевика и просто чтобы покрутить двигателем, но без ускорений
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
EnSteps - при переднем фронте начинаем шагать. Использовать через RTrig
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения (hint: можно и отрицательные)
CCW - true крутить против часовой, иначе по
AbsSteps - Если true то шагаем по абосютным координатам от нулевой позиции, иначе идем относительно последеней позиции
StopAccel - Остановка с использованием текущей скорости и ускорения
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
1063
period
100
50
Период прерывания, мкс, Менять Оторожно
41695f6c-ad2c-4843-8dc1-d29c1575da1b
761f7340-3f25-42dd-a366-852384a4cbf5
if (SetZeroPosition) {Stepper.setCurrentPosition(0);}
if (Continuous) {
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
if (curSpeed != SpeedContinuous) {
Stepper.setSpeed(SpeedContinuous*(CCW ? -1 : 1));
curSpeed = SpeedContinuous;
}}
else{
if (EnSteps) {
noInterrupts();
if (curMaxSpeed != MaxSpeed) {
Stepper.setMaxSpeed(MaxSpeed);
curMaxSpeed = MaxSpeed;
}
if (curAcceleration != Acceleration) {
Stepper.setAcceleration(Acceleration);
curAcceleration = Acceleration;
}
if (AbsSteps) {Stepper.moveTo(Steps*(CCW ? -1 : 1));}
else {Stepper.move(Steps*(CCW ? -1 : 1));}
interrupts();
}
if (StopAccel) {Stepper.stop;}
}
Position = Stepper.currentPosition();
703
Timer1.initialize( period ); // инициализация таймера 1,
Timer1.attachInterrupt ( timerInterrupt, period ); // задаем обработчик прерываний
Stepper.setMinPulseWidth(lengthPulse);
181
#include
<TimerOne.h>
#include
<AccelStepper.h>
Длительность испульса, вставлять больше 100 крайне не рекомендуется
#define
lengthPulse
10
1 - режим "external driver" (A4988)
Stepper
(1, Step, Dir);
AccelStepper
curSpeed
= 0;
int
curMaxSpeed
= 0;
int
curAcceleration
= 0;
int
if (Continuous) {Ready = Stepper.runSpeed();}
else Ready = !Stepper.run();
75
void
timerInterrupt
340@330 corner: 360@350
560@310
580@310 corner: 609.0d@330
560@310 corner: 629.0d@330
584@323.5d
560@310 corner: 580@330
560@320
7.0d
21.0d
LED
sck
13
SPI
13
8
580@320
536.0d@320 corner: 536.0d@320
Ready01
42.0d
516.0d@320
536.0d@320
516.0d@310 corner: 536.0d@330
Position01
50.0d
516.0d@340
536.0d@340
516.0d@330 corner: 536.0d@350
340@160
340@320
ШД1_v1.2
Continuous01
9b6d524f-d660-4143-b00d-ab32ec210636
ШД1_v1.2
Блок ШД1 для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Входы:
Continuous - При true постоянно шагаем, имеет больший приоритет перед EnSteps
SpeedContinuous - Скорость ШД для "постоянно шагаем"
Эти два входа можно использовать для поиска концевика и просто чтобы покрутить двигателем, но без ускорений
SetZeroPosition - Установка начальной позиции в 0. Использовать через RTrig
EnSteps - при переднем фронте начинаем шагать. Использовать через RTrig
Speed - Максимальная скорость шаг/сек
Acceleration - Ускорение шаг/сек2
Steps - Количество шагов для выполнения (hint: можно и отрицательные)
CCW - true крутить против часовой, иначе по
AbsSteps - Если true то шагаем по абсолютным координатам от нулевой позиции, иначе идем относительно последней позиции
StopAccel - Остановка с использованием текущей скорости и ускорения
Выходы:
Ready - true двигатель закончил движение
Position - Текущая позиция двигателя
1059
Step01
Dir01
if (curMaxSpeed01 != MaxSpeed01) {
Stepper01.setMaxSpeed(MaxSpeed01);
curMaxSpeed01 = MaxSpeed01;}
if (curAcceleration01 != Acceleration01) {
Stepper01.setAcceleration(Acceleration01);
curAcceleration01 = Acceleration01;}
if (curSpeed01 != SpeedContinuous01 || curCCW01 != CCW01) {
Stepper01.setSpeed(SpeedContinuous01*(CCW01 ? -1 : 1));
curSpeed01 = SpeedContinuous01;}
if (SetZeroPosition01) {Stepper01.setCurrentPosition(0); curSpeed01=0; }
if (Continuous01) { curSpeed01=0;}
else{
if (EnSteps01) {
if (AbsSteps01) {Stepper01.moveTo(Steps01*(CCW01 ? -1 : 1));}
else {Stepper01.move(Steps01*(CCW01 ? -1 : 1));}
}
if (StopAccel01) {Stepper01.stop();}
}
Position01 = Stepper01.currentPosition();
712
Stepper01.setMinPulseWidth(lengthPulse);
40
1 - режим "external driver" (A4988)
Stepper01
(1, Step01, Dir01);
AccelStepper
curSpeed01
= 0;
int
curMaxSpeed01
= 0;
int
curAcceleration01
= 0;
int
curCCW01
=false;
bool
EnSteps01temp
= false;
bool
156.0d
360@160
228.0d@160 corner: 228.0d@160
214.0d@160
228.0d@160
214.0d@150 corner: 228.0d@170
30.0d
Ехать
2
5
340@90
360@90 corner: 513.0d@110
340@90 corner: 627.0d@110
365.0d@105.0d
ШД основной для 1х ШД v1.2
c68b7dad-cec0-4130-bb90-ddde5195783b
ШД основной для 1х ШД v1.2
Блок ШД для управления ШД через драйвер типа А4988 и пр.
модификация AlexCrane, 2019
Работает на библиотеке AccelStepper.h и TimerOne.h
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
Основной блок для управления одним ШД
Совместно использовать с блоком ШД1
period
Период прерывания, мкс, Менять Оторожно
41695f6c-ad2c-4843-8dc1-d29c1575da1b
761f7340-3f25-42dd-a366-852384a4cbf5
Timer1.initialize( period ); // инициализация таймера 1,
Timer1.attachInterrupt ( timerInterrupt, period ); // задаем обработчик прерываний
143
#include
<TimerOne.h>
#include
<AccelStepper.h>
Длительность импульса, вставлять больше 100 крайне не рекомендуется
#define
lengthPulse
10
Ready01 = true;
if (Continuous01) {Ready01 = false; Stepper01.runSpeed();}
if (EnSteps01) {EnSteps01temp = true;}
if (EnSteps01temp)
{Ready01 = !Stepper01.run();
EnSteps01temp = !Ready01;}
201
void
timerInterrupt
153.0d
630@70
630@70 corner: 1111.0d@104.0d
left
если нажать и удерживать Ехать, то постоянно крутим со скоростью Continuous в строну CCW.
CCW можно менять на ходу.
если нажать и удерживать Ехать, то постоянно крутим со скоростью Continuous в строну CCW.
475.0d
3@12.0d
CCW можно менять на ходу.
139.0d
3@26.0d
630@130
630@130 corner: 1060.0d@164.0d
если нажать и удерживать Пропорциональное то крутим на количество шагов Step01
проорционально установки на аналоговом входе A0, типа спидометр
если нажать и удерживать Пропорциональное то крутим на количество шагов Step01
424.0d
3@12.0d
проорционально установки на аналоговом входе A0, типа спидометр
347.0d
3@26.0d
630@190
630@190 corner: 890.0d@210.0d
MaxSpeed и Acceleration настраивать обязательно
254.0d
3@12.0d
431.0d
9600
arduinoIDE
141
1024
Arduino Uno
119858318