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 раз(а).
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение avr123.nm.ru » 28 июн 2011, 13:21

А энкодер какой марки ?
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 28 июн 2011, 13:24

Магнитный? - AS5040
Вложения
AS5040_Datasheet_v2_01.pdf
(693.76 КиБ) Скачиваний: 0
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение avr123.nm.ru » 28 июн 2011, 13:44

У меня есть аналоги, а магнит вы специальный использовали или подходящий ?
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 28 июн 2011, 13:49

специальный
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

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, нужно всё очень точно рассчитывать.
Какая максимальная скорость должна быть у сервомотора на выходе? т.е. на выходе редуктора.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

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
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 28 июн 2011, 17:49

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

>В репликаторЖ шаговики комфортно живут на 68 едениц. Что это за еденицы, какой эквивалент чего с чем хз.
обычно скорость подачи определяется как мм/сек,
нужно выяснить.
скорость двигателя может быть разной, всё зависит от конструкции передачи.
Редуктор потом тоже что то будет вращать? шпильку или ремень?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 28 июн 2011, 18:17

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

Добавлено спустя 3 минуты 49 секунд:
>обычно скорость подачи определяется как мм/сек
точно 68 не мм/сек. в 5мин больше похоже :)
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 28 июн 2011, 18:50

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

Попробуй для начала просто точно повернуть выходной вал редуктора, хотя бы на 1 шаг.
Т.к. кроме люфта, есть ещё переходной процесс, даже если всё работает идеально, с момента сигнала step до реального перемещения происходит какое то время.
За это время другие двигатели тоже сместятся, в результате фреза может быть не на том месте, где рассчитывала программа.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 29 июн 2011, 14:12

твой код заливал - ещё хуже ведёт себя. назад вообще перестаёт ехать, стоит и шкварчит. раньше зум шёл.
Скоростон кареток на шаговых осях 1.14мм/сек.(50мм/44сек)
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение linvinus » 29 июн 2011, 14:19

а выложи исходный файл, что у тебя получилось?
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 29 июн 2011, 14:36

я пробовал несколько изменений. это то, что на последний момент
Вложения
stepper_emulator_01.zip
(1.13 КиБ) Скачиваний: 0
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: DC Servo Controller(makerbot)

Сообщение ilalexey » 29 июн 2011, 20:50

тут в конце редуктора http://www.reprap.org/wiki/Magnetic_Rotary_Encoder_1_0
Вложения
Cache-2631512184_1f6131b123.jpg
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

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.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

След.

Вернуться в Электроника, электротехника

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

cron