Ребята, я полный ноль в этом деле. Прошу вашей помощи. Необходимо реализовать следующее: Нужно задать необходимое количество шагов двигателю. Двигатель начинает двигаться с определенной скоростью. Когда он доходит до нужной отметки(возможно понадобится концевик, чтобы двигатель не переехал заданной отметки), после чего, необходимо, чтоб ШД двигался с медленной скоростью. Дошел с этой скоростью нужной отметки. После чего, вернулся в исходное положение и сделал тоже самое, но в другую сторону. И так постоянно. Пока его не отключить. Вот такая задача. Если есть добрые люди....очень буду признателен. Использую следующие комплектующие: 1. Шаговый двигатель - Nema 17hs8401 1/8A 2. Mega 2560 rev3 + Ramps 1.4+жк 12864 + драйвер drv8825 3. Блок питания 24v/15A 360ват при необходимости можно понизить напряжение до нужного значения
Так а вы сами что уже пробовали? Скетчи из примеров стандартных, сами пытались какой код написать? Выкладывайте свои пробы, пишите, что не получается - и я помогу, чем смогу. За вас писать - простите, не буду.
С шаговым двигателем это вообще не проблема, он для того и нужен чтобы двигаться на четко заданное кол-во шагов. Начал двигаться, считает шаги до упора в концевик, запомнил это значение, дальше работает с ним. Это вот с обычными движками сложности, приходится огород городить чтобы точно выставить, да и то промахивается постоянно.
Еще ни разу не получилось его прокрутить. Я пробовал заливать готовые примеры с библиотек....., двигатель так ни разу не шелохнулся. Может из-за платы RAMPS? ведь в примерах указаны выводы на прямую к ардуино, куда нужно подключать сам двигатель. Я в этом пока "ноль" Плата Ramps, она ведь больше подходит для 3д принтеров. Может надо без нее, а только использовать драйвер (у меня dvr8825) Есть макетная плата, посадить драйвер туда и так попробовать заливать скетчи. Ну я просто часами сижу в интернете по этому поводу, но безрезультатно
Начните с простого: с чтения документации на плату. Потом - с чтения статей про шаговые двигатели. Как всё немного утрясётся - придёт понимание, как оно работает и как подключать. А то мы так тут долго будем гадать, почему у вас ничего не шевелится: может, подключён неправильно, может, питания не хватает, может - скетч неправильный. Вы же ровным счётом ничего нам не даёте, кроме общей справочной информации
Как работают шаговые двигатели я понимаю. проблема в программировании. На изучение программирования уйдет очень много времени. Я думал взять за основу какой-нибудь скетч и подправив его, решить свои задачи. Ну готовые примеры я брал с библиотеки AccelStepper. примера 3 взял от туда, Видно было, что программа залилась., но двигатель так и не заработал. Питание поступает 12 вольт на плату рампс. Обмотки двигателя были указаны цветами в инструкции. На всякий случай прозвонил. Все правльно.
Работают примерно так: Код (C++): #define A 8 //пины для управления обмотками (А-крайний левый контакт) #define B 9 #define C 10 #define D 11 pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); // +++++ ОСНОВНЫЕ ФУНКЦИИ +++++ void stopStep() { // выключение двигателя Step(0, 0, 0, 0); } void rotateR() // 24 шага по часовой стрелке = 1 оборот оси = 1 мм движения штока вниз { for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм Step(1, 0, 1, 0); // один такой шаг сдвигает шток на 1/24 мм Step(0, 1, 1, 0); Step(0, 1, 0, 1); Step(1, 0, 0, 1); } } void rotateL() // 24 шага по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх { for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм Step(1, 0, 0, 1); // один такой шаг сдвигает шток на 1/24 мм Step(0, 1, 0, 1); Step(0, 1, 1, 0); Step(1, 0, 1, 0); } } void Step(boolean a, boolean b, boolean c, boolean d) // один шаг { digitalWrite(A, a); digitalWrite(B, b); digitalWrite(C, c); digitalWrite(D, d); delay(delStep); } // +++++++ ЗКЗОТИКА ++++++ void rotateRH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх { for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм StepH(1, 0, 1, 0); // один такой шаг сдвигает шток на 1/48 мм StepH(0, 0, 1, 0); StepH(0, 1, 1, 0); StepH(0, 1, 0, 0); StepH(0, 1, 0, 1); StepH(0, 0, 0, 1); StepH(1, 0, 0, 1); StepH(1, 0, 0, 0); } } void rotateLH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх { for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм StepH(1, 0, 0, 1); // один такой шаг сдвигает шток на 1/48 мм StepH(0, 0, 0, 1); StepH(0, 1, 0, 1); StepH(0, 1, 0, 0); StepH(0, 1, 1, 0); StepH(0, 0, 1, 0); StepH(1, 0, 1, 0); StepH(1, 0, 0, 0); } } void StepH(boolean a, boolean b, boolean c, boolean d) // один шаг { digitalWrite(A, a); digitalWrite(B, b); digitalWrite(C, c); digitalWrite(D, d); delay(delStep / 2); }
Попробовал залить ваш пример. А перед этим проверил и выдало следущее: Недопустимое имя скетча. Имя может содержать символы ASCII и цифры (и не должно начинаться с цифры). Длина имени не должна превышать 64 символов. _1:6: error: expected constructor, destructor, or type conversion before '(' token _1:7: error: expected constructor, destructor, or type conversion before '(' token _1:8: error: expected constructor, destructor, or type conversion before '(' token _1:9: error: expected constructor, destructor, or type conversion before '(' token E:\arduino-1.6.9-windows\Примеры\_1\_1.ino: In function 'void Step(boolean, boolean, boolean, boolean)': _1:43: error: 'delStep' was not declared in this scope E:\arduino-1.6.9-windows\Примеры\_1\_1.ino: In function 'void StepH(boolean, boolean, boolean, boolean)': _1:83: error: 'delStep' was not declared in this scope exit status 1 expected constructor, destructor, or type conversion before '(' token