roboforum.ru

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

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

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

Начинающий » 18 янв 2020, 21:30

Почитал даташит на магнитный энкодер AS5048

https://www.mouser.com/datasheet/2/588/ ... 522570.pdf

Стало понятно что все таки нужны будут двигатели с двойным валом, если делать самому, т.к. в серийных вал может быть утоплен внутри корпуса двигателя и тогда вы к нему уже магнит не прикрепите, плюс на 30 странице даташита пишут что магниты нужны диаметром 6-8мм и толщиной до 2,5мм, а также намагниченность у них должна быть диаметральная, в то время как на том же али в основном продают с аксиальной намагниченностью.

https://magnet-prof.ru/index.php/osnovn ... aniya.html

Но это не самое страшное также там пишут что индуктивность у магнита на полюсах должна быть в диапазоне 30-70млТл и тут в голову приходит только подбирать расстояние от датчика до магнита вручную, пока датчик не начнет работать, т.к. те магниты которые нашел я например на алишке относятся к классу N35H а это значит что у них на полюсах индуктивность в пределах от 1,17Тл до 1,21Тл что несколько больше чем требуется.

https://aliexpress.ru/item/32950367651. ... b201603_53

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

Myp » 18 янв 2020, 21:36

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

хотя по идее можно было бы калибровать идеальные шаги по энкодеру.

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

Начинающий » 18 янв 2020, 21:42

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

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

Myp » 18 янв 2020, 21:50

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

Начинающий писал(а):на том же али в основном продают с аксиальной намагниченностью.

да, нужны специальные магниты для энкодеров, некоторые продавцы с али продают сразу комплектом энкодер+магнит https://www.aliexpress.com/item/32757626079.html
не стоит подбирать, они могут быть криво намагничены.

Начинающий писал(а):подбирать расстояние от датчика до магнита вручную, пока датчик не начнет работать
у энкодеров обычно есть выход контроля качества сигнала
поэтому подобрать дистанцию не трудно, подкладывать шайбу под крепление пока не будет хороший сигнал.

Добавлено спустя 1 минуту 42 секунды:
Начинающий писал(а):А калибровку мотор делает каждый раз при включении

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

У магнитных энкодеров есть большая проблема нелинейности,
то есть при реальном угле 180.00о энкодер покажет 180.80о, а при угле -180.00о покажет -179.20о
надо строго попадать центром микросхемы в центр магнита и чтоб магнит сам был в центре вала.
даже в идеальном случае Non-linearity, optimum placement of the magnet ±0.8 deg

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

Начинающий » 19 янв 2020, 15:44

Почитал даташит на AS5048 и выяснилось, что в этом энкодере прошить значение нуля можно лишь раз
The AS5048 uses one time programmable (OTP) fuses for permanent programming of the user settings.
На что и вам рекомендую обратить внимание, т.к. если посеять магнит или вдруг по тем или иным причинам изменить его намагниченность, то двиг можно будет либо выкинуть, либо придется менять сам энкодер на платке на новый, ну и магнит соответственно.

Также было интересно как происходит процесс калибровки энкодера, в файле
MKS-SERVO42B-master\MKS-SERVO42Bmaster\firmware\src\BSP\stepper_controller.c
в процедуре StepperCtrl_calibrateEncoder
видно, что калибровка происходит по полному шагу, а не по микрошагам, как думал я и в результате полная таблица калибровки занимает не 64К флэша, а только 200 ячеек по 16бит и того 400 байт :/ Пардоньте, только сейчас заметил что об этом в первом посте написано :pardon:
Но тогда не понятно как тогда этот мотор работает по этой таблице с микрошагом.

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

Начинающий » 20 янв 2020, 14:37

Как по мне так можно было бы и таблицу микрошагов сделать по энкодеру на все 2^15:
в процедуре калибровки можно будет использовать тот факт, что магнитное поле будет то убывать то нарастать по синусоиде как показано в даташите на стр.30
https://www.mouser.com/datasheet/2/588/ ... 522570.pdf
Таким образом получится 4 автоматически отсортированных массива. НО т.к. мы точно не можем сразу поставить магнит например в максимум индукции, то изначально снятый массив будет не отсортирован. Поэтому после съма значений массива нужно будет запустить процедуру сортировки массива, которая просто найдет минимум и максимум, после чего подгонит массив к тому чтоб он начинался с минимума. Дальше массив можно сохранить во флеш, где номер элемента массива будет номером микрошага. Таким образом после этого для этих 4 массивов с равным количеством членов, можно будет применять быстрый бинарный поиск при первом шаге, но при этом стоит учитывать что 2 из 4 массивов будут отсортированы по возрастанию, а другие 2 по убыванию.

