roboforum.ru

Технический форум по робототехнике.

DC Servo Controller(makerbot)

DC Servo Controller(makerbot)

ilalexey » 28 июн 2011, 13:15

Топик является продолжением http://roboforum.ru/forum11/topic10041-165.html#p209543
Поскольку отошли от темы bldc-hv, решили продолжить мусолить DC_Servo_Controller тут.
сайт http://wiki.makerbot.com/dc1
-------------------
По состоянию на сегодня имеем железо с невменяемыми мозгами(о чём на сайте не упоминается)
-------------------
Вариант с оптическим энкодером http://www.thingiverse.com/thing:6814
-------------------
Видео с магнитным энкодером


######################
### LOG
######################
В схеме makerbot-magnetic-rotary-encoder-2.1-REV-C
C2,C3 - электролиты
пока C2 удалил, C3 10х16 поставил
---------------------
Тематические ссылки:
[[Сдвоенный_энкодер]]
http://roboforum.ru/forum2/topic5043.html
http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html
http://robocraft.ru/blog/arduino/34.html
http://robocraft.ru/blog/arduino/45.html
http://openservo.org/StepByStep
Последний раз редактировалось ilalexey 07 июл 2011, 19:54, всего редактировалось 5 раз(а).

Re: DC Servo Controller(makerbot)

avr123.nm.ru » 28 июн 2011, 13:21

А энкодер какой марки ?

Re: DC Servo Controller(makerbot)

ilalexey » 28 июн 2011, 13:24

Магнитный? - AS5040
Вложения
AS5040_Datasheet_v2_01.pdf
(693.76 КиБ) Скачиваний: 0

Re: DC Servo Controller(makerbot)

avr123.nm.ru » 28 июн 2011, 13:44

У меня есть аналоги, а магнит вы специальный использовали или подходящий ?

Re: DC Servo Controller(makerbot)

ilalexey » 28 июн 2011, 13:49

специальный

Re: DC Servo Controller(makerbot)

linvinus » 28 июн 2011, 16:12

Схема подключение драйвера A3949 c контроллером atmega168
-----------------
mega168 | a3949
-----------------
pb0(d8) | 2(mode)
pd6(d6) | 3(phase/dir)
pd7(d7) | 5(sleep)
pd5(d5) | 6(enable)


ilalexey,
в драйвере A3949 реализовано три алгоритма торможения (честно говоря это мой вольный перевод)
1)Brake (slow decay) медленное торможение ( ток частично идёт через диоды) 2,4,8 состояния по диаграммам
2) Fast decay SR (synchronous rectification) быстрое торможение (ток идёт через два нижних транзистора) 3,9 состояния по диаграммам
3) Fast decay SR быстрое торможение с зарядом батареи (ток течёт в направлении батареи, остальное естественно не реализовано) - шестое состояние по диаграммам.

Но опять же это по диаграммам, которые не очень понятны см http://www.allegromicro.com/en/Products ... 9/3949.pdf

Добавлено спустя 1 час 51 минуту 45 секунд:
Я вот что ещё подумал.

А если попробовать такой алгоритм.
1) даём ШИМ 70% (т.е. заведомо большой ток, чтобы быть уверенным что мы стронулись с места)
2) ждём какое то количество микро секунд.
3) тормозим.
4) ждём какое то количество микро секунд.
5) смотрим положение сместились или нет. (abs(position-target) )
6) если нет, прыгаем на первый шаг

Это должно быть примерно тоже самое что один шаг у шагового двигателя.
если период импульсов step будет больше периода на шаге 2+4, всё должно работать.
Нужно будет только подобрать временные константы.
Начать нужно с частоты шим.

Конечно щёткам на двигателе будет не сладко. Но это в любом случае при таком способе управления.
Чтобы уменьшить помехи обязательно нужно зашунтировать двигатель маленьким керамическим конденсатором, где то на вики кажется про это было.


Кстати, кажется в коде ошибка:

//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);
}
else
{
digitalWrite(MOTOR_SPEED_PIN, LOW);
}


должно быть
else if (position < target)
{
digitalWrite(MOTOR_DIR_PIN, LOW);
analogWrite(MOTOR_SPEED_PIN, motor_speed);
}

Добавлено спустя 25 минут 7 секунд:
Я бы лучше поставил энкодер на вал двигателя, зная передаточное число можно будет привести к положению на выходе редуктора.
В этом случае нагрузка на контроллер конечно будет больше.

За то на один шаг мы получим n импульсов с энкодера.
допустим передаточное число N=10, т.е. за 10 оборотов двигателя редуктор поворачивает на один оборот
допустим нам нужна точность 0,5градуса, чтобы сделать один оборот редуктора нужно 360/0,5=720 шагов (сигналов step) .
за один шаг редуктора, ротор мотора должен повернуться на 0,5*10=5градусов, при этом энкодер выдаст 5градусов/0,35градусов=14 импульсов.
Это уже кое что, в смысле за 14 импульсов можно рассчитать начальную и конечную точку в шаге.
При этом точно контролировать когда жать на тормоз.
Но писать нужно не на языке ардуино а на чистом СИ.
Одна функция digitalwrite чего стоит! (в смысле очень медленная, есть тесты производительности)

Добавлено спустя 3 минуты 1 секунду:
Тут может получиться так что atmega не будет успевать за импульсами step, нужно всё очень точно рассчитывать.
Какая максимальная скорость должна быть у сервомотора на выходе? т.е. на выходе редуктора.

Re: DC Servo Controller(makerbot)

ilalexey » 28 июн 2011, 17:01

Редуктор получается такой:
1) G6_G5 ... 48/20=2.4
2) G4_G3 ... 44/18=2.444444
3) G2_G1 ... 40/16=2.5
итого 14.666666 : 1
у нас имеется энкодер на 1024 позиции и 360гр. Что дальше с этими цифрами делать пока не решил.
>Я бы лучше поставил энкодер на вал двигателя
В том-то и затея - хотел баги редуктора обойти, чтобы на выдаче было больше чем позволяет шаговик. Я с этим єткодером ещё и сглупил на лишние 70грн. Узнал, что существует as5045 с разрешением 4096 позиций. Купил и впаял, а чтоб даташит поштудировать ума не хватило. Кинулся кабель подключать, а у 45й-то 3 и 4 нога "нот коннектед" оказывается :shock:
Скорость, в данной ситуации, не так важна в принципе. В репликаторЖ шаговики комфортно живут на 68 едениц. Что это за еденицы, какой эквивалент чего с чем хз.
По секундомеру не засекал, так что это для меня пока абстракция.
Вложения
AS5045.pdf
(584.85 КиБ) Скачиваний: 0
DC_servo_gear.png

Re: DC Servo Controller(makerbot)

linvinus » 28 июн 2011, 17:49

>хотел баги редуктора обойти,
не понял, что значит обойти?

>В репликаторЖ шаговики комфортно живут на 68 едениц. Что это за еденицы, какой эквивалент чего с чем хз.
обычно скорость подачи определяется как мм/сек,
нужно выяснить.
скорость двигателя может быть разной, всё зависит от конструкции передачи.
Редуктор потом тоже что то будет вращать? шпильку или ремень?

Re: DC Servo Controller(makerbot)

ilalexey » 28 июн 2011, 18:17

>не понял, что значит обойти?
Размышлял так: энкодер даёт информацию о конечном положении вала, значит имея шестерни с люфтом, мы получим конечное положение вала в нужном месте.
>Редуктор потом тоже что то будет вращать? шпильку или ремень?
зависит от результата(если он будет конечно). скорее всего это будет маленький червячёк.
Как я ранее говорил, это на четвёртую ось(формы вращения диаметром до 50-60мм) затея была.

Добавлено спустя 3 минуты 49 секунд:
>обычно скорость подачи определяется как мм/сек
точно 68 не мм/сек. в 5мин больше похоже :)

Re: DC Servo Controller(makerbot)

linvinus » 28 июн 2011, 18:50

>Размышлял так: энкодер даёт информацию о конечном положении вала, значит имея шестерни с люфтом, мы получим конечное положение вала в нужном месте.
а как быть с инерцией? и при торможении люфт всё равно даст о себе знать только в обратном направлении.

Попробуй для начала просто точно повернуть выходной вал редуктора, хотя бы на 1 шаг.
Т.к. кроме люфта, есть ещё переходной процесс, даже если всё работает идеально, с момента сигнала step до реального перемещения происходит какое то время.
За это время другие двигатели тоже сместятся, в результате фреза может быть не на том месте, где рассчитывала программа.

Re: DC Servo Controller(makerbot)

ilalexey » 29 июн 2011, 14:12

твой код заливал - ещё хуже ведёт себя. назад вообще перестаёт ехать, стоит и шкварчит. раньше зум шёл.
Скоростон кареток на шаговых осях 1.14мм/сек.(50мм/44сек)

Re: DC Servo Controller(makerbot)

linvinus » 29 июн 2011, 14:19

а выложи исходный файл, что у тебя получилось?

Re: DC Servo Controller(makerbot)

ilalexey » 29 июн 2011, 14:36

я пробовал несколько изменений. это то, что на последний момент
Вложения
stepper_emulator_01.zip
(1.13 КиБ) Скачиваний: 0

Re: DC Servo Controller(makerbot)

ilalexey » 29 июн 2011, 20:50

тут в конце редуктора http://www.reprap.org/wiki/Magnetic_Rotary_Encoder_1_0
Вложения
Cache-2631512184_1f6131b123.jpg

Re: DC Servo Controller(makerbot)

linvinus » 30 июн 2011, 10:35

Попробуй эту версию? http://pastebin.com/PwB2herb
у тебя не было olddir = dir;

и я вернул
else if (position < target)
{
digitalWrite(MOTOR_DIR_PIN, LOW);
analogWrite(MOTOR_SPEED_PIN, motor_speed);
}

назад он тоже должен использовать шим, иначе смысл управления теряется.
если использовать digitalWrite(MOTOR_SPEED_PIN, motor_speed);
то контроллер включит задний ход на полную мощность, если motor_speed>0.


Rambler\'s Top100 Mail.ru counter