Контроллер sensorless BLDC мотора с контролем тока через обмотки

Arhat109

Не нашел у них моторов легче 75-140гр. в свое время … может плохо искал. Все что меньше, они катают на коллекторниках, а там не будет возможности (или это проблематично) выковыривать мотор из колеса в случае выгорния щеток (типовая проблема на соревнованиях по робототехнике). Поэтому и остановился на бесколлекторниках, но их в нужном диапазоне тоже нет.
Отсюда и вся тема.
В целом, уже “загорелся”: “на ближайшие пару месяцев развлечение себе найдено” … может даже и на подольше. 😃

Так что, моторы приехали, находятся в перемотке (это не быстро как оказалось), камни и прочие деталюшки, чего не хватает - уже заказаны, едут, силовую часть драйвера уже развел … можно собирать макетку и тестировать “что там получается на самом деле”…

P.S. Жаль что так и не нашел “образцов для подражания” … за основу взял цикл статей с avislab как наиболее универсальное решение.

11 days later
Arhat109

Собрал силовую часть драйвера, осталось запаять Нанно (лежит новая нераспаянная)…

Итого, в драйвере: силовые мосты АО4606 + их раскачка от двух пинов контроллера: верхнее и нижнее плечо по отдельности. Есть встроенная блокировка одновременного включения обоих плеч для устранения сквозных токов.

С каждой фазы сделан делитель с ФНЧ: 33кОм / (2.4кОм + 560нф), чтобы снимаемый сигнал не превышал порога АЦП в 1.1в.
Поставлено 1 сопротивление для измерения общего тока 3-х фаз номиналом в 0.2 ома. Его сигнал также в пределах 1.1в для токов до 5А.

Собственно и вся силовая часть. Итого имеем 6 ног управления + 3 фазных напряжения + 1 токовое = 4 АЦП входа.

Arhat109

Попробовал, ничего не понял … замер АЦП проходит за 21.7 микросекунды, на период ШИМ в 500мксек получается 23 замера. Только вот на втором замере уже срабатывает ограничитель тока в 1.7 ампера. Первый замер после включения напруги дает 0.7А, второй 1.8А … и как им управлять, если ток в стоящем моторе нарастает до предельного уже на 43мксек?

Vovets
Arhat109:

и как им управлять, если ток в стоящем моторе нарастает до предельного уже на 43мксек?

Увеличить частоту ШИМ? Если ток в обмотках будет успевать падать до нуля, то будет ещё и звук с частотой 2000 Гц. И пульсация момента, т.е. фактически вибрация. Либо я всё не так понял…

Arhat109

Верно, звук есть. Пищит громко и противно. 😃

В общем, пока сделал так:

  1. Поднял частоту АЦП НАНО до 2Мгц (0.5мксек, делитель 1:4), что дало для 16Мгц тактовой 0.5*(13.5+1) = 7.25мксек на замер или 138ksps. Этот подход хорошо себя зарекомендовал ещё на проекте “Осцилограф из Ардуино”. Практически АЦП всех мег одинаков и способен пахать на частотах вплоть до 8Мгц, но там уже сильно падает точность оцифровки (до 6бит) и возрастают требования к выходному сопротивлению источника. Такое нестандартное поднятие частоты ожидалось, поэтому все делители делал из небольших сопротивлений до 10-20кОм.
  2. Сделал пока 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-и, которые “должны быть” всяко. Похоже магниты ротора имеют сильную неоднородность … *опа. 😦

18 days later
Arhat109

В общем, то что намерял в п.“г” предыдущего поста - не соответствует тому, что получается на тестовом стенде и типовом контролле от Blhelli.

Тестовый стенд: мотор через контроллер BlHelli подключен к Ардуино, которая снимает управляющий сигнал с переменного резистора и подает его как скорость в контроллер. Далее на мотор нанесена белая метка (сам мотор - черный), и ИК датчиком снимается количество оборотов.

Результат для оригинального мотора 1306 оказался kV = 3000, для этого перемотанного мотора около 940. Почему в п.“г” он крутит больше чем в 2 раза медленнее - так и не понял, но раскрутить шустрее принудительной синхронизацией не удается. И токи мотора в принудительном варианте получаются значительно выше.

Взял паузу на раздумья. Пока ничего не понимаю в этих печеньках…