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

Arhat109

Из вчерашнего “сетевого штурма”, что стало понятней:

  1. Бездатчиковыми моторами можно управлять не только по поиску средней точки принимая сигналы с делителей на АЦП контроллера, но и по сигналам с датчиков тока “точно также” можно определять положение ротора. То есть достаточно 3 входа АЦП, а не 6шт (а то уже расстроился, их всего 8);

1а. Главная проблема тут - слабый отклик противоЭДС при малых скоростях вращения. Но, можно решать подачей ВЧ наводок на фазы, как в сельсинах. В моем случае видимо не должно сказаться как-то значительно, ибо моторы будут с повышенной индуктивностью, среднее kV в диапазоне 30-100.

1б. Собственно этот же способ подачи ВЧ примеси можно использовать для начального определения положения ротора при запуске стоящего мотора и его управления в режиме “малой скорости”.

  1. Примитивное 6-и шаговое управление, для датчиковых моторов это и есть самый простой случай векторного управления. А если ещё оно делается “по синусу”, так и вообще класс. А если оно ещё и смещает среднюю точку, то может подавать даже большую напругу на обмотки в каждый момент управления (плавающая средняя точка);

2а. управление по синусу устраняет залипания на магнитах при малых оборотах и как раз и создает вращающийся вектор м.поля. В таблице управления достаточно иметь только 1/4 часть синуса, остальное получается вычислением стартовой точки.

2б. моё желание фиксить мотор в заданном положении решается примитивно выставлением “по синусу” фазных токов на это самое положение. Тут важен ШИМ, дабы не пожечь мотор.

  1. Все решает ШИМ. Управление просто модифицирует его “как того требует ситуация”, но в конечном итоге ток в обмотках формируется им.

  2. Управление моментом можно решать 2-я путями:
    а) подавая “размагничивающий” ток в продольную фазу;
    б) формируя “урезанный/уширенный шим” в нужное время.

  3. Преобразование координат при переходах “туда и обратно” вполне можно запихать в таблицы преобразований и сложность вычислений приближается к нулю. К тому что 32-я мега в общем-то должна справиться с возникающими задачами.

Arhat109

Продолжу.

Итого, в качестве испытательного стенда, выбрал имеющуюся у меня самопальную плату на базе ATmega128a (“МУРК-128”) с блоком расширения ОЗУ до 512кбайт и экранчиком TFT в 2". Оба устройства сидят на шине расширения RAM-bus и имеют прямое управление. МК имеет на борту 6 16-и битных ШИМ каналов (2 таймера) + 8 каналов АЦП, которые легко запинываются в режим 79 ksps/10бит или в режим до 400ksps/7бит. и можно сразу выводить на дисплейчик формы с АЦП по типу осцилоскопа… параллельного ОЗУ на 512кб должно хватить для накопления нужных семплов и просмотра результатов на экранчике.

Программа экспериментов:

  1. Собрать типовое 6-и шаговое управление мотором с входного резистора “скорость вращения” + собрать управление скважностью ШИМ каналов также с входного резистора “мошность мотора” и посмотреть на формы токов в обмотках. Звезда и треугольник.
  2. Переработать схему на режим “управление по синусу”, запихав в прогмем таблицу из 240 точек на 1/4 периода. Посмотреть снова формы токов в обмотках на звезде и треугольнике и управляемость на ХХ.
  3. Загнать тот же ШИМ в качестве частоты измерения индуктивности и посмотреть варианты сельсинного определения положения ротора.
  4. Нормирование снимаемых токов и построение таблицы преобразования координат во вращающуюся систему “ротора”.
  5. Построение режимов работы “управление по скорости” и “управление по моменту” … отладка “итого” что получится.
    … в целом если не напутал с пониманием “векторного управления”, на ближайшие пару месяцев интересными увлечениями вроде как обеспечен…

Поправьте плиз, если где не так понял чего-нибудь …

RW9UAO

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

Arhat109

Какие моторы посоветуете на низкие обороты 30-100 kV с наружным диаметром не более 28мм и весом до 50гр с тягой в районе 1.5кг*см и токами в пределах пары ампер?

RW9UAO

вот тут х.з. надо у автомобильщиков спрашивать.

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 раза медленнее - так и не понял, но раскрутить шустрее принудительной синхронизацией не удается. И токи мотора в принудительном варианте получаются значительно выше.

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