ШД2_v1.3a ШагДвиг_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 Continuous02 SpeedContinuous02 SetZeroPosition02 EnSteps02 на переднем фронте начинаем шагать, использовать через RTrig MaxSpeed02 Acceleration02 Steps02 CCW02 Против часовой стрелки AbsSteps02 ШагДвиг_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 StopAccel02 SetPosition02 c0fdbbce-5f0a-4417-a529-58b8d1512bdb 384f78cb-2d7f-49da-ae19-3ba26159217f CurPosition 5a092002-7ef9-4c87-a1df-b9ce875ef950 ebfab3ad-597d-43c0-a460-f37a533d51c8 Ready02 Position02 1bd3cefa-02e4-466e-99ff-46c48e8db638 ШД2_v1.3a Блок ШД2 для управления ШД через драйвер типа А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 Step02 Dir02 if (curMaxSpeed02 != MaxSpeed02) { Stepper02.setMaxSpeed(MaxSpeed02); curMaxSpeed02 = MaxSpeed02;} if (curAcceleration02 != Acceleration02) { Stepper02.setAcceleration(Acceleration02); curAcceleration02 = Acceleration02;} if (curCCW02 != CCW02) {curCCW02 = CCW02;} if (curSpeed02 != SpeedContinuous02) { Stepper02.setSpeed(SpeedContinuous02*(CCW02 ? -1 : 1)); curSpeed02 = SpeedContinuous02;} if (SetPosition02) {Stepper02.setCurrentPosition(CurPosition);} if (SetZeroPosition02) {Stepper02.setCurrentPosition(0); curSpeed02=0; } if (Continuous02) { curSpeed02=0;} else{ if (EnSteps02) { if (AbsSteps02) {Stepper02.moveTo(Steps02*(CCW02 ? -1 : 1));} else {Stepper02.move(Steps02*(CCW02 ? -1 : 1));} } if (StopAccel02) {Stepper02.stop();} } Position02 = Stepper02.currentPosition(); 799 Stepper02.setMinPulseWidth(lengthPulse); 40 1 - режим "external driver" (A4988) Stepper02 (1, Step02, Dir02); AccelStepper curSpeed02 = 0; int curMaxSpeed02 = 0; int curAcceleration02 = 0; int curCCW02 =false; bool EnSteps02temp = false; bool CurPosition02 125ab15b-8efe-436b-9f24-e7133610c64c if (curMaxSpeed02 != MaxSpeed02) { Stepper02.setMaxSpeed(MaxSpeed02); curMaxSpeed02 = MaxSpeed02;} if (curAcceleration02 != Acceleration02) { Stepper02.setAcceleration(Acceleration02); curAcceleration02 = Acceleration02;} if (curCCW02 != CCW02) {curCCW02 = CCW02;} if (curSpeed02 != SpeedContinuous02) { Stepper02.setSpeed(SpeedContinuous02*(CCW02 ? -1 : 1)); curSpeed02 = SpeedContinuous02;} if (SetPosition02) {Stepper02.setCurrentPosition(CurPosition02);} if (SetZeroPosition02) {Stepper02.setCurrentPosition(0); curSpeed02=0; } if (Continuous02) { curSpeed02=0;} else{ if (EnSteps02) { if (AbsSteps02) {Stepper02.moveTo(Steps02*(CCW02 ? -1 : 1));} else {Stepper02.move(Steps02*(CCW02 ? -1 : 1));} } if (StopAccel02) {Stepper02.stop();} } Position02 = Stepper02.currentPosition(); 801