roboforum.ru

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

MKS SERVO42B шаговик с обратной связью не пропускающий шаги

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 23 янв 2020, 22:06

Myp писал(а):вобще цифра 511 подозрительно совпадает с таблицей синусов


Число 511 подозрительно совпадает с установленными всеми битами в "1" в двоичном коде. 511 = 0x1FF = 0b111111111 :)
И это логично, т.к. задает диапазон ШИМ, который желательно иметь кратный двоичному коду, чтоб не делать дикое колич. проверок и создавать таблицы синусов выровненные для двоичных масок...

Добавлено спустя 5 минут 28 секунд:
Re: MKS SERVO42B шаговик с обратной связью не пропускающий шаги
Вы не там ищете повышение частоты ШИМ. Выше частоты шины периферии не прыгните. Есть только один вариант - уменьшать разрядность ШИМ (период VREF_MAX), также выравнивая по двоичному коду: 511, 255, 127. Каждое послед. число увеличивает частоту ШИМ в 2 раза, соотв. уменьшая разрядность ШИМ тоже в 2 раза...

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Myp » 23 янв 2020, 22:36

Блин, а как тогда нормальные люди делают ШИМ управление моторами чтобы они не пищали обмотками?
если даже с 72 мегагерцами получается писк, а там всего-то 512 значений.

и всё равно непонятно
посчитали синус по таблице, получили красивое в битовом плане число
а потом хренакс и засунули красивое число в формулу с каким то фигом фиксированными цифрами тока 3300 мА и 1500 мА
vrefSin = (uint16_t)((mA * fastAbs(sin) + 1500) / 3300);
в итоге при угле в 90 градусов sin=511 и получатся говняшка
vrefSin = (500мА*511+1500)/3300 = 77,88
а при нуле градусов vrefSin = 0,44
в сумме тоже фигня, 78,333333
потом эту цифру тащат в процедуру setVREF(vrefSin,vrefCos);
которая делает я не знаю что
Код: Выделить всёРазвернуть
//Vref
inline static void setVREF(uint16_t VREF12, uint16_t VREF34)
{
   VREF_TIM->CCR3 = VREF12;                  //TIM_SetCompare3(VREF_TIM, VREF12);
   VREF_TIM->CCR4 = VREF34;                  //TIM_SetCompare4(VREF_TIM, VREF34);
}

#define VREF_TIM TIM3
VREF_TIM->CCR3 = 77,88 это что блин значит ? :(
это тоже какая-то битовая магия?

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 24 янв 2020, 03:32

Myp писал(а):если даже с 72 мегагерцами получается писк, а там всего-то 512 значений.

APB1 может питаться только пониженной в 2 раза частотой от 72 мГц. 72/2/512 = уже 70 кГц. максимум. А это мы еще даже в код не заглядывали.Там шим простой или какой-нибудь центрированный?
Потом, а кто сказал что это пищит шим? Надо мерить частоту. Это может пищать PID регулятор с максимальной частотой снятия данных с энкодера.
Myp писал(а):посчитали синус по таблице, получили красивое в битовом плане число
а потом хренакс и засунули красивое число в формулу

С точность до наоборот. Посчитали что угодно в грязных цифрах, любой разрядности, а потом хренакс и обрезали до красивого числа двоичной маской.
Myp писал(а):в итоге при угле в 90 градусов sin=511 и получатся говняшка

Не очень понял, 90 град. от полного поворота сервы? Таблица в 512 дискрет в таком случае очень мало. Если 90град. от полного одного шага шаговика, то не понимаю где говняшка, т.к. полный шаг = 360/200 град.
Myp писал(а): это что блин значит ?

ХЗ! Ты хочешь меня заставить лопатить исходники? :cry: Тогда вопрос: В чем затык? Не нравится свист? Искать источник, может это не шим. Кста, а сколько драйвер шаговика может сьесть кГц ШИМ-а?

Попробуй поставить дроссели на шаговик (по 1 шт на обмотку, т.е. 2 :) ), Чтоб они полностью убрали пульсации шим. Потом лезь осциллом и изучай аналоговый сигнал на пинах двигателя после дросселей. Тогда станет понятно кто пищит, ШИМ или кривой алгоритм управления.

Эх возбуждаете меня этой сервой, где ее можно быстро купить? Ненавижу ждать по 30 дней с али...

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Myp » 24 янв 2020, 23:13

Dmitry__ писал(а):Потом, а кто сказал что это пищит шим? Надо мерить частоту. Это может пищать PID регулятор с максимальной частотой снятия данных с энкодера.

блин, куда не глянь всюду непойми чё, я незнаю, пойду посмотрю как там угол снимается.

Dmitry__ писал(а):Посчитали что угодно в грязных цифрах, любой разрядности, а потом хренакс и обрезали до красивого числа двоичной маской.

там таблица посчитанных синусов уже забита, в таблице цифры от -511 до 511
Код: Выделить всёРазвернуть
static const int16_t sineTable[1280] = {
0,3,6,9,13,16,19,22,25,28,31,34,38,41,44,47,
50,53,56,59,63,66,69,72,75,78,81,84,87,90,94,97,
   // и так далее до
501,502,502,503,503,504,505,505,505,506,506,507,507,508,508,508,
509,509,509,509,510,510,510,510,510,511,511,511,511,511,511,511,
   //и дальше в обратную сторону через ноль до -511



Dmitry__ писал(а):Не очень понял, 90 град. от полного поворота сервы? Таблица в 512 дискрет в таком случае очень мало. Если 90град. от полного одного шага шаговика, то не понимаю где говняшка, т.к. полный шаг = 360/200 град.

Для полного физического шага.
Для 90 градусов синус по табличке в памяти равен 511.
это красивое число 511 зачем-то засунули в странную формулу масштабирования до 3300 мА
(Это максимальный ток для шаговика размера 57, такое ощущение что формулу забыли исправить под 42 шаговик, у меня стоит драйвер A4954 и он в пике 2 ампера может дать)
текущий ток мотора умножают на синус угла, прибавляют 1500 мА и делят на 3300 мА
Снимок.PNG
Снимок.PNG (9.4 КиБ) Просмотров: 5193

получили цифру 77,87878787 запихали её в uint16_t и отправили в регистр ШИМа
Твоя теория про красивость цифр в битовом плане рушится.
нафига диапазон 0-511 масштабировать в 0-77?

Dmitry__ писал(а):ХЗ! Ты хочешь меня заставить лопатить исходники?

Да, там всего пара строчек, даже я почти разобрался.

Dmitry__ писал(а):Эх возбуждаете меня этой сервой, где ее можно быстро купить? Ненавижу ждать по 30 дней с али...

У нас не видел :(


Dmitry__ писал(а): Кста, а сколько драйвер шаговика может сьесть кГц ШИМ-а?

в даташите не нашёл http://elecanisms.olin.edu/handouts/2.3 ... asheet.pdf
там есть некая Toff Constant Off-time = 25 мкс
The current in each of the two output full bridges is regulated
with fixed off-time pulse width modulated (PWM) control circuitry
возможно надо от неё плясать
Безымянный1.png


Добавлено спустя 1 час 52 минуты 24 секунды:
Re: MKS SERVO42B шаговик с обратной связью не пропускающий шаги
феерически :shock:
у китайцев в прошивке вырезан пункт меню установки рабочего тока, оставлен только пункт тока удержания
при этом пункт удержания переименован как будто это рабочий ток
но по факту если на экране выбрать 100 мА то ток 100мА запишется в motorHoldCurrent, а в motorCurrent запишется 200 :o
при этом само собой в PID алгоритме выбирается ток для корректировки согласно этим двум величинам.
ma = (int32_t)((fastAbs(u) * fastAbs((int32_t)(motorParams.currentMa - motorParams.currentHoldMa))) / fullStep) + motorParams.currentHoldMa;
а потмо хренакс и та странная формула с масштабированием...
я понимаю если бы масштабировалась в заданные пределы 100-200 мА, но масштабируется в 1500-3300

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Myp » 25 янв 2020, 18:26

Вобщем обратился к истокам
китайцы при передирании с оригинала выбросили кусок кода который масштабировал ток)))
заодно выбросили опцию уставки тока удержания отдельно от рабочего тока...

фик знает что ещё

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Myp » 27 янв 2020, 01:34

вернул кусок кода для масштабирования и меню для выбора тока.
вроде норм стало.

код местами совпадает с оригиналом, но видимо взята какая-то древняя версия, кое каких вещей не хватает плюс кое что китаец переименовал.
местами даже проапгрейдил, кое какие расчёты заменил битовыми сдвигами.

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 27 янв 2020, 11:09

Myp писал(а):вроде норм стало.

Молодчага, а норм стало что? :) Пропал свист? Или управление стало лучше?
А ссылки не дашь на ориг. код?

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Myp » 27 янв 2020, 18:21

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

теперь бы ему добавить быстродействия
ато на вал нажимаешь, он успевает сместиться на градус, потом спохватывается и обратно возвращается.
киатйцы стопудово с ПИД накосячили))) "лишние" режимы работы тоже выкинули.

Прошивка китайская https://github.com/makerbase-mks/MKS-SERVO42B
Прошивка исходного автора https://github.com/Misfittech/nano_step ... _nano_zero

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

setar » 28 янв 2020, 09:29

ты гляди, так и китайский ширпотреб напильником до ума доведешь !

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 28 янв 2020, 21:00

Myp, спасиба, гляну на днях. Не удаляй :)

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 31 янв 2020, 12:39

Сравнил код, да ну на фиг, один на ардуино иде32, другой на платформио. Удалил все с компа, свое время дороже :)
Буду вялотекуще наблюдать за развитием этого MKS SERVO42B, пока даже въехать не могу зачем замутили сервопривод на шаговике :)

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

macar2005 » 10 сен 2020, 07:47

Использую в своих принтерах MKS SERVO42А в директ экструдере. На мой взгляд лучше обычного шаговика.

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Dmitry__ » 23 авг 2022, 12:22

Купил 3 сервы MKS-SERVO42C
Одну серву поставил в mendel90. 2-ю в быструю поворотку для камеры (ради нее все и затеивалось). 3-я пока лежит без дела :)
Первым делом начал изучать систему команд для управления по uart, т.к. хотелось сделать поворотное устройство из желудей и веточек. Серва иногда замирает на 0.2 сек. и как с этим бороться пока не понял. Забил на uart, занялся step/dir как в 3d принтерах. На базе библиотеки AccelStepper написал управлялку, все замирания пропали, все крутится норм. И тут я решил проверить максимальную скорость сервы. Выставил запредельные параметры и начал крутить:

Код: Выделить всёРазвернуть
   myStepper.setMaxSpeed(10000);
   myStepper.setAcceleration(30000);
   myStepper.setSpeed(10000);


Ардуина выдала макс. частоту на step 4кГц. Серва крутилась примерно 8 об/сек. Что близко к ее параметрам. И тут я нажал reset на ардуине. Серва как крутилась так и осталась крутиться :))
Крутилась еще около 5 секунд. Т.е. серва не успевала обработать данные, накапливала их и отрабатывала по мере возможностей. Вот и думайте как это работает в принтере 8)

Резюмирую секс с сервой:
1. В принтере работает норм, особых сглаживаний на печати не заметил. Все преимущество - не теряет шаги, холодный мотор, нереально огромное усилие.

2. Для своих изделий: Сырое управление по uart. До сих пор нет исходников. В отличии от SERVO42B - применен китайский контроллер вместо stm32, пока не понял как его программировать :(

Фотки поворотки с тепловизором:

tepl_1.jpg
tepl_2.jpg

tepl_3.jpg
tepl_5.jpg
Последний раз редактировалось Dmitry__ 18 сен 2022, 20:25, всего редактировалось 1 раз.

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

Madf » 13 сен 2022, 10:26

Алоха!

Запили своё. :)
А то попахивает блогерством и обзорами. :D

Re: MKS SERVO42B шаговик с обратной связью не пропускающий ш

setar » 15 сен 2022, 13:37

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


cron
Rambler\'s Top100 Mail.ru counter