токарь свой есть? Как вариант - прикрепить всё на соплях, накупить алюминия брусков и сделать капитальное.
Добавлено спустя 2 минуты 50 секунд: последней фразы не понял. ведь к ком порту подключаемся пока
Добавлено спустя 19 минут 39 секунд: луче не намного стало. появились цифры введеные в терминале. привецтвенное сообщение появляется после ввода "е". цифры отправляются и выводятся в одну строчку. двиг на их не реагирует. реагирует на е со 150го раза, как и раньше ---- Тут был? http://www.openservo.com/viewcvs/OpenServo/AVR_OpenServo_V3/?root=cvs
>последней фразы не понял. ведь к ком порту подключаемся пока да пока отлаживаем, а если ты захочешь подключить к reprap то не будет работать т.к. Ожидает рабочего соединения по com порту.
попрежнему ничего не шевелится. даже леды молчат может изза этого? - 102...analogWrite(MOTOR_SPEED_PIN, motor_speed); про ссылку - там вроде пид как-то реализован
не, через энтер отправлял в пути заработало, хоть и кривенько. Такое впечатление, что скорость или шаги(с шагами раньше было) подаётся, а двиг на удержании и только толчки делает, но не сдвигается. когда s подаю скорость 0 всёравно. ставлю 250, потом с - сбрасывает на 0. те оно шагать и не должно при 0 скорости?
Добавлено спустя 4 минуты 8 секунд: 255s ввёл - сработало. Но опять на удержании стоит
Добавлено спустя 1 час 4 минуты 53 секунды: а почему нигде не указано что "вот это" 1042 позиции, а "вот это" один шаг? ..или что-то в таком духе
Добавлено спустя 44 минуты 25 секунд: на 158й строчке 100 поставил. "255s" шагает, но до определённого момента и только в одну сторону, не взирая на а и д. потом делает прокрутку
Энкодер стоит на первой шестерне которую вращает двигатель, от неё до колеса ещё три понижающих шестерни. Для видео сделал шаг +10, если сделать +1 то будет очень медленно. Крутится нормально в обе стороны.
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
1) у меня слабый источник питания, поэтому чтобы просто сдвинуть шестерни с места мне нужно подать сигнал pwm 220 это 88% от максимальной мощности. поэтому у меня двигатель сильно не разгоняется
2) данные у меня не с вала двигателя а с шестерни которую он вращает, не помню точное передаточное число, для определённости пусть будет 4. но т.к. У тебя редуктора нет, то имеет смысл делать шаг не на 1 значение энкодера, а на 10. т.е. За один шаг будет 10 значений энкодера, тебя это пока волновать не должно. за это отвечает константа #define STEP_SIZE 10
3) подбери значение PWM при котором двигатель начинает вращаться, обычно это очень ярко выраженная точка.
в исходнике поправь значение #define MOTOR_START_PWM 50 у меня это значение 220, но у тебя должно быть меньше.
ещё я добавил обнуление счётчиков если они равны в течение 4х циклов. Это должно предотвратить спонтанное прокручивание после превышения максимального значения +-32677.
т.е. Твои действия: 1) в ручном режиме задаёшь скорость и смотришь при какой начинает вращаться, затем записываешь это число на единицу меньше в MOTOR_START_PWM
2)перепрошиваешь
3) теперь запускаешь в автоматическом режиме, задаёшь только шаг, кнопка s кнопка d должна менять направление для шага s
Добавлено спустя 9 минут 59 секунд: от reprap пока работать не будет! Я закоментировал //dir = digitalRead(DIR_PIN);
что-то я совсем туплю.. при наборе скорости мотор сдвигается на 106-107. выставил на 105 D ничего не переключает. всё время Dir=0 S первый раз ввожу - делает прокрутку, затем дрожит на месте. Дальше s не шагает
т.е. Ты должен задавать скорость 123<enter> и она должна устанавливаться единственное, судя по коду не нужно вводить e т.е. достаточно m 123<enter> двигатель должен вращаться со скоростью 123 затем если ты наберёшь 200<enter> то двигатель должен начать вращаться быстрее.
Это что касается определения PWM с которого начинает вращаться двигатель.
Чтобы задавать шаги нужно выполнить sssss....
dssss ... должно поменять направление вращения, чтобы сделать 1 шаг нужно два раза нажать s
я надеюсь ты это всё в путти делаешь?
Добавлено спустя 1 минуту 38 секунд: dir=0 да значение менялось но всегда показывало 0 исправил http://pastebin.com/H4jy4S5T
Добавлено спустя 2 минуты 16 секунд:
ilalexey писал(а):Добавлено спустя 3 минуты 51 секунду: может так?:
motor_speed максимум 255! Там всего 8мь разрадов. если ты запишешь больше то будет ((255 + distance)-255)
Добавлено спустя 3 минуты 41 секунду: У меня distance всегда равно 1 т.е. Мотор "шагает" без ошибки! на ролике в обратную сторону он идёт мгновенно. т.е. два раза s = 1 шаг мотора, ни больше ни меньше. d меняет направление и всё тоже самое два раза s = 1 шаг мотора никаких пропусков шагов.
Добавлено спустя 6 минут 11 секунд: Я добавил больше информации когда шаг делать будешь http://pastebin.com/GwW4Jf7V так должно быть понятнее, но учти что каждый второй раз target на 1 меньше будет показываться.
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
делаю в путти. сначала скорость так и набиралась(как запланированно). теперь вращение и опять удержание с дрожью Такое впечатление, что где-то какието артефакты жизни не дают. Может такое быть изза отсутствия электролита на энкодере(с гнд на вкк)?
Дрожать оно должно, в этом нет ничего страшного, но вот на шаг в автоматическом режиме, оно должно реагировать в любом случае. попробуй последнюю версию + твоё значение START_PWM? там же если в момент дрожания введёшь s то должен увидеть текущую позицию и назначение.
Добавлено спустя 9 минут 50 секунд: Алгоритм такой: когда manual_mode=0
когда значение newStep переключается с 0 на 1 происходит добавление к target+=STEP_SIZE; далее программа сравнивает if (position_tmp > target) текущая позиция больше назначения значит, крутим в обратную сторону со скоростью motor_speed = MOTOR_START_PWM + distance; if (position_tmp < target) текущая позиция больше назначения значит, крутим в прямую сторону со скоростью motor_speed = MOTOR_START_PWM + distance; иначе position_tmp == target мы достигли места назначения, выключаем двигатель.
но двигатель может не остановиться! Тогда он перелетит и начнётся всё по новой. поэтому он может дёргаться, но в окрестности текущего положения. если, пока он дёргается, дать ещё один шаг, то должен дёргаться в окрестности нового положения и т.д.
Так же , если в установившемся режиме попробовать сдвинуть вал двигателя он сам должен вернуться в точку назначения! Т.е. Он должен сопротивляться, если его пытаться крутить.
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
нет не похоже это на нормальную работу. во первых target должно быть равно position, и в идеале оно настолько быстро отрабатывает что большую часть времени должно быть 0. смени один раз dir , target должен изменяться в другую сторону.
//super primitive control of the motor. if (position_tmp > target) { digitalWrite(MOTOR_DIR_PIN, LOW); analogWrite(MOTOR_SPEED_PIN, motor_speed); } else if (position_tmp < target) { digitalWrite(MOTOR_DIR_PIN, HIGH); analogWrite(MOTOR_SPEED_PIN, motor_speed); } else { digitalWrite(MOTOR_DIR_PIN, HIGH); digitalWrite(MOTOR_SPEED_PIN, LOW); }
Добавлено спустя 3 минуты 58 секунд: или проще выводы мотора поменять местами
Добавлено спустя 10 минут 39 секунд: Dir влияет только на приращение target. остальное работает в автоматическом режиме и всегда стремится уравнять target и position. при условии что мотор крутится в верном направлении, если направление вращения мотора реверсивное то контроллер войдёт в резонанс.
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
ЗАРАБОТАЛО!! шагает и туда и сюда иногда попадает в положения, в которых ему какбы трудно крутить и он не шагает туда, а доползает. Наверно это может ещё быть связано со сборкой на соплях энкодер/двиг пс: поменял код, а не ноги