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