Драйвер бесколлекторного мотора - самоделка или готовый (где, какой)?
- Войдите на сайт для отправки комментариев
Собственно вопрос в сабже.
Задача: требуется универсальный драйвер, желательно для раздельного управления парой моторов по типу gimbal-подвесов, со следующими фичами/параметрами:
1. Подключение моторов с диапазоном kV 50..5000 и/или оборотами 400..30000 rpm;
2. Управляемый контроль тока мотора. Как ограничение по максимальному току, так и оперативное управление предельным током мотора. Диапазон контроля токов 0.5 .. 15А;
3. Контроль температуры двигла (напр. через терморезистор на статоре).
4. Режим синхронной скорости вращения с активным торможением мотора при снижении скорости (чисто автомобильная фича).
5. Возможность очень медленного вращения до 10rpm и фиксации ротора в заданном положении. (фича из gimbal контроллеров)
То есть надо совместить автомобильное и gimbal применение для моторов с малым сопротивлением статора .. то есть принудительно контролировать ток через мотор с заданным ограничением.
Есть что-то готовое на эту тему?
Если нет, то какой камень рекомендуете к применению, желательно для управления 2-я моторами сразу? Из "мег", пока остановился на ATmega32a в корпусе TQFP-44 - вроде хватает ножек.. но это практически 54-56 руб/корпус. Есть варианты дешевле?
Для самоделки от камня требуется:
а) 3 АЦП входа + 1 вход компаратора для поиска перехода фазы через ноль;
б) 1 АЦП вход для контроля общего тока через мотор (1 шунт на суммарном токе через мосфеты фаз);
в) 1 INT вход для контроля температуры терморезистором;
г) 6 можно PWM (можно и программно) выходов для управления мостами фаз мотора.
плюсом, желательно иметь ещё 1 вход АЦП для контроля за питанием, можно один на пару моторов .. но это уже 9-й .. как-бы некуда. Или есть варианты не из "мег"?
Понятно, что чем дешевле - тем лучше. Мне их надо будет сделать 4-8шт. таких... требуется подсказка зала .. :)
Забыл ..
д) Интерфейс для связи/программирования: COM, SPI, I2C .. В общем-то "все равно", лишь бы был нормально доступен.. предпочтение видимо к COM-порту.
Ещё забыл: речь идет за многополюсные моторы по схемам 9N12P или 12N14P ..
И в очередной раз .. гробовая тишина. Ну и какой смысл тут хоть что-то спрашивать? .. школота, блин. :(
Читал что у стм чипов есть встроенные средства для работы с 3-х фазными бесколлекторниками.
Там цена "заоблачная" и токи хилые и это по большей части для sensored моторов. Что в совокупности ограничивает их применение "промышленным" использованием - ещё есть высокие напруги..
В общем, как и ожидал - спецов тут нет ни по одному вопросу.
Развел "универсальную" силовую часть драйвера на базе АО4606 (можно и другие на большие токи, напр. АО4610 их там целое семейство из ок. 20шт на разные токи и напруги) + транзисторный каскад для раскачки верхних плеч, как и на моем DC-драйвере и 2И схеме для нижнего плеча.
2 таких платы для 1 МК смогут поддерживать или 4DC мотора или 2stepper мотора или 2 BLDC мотора.
Доп. плюсы: возможность контроля токов 2-х моторов + возможность контроля температуры 2-4 двиглов.
В качестве МК остановился на ATmega32a-AU в корпусе TQFP-44. У всяких НАНО не хватает ножек для управления 2-я BLDC моторами.
В общем "слоеный пирог" из 3-х плат, позволит управлять 2-4 моторами "пофиг какими" (4DC, 2Stepper, 2BLDC + 1DC), программно настраивать режимы как скоростные, так и контроля по току по типу "серводвигатель" или по COM-порту. Прогнозируемая цена для "самоделки" по деталям - около 200руб на контроллер пары BLDC моторов.. для одной силовой платы + МК управления около 120руб./контроллер, что радует.. :)
Температурный контроль получается только на прерываниях как "пороговый", где порог будет чисто аппаратный подбором резисторного делителя для терморезистора.
Детальки заказаны, едут. Моторы - приехали все (1306, 1806, 2212), на перемотке. Пока вожусь с 1306, перемотка на kV=450 I=1.5А/156гр*см .. 42-44 витка на зуб проводом ПЭВ-1 0.19.. влезает, но получается с 3-5 захода.. было: noname 1306 - 3100kV 4-5А/130гр*см 17.5 витков ПЭВ-2 0.25 (типа такой) "внавал". :)
И в очередной раз .. гробовая тишина. Ну и какой смысл тут хоть что-то спрашивать? .. школота, блин. :(
Не хотят, мерзавцы, ваши хотелки за вас реализовывать? Вот же народ!
А тишина потому что меня допустим вот это убило наповал:
практически 54-56 руб/корпус. Есть варианты дешевле?
и при этом огромный список хочу-хочу-хочу-хочу-хочу-хочу-хочу-хочу-хочу
Я бы послал вас купить за 6 долларей контроллер от коптеров-
но вы обидитесь, скажете : а где все мои пункты, с первого по сотый?
trembo, Верно, ибо не подходит типовой контроллер ни от коптеров, ни от авиа, ни от гимбалов, ни от автомашинок .. надо нечто "чуть-чуть", но не такое. Был-бы готовый контроллер (или кто подсказал) - не было бы темы. :)
а5021, ты опять напился? Чем читал посты? :)
У меня крепнет убеждение, что такие посты и надо читать только сильно напившись.
Это от отсутствия знаний, вполне нормальная реакция. Помнится мартышкам давали кубик рубика и они через небольшой промежуток времени пытались его разломать .. даже помнится "мем" того времени: "надо продавать кубики Рубика с молотком в нагрузку" :)
В общем, вчерашний штурм интернета по управлению и контроллерам BLDC sensorless моторов принес результаты.
Если кому интересно, подборка полезных ссылок:
http://www.avislab.com/blog/brushless01/ -- целый цикл статей (внизу ссылки), наверное лучшее что вообще нашел по этим моторам и схемам. В т.ч. есть и схема универсального драйвера. От себя - можно дополнить контролем тока и температуры двигла..
http://www.pvsm.ru/fizika/109643 -- классное описание векторного управления "на пальцах". Впрочем оно так и называется. :)
http://we.easyelectronics.ru/amaora/ocenka-polozheniya-rotora-bldc-na-ni... -- способ оценки положения ротора на низкой скорости.
https://geektimes.ru/post/271136/ -- неплохая статья с осцилограммами. понимание процесса управления, неплохо разжевана разница между механическим и электрическим оборотами двигателя.
https://www.youtube.com/watch?v=MfNcHmt_avE -- интересное видео по работе на низких оборотах
В целом, появилось понимание, что ничего невозможного в моих хотелках в общем-то и нет.
От отсутсвия знаний беруться только десятки постов с хотелками и обидками, что оные хотелки никто не кидается реализовывать сломя голову. Когда мне захотелось сделать драйвер коллекторника, я не бегал по разным веткам, не заламывал руки и не стенал по поводу недооценки окружающими моей гениальности, а просто взял и сделал. Драйвер с несколькими способами управления, контролем тока и прочими мульками, что мне были интересны. Этим, собственно и отличается мое "отсутствие знаний" от вашей "подборки полезных ссылок".
Так я также как и Вы сижу и тихо пилю этот драйвер. Только в отличии от Вас ещё и публикую результаты найденного и/или сделанного, в отличии от Вас .. ничего просто не прячу под матрацем.
Ну где Вы нашли в первом сообщении стенания? Ищу тех, кому такой драйвер будет интересен, кроме меня, а также ищу СОВЕТОВ как это ЛУЧШЕ сделать.. то что тут советов искать бесполезно по любому мало-мальски непростому вопросу - факт, отраженный вторым постом. Обидно? Ну так че на зеркало пенять-то? :)
P.S. точно также как выкладывал результаты по своей библиотеке, по драйверу I2C, по простому драйверу моторов, по платам на базе ATmega128a, ATmega2560 и др. свои поделки.
Вы-то хоть что-то тут выложили, тайный мастер? :)
Ваши слова довольно странные. То, что я якобы "прячу под матрацем" вы видели, обсуждали и даже "плюсовали". Теперь, вдруг, бац и полная амнезия. Ну или желание срочно все позабыть.
Да, на форуме выложено несколько моих, полностью законченных, проектов. Со схемами, фотками, платами, исходниками и прочим. Совершенно точно, что, как минимум, часть из них вы видели. Дальше будете кривляться?
Не, кривляться не буду. Тот самый драйвер, я прождал больше года и даже в общем-то собирался Вам заказать в количестве 4-8шт, помнится.. но так и не увидел ни в той теме ни в иной кода прошивки.. сделать - сделали, в чем и не сомневался .. только вот выложить позабыли.
Тема про BLDC-драйвер с контролем тока, режимами удержания скорости И момента, с контролем температуры двигла и защитами, с режимом удержания мотора на месте и серворежимом работы (низкие скорости плавного вращения) - очень актуальна, как теперь понимаю и НИГДЕ не решена в полной мере.. в отличии от "ещё один контроллер DC-мотора". Собственно, что тогда и произошло - да собрал свои контроллеры так и не дождавшись Вас.
И, кстати, теория векторного управления бездатчиковым бесколлекторным мотором - толком тоже нигде не высвечивается, и как уже понимаю, немцы делиться не особо планируют.. так что, вопрос может иметь не только любительское, но и промышленное назначение.
Что же тогда, по вашему, выложено в сообщении #560 ?
И что там "содержится"? :)
В посту есть код? Не-а. Это набор команд управления драйвером по I2C и то не факт .. некое описание каких-то регистров .. ни порядка использования ни чьи это регистры.. ниже есть ссылка на рар-файл проекта какого-то ИАР .. может STM8 программируется только в нем, не знаю .. только папка src в нем как была пуста так и осталась, а то что выдается за main.c - "файл содержит недопустимые символы и может быть прочитан неполностью. Открыть все равно?" лучше что получал тогда и сейчас тоже... нафига оно мне?
Ну и что тогда далее обсуждалось у Вас ещё до поста 572? :) Перечитал. Ни тогда ни сейчас не сложилось понимания что это ДОДЕЛАНО и выложено в общий доступ.
Как повторять тем у кого нет ни протеуса ни иаров? Выложите svg файлы под печать ЛУТом + рапскладку, схему и перечень деталек с исходным кодом текстом .. это всё можно выложить напрямую сюда и без яшиных дисков .. каждый сможет снять картинку, отпечатать и наложить на плату .. ЛУТ он и в африке луть.. Ну и исходник .. есть "С" - его можно скомпилять и прошить .. и "иар" не нужен .. а то что выложили Вы - не выкладка, а так "похвальба": "во у меня есть" .. ну есть и есть и то "не факт".
И опять жеж .. тема создана про иной вопрос. Вы чем-то собрались "помочь"? Да ну нафиг .. влезли в тему пофлудить и нахамить, потому как "абыдно панимаишь ли" .. и? Спрашивается нафига, если ПОМОЩИ и СОВЕТОВ от ВАС ровно НУЛЬ и даже бес палочки?
Вы же тем же самым способом опять жеж только подтвердили суть второго поста. Школота. Обидчивая. Не знаю, не умею но абыдна..
P.S. Ладно уже .. вопрос с тем драйвером решился уже. Флудить тут не вижу смысла, идите с эсесовцев лайтесь. Может придет кто грамотный, кому вопрос тоже интересен.
Вы же тем же самым способом опять жеж только подтвердили суть второго поста. Школота. Обидчивая. Не знаю, не умею но абыдна..
Не скомпилировались, значит, исходники ? Очень странно, учитывая, что еще одним постом назад вы категорически утверждали, что их вообще нет. Нашлись, выходит? Нашлись там, где лежали уже больше года?
Обязательно придет. Главное ждать и верить. Придет и начнет все ваши хотелки за вас делать и вам на блюдечке выкатывать.
Ну пока ждем заинтересованных специалистов, продолжу выкладывать то, что пока сделал:
Силовая часть на базе 4-х АО4606 + 74HC08 + 8 полевых транзисторов, в общем-то все равно каких, на вых. ток более 100мА и напругу под 30в.
Плата универсальная под управление ИЛИ 2-я коллекторными ИЛИ 1 шаговым ИЛИ 1 бесколлекторником, смотря что распаивать или не распаивать. Имеет делители и фильтры с каждого полумоста для поиска средней точки (вариант бесколлекторник), а также единый выход (можно и продублировать на каждую фазу тоже) контроля тока потребления "по земле". Требуется "резистор" (нихромовая проволока) 0.5ома.
svg-файл под ЛУТ (зеркально, в натуральную величину):
Получилось "великовато", но терпимо. Около 44х53мм. В общем на ATmega32a планирую навешать 2 таких платы слоеным бутербродом для управления 2-я BLDC моторами.
Силовую часть отрисовал отдельно, пригодится для разных применений .. надоело модифицировать свой драйвер для DC-моторов.. :)
Архат! Я тебе только порекомендую Atmega32u4 там у первого таймера три OCR (a,b,c), это специально для BLDC драйверов сделано. Такое еще у СТМ есть, но у тебя к ним личная неприязнь... ;) Я не искал, возможно еще у каких мег есть три OCR на timer1... мне хватило того, что это есть на 32U4 - на ней Леонардо и Микро сделаны. Я не стану в твою тему влезать, выбирай и пиши сам, но на 32U4 будет просто удобнее, ИМХО.
Пасибки за совет. Тоже смотрел пристально на Леонардо .. возможно оно и будет. За СТМ у меня нет "неприязни", как и к любому иному изделию. Неприязнь тока к проплаченным пиарщикам, которые пишут фигню по делу и без такового. Смотрел СТМ-ки, в частности серию СТМ8 .. но пока не знаю как их прошивать силами ИДЕ (без отдельно взятого программатора) и не очень понятно можно ли програмировать без спец.средств .. просто не разбирался ишо. Но, цена у них пока самая вкусная - около 25 руб/контроллер. Похожую цену на атмелах можно получить только поставив 1 камень на 2 драйвера. В целом мне так и надо попарное управление моторами, как у гимбал подвесов ..
Но .. на базе СТМ похоже можно пилить и отдельно 1 контроллер - 1 бес-коллекторник. :)
если (вдруг?) начнешь с СТМ разбираться, то проще начинать с "blue pill" - это платки STM32F103 за 100р. И писать на ардуино ИДЕ. Шить нужно через ST-Link, но можно и без него. Для такой задачи. как BLDC драйвер - вполне достаточно на Ардуино Иде писать.
На стм не все очевидно, нужно немного иначе голову повернуть, потом все просто станет. Там больше акцент на то,что делается само, автоматом, неблокирующе, после трех экранов настройки (утрирую ;) ). Не сложней паровоза - разберешься! ;)
А там похоже вообще всё "не так" и аппаратный ШИМ "не нужен" вовсе. Чем больше разбираюсь с теорией, тем всё кучерявее.. И пока я ищу решения под 20-30 руб камня на драйвер. Камни за 100руб - это ну очень дорого! Даже 50, типа Atmega32a - и то уже "жаба давит". :) Поэтому и пытаюсь упихать на один камень управление двумя моторами .. но тут уже "ног маловато" для разных "НАНО".
В общем, пока самое непонятное - это как определить положение ротора на стоящем моторе без датчиков .. есть на avislab примерчик, но он только под звезду и для сьема средней точки мотора. Вот интересно найти нечто похожее но под треугольник и без средней точки.
В общем, похоже можно совместить ШИМ для управления моментом двигателя с подмешиванием ВЧ сигнала в токи для точного определения положения ротора, в т.ч. и на стоящем двигателе тоже. Получается измерять противоЭДС на обмотках - это просто занимать "лишние" входы АЦП.
Итого, прогу управления в общих чертах вижу такую:
Вход: скорость вращения + предельно разрешенный момент + длительность (для режима серво - поворот на заданный угол).
Задаемся достаточно высоким ШИМ и подавая краткие импулься в обмотки (старт) ищем положение ротора относительно обмоток статора по токам и их отличиям (тут есть много формул, кое-что можно решить нормированием и табличным преобразованием). Далее этот блок так и остается как "наблюдатель" за ШИМ. Его результат - угол положения ротора, дополнительно текущая скорость вращения (тайминги).
Опираясь на данные наблюдателя, в первую очередь на угол и сравнивая с задачей через ПИД устанавливаем токи в фазах через скважность ШИМ. Тут тоже похоже полезен не чистый ПИД, а как раз наш "гоночный" - нелинейный, гистерезисный и таблично-заданный.
Собственно и фсё.. кто-то что-то понял? (сам ещё не очень..)
http://www.parkflyer.ru/ru/blogs/view_entry/598/
http://www.parkflyer.ru/ru/blogs/view_entry/1171/
https://mklkt.ru/blog/Masterskaa_ElectroDoktor/motor-kolesa-6-8-10-dlya-...
С кочки зрения полезности в теме - сомнительно, но очень прикольные ссылки с познавательной стороны. Особенно бесколлекторник из коллекторника.
Спасибо, пробежался с интересом. Прикольно.
Я просто намекнул, что если у вас есть знакомый токарь. То бесколекторник можно объединить с колесом. И датчики Холла повесить снаружи подобно тормозным дискам. И будет у вас двигатель подрбный гироскутерам, только для моделек.
ПС:https://www.youtube.com/watch?v=zft6L0A6iqM
Ну примерно так оно и планируется. Параллельно сын рисует колесные диски под печать на 3D-принтере (есть в близком доступе очень даже проф.) под "Лего-формат" типа Ф30.4х20 или Ф56х34, на которые можно будет одевать типовую лего-резину. Мелкие для прямой посадки на ротор аутраннера (вдруг найдем применение и таким мотор-колесам), а вторые "с полостью" под колеса Лунохода, в которой можно будет упихать дополнительно "скребки" - упоры, выдвигаемые из ступицы колеса доп. электромагнитом сбоку от резины.
+ "переходники" под разный размер двигателей. Уже приехали noname 1306 kv=3100 (в перемотке 4 мотора под kv=450) + 4шт BE-1806 kv=2300 (в плане под перемотку на kv=30-90 как получится) + 4шт A2212 kv=1000 (тоже под перемотку на kv=30-90).
Пересчитал оценочно должно получиться при соединении звездой (питание 2S):
1. 1306 kv=450 Mmax=160гр*см / Imax=1.6A -- планируется с редуктором 40:1 на сервовращение "рук" Лунохода основные тяги с платформы, которые несут макс. нагрузку. Колесный диск - точка крепления лего детальки, которая большая врашательная такая фигнюшка у экскаваторов..
2. 1806 kv=50 Mmax=800гр*см / Imax=1A + 2212 kv=50, Mmax=1800гр*см / I=1.3A -- это пара мотор-колес Лунохода. Переднее мощнее, заднее по проще. Просто так получилось, сначала заказал 1806, а потом дошло что для тележки весом под 3-5кг их банально не хватит. Пришлось отказаться от 4-х шт. и сделать перезаказ на А2212. А большие движки в Лего ступицу 30х20 банально не влезут..
В общем, похоже с авр-ками всё "грустно" .. управлять парой моторов они вряд ли смогут по скорострельности блока АЦП ..
Получается, что будут задействованы все 8 входов, при макс. скорости мултиплексорного замера в 80кГц (а выше оно не тянет, проверено!), частота замеров получается 10кГц на цикл, что даже для 2-х замеров на фазу - цикл управления дает тока 5кГц, и при необходимости хотя бы 2-х циклов ШИМ на переключение (их ваще-то надо 7) получаем только 2.5кГц.
В то время как 1 эл. оборот требует 6 циклов управления, а моторы 12n14p имеют 7 эл. оборотов на оборот ротора .. итого 6*7=42 .. имеем макс скорость управления 2500/42 = 60гц или 3600rpm .. ну, для моих задач хватит, но для "общего применения" .. маловато однако. То есть или скорость блока АЦП надо иметь "на порядок" выше или уменьшать количество замеров и делать их в строго заданное время. Но тогда наложение управления 2-я моторами одновременно становится "проблематичным" в случае их разных скоростей .. фигово. :(
P.S. Или отказываться от АЦП и переходить на компаратор как это делается в типовом китайском контроллере, который по сути есть все тот же DragonFly на базе Atmega8 .. ну и опять же .. все удорожается. Их тоже уже не купить дешевле 50руб/корпус..
В общем, пока засада: купить моторы по 250-300руб/шт - можно, можно их даже и перемотать под требуемые нужды и это даже проще чем мотать по 200 витков на коллекторник, но вот готовые контроллеры к ним с хотя бы частью требований (векторное управление) .. от 800руб на мотор. И сильно удешевить самосбором не получается. Дешевле 128руб/контроллер в детальках + плата - никак. :(
Авp весят в граммах мало. Там где одна не справится, справятся три. Одна на левый мотор, одна на правый,и одна за капитана. связь она может и через Serial отправлятся. "Правый мотор на полную вперед"[#RM 255 \0]- "ОК,кэр"[$RM] "Левый мотор стоп"[#LM 0 \0]- "ОК,кэр"[$LM]-"Левый мотор назад по малой"[#LM -10 \0]- "ОК,кэр"[$LM]
ПС: И вы стали родоначальником Nextion- мотор-колесо :)
Нет. Их мотор-колесо во-первых большое (размер имеет значение), во-вторых как понял "датчиковое".
Да и в целом, "это не я". :)
Это те ученые мужи, что провели мощнейшие исследования в 50-60-х годах прошлого века, когда выбирали шасси для СССР-овского Лунохода. Мне их довелось просто прочесть и выяснить 2 лучших варианта: один - этот и практически он и стоял на Луноходе-1, и второй тот, что выкуплен амерами для марсохода, который там сейчас шастает.. :)
Спасибо конечно, но таких схем много и от многих производителей и это "почти" то что нужно.
Их главное отличие - неспособность работать с бесдатчиковыми (sensorless) моторами, а также мало где (тут как раз нету) допускается управление моментом, особенно в режиме удержания ротора. Да и сам такой режим есть далеко не везде (тут тоже нету).
А все мелкие аутраннеры - увы как раз таковые и втыкать в них датчики, увы просто некуда. Там весь наружный диаметр ротора, скажем у 1306 .. 18мм, вот "куда их втыкать"? И вес в 15гр .. давайте, приклеим ещё 3х1гр, получим все 25гр. с клеем, проводами и держателями, а это уже следующий "класс" - 1806 :)
Всё достоинство мелких аутраннеров - большая механическая мощность при малом собственном весе. Нормально, когда соотношение мощность/вес получается около 10-20. Ну какой "коллекторник" такое тянет? :)
Архат, на схеме Вашего драйвера нифига не рассмотреть...
Вы не пробовали управлять полумостом одним пином? Если уж ног не хватает.
Выход в 1 - открыт верхний ключ
выход в 0 - нижний
Hi-Z - оба закрыты
Наверное и схемы должны быть.
Звиняюсь, но уж как кикад выдает .. там только силовая часть на 4 фазы с возможностью объединения фаз попарно для управления коллекторными моторами или шаговым двигателем. Оно там так и предполагается по 2 ноги на фазу. В качестве полумостов АО4606 + транзистор раскачки р-канала + транзистор блокировки нижней части полумоста, когда открыта верхняя и 1/4 от 2И для раскачки нижнего канала. Номиналы и транзюки в общем-то не принципиальны. Плюс делители фазного напряжения для подачи на АЦП. Плюс "резистор" (отрезок от спирали утюга) с конденсатором для замера тока.
Схема долго разбиралась и обсуждалась в теме драйвера коллекторного мотора, просто слегка расширена.
Теперь разглядел. Если управлять мостом одним пином, то динамического торможения не будет. Вам не подходит.
Каждая фаза может управляться 2я пинами: верхнее и нижнее плечи отдельно, но можно и объединить при управлении DC моторами попарно (синенькие перемычки у каждой второй фазы). Тогда нижние плечи соседних фаз (один мотор) работают как общий PWM сигнал, а верхние плечи как DIR - "вперед/назад". В таком режиме да, торможения коротко-замкнутым якорем нет. Но также возможно только частичное объединение, скажем по сигналу PWM (нижние плечи пары фаз), в этом случае есть 3 пина управления, и запрещая оба верхних плеча можно открывать нижние одновременно двух фаз или наоборот. Это и есть режим динамического торможения коротко-замкнутым якорем.
Вообще-то "литература" рекомендует сначала отключать мотор от питания полностью и только через небольшой промежуток времени закорачивать обмотку на землю или питание для режима торможения. В любом случае, требуется "управляющий камень"... :)
В случае шаговика - фазы объединяются попарно и получается управление 2-я обмотками (неполярный шаговик, как понимаю) .. хоть синусы моделируй.
В случае БЛДЦ - используются только 3 фазы и по отдельности.
Можно посадить на 1 МК две таких платы (что и собираюсь сделать) "бутербродом". И тогда неиспользуемые 2 фазы от БЛДЦ варианта можно присобачить на управление ещё одним коллекторником или чем-то ещё, например электромагнитом "когтей" - кольцо втягивающихся грунтозацепов в мотор-колесо дополнительно к резиновой шине. Но это мне уже кажется излишеством.. :)
Последние новости :)
Собрал силовую часть драйвера, протестил - работает. Подключил пока к Ардуино НАНО, и растерялся..
В общем при подаче на 2 фазы (обмотки соебинены звездой) напруги, блок защиты по току выключает ШИМ уже через 43 микросекунды... и как управлять в таких условиях?
Детали:
Мотор noname-1306 исходный имел kV=3100, 17.5 витка на зуб статора "внавал" провод 0.25 по меди, схема 9N12P, соединение - треугольник, макс. ток согласно китайцу - около 4А. Перемотан на 36 витков на зуб проводом 0.2 по меди с ограничением потоку в звезде при сохранении той же плотности тока = 1.7А, расчетное kV у меня получилось около 430.
Частота ШИМ была выбрана 2кГц (500мксек), частота АЦП - 1Мгц, что дало по факту 21.7мксек на цикл управления или 23 замера на период ШИМ. Однако, при подаче напруги на мотор, проходит ровно 2 замера: первый около 0.7А, второй уже под 2А и на этом срабатывает защита по току, отключая напругу. Мотор пищит, но не шевелиться (оно и понятно, итоговая скважность ШИМ - никакущая).
Что делать? Повышать частоту ШИМ? А как тогда им управлять если нарастание тока происходит так шустро?
В общем, пока потерялся.. если есть советы - буду благодарен.
Ну .. в общем можно повышать частоту ШИМ. А ещё лучше получилось считать её по заданной мощности мотора. То есть замеряем время за которое ток нарастает до предельно допустимого, а потом делаем паузу согласно заданной мощности и получаем "плавающий ШИМ". О как! :)
Получилось накатать первый модуль, который удерживает мотор в заданной положении с заданной мощностью удержания ротора. Правда пока кратно положению фаз.. Погонял мотор в режиме удержания. Ограничитель тока работает на ура. 1мин на предельном токе - мотор едва теплый. "Тяга" около 150гр*см. - впечатлило.
Этим же модулем похоже можно определять положение ротора на стоящем моторе - токи в фазах разные и времена удержания паузы - тоже.. в общем, похоже можно определять положение ротора за 1-2 мсек. Это уже радует. :)
Скорость нарастания тока зависит не только от индуктивности обмотки, но и от оборотов двигателя и от нагрузки на валу. Так что вычислить все заранее не получится.
Это понятно, что с ростом скорости нарастание тока замедляется из-за обратной ЭДС мотора. Пока что провожу эксперименты со стоящим ротором.
Проверил алгоритм с авислаб по определению положения стоящего ротора. Вроде работает и без замера напряжения в средней точке, а только по замерам токов, но как-то странно.
Во-первых, у меня ротор на этом моторе на встает во все устойчивые положения электрических градусов, часть из них неустойчива на самом деле .. то ли ротор кривой, то ли статор, то ли намотал обмотки не одинаково .. хотя вроде бы считал тщательно и вымерял длину провода. И ток в обмотке "А" несколько меньше чем в "В" и "С" при любом замере, но незначительно. Тока АВ, АС, СА, ВА всегда меньше на 2-4 попугая АЦП (ок. 10-20мА) чем ВС и СВ, особенно АВ почему-то. Соединение "Звезда", уже писал. Может АО4606 с разным сопротивлением каналов? Средний замеряемый ток от 270 до 500мА.
Во-вторых, на самом деле приходится вылавливать микро-попугаи АЦП из-за того, что НЕ подаю большой ток в этом режиме измерения, как того советует автор (максимальный ШИМ). Но, замеры идут устойчиво в одном и том же положении ротора, вплоть до точного совпадения АЦП данных.
Если подавать большой ток как советует автор (вплоть до срабатывания защиты по току см. выше), то ротор в замере может дернутся и сменить положение, особенно если оно не достаточно устойчивое (см. п.1) и режим ХХ.
В целом, минимальное время на определение положения ротора получилось в 900 мксек. Это - сильно радует. :)
Ха! Поднял частоту АЦП до 2Мгц и убрал усреднение, оно все одно незачем. Разница в попугаях АЦП между замерами не превышает 2-3. В общем время определения положения ротора довел до 350мксек, вместо авторских 15 мсек!
В общем, нашел оригинал статьи определения положения стоящего мотора. Впрочем, ссылка есть там же на avislab снизу. Как выяснил, оригинальный измеряемый мотор был по схеме 12N8P, и имел отличные от моего раскладки токов в положениях ротора, но похожие. Кстати, прогнал их формулу в экселе на их же данных и воочию увидел что формула ни разу не рабочая. Различает только 3 состояния из 6-и на их же данных и то с проблемами.
Похоже сравнивать надо не то и не совсем так .. а как? токи замеряются достаточно полноценно, токи "туда" и "обратно" отличаются .. всё по статье, но вот что с чем сложить-вычесть, чтобы получить 6 разных значений - вопрос.
Вчера покрутил мотор в режиме ХХ, примитивным синхронным алгоритмом переключения обмоток.
Внезапно выяснилось что ротор у мотора "кривоват", если не сказать хуже. При шаговом вращении (медленном) ротор не встает в 2 устойчивых положения из 6-и. Вообще не встает, по снятию тока сваливается в соседнее положение. Похоже есть магниты с разной силой или приклеены недостаточно точно. Абыдна. Впрочем .. китай за 340руб .. что взять с косоглазых и косоруких?
Получено в результате:
kv=404, расчетное 423, ошибка 4.5%, ток ХХ = 136мА, пересчетное значение 130мА, ошибка менее 5%. Ожидаемое КПД 70-72%. В целом устроило "более чем". Методика пересчета мотора оказалась в целом верной, соответственно можно надеяться что мое понимание процессов в BLDC моторах тоже корректно. :)
P.S. Да, довел время замера тока на 6 фазах (определение положения ротора) до 270мксек! :)
АП. Приглашаю ещё раз всех заинтересованных. Создание "авто" контроллера для BLDC sensorless моторов, похоже может решить задачу скоростного движения по линии.. да и вообще, оказывается "а нету таких"..
пока всё приостановлено, можно поразмышлять КАК крутить мотор, с учетом того, что можно быстро и оперативно измерять токи в фазах?
На стоящем моторе, в зависимости от его положения, токи имеют небольшие отличия, но выявить КАК определить положение ротора мне пока так и не получилось.. если есть идеи - велкам.
Ну, и? Как понимаю, драйвер BLDC мотора с контролем токов через обмотки и "шаговым" режимом работы с открытым кодом - никому не интересен ..
Последняя попытка найти "подельников".
В общем столкнулся с такой проблемой: даже при скорости работы АЦП на тактовой 2Мгц (делитель "3" 1:8), время замера на ноге АЦП составляет около 10мксек (через analogRead(), версия 1.6.9 очень шустрая И позволяет менять скорость замеров!), что ОЧЕНЬ ДОЛГО для управления мотором .. как оказалось. Так, к примеру, двигая замер по току на 4-8мксек "туда-суда" от начала подачи напруги на обмотки можно получить очень разные ограничения по току: от "недобора", до значительного перебора. + "лишний" замер тока при заданной длительности удержания напруги на фазах приводит к около 15% ошибке скорости вращения ротора .. что мне кажется очень много.
Как быть?
Поясню:
Сделана функция включения заданных фаз (напр. AH-BL) на заданное время с заданным PWM, примерно так (кода под рукой сейчас нет):
1. По ограничению мощности считаем предельный ток включения как долю от макс. допустимого.
2. Включаем мотор и далее в цикле пока не прошел тайминг времени (блинк без делай):
2.1. Если мотор включен, то замеряем ток И если он превысил текущий предел выключаем фазы, устанавливаем время выключения 8мксек (это достаточно для падения тока в обмотках)
2.2. Иначе (мотор выключен) смотрим прошло ли время паузы и как только - включаем фазы.
3. выключаем фазы.
В этом алгоритме, самая длительная операция - замер АЦП, которая длится около 10мксек. При быстром вращении для моторов с kV около 1000 время включения фазы может составлять всего 180-250мксек, а для моторов быстрее ещё меньше. Так оригинальный мотор с kV=3100 на напруге 2S (ок 8в) требует около 70мксек на подключение фаз .. ошибка измерения таким способом - 1 лишний замер. или 10/70 = 1/7 = 14%. Практически 15%, учитывая накладные расходы.. это мне кажется "много".
Как можно использовать аппаратный ШИМ на таймерах в режиме ограничения тока .. не представляю пока никак. Есть идеи?
Да все это существует в виде готовых решений, но боюсь, что спесь вам не позволит.
STSPIN32F0 – SIP-микросхема, созданная для управления работой трехфазных бесколекторных двигателей и позволяющая реализовывать различные методы определения положения ротора. STSPIN32F0 объединяет в одном корпусе значительную часть списка, приведенного выше (Рис. 4):
Думаю что замерять при помощи АЦП ток на обмотке неправильное направление развития. Надо не ток измерять - ведь это ни к чему, а ловить момент прохождения током околозаданной отметки. Иначе говоря нужна схема сообщающая МК логическим уровнем о достижении заданного тока.
Спасибки, за свежачок от июля 2017г, не видел таких. Стоимость сего чуда 300руб в ЧИп и ДИП, на Али 286руб + 300руб пересылка, ровно 1 продаван. :)
Готовая прошивка от СТМ имеет всё ещё версию 1.0.0. и распространяется по подписке (регистрации) с ознакомлением с Sale&Trade лицензией.. а так, да .. очень вкусный чип. В описании прошивки так и не нашел режима "удержания ротора в заданном положении". В описании образца платы также фигуряет только подстройка частоты вращения от 800 до 12000rpm, что очень много. Интересуюющие больше всего rpm лежат в диапазоне 1 .. 1200. Хотя, вроде как gimbal применение тоже позиционаровано.
Типовой драйвер BlHelli можно купить от 140руб/шт "готовый" (с мосфетами и пр.). Моя поделка в детальках пока обошлась мне немногим меньше.
Может я не совсем правильно понял поставленную задачу, но можно попробовать отслеживать положение ротора с помощью наведенной ЭДС в одной из трех свободной от работы обмотке, в момент прохождения магниа через обмотку можно уловить момент смены полярности напряжения наведенного магнитом в обмотке, тем самым, получаем точное положение ротора без использования датчика хола и прочего ненужного.
Для этого конечно же придётся снять управляющее напряжение, чуточку раньше и снова подать чуточку позже, но это даже хорошо во избежании сквозного пробоя силовых транзисторов.
Да, этот метод будет использоваться и он работает хорошо, но только ПОСЛЕ того как мотор наберет необходимые обороты. Это не менее 1/10 от расчетного kV мотора.
Весь вопрос в том, как определить положение стоящего ротора или вращающегося менее этой пороговой частоты.
Нашел несколько патентов, в т.ч. тот что описал выше: быстрое измерение токов в обмотках во всех 6 направлениях и по перекосу токов определять положение стоящего ротора. Ни один из них в реальности НЕ работает надежно. Можно более-менее определить положение +-180грд, но при этом легко ошибиться "наоборот" и получить дергунчик взад при попытке раскрутить мотор. Как на авислабе показано кино с надежным определением - сообразить не могу .. у меня ТАК не работает. Правда там "кино" мотора без нагрузки, что сильно меняет ситуацию..
Проблема в том, что "автомобильное" применение предполагает запуск мотора ПОД нагрузкой, а авиационное - БЕЗ таковой. Все авто-контроллеры работают только на датчиковых моторах ровно по этой причине - определение положения ротора на стоящем моторе.
Думаю что замерять при помощи АЦП ток на обмотке неправильное направление развития. Надо не ток измерять - ведь это ни к чему, а ловить момент прохождения током околозаданной отметки. Иначе говоря нужна схема сообщающая МК логическим уровнем о достижении заданного тока.
Нужны ОБЕ схемы и они реализованы в моем драйвере.
Первая схема - ловля прохождения противоЭДС на свободной фазе - реализована сьемом напруги через делитель и подачи на вход АЦП, который передан компаратору, на втором входе которого эмулируется напряжение "средней точки" делителями от питающего. Типовое решение много где, проверено - работает.
Вторая схема - контроль предельно допустимого тока через мотор (ШИМ) реализована сопротивлением 0.2 ома в цепи земли питания всех АО4606 и на нем, тактируя в нужные моменты можно измерять ток через обмотки и выключать ШИМ не позволяя перегравать мотор. Этот же вход АЦП испольую для попыток определения положения стоящего ротора, но пока "безуспешно"..
Запланирован ещё и третий контроль - делитель от терморезистора, который должен будет "вырубать" мотор полностью если его температура таки достигнет предельного значения. Тут пока сделан тупо делитель, подающий выход на ногу прерывания контроллера. Пока не подключен - терморезисторы ещё в пути..
Итого, задействовано 4 входа АЦП + 1 прерывание + 6 ног управления. Всё ещё надеюсь упихать в 1 Нанку управление 2-я моторами, но похоже не получится по её производительности.. точнее АЦП - таки тормозной для такой задачи..