да вот я и смотрю с предыдущим скетчем сейчас тоже самое выдаёт вроде ничего не делал
Добавлено спустя 41 минуту 3 секунды: вот я счудил - разные ардуино на двух дисках лежат(0018 и 0022). не обратил внимания в какой сижу. цифры ничего не делают попрежнему. motor_speed=0 s - на 150й раз делает оборот и дрожит на месте, как на ролике от пальца. Когда начинаю вводить, с каждой последующей s леды увеличивают свечение и зум двигателя увеличивается. Потом как на ролике.
ну собственно ты нашёл в чём проблема. как я и говорил чтобы его сдвинуть нужно набрать ошибку, т.е. Программа думает что она передвинула фрезу на 150 шагов а на самом деле всё стоит. Дёргается от перерегулирования. Вот теперь можешь играться с подборкой алгоритма управления Этот кусок: motor_speed = 0; int distance = abs(position-target);
твоя функия управления. с каждым s ты увеличиваешь разницу position-target попробуй подобрать константу при которой двигатель начнёт двигаться при меньшей ошибке.
Или например так: motor_speed = distance*2; В общем тут уже теория автоматического управления, на эту тему много материалов в интернете.
мне больше похоже на поеденичный набор скорости этой командой s. 150 шагов - это не целый оборот, ато и больше. визуально выглядит, какбудто скорость с шагами попутана почему всётаки набор цифр молчит?
Сейчас мыслей нет я в текстовом редакторе пишу, без контроллера и без компилятора. С виду должно работать. Вечером проверю.
Вообще у тебя есть только шаги. А скорость это функция разности между желаемым положением (количество s) и текущим (счётчик с энкодера). Когда ты увеличиваешь ошибку увеличивается мощность подаваемая на двигатель.
ок. спасибо, почитаю. Вернул: ------ //super primitive control of the motor. if (position > target) { digitalWrite(MOTOR_DIR_PIN, HIGH); analogWrite(MOTOR_SPEED_PIN, motor_speed); } else if (position < target) { digitalWrite(MOTOR_DIR_PIN, LOW); digitalWrite(MOTOR_SPEED_PIN, motor_speed); ------ и ------ // step signal is on the low to high transition. ... byte motor_speed = 0; ------ s стало срабатывать сразу
Добавлено спустя 5 минут 59 секунд: пс: для ссылки на вики этого сайта есть BBCode *robowiki*Сдвоенный_энкодер*/robowiki*
нет, как от пальца, несколько оборотов и остановка. поменял: ---- // step signal is on the low to high transition. ... if (distance > 255) motor_speed = 100; ---- теперь стоит и зумит, но не дёргается. при попытке вручную провернуть, возвращается назад. но это работает только в одну сторону, в другую только пытается это делать. с обратным ходом беда всётаки.
Пока отчитываться не о чем, только голое железо я просто смотрел как все моторчики дрыгаются пока как бы фрезеруют демо проект. Теперь нужны муфты подшипники, и нужно думать как это всё соединить.
Добавлено спустя 4 минуты 31 секунду: да и в новой программе что я выложил, она не будет работать как драйвер пока не подключишь к com порту. если тебе это не нужно то закоментируй