Контроллер sensorless BLDC мотора с контролем тока через обмотки
Поскольку тема про самодельный контроллер закрыта, а найти готовый контроллер с необходимыми фичами так и не удалось, поднял эту тему.
Если кто-то знает что-то готовое и не прочь поделиться - велкам. Сэкономит мне кучу времени…
Требования к контроллеру:
- Оперативный контроль током фазы/обмоток с ограничением до заданного и, возможно, с оперативным управлением ограничением.
- Возможность вращать мотор на низких и сверхнизких оборотах, например с kv=30…100 (gimbal) плавно
… в пределе с п.1. удерживать мотор в заданном положении с заданным усилием (контролем тока) по типу серв.
- Возможность контроля температуры мотора, можно в ключевом/отсечном режиме.
Требования к токам мотора - небольшие (у меня) 1-3А., рабочее напряжение двигателей 2-3S. Силовую часть могу собрать на полумостах AO4606 (их есть у меня).
Есть что-то готовое? Можно ли переделать из готовых самоделок, в тч из закрытой темы про самодельный контроллер?
Желающих помогать или посоветовать что-то готовое - нет?
а вы хотите, чтобы вам вот так вот отдали проект векторного управления БЛДЦ?
Не понял … что значит “вот так вот отдали”?
Пилю сам, вроде ни у кого не прошу. Получится - постараюсь выложить в общий доступ. Просто ищу помощь, которая может сократить время … только и всего.
Да и не понял … там есть нечто “сложное” в векторном управлении? 😃
P.S. Мне просто надо не только медленно крутить мотор, что просто сразу тянет за собой контроль тока, но ещё и удерживать его с заданным усилием в одном положении.
Найти готовый контроллер со всем комплектом фич мне не удалось. Если Вы такой знаете - подскажите, если нет то вообще непонятно что значит “вот так просто отдать”? Как можно отдать то - чего нет в природе? 😃
по вашему описанию - почти обычный подвес. есть открытый, натыкался. просто коммерческий немецкий ломали китайцы пару лет назад.
если умеете векторное управление - сделайте дешевый ESC на 10 ампер, на входе DSHOT125 хотябы и мультикоптерщики вас изцелуют во все места. там еще и рекуперация подтянется.
Вот в этом самом “почти” и вся закавыка. А не почти, а “готовый” - можете подсказать, чтобы не изобретать лисапед? 😃
Мне не для “коптерного” или “подвесного” применения, хоть и очень похоже на подвес … мне на “Луноход” мотор-колесо сделать … и таких 8шт. 😃
Надо чтобы колесо вставало непосредственно на ротор аутраннера (моторы уже купил и они даже уже на руках, перематывать авиационники придется на очень малое kV, но уже “морально готов” и даже уже приступил).
И вот чтобы это мотор-колесо:
а) ехало вперед-назад как обычно от медленно до относительно шустро;
б) могло ехать очень медленно и плавно и с подтормаживанием “под уклон”;
в) его можно было бы зафиксировать и “шагать” на колесах, в т.ч. и по лестницам/косогорам - нужен “упор” неподвижного колеса …
г) чтобы его не перегреть и не спалить - контроль тока…
Есть готовое? 😃
Не умею и даже пока не знаю “что это такое”, но разберусь. Не боги горшки обжигают. Не так давно (месяц с небольшим) не знал что такое BLDC тоже … кое в чем разобрался - накропал свое понимание тут в дневнике. 😃
Итого все детальки должны уложится примерно в 200руб на контроллер для 2-х BLDC…
То есть готового нет и следовательно “вот так вот отдать” … нечего, жаль. 😉
Ну а желающие помочь - есть?
Гляньте тут: vedder.se
Кое-что по “векторному управлению” проясняется. Вот интересное описание “на пальцах”: geektimes.ru/company/npf_vektor/blog/269486/, вкупе с этим комплектом www.avislab.com/blog/brushless01/ статей, в общем-то “не так оно и сложно”… 😃
Спасибки, но в немецком ни бельмеса не смыслю, хотя когда-то в юности с помощью мамы и словаря таки перевел шикарную книжку по аквариумистике… попробую позвать в друганы гугль-переводчик, но это потребует времени. 😃
rcopen.com/forum/f123/topic500795 оказывается тут тоже интересные обсуждения… Жаль что тема с сентября так и утонула.
Из вчерашнего “сетевого штурма”, что стало понятней:
- Бездатчиковыми моторами можно управлять не только по поиску средней точки принимая сигналы с делителей на АЦП контроллера, но и по сигналам с датчиков тока “точно также” можно определять положение ротора. То есть достаточно 3 входа АЦП, а не 6шт (а то уже расстроился, их всего 8);
1а. Главная проблема тут - слабый отклик противоЭДС при малых скоростях вращения. Но, можно решать подачей ВЧ наводок на фазы, как в сельсинах. В моем случае видимо не должно сказаться как-то значительно, ибо моторы будут с повышенной индуктивностью, среднее kV в диапазоне 30-100.
1б. Собственно этот же способ подачи ВЧ примеси можно использовать для начального определения положения ротора при запуске стоящего мотора и его управления в режиме “малой скорости”.
- Примитивное 6-и шаговое управление, для датчиковых моторов это и есть самый простой случай векторного управления. А если ещё оно делается “по синусу”, так и вообще класс. А если оно ещё и смещает среднюю точку, то может подавать даже большую напругу на обмотки в каждый момент управления (плавающая средняя точка);
2а. управление по синусу устраняет залипания на магнитах при малых оборотах и как раз и создает вращающийся вектор м.поля. В таблице управления достаточно иметь только 1/4 часть синуса, остальное получается вычислением стартовой точки.
2б. моё желание фиксить мотор в заданном положении решается примитивно выставлением “по синусу” фазных токов на это самое положение. Тут важен ШИМ, дабы не пожечь мотор.
-
Все решает ШИМ. Управление просто модифицирует его “как того требует ситуация”, но в конечном итоге ток в обмотках формируется им.
-
Управление моментом можно решать 2-я путями:
а) подавая “размагничивающий” ток в продольную фазу;
б) формируя “урезанный/уширенный шим” в нужное время. -
Преобразование координат при переходах “туда и обратно” вполне можно запихать в таблицы преобразований и сложность вычислений приближается к нулю. К тому что 32-я мега в общем-то должна справиться с возникающими задачами.
Продолжу.
Итого, в качестве испытательного стенда, выбрал имеющуюся у меня самопальную плату на базе ATmega128a (“МУРК-128”) с блоком расширения ОЗУ до 512кбайт и экранчиком TFT в 2". Оба устройства сидят на шине расширения RAM-bus и имеют прямое управление. МК имеет на борту 6 16-и битных ШИМ каналов (2 таймера) + 8 каналов АЦП, которые легко запинываются в режим 79 ksps/10бит или в режим до 400ksps/7бит. и можно сразу выводить на дисплейчик формы с АЦП по типу осцилоскопа… параллельного ОЗУ на 512кб должно хватить для накопления нужных семплов и просмотра результатов на экранчике.
Программа экспериментов:
- Собрать типовое 6-и шаговое управление мотором с входного резистора “скорость вращения” + собрать управление скважностью ШИМ каналов также с входного резистора “мошность мотора” и посмотреть на формы токов в обмотках. Звезда и треугольник.
- Переработать схему на режим “управление по синусу”, запихав в прогмем таблицу из 240 точек на 1/4 периода. Посмотреть снова формы токов в обмотках на звезде и треугольнике и управляемость на ХХ.
- Загнать тот же ШИМ в качестве частоты измерения индуктивности и посмотреть варианты сельсинного определения положения ротора.
- Нормирование снимаемых токов и построение таблицы преобразования координат во вращающуюся систему “ротора”.
- Построение режимов работы “управление по скорости” и “управление по моменту” … отладка “итого” что получится.
… в целом если не напутал с пониманием “векторного управления”, на ближайшие пару месяцев интересными увлечениями вроде как обеспечен…
Поправьте плиз, если где не так понял чего-нибудь …
возьмите лучше моторы с датчиками холла. они устойчиво работают на малых оборотах именно благодаря обратной связи.
Какие моторы посоветуете на низкие обороты 30-100 kV с наружным диаметром не более 28мм и весом до 50гр с тягой в районе 1.5кг*см и токами в пределах пары ампер?
вот тут х.з. надо у автомобильщиков спрашивать.
Не нашел у них моторов легче 75-140гр. в свое время … может плохо искал. Все что меньше, они катают на коллекторниках, а там не будет возможности (или это проблематично) выковыривать мотор из колеса в случае выгорния щеток (типовая проблема на соревнованиях по робототехнике). Поэтому и остановился на бесколлекторниках, но их в нужном диапазоне тоже нет.
Отсюда и вся тема.
В целом, уже “загорелся”: “на ближайшие пару месяцев развлечение себе найдено” … может даже и на подольше. 😃
Так что, моторы приехали, находятся в перемотке (это не быстро как оказалось), камни и прочие деталюшки, чего не хватает - уже заказаны, едут, силовую часть драйвера уже развел … можно собирать макетку и тестировать “что там получается на самом деле”…
P.S. Жаль что так и не нашел “образцов для подражания” … за основу взял цикл статей с avislab как наиболее универсальное решение.
Собрал силовую часть драйвера, осталось запаять Нанно (лежит новая нераспаянная)…
Итого, в драйвере: силовые мосты АО4606 + их раскачка от двух пинов контроллера: верхнее и нижнее плечо по отдельности. Есть встроенная блокировка одновременного включения обоих плеч для устранения сквозных токов.
С каждой фазы сделан делитель с ФНЧ: 33кОм / (2.4кОм + 560нф), чтобы снимаемый сигнал не превышал порога АЦП в 1.1в.
Поставлено 1 сопротивление для измерения общего тока 3-х фаз номиналом в 0.2 ома. Его сигнал также в пределах 1.1в для токов до 5А.
Собственно и вся силовая часть. Итого имеем 6 ног управления + 3 фазных напряжения + 1 токовое = 4 АЦП входа.
Попробовал, ничего не понял … замер АЦП проходит за 21.7 микросекунды, на период ШИМ в 500мксек получается 23 замера. Только вот на втором замере уже срабатывает ограничитель тока в 1.7 ампера. Первый замер после включения напруги дает 0.7А, второй 1.8А … и как им управлять, если ток в стоящем моторе нарастает до предельного уже на 43мксек?
и как им управлять, если ток в стоящем моторе нарастает до предельного уже на 43мксек?
Увеличить частоту ШИМ? Если ток в обмотках будет успевать падать до нуля, то будет ещё и звук с частотой 2000 Гц. И пульсация момента, т.е. фактически вибрация. Либо я всё не так понял…
Верно, звук есть. Пищит громко и противно. 😃
В общем, пока сделал так:
- Поднял частоту АЦП НАНО до 2Мгц (0.5мксек, делитель 1:4), что дало для 16Мгц тактовой 0.5*(13.5+1) = 7.25мксек на замер или 138ksps. Этот подход хорошо себя зарекомендовал ещё на проекте “Осцилограф из Ардуино”. Практически АЦП всех мег одинаков и способен пахать на частотах вплоть до 8Мгц, но там уже сильно падает точность оцифровки (до 6бит) и возрастают требования к выходному сопротивлению источника. Такое нестандартное поднятие частоты ожидалось, поэтому все делители делал из небольших сопротивлений до 10-20кОм.
- Сделал пока 3 фукнции:
а) замерТокаФазы (включитьТак) – включает заданным способом, делаем 4 замера подряд на нарастании тока, выключаем и возвращаем среднее.
б) замерТокаМотора() – запускает пред. функцию 6 раз для всех комбинаций токов, получает массив токов. Время выполнения - 300мксек.
в) включитьФазу(фаза, время, шим) – включает заданную комбинацию (AH+BL,…) на указанное время с контролем тока через мотор. Если ток достигает предела (константа пока), то выключает мотор с получением времени нарастания тока до предела, пересчитывает полученное время согласно заданному ШИМ и держит указанную паузу, после чего снова включает фазу. И так пока не кончится заданное время.
г) тестМотора(время, шим) – замеряет токи “б”, и по циклу принудительно включает фазы “в”, начиная с результата “б”. Стартовое время для “в” - 4мсек, далее уменьшает его по -200мксек до 0.8мсек, затем уменьшает по -10 до 0.6мсек и по -1 …
Вчера смотрел на какой частоте переключения мотор сорвется с синхронизации. Независимо от указанного ШИМ (почти), срыв синхронизации наступает при времени переключения в 559мксек, что для 9N12P (6 полюсов) дает kV= 60*1000/0,559/6/6/7,38 = 404 при напряжении аккума 7.38в (рабочее). Расчетное kV ожидалось 423. Думаю неплохое попадание.
Измерил полный ток ХХ “мотор+контроллер” = 160мА. Расчетный ток контроллера на работающем моторе оказался 24мА, итого при таком “в лоб” управлении получаем токХХ около 136мА. Пересчет тока ХХ от DYS BX1306 3100 дает 0.13А … это конечно не DYS, а "noname … но все равно приятно. eCalc для подобных параметров предлагает КПД = 72%.
“не DYS” - обидно то, что при шаговом вращении мотора функцией “в” оказалось что мотор имеет 2 неустойчивых положения среди тех 6-и, которые “должны быть” всяко. Похоже магниты ротора имеют сильную неоднородность … *опа. 😦
В общем, то что намерял в п.“г” предыдущего поста - не соответствует тому, что получается на тестовом стенде и типовом контролле от Blhelli.
Тестовый стенд: мотор через контроллер BlHelli подключен к Ардуино, которая снимает управляющий сигнал с переменного резистора и подает его как скорость в контроллер. Далее на мотор нанесена белая метка (сам мотор - черный), и ИК датчиком снимается количество оборотов.
Результат для оригинального мотора 1306 оказался kV = 3000, для этого перемотанного мотора около 940. Почему в п.“г” он крутит больше чем в 2 раза медленнее - так и не понял, но раскрутить шустрее принудительной синхронизацией не удается. И токи мотора в принудительном варианте получаются значительно выше.
Взял паузу на раздумья. Пока ничего не понимаю в этих печеньках…