Для меня самое понятное соотношение: 1, 2 или 4 магнита на одну группу полюсов (группа = 3 полюса). Т.е. те соотношения которые не дают пульсаций гармоник в калькуляторе при нажатии кнопки "advanced". Например: 12s16m, 12s8m, 18s12m, 18s6m и.т.д. Подбирать так: Число слотов делим на 3 и умножаем на 1, 2 или 4.
Последний раз редактировалось dccharacter 12 июн 2016, 08:07, всего редактировалось 2 раз(а).
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
открытый проект векторное управление BLDC мотором на FPGA (используется софтварный процессор, программа управления на Си) https://github.com/madcowswe/Servo разработчик пытается перенести на STM32F4
немного теории и моего опыта для тех кто захочет управлять бесколлекторным мотором при помощи абсолютного энкодера.
Для понимания происходящего обязательно понимание векторного управления - преобразования Парка/Кларка. тут есть ссылка post351030.html#p351030 Если кто не в курсе, то преобразование Кларка позволяет перейти от 3х фазного двигателя к двух фазному, а преобразование Парка позволяет привести всё в систему координат ротора. Т.е. будучи в системе координат ротора мы сразу знаем какой вектор тока нужно подать чтобы получить необходимый нам момент и компенсировать противоэдс.
Систему координат ротора можно получить разными способами, я использую абсолютный энкодер AS5045. Энкодер даёт механическое положение ротора, а нам нужно положение в электрических градусах, поэтому переводим данные энкодера в электрические градусы (с учётом пар полюсов) (я говорю "электрические градусы" для упрощения восприятия, в формулах все углы в радианах)
в моём случае PolePairs = 11, AS5045_max = 4096 MFPhase - положение в электрических градусах.
Теперь когда мы в системе координат ротора мы можем точно сказать какой вектор нужно задать чтобы обеспечить максимальный момент для этого положения, как ни странно, ток должен опережать ротор на 90 градусов. Добавим 90 градусов к нашему текущему положению и далее при помощи обратного преобразования Парка + svpwm получим правильный ток который будет вращать мотор. MFPhase += (90.0 * (M_PI/180.0));
Пример кода, (есть в первых версиях библиотеках STM32 FOC) который отвечает за этот участок
где power это int16_t (-32767 .. 32766) - сила тока которую мы подаём в мотор, это знаковая величина отрицательное значение будет вращать мотор в обратную сторону, так что всё управление мотором сводится к управлению этой величиной, как в обычном моторе постоянного тока.
Есть ещё одна тонкость, поскольку датчики у меня самодельные, их положение никак не согласовано с положением ротора, прилепил как получилось (подробности сборки в моём блоге)
(говорю упрощённо) Дело в том что положение ротора задаётся при помощи 3х фазного ШИМ, ему на вход мы подаём электрические градусы и мощность, нужно чтобы положение ротора, которое мы получаем в результате того что подали на вход ШИМ переобразователя, совпадало с положением которое сообщает энкодер. Другими словами если мы подадим на вход ШИМ преобразователя электрический угол "0" градусов и мощность 30% ротор займёт соответствующее положение, а вот датчик будет сообщать отличный от "0" угол, поэтому чтобы получить "0" нам нужно от значения угла с энкодера вычесть то что он показывает.
Для того чтобы вычислить угол рассогласования ШИМ и энкгодера я делаю так, принудительно устанавливаю ротор в статическое положение MFPhase=0; power = 8000; Stat_Volt_alfa_beta.qV_Component1 = (int16_t) ( sin(MFPhase) * (float)(power) ); Stat_Volt_alfa_beta.qV_Component2 = (int16_t) ( cos(MFPhase) * (float)(power) ); SVPWM_IcsCalcDutyCycles(Stat_Volt_alfa_beta);
включаю данные отладки и смотрю какой угол в электрических градусах показывает энкодер, обратите внимание что если в этот момент покрутить двигатель руками, он будет перескакивать из одной статичной точки в другую, но энкодер будет сообщать одно и тоже положение в электрических градусах (точнее фазу, если привести значения в промежуток от 0 до 2PI то значения будут совпадать) +- погрешность энкодера.
у меня за весь механический оборот положение отличается на +- 5 электрических градусов. Если кто подумал что это "плохая" точность могу вас ещё немного порадовать Датчик имеет задержку, т.е. то значение которое мы получили после того как считали по SPI уже отстает от реального, и чем выше скорость тем сильнее отстаёт, в документации на датчик есть рекомендация как компенсировать это рассогласование, я этого не делал пока. Но не смотря на это мотор крутится и даёт неплохой момент.
Таким образом приведённая выше формула получения электрических градусов немного изменяется
Строго говоря датчики позволяют прописать это смещение себе в память, но программирование датчиков AS5045 заморочено поэтому я вычитаю в программе.
Пара слов о неприятном, есть такая гадкая штука как "залипание", в этой ветке уже обсуждали, и приводили статьи где предлагаются решения этой проблемы. Это залипание сильно мешает нам когда мы управляем мотором на малых оборотах, если бы его не было то тот вектор тока который мы подали в статор задавал бы точное положение ротора, на практике к вектору тока добавляется ещё вектор залипания, в результате в каких то положениях ротор отстаёт от точного положения а в каких то опережает. Бороться с этим можно двумя путями, 1) сменить мотор на PMSM
2) программно
Я борюсь программно, для этого 1) замеряем и запоминаем силу залипания для каждого положения ротора (360 значений) в электрических градусах, на сверх низких оборотах. потом это значение мы сразу будем подсовывать в наш пид регулятор как "предсказание". 2) пид регулятор, он неплохо борится с этой напастью если сделано управление по положению а на вход pid подавать ошибку положения а не скорость.
Получился вот такой результат
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
гуглится по названию Replacement Motor Wheel For 4.5" Smart Electric Self Balancing Scooter стоимость около $50 за штуку. (а за 180 можно взять новый скутер с доставкой на таких колёсах)
тут на форуме verial пытается приспособить такие моторы для роботов.
R3 forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html R4 roboforum.ru/post336339.html#p336339 Делать надо хорошо - плохо получится само!
Собственно, к чему я это? Смотрел что по чём на ebay и на алиэксперсс, есть качественные моторы, видна нормальная намотка, а есть вот такие поделки. Вот ещё экземпляр, диаметр статора 40мм.
Брендовые моторы: (судя по сайтам) Dualsky Sunnysky EMAX
Господа а что скажете про перемотку комповых кулеров?
намотать проводом потолще, заменить пару транзисторов на более мощные схема там примитивная, датчик холла включает транзисторы обмоток. статор большой, крыльчатка на паре подшипников.
комп.куллер не рассчитан на норм нагрузку, как только начнешь его норм грузить, все его пластиковые, скользящие подшипники и корпус в утиль уйдут впрочем, если побаловаться...то можно, хотя норм обороты вряд ли получишь
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Madf писал(а):все его пластиковые, скользящие подшипники и корпус в утиль уйдут
не актуально.
dccharacter писал(а):А цель?
дуодецикоптер делаю
просто интересно, а будет ли оно лучше дуть? ну и ваще у меня теперь 3д принтер нормальный есть, я могу забубенную крыльчатку распечатать и новый корпус
Не круто Делай из сидирумовских брушлесов(и при этом каждый перематывай) - вот это будет крутизна немерянная ..а потом Индийский штрих в конце(типа когда они цветным песком долго рисуют, а потом это всё дело на ветер пускают)
Без всякой перемотки, если связать вместе, будет не плохая очистительная станция в курилку. А если плоскость сборки согнуть параболой, её "3d" можно будет назвать(и продать за дорого).