Два ШД от джойстика
- Войдите на сайт для отправки комментариев
Ср, 29/07/2015 - 15:21
Написал код для управления двумя ШД от джойстика ардуино шилд(черный на 2 оси и кнопка).
Вроде бы работает, в зависимости от отклонения дхостика двигатели меняют направление и скорость(правда скорость очень низкая, т.к. процессор загружен из-за постоянных опросов джостика. Хотел попробывать внешние прерывания - оказалось невозможно) Проблемма в том, что когда джостик не трогаешь они все время куда-то едут, куда?
#include <AccelStepper.h> AccelStepper X (1, 7, 8); AccelStepper Y (1, 9, 10); int JoistPinX = 0; int JoistPinY = 1; int JoistPinK = 3; void setup() { X.setMaxSpeed(2000); Y.setMaxSpeed(2000); } void loop() { // int levelX = analogRead(JoistPinX); int levelY = analogRead(JoistPinY); /////////////////////////////////////////////////////////////////////////////////// X.runSpeed(); if(levelX >= 0 || levelX < 490) {X.moveTo(map(-levelX, 490, 0, 0, 2000)); X.setSpeed(map(levelX, 490, 0, 0, 2000));} if(levelX > 510 || levelX <= 1023) {X.moveTo(map(levelX, 510, 0, 0, 2000)); X.setSpeed(map(levelX, 510, 1023, 0, 2000));} /////////////////////////////////////////////////////////////////////////////////// Y.runSpeed(); if(levelY >= 0 || levelY < 490) {Y.moveTo(map(-levelY, 490, 0, 0, 2000)); Y.setSpeed(map(levelX, 510, 1023, 0, 2000));} if(levelY > 510 || levelY <= 1023) {Y.moveTo(map(levelY, 510, 0, 0, 2000)); Y.setSpeed(map(levelY, 510, 1023, 0, 2000));} }
У вас вращение моторов напрямую завязаны на значения выдаваемые аналоговыми выходами. Эти значения "плавают" - "плавают" и моторы - все очевидно.
просматривал analogRead через монитор порта, джостик меняет значения по осям от 500 до 507(в неотклоненном положении), в операторе if я эти значения исключил!
Gippopotam, можно по-подробнее, что нужно делать?
а зачем вы moveTo() привязываете к значениям джойстика, это нафиг не нужно.
задайте сразу большое значение и всё.
вам только скорость нужно с джойстиком увязать.
а вообще эта библиотека не позволит быстро разогнать шаговики, в ней очень много вычислений.
У вас вращение моторов напрямую завязаны на значения выдаваемые аналоговыми выходами. Эти значения "плавают" - "плавают" и моторы - все очевидно.
Вот пример из библиотеки AccelStepper, здесь прямо с аналогового входа берут значения и их присваивают функциям двигателей
Какие у вас шаговики?
Если есть возможность отказаться от библиотеки - сделайте это.
Зачем вам прямая связь между положением джойстика и скоростью мотора - непонятно.
Какие у вас шаговики?
Если есть возможность отказаться от библиотеки - сделайте это.
Зачем вам прямая связь между положением джойстика и скоростью мотора - непонятно.
Шаговики биполярные NEMA17. Думаю поробовать тоже самое кнопками. Пробовал убрать зависимость скорости от положения, еще хуже становится...Он еще быстрее начинает ехать при "прямом" джойстике
vvadim, так тоже едет) еще быстрее и не реагирует на отклонения джойстика! В 20 строке поменял && на || стал реагировать, но все равно едет(((
Я так понимаю, что ардуино со своей частотой быстро вообще не способен разогнать и качественно работать с шаговигами. Серво для него лучший вариант
Шаговики биполярные NEMA17. Думаю поробовать тоже самое кнопками. Пробовал убрать зависимость скорости от положения, еще хуже становится...Он еще быстрее начинает ехать при "прямом" джойстике
А драйверы какие?
Вы уверены, что используемая библиотека вообще подходит под ваше обоорудование?
вопрос на засыпку - а что вы собираете на шаговых двигателях?
может проще использовать dc моторы, и управлять проще и гемора меньше
Шаговики биполярные NEMA17. Думаю поробовать тоже самое кнопками. Пробовал убрать зависимость скорости от положения, еще хуже становится...Он еще быстрее начинает ехать при "прямом" джойстике
А драйверы какие?
Вы уверены, что используемая библиотека вообще подходит под ваше обоорудование?
Драйверы TB6560 3A. Хммм...про библиотеку - она может управлять двигателями
AccelStepper mystepper(1, pinStep, pinDirection);
AccelStepper mystepper(2, pinA, pinB);
AccelStepper mystepper(4, pinA1, pinA2, pinB1, pinB2);
у меня по первому варианту
вопрос на засыпку - а что вы собираете на шаговых двигателях?
может проще использовать dc моторы, и управлять проще и гемора меньше
Хочу сделать козловой кран по перемещению предметов с ручным управлением...Работаю на производстве...
это похвально, но зачем там шаговые моторы
да и скорость чаще всего не регулируется
А просто вращать моторами (тестовый скетч) получается?
Давайте сначала.
Вы хотите с помощью джойстика менять скорость вращения каждого мотора? По мотору на ось? То есть мотор не должен вращаться, пока вы не отклоните джойстик выше какого-то порога? Затем, в зависимости от степени отклонения должна меняться скорость мотора?
P.S. Красивые буковки. А большего размера можете?
А просто вращать моторами (тестовый скетч) получается?
Давайте сначала.
Вы хотите с помощью джойстика менять скорость вращения каждого мотора? По мотору на ось? То есть мотор не должен вращаться, пока вы не отклоните джойстик выше какого-то порога? Затем, в зависимости от степени отклонения должна меняться скорость мотора?
P.S. Красивые буковки. А большего размера можете?
Верно задумка такая!!! Он ими вращает вперед и назад при отклонении, и скорость регулирует в зависим от положения джойс, но какой-то лаг - когда джойс на месте ардуино очень медленно, мелкой дрожью их оба двигает в одну сторону.
Про буковки простите, не знаю как здесь шрифт поменчть
вопрос на засыпку - а что вы собираете на шаговых двигателях?
может проще использовать dc моторы, и управлять проще и гемора меньше
Управлять проще? А в чем, собственно разница, если параметры изывестны, а и там и там используются драйверы?
Зато шаговик дает неоспоримые преимущества по точности управления.
Верно задумка такая!!! Он ими вращает вперед и назад при отклонении, и скорость регулирует в зависим от положения джойс, но какой-то лаг - когда джойс на месте ардуино очень медленно, мелкой дрожью их оба двигает в одну сторону.
Если бы я делал - сделал бы без этой библиотеки, ибо сомневаюсь, что она вообще аутентичная.
Если никакой другой работы микроконтроллер не выполняет - задача вообще не сложная.
Про буковки простите, не знаю как здесь шрифт поменчть
а зачем?
управляя джойстиком вы не получите никакой точности и это приемущество полностью нивелируете.
хотите точность - управляйте кнопками с указанием на какое количество шагов нужно переместится
Error
кстати, в вашем коде step пин для мотора Х указан 7, это только для меги. на уне там нет шима
кстати, в вашем коде step пин для мотора Х указан 7, это только для меги. на уне там нет шима
зачем ШИМ для step?
я чего-то не знаю?
кстати, в вашем коде step пин для мотора Х указан 7, это только для меги. на уне там нет шима
зачем ШИМ для step?
я чего-то не знаю?
Вопрос аналогичный! И потом все цифровые пины PWM поддерживают!?Да?
Да вот так и волняется всегда. Вот смотрите, что у Вас написано:
Строка 26: if(levelX >= 0 || levelX < 490)
Это означает ЕСЛИ levelX>=0 ИЛИ levelX <400
т.е. достаточно, чтобы верно было что-то одно. Абсолютно любое число сюда подойдёт, т.к. под первое условие подходит всё, что нетроицательно, а всё, что отрицательно подойдёт под второе условие.
Если Вы хотели сказать "между 0 и 490", то нужно было использовать не ИЛИ, а И (не ||, а &&).
И так во всех Ваших условиях (номера строк я давал в прошлом посте)
Да вот так и волняется всегда. Вот смотрите, что у Вас написано:
Строка 26: if(levelX >= 0 || levelX < 490)
Это означает ЕСЛИ levelX>=0 ИЛИ levelX <400
т.е. достаточно, чтобы верно было что-то одно. Абсолютно любое число сюда подойдёт, т.к. под первое условие подходит всё, что нетроицательно, а всё, что отрицательно подойдёт под второе условие.
Если Вы хотели сказать "между 0 и 490", то нужно было использовать не ИЛИ, а И (не ||, а &&).
И так во всех Ваших условиях (номера строк я давал в прошлом посте)
ЕвгенийП, я тоже сначала так думал, и первый скетч написал с && - результата не было, движки стояли!!!! четыре часа мучился, не мог понять в чем дело. Пробовал уже все что только можно, и только с ИЛИ они закрутились, но с меской дрожью когда стоят. vvadim, предлагал скетч. Можно уйти от И и ИЛИ - разбить на два IF, но результата нет.
Ну, как знаете. Все Ваши условия с ИЛИ выполняются для всех чисел, т.е. Вы можете их смело выбросить и всё будет работать также, как сейчас.
Чем пробовать методом тыка "и" или "или" лучше сядьте и внимательно пропишите логику.
ЕвгенийП, я тоже сначала так думал, и первый скетч написал с && - результата не было, движки стояли!!!! четыре часа мучился, не мог понять в чем дело. Пробовал уже все что только можно, и только с ИЛИ они закрутились, но с меской дрожью когда стоят. vvadim, предлагал скетч. Можно уйти от И и ИЛИ - разбить на два IF, но результата нет.
Вы упорно не хотите вникать в суть. Вам же сказали - ваши условные ветвления не работают. Движки крутятся или стоят, т.к. на них отображаются (map()) значения на аналоговых выходах.
Вы тестовые скетчи пробовали? Движки вообще с этой библиотекой корректно работают?
ЕвгенийП, я тоже сначала так думал, и первый скетч написал с && - результата не было, движки стояли!!!! четыре часа мучился, не мог понять в чем дело. Пробовал уже все что только можно, и только с ИЛИ они закрутились, но с меской дрожью когда стоят. vvadim, предлагал скетч. Можно уйти от И и ИЛИ - разбить на два IF, но результата нет.
Вы упорно не хотите вникать в суть. Вам же сказали - ваши условные ветвления не работают. Движки крутятся или стоят, т.к. на них отображаются (map()) значения на аналоговых выходах.
Вы тестовые скетчи пробовали? Движки вообще с этой библиотекой корректно работают?
Gippopotam, я же сообщения пишу не просто так, чтобы Вы их игнорировали. Если пытаетесь помочь, то пробегитесь по теме...я уже пробовал и без map и с И - не работает!!! Подключал тестовые скетчи, на них двигатель дрожит... А про суть, все что Вы говорите я уже перепробовал, прохавал и вы**рал. Не хочу кого-то обидеть! С Уважением
ну если на примерах из библиотеки моторы не работают то надо сначала с их подключением разобраться
Gippopotam, я же сообщения пишу не просто так, чтобы Вы их игнорировали. Если пытаетесь помочь, то пробегитесь по теме...я уже пробовал и без map и с И - не работает!!! Подключал тестовые скетчи, на них двигатель дрожит... А про суть, все что Вы говорите я уже перепробовал, прохавал и вы**рал. Не хочу кого-то обидеть! С Уважением
Вы напрасно со мною так разговариваете, повода я не давал.
Пробегитесь по теме и посчитайте, сколько раз я предлагал для начала убедится, что библиотека умеет управлять вашими моторами.
Други! Немного переписал. Что имеем:
1. ШД стоят, их не трясет, никуда не тянет при ровном джойстике
2. Отводишь джойстик - едет, отпускаешь - останавливается
3.Регулировка скорости от отклонения джойстика пропала (ну да пес с ней)
НО ПРОПАЛ ЗАДНИЙ ХОД!!! Как так-то?
почитайте описание библиотеки.
http://www.airspayce.com/mikem/arduino/AccelStepper/functions.html
setSpeed() для постоянной скорости
и в moveTo() уберите зависимость от положения джойстика
Я премного извиняюсь, но не проще и логичней ли было бы использовать для управления NEMA-17 стандартные драйверы для ШД? Заодно отказавшись от внезапно ставшей нафиг не нужной бибилотеки?.
Вдруг окажется, что вычислительной мощности ардуинки хватает, да еще и с запасом..
Драйверов великое множество, на разные токи и разное количество шагов(микрошагов), стоят вполне приемлимых денюх.
Рулят практически любыми шаговиками, от Nema-8 до Nema-42...
Как правило сразу же обеспечивают опторазвязку цепей управления от силовой части схемы.
Управляются двумя (или тремя, кому как надо) линиями Step, Dir (и возможно еще Enable)