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

Arhat109

Поскольку тема про самодельный контроллер закрыта, а найти готовый контроллер с необходимыми фичами так и не удалось, поднял эту тему.

Если кто-то знает что-то готовое и не прочь поделиться - велкам. Сэкономит мне кучу времени…

Требования к контроллеру:

  1. Оперативный контроль током фазы/обмоток с ограничением до заданного и, возможно, с оперативным управлением ограничением.
  2. Возможность вращать мотор на низких и сверхнизких оборотах, например с kv=30…100 (gimbal) плавно

… в пределе с п.1. удерживать мотор в заданном положении с заданным усилием (контролем тока) по типу серв.

  1. Возможность контроля температуры мотора, можно в ключевом/отсечном режиме.

Требования к токам мотора - небольшие (у меня) 1-3А., рабочее напряжение двигателей 2-3S. Силовую часть могу собрать на полумостах AO4606 (их есть у меня).

Есть что-то готовое? Можно ли переделать из готовых самоделок, в тч из закрытой темы про самодельный контроллер?

Arhat109

Желающих помогать или посоветовать что-то готовое - нет?

RW9UAO

а вы хотите, чтобы вам вот так вот отдали проект векторного управления БЛДЦ?

Arhat109

Не понял … что значит “вот так вот отдали”?

Пилю сам, вроде ни у кого не прошу. Получится - постараюсь выложить в общий доступ. Просто ищу помощь, которая может сократить время … только и всего.

Да и не понял … там есть нечто “сложное” в векторном управлении? 😃

P.S. Мне просто надо не только медленно крутить мотор, что просто сразу тянет за собой контроль тока, но ещё и удерживать его с заданным усилием в одном положении.
Найти готовый контроллер со всем комплектом фич мне не удалось. Если Вы такой знаете - подскажите, если нет то вообще непонятно что значит “вот так просто отдать”? Как можно отдать то - чего нет в природе? 😃

RW9UAO

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

если умеете векторное управление - сделайте дешевый ESC на 10 ампер, на входе DSHOT125 хотябы и мультикоптерщики вас изцелуют во все места. там еще и рекуперация подтянется.

Arhat109

Вот в этом самом “почти” и вся закавыка. А не почти, а “готовый” - можете подсказать, чтобы не изобретать лисапед? 😃

Мне не для “коптерного” или “подвесного” применения, хоть и очень похоже на подвес … мне на “Луноход” мотор-колесо сделать … и таких 8шт. 😃

Надо чтобы колесо вставало непосредственно на ротор аутраннера (моторы уже купил и они даже уже на руках, перематывать авиационники придется на очень малое kV, но уже “морально готов” и даже уже приступил).

И вот чтобы это мотор-колесо:
а) ехало вперед-назад как обычно от медленно до относительно шустро;
б) могло ехать очень медленно и плавно и с подтормаживанием “под уклон”;
в) его можно было бы зафиксировать и “шагать” на колесах, в т.ч. и по лестницам/косогорам - нужен “упор” неподвижного колеса …
г) чтобы его не перегреть и не спалить - контроль тока…

Есть готовое? 😃

Не умею и даже пока не знаю “что это такое”, но разберусь. Не боги горшки обжигают. Не так давно (месяц с небольшим) не знал что такое BLDC тоже … кое в чем разобрался - накропал свое понимание тут в дневнике. 😃

Итого все детальки должны уложится примерно в 200руб на контроллер для 2-х BLDC…

Arhat109

То есть готового нет и следовательно “вот так вот отдать” … нечего, жаль. 😉

Ну а желающие помочь - есть?

Arhat109

Кое-что по “векторному управлению” проясняется. Вот интересное описание “на пальцах”: geektimes.ru/company/npf_vektor/blog/269486/, вкупе с этим комплектом www.avislab.com/blog/brushless01/ статей, в общем-то “не так оно и сложно”… 😃

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

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

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