Также интересно как в AnanasStepper3.0 организована функция CloseLoop, за счет которой шаговик и после нескольких оборотов возвращается в исходное положение, но к сожалению))) не удалось найти исходники этого "open source" проекта, разве что версию 1.0, но там скорее всего этой функции нет, т.к. заточен он под простую ардуинку у которой тактовая частота не позволит и выложен к тому же еще и с багами, как я понял.
Но подозреваю что там используют нулевое значение энкодера и тупо считают сколько раз он повернулся на полный круг, после чего уже работают с микрошагом.

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

Myp » 20 янв 2020, 23:32

Начинающий писал(а):Почитал даташит на AS5048 и выяснилось, что в этом энкодере прошить значение нуля можно лишь раз

это не привязывание магнита к энкодеру, это лишь привязывание нуля в виртуальной системе координат.
в данной ситуации наплевать где ноль градусов будет, команда STEP увеличивает текущее положение на один шаг.
текущее положение считывается при включении мотора, поэтому что из 27 градусов сделаем 1 шаг, что из 127 градусов один шаг, смысл не меняется, мотор просто сделает один шаг.
при калибровке делается:
Код: Выделить всёРазвернуть
StepperCtrl_motorReset(); //reset and measure new starting point

включается одна из двух обмоток и текущее положение вала принимается за ноль.

Добавлено спустя 2 часа 7 минут 18 секунд:
Начинающий писал(а):Как по мне так можно было бы и таблицу микрошагов сделать по энкодеру на все 2^15:

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

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

Dmitry__ » 21 янв 2020, 03:07

Смысла в микрошагах нет в системах closed loop :pardon:
Система должна работать как с коллекторным двигателем - подал ток, повернулся на нужный угол, снял ток. Микрошаги работают только в статич. положениях без нагрузки и не несут смысловой нагрузки в системе с энкодером. Опять появляется гул шаговиков и нагрев мотора на удержании позиции...

Добавлено спустя 2 минуты 18 секунд:
Re: MKS SERVO42B шаговик с обратной связью не пропускающий шаги
И боюсь не хватит скорости магнитных энкодеров для настоящего closed loop. Нужны оптич. энкодеры...

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

Начинающий » 21 янв 2020, 17:57

Dmitry__ писал(а):И боюсь не хватит скорости магнитных энкодеров для настоящего closed loop. Нужны оптич. энкодеры...


Если я правильно понял что значит частота дискретизации Output sampling rate со страницы 8 даташита, а именно частота съема значений с энкодера, то если работать с микрошагами, возможно хватит, т.к. частота съема значений с энкодера равна 11250Гц а значений микрошагов на оборот получится 2^14=16384. Как я понимаю если рассмотреть случай когда у нас 3 оборота в секунду, то получится что в секунду будет пройдено 3*16384=49152 шагов при возможности снимать только 11250 шагов в секунду. 49152/11250=4,36 ~ 5, т.е. из 5 шагов мы сможем снять только один на энкодере. Как мне кажется этого вполне достаточно с учетом того что можно сделать таблицу микрошагов, по которой определять на какой угол у нас повернулся мотор, при этом опять же использовать микрошаг или нет личное дело каждого, просто при создании таблички для повышения точности мерить по микрошагам.
Но опять же я любитель и могу ошибаться.

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

Dmitry__ » 21 янв 2020, 22:57

Начинающий писал(а):Как мне кажется этого вполне достаточно

Этого недостаточно для удержания позиции с заявленной точностью.

Начинающий писал(а):для повышения точности мерить по микрошагам

Микрошаг точен только без нагрузки. Даже ускорение/замедление полностью убивают точность микрошага.
И опять, зачем делали сервопривод из мотора, который выполняют ту же функцию, но без обратной связи? Шаговик - это дешевый сервопривод с параметрическим управлением. Мирошаг будет потреблять мощность в статич. состоянии. Весь смысл сервопривода с closed loop - это отсутствие потребления при отсутствии ошибки позиционирования.
Самый хороший пример - сервопривод на асинхронном двигателе. Асинхронник нельзя удерживать в статич. положении постоянным током...

В общем странное решение. Лучшее достижение шаговиков - это драйверы TMC. А тут не достигли тишины tmc и не решили главную проблему шаговиков - низкий КПД и соотв. перегрев.

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

Myp » 21 янв 2020, 23:41

Dmitry__ писал(а):В общем странное решение.

Главное чтоб весело =)
2020-01-21 22.36.45.jpg
2020-01-21 22.36.45.jpg (47.01 КиБ) Просмотров: 2807


припаялся, залил прошивку, вроде работает.
надо искать где частота ШИМ задаётся.
в разделе инициализации напсиано:
Код: Выделить всёРазвернуть
//Init TIM3
   TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;
   TIM_TimeBaseStructure.TIM_Period = VREF_MAX;                           //reload c
   TIM_TimeBaseStructure.TIM_Prescaler = 0;                                 //72MHz
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(VREF_TIM, &TIM_TimeBaseStructure);

поставил TIM_Prescaler = 2 стал ниже и противней пищать.
значит надо наоборот повышать частоту...
явно там не 72 мГц как в комментарии указано

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

Dmitry__ » 22 янв 2020, 00:55

Myp писал(а):надо искать где частота ШИМ задаётся.

Так надо период ШИМ менять (уменьшать), который задается VREF_MAX.

Код: Выделить всёРазвернуть
TIM_TimeBaseStructure.TIM_Period = VREF_MAX;

Но могут поползти все настройки, уменьшится разрешение ШИМ и могут быть ошибки из-за уменшенной разрядности ШИМ...

Добавлено спустя 4 минуты 2 секунды:
Re: MKS SERVO42B шаговик с обратной связью не пропускающий шаги
Крути число 511 в board.h :)

Код: Выделить всёРазвернуть
#define VREF_MAX                  (uint16_t)511 //511

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

Myp » 22 янв 2020, 01:26

VREF_MAX используется только в одном месте кода, в настройке таймера

при 1511 мощность мотора сильно падает
при 211 шум както размазался и стал тише в общем, но мотор стал работать грубо, хрустит.

наскока я понимаю частота ШИМ на TIM3 берётся с APB2,вот у него надо частоту менять наверно

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

Начинающий » 23 янв 2020, 12:56

PWM еще упоминается в файле
MKS-SERVO42B-master\MKS-SERVO42B-master\firmware\src\LIB\inc\stm32f10x_tim.h
с 293 строки.
Но если по хорошему, то придется читать даташит на ваш контроллер для PWM камня
https://www.st.com/resource/en/datashee ... f103c8.pdf
кажется страничка 68.
После чего возможно придется дописывать нужное значение в файл stm32f10x_tim.h.
Но честно говоря особо не разбирался :sorry:

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

Myp » 23 янв 2020, 21:47

туда падает для выставления параметров tim3 из процедуры A4950_init(void)
но так как TIM_Prescaler = 0; то ничего не меняется (если поставить 2 то тональность писка меняется, что логично, частота падает вдвое)
источник тактового сигнала для TIM3 это APB1
у СТМ крайне ветвистая структура инициализации и на частоту ШИМ можно повлиять во многих местах
Безымянный.jpg


при инициализации падает сюда src\CMSIS\system_stm32f10x.c
void SetSysClockTo72(void)
и тут вроде как правда 72 мГц вставляется(кварц на 8 мГц стоит), берётся HSE и ставится множитель 9
Код: Выделить всёРазвернуть
#else    
    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL */


но перед этим должен быть уже выбран AHB prescaler и APB1 prescaler...
и там вроде тоже всё дефолтно
Код: Выделить всёРазвернуть
/* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

потом делится пополам DIV2
Код: Выделить всёРазвернуть
    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

и вроде как всё как на картинке и на выходе APB1 Timer Clocks 72 мГц
и TIM3 берёт за источник эту APB1
но почему я тогда слышу этот противный писк?

Добавлено спустя 44 минуты 46 секунд:
Re: MKS SERVO42B шаговик с обратной связью не пропускающий шаги
вобще цифра 511 которая задаёт TIM_Period подозрительно совпадает с таблицей синусов
там тоже от -511 до 511
поэтому если я задаю TIM_Period = 1511, ток выбранный по таблице синусов получается слишком низкий, а если TIM_Period уменьшаю, то соответсвенно чуть что сразу упираюсь в максимум.


cron
Rambler\'s Top100 Mail.ru counter