Управление 3-х фазным sensorless BLDC

шаговики, многофазники, постоянного тока и т.д.
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

Re: Управление 3-х фазным sensorless BLDC

Сообщение Fai »

Тут вспомнил на выходных про свою плату, решил еще немного подумать над программой. Если кратко, в итоге все заработало.
Как я и думал, математика у меня была правильная, логика работы и определения перехода через 0 тоже, не хватило всего лишь одного мелкого, но очень важного, как оказалось, куска кода, который в прерывании компаратора после сохранения времени ZC записывал бы обратно в таймер половину времени коммутации. Выглядит это так:
1.png
То есть, независимо от момента ZC, время до следующей коммутации должно быть половину времени коммутации. Достаточно было написать T1 = -comm_time/2. Минус потому, что мы считаем, что в таймере signed int длиной 17 бит, это оказалось удобно, comm_time же содержит положительное время между коммутациями. Я почему-то решил не писать в таймер время коммутации, видимо решил, что разгон на начальной стадии будет слишком быстрый.

Но не все так радужно #1: если на двигатель нацепить массу (а-ля блин от винчестера), то старт происходит с трудом. Если двигатель с большой индуктивностью (~5мГн) и многополюсный (как у флоппика), то даже без нагрузки стартует плохо, работает нестабильно. Если индуктивность маленькая (двигатель от СД-привода, ~300мкГн), то надо поднимать минимальную частоту коммутаций, иначе ЭДС не хватает на нормальное детектирование. В общем, голая программа будет нормально работать с сильно ограниченный списком двигателей.

И не все так радужно #2: особенно это заметно, если питать от 8В и выше, то есть когда скорость вращения приличная - если тормозить пальцем так, чтобы обороты были около трети, то двигатель начинает сбрасывать состояние скорости на начальное, те как будто нет детектирования ZC, а если выше или ниже - все вроде бы нормально. Надо более точно смотреть с осциллографом. Так же, есть лимит по скорости сверху, около 15К оборотов для низкоиндуктивного движка от СД-рома. Тут уже надо решать кодом на асме и оптимизацией.

Еще надо добавить детектирование заблокированного ротора, и другую мелочевку.

Написал программу на С, так как это быстрее для отладки алгоритма (где-то пол дня ушло). Потом можно и на асм переложить.
-------------------------------------------------------
Удалил программу, так как обнаружил в ней много ошибок, из-за которых ротор вращался неравномерно от шага к шагу (странно, что он вообще заработал).
Последний раз редактировалось Fai 16 апр 2016, 08:32, всего редактировалось 1 раз.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление 3-х фазным sensorless BLDC

Сообщение rhf-admin »

А вот по сути, если я правильно всё понимаю, то в случае, когда ZC происходит раньше, чем должно - значит у нас двигло поворачивается быстрее чем нужно (напруга на обмотках, задаваемая ШИМ-ом, больше оптимальной), а если позже - значит двигло не успевает повернуться, то есть напруги маловато. В связи с этим есть предложение попробовать устанавливать скважность ШИМ таким образом, чтобы ZC всегда происходило немного раньше половины времени коммутации и посмотреть что будет.
С уважением, администрация сайта.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление 3-х фазным sensorless BLDC

Сообщение rhf-admin »

Вот мои изыскания на тему bldc-моторов: схема, программа для контроллера.
Пока это вариант без всяких управлений, базовый. С ним, кстати, тоже вполне можно поиграться. По крайней мере до 2-х тыщ оборотов двигатель от винчестера эта схема спокойно разгоняет.
Позже будет ещё видео, а потом и про разные варианты управления (себе я плату сразу сделал под бессенсорное управление, но всё должно быть по порядку).
С уважением, администрация сайта.
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Управление 3-х фазным sensorless BLDC

Сообщение Fahivec »

В принципе, можно получить ещё и четвёртое состояние - когда оба полевика открыты, но в этом случае получится КЗ и один из полевиков просто сгорит. Поэтому такое состояние мы будем считать запрещённым и с ним нам как раз придётся всеми способами бороться.
Предлагаю модернизировать схему драйвера таким образом:
с диодом..
с диодом..
bldc_motor_2a.gif (12.25 КБ) 10495 просмотров
или таким:
с транзистором..
с транзистором..
bldc_motor_2b.gif (12.1 КБ) 10495 просмотров
В случае подачи на вход драйвера обоих сигналов с МК ключ Т2 через диод D2 (или Т3 во втором случае) притянет затвор нижнего полевика к общему проводу и не даст ему открыться. Это исключит короткое замыкание через оба открытых полевика.

Простое соединение коллектора Т2 к затвору нижнего полевика может вызвать прохождение тока через R1,R4,R8 при еще не инициированных портах МК. В худшем случае этот ток создаст условие открытия обоих полевиков, чего собственно и нужно избегать.
Тест пройден! :geek:
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

Re: Управление 3-х фазным sensorless BLDC

Сообщение Fai »

rhf-admin: да, все правильно, ЗЦ "смещается" по оси времени коммутации, и задача мк коммутировать так, чтобы он был примерно около половины. Я пока еще не пробовал применить твой метод, но как мне кажется, проблем будет еще больше, так как изменение времени коммутации дает куда более быструю реакцию (мы же все-таки можем вычислить количественную ошибку), тогда как подбор шим может быть долгим, + время коммутации все равно нужно будет определять и вычислять. Хотя тут надо пробовать.
а потом и про разные варианты управления (себе я плату сразу сделал под бессенсорное управление, но всё должно быть по порядку).
О, скоро будет самое интересное :)
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

Re: Управление 3-х фазным sensorless BLDC

Сообщение Fai »

Продолжаю потихоньку мучать программу. Переписал почти все на асм, проверить макс скорость, в итоге получил примерно 9кгц коммутации, что совсем немного, хоть и лучше прежнего результата (типичный двигатель от винчестера с отношением 1:4 будет вращаться со скоростью около 22-23к оборотов в мин). При этом по осциллограмме видно, что свободное время еще есть. Ксати, у разных двигателей макс. частота до срыва разная, возможно тут индуктивность виновата.
Вообще, по своим опытам и читая различную литературу, выделил для себя такие основные моменты:
-Управление двигателем в установившемся режиме - это совсем не сложно.
-Самые ответственные части - разгон до детектирования ЗЦ и уверенное детектирование его в условиях работы шим.
-Можно определить положение неподвижного ротора с дискретностью 1/6 или 1/12 электрического оборота методом сравнения индуктивностей.
-Для облегчения детектирования ЗЦ лучше если шим идет на верх и низ одновременно. Тогда свободная фаза не будет "прыгать" от шим, но это не всегда возможно.
-Для начального разгона можно зациклить определение положения и кратковременное включение обмоток по нему. По достижении определенной скорости выйти на обычную коммутацию.
+ можно стартовать с 0-й скорости с практически любой массой на роторе.
- надо тщательно подбирать условие выхода, иначе не универсально.
- так же тщательно надо подбирать время включения обмоток при определении положения и задержку перед ацп
-Определять ЗЦ можно как по обеим фронтам, так и по 1. Оба фрронта дают бОльшую стабильность, по 1 - детектирование ЗЦ чередуется с математикой, что позволит получить большую скорость.
-Как то нужно определять "ложное вращение", когда ротор не вращается, а определение ЗЦ идет, причем это приводит к определенной частоте коммутаций, которая к сожалению меньше макс частоты нормального вращения.
-Способов детектирования ЗЦ много, их реализаций еще больше :(

1.Изображение 2.Изображение 3.Изображение
По осциллограммам: желый - один из каналов верхнего ключа, синий - время процедуры определения ЗЦ в чистом виде, зеленый - фазное напряжение после делителя, фиолетовый - искусственная средняя точка. на 1.2 и 2.2 фиолетовый - это "свободное" время, вне обработки прерывания.
1 - детектирование по одному, восходящему фронту, 2 - по 2-м фронтам, 3 - где-то там, в шиме, надо найти ЗЦ :) период шима 32мкс. 1.3 и 2.3 - коммутация и детектирование в деталях, особенно на 1.3 видно, что все еще есть где-то 25-30 мкс, и частота могла быть выше, но нет, увы. Кстати, точный механизм "срыва" я так и не понял. Вообще, я ожидал, что около потолка двигатель будет работать в чистом синхронном режиме, но почему-то в определенный момент набора оборотов происходит "срыв". В общем, впереди еще много интересного, хотя у меня уже почти кончились идеи.

Ах да, как всегда программа. На этот раз на асм'е:
3pasm_main.7z
(2.52 КБ) 418 скачиваний
Она умеет определять положение ротора до старта, стартовать с него (это уменьшает "дергание" при старте), детектирование по двум фронтам. Средний движок от винчестера разгонит примерно до 15к оборотов.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление 3-х фазным sensorless BLDC

Сообщение rhf-admin »

точный механизм "срыва" я так и не понял
Ротор не успевает за полем. Напруга на обмотках слишком маленькая для данной нагрузки чтобы ротор поворачивался достаточно быстро. Я это как-то так понимаю.
я ожидал, что около потолка двигатель будет работать в чистом синхронном режиме
Что имеется ввиду? Он всегда в синхронном режиме работает, это же синхронник. Просто когда ротор не успевает за полем - происходит выпадение из синхронизма.
С уважением, администрация сайта.
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

Re: Управление 3-х фазным sensorless BLDC

Сообщение Fai »

Ротор не успевает за полем. Напруга на обмотках слишком маленькая для данной нагрузки чтобы ротор поворачивался достаточно быстро. Я это как-то так понимаю.
Двигатель работает с обратной связью же, такое возможно только на небольших оборотах, на высоких, скорее всего, происходит обратное - ротор поворачивается быстрее, чем программа доходит до места определения зц, в результате накапливающаяся отрицательная ошибка переполняет таймер. Но в это верится с трудом, когда программа работает с детектированием под 1 фронту, там еще куча времени остается.
Что имеется ввиду? Он всегда в синхронном режиме работает, это же синхронник. Просто когда ротор не успевает за полем - происходит выпадение из синхронизма.
Как бы да, в синхронном, но "источником" этой синхронности служит ротор через обратную связь по ЗЦ. Противоположный пример - твоя недавняя публикация про раскрутку без ОС, там источник синхронности это, грубо говоря, таймер. Кстати, я вспомнил, что в один момент экспериментов с программой на С, я получил такой режим - при повышении напряжения/ШИМ ротор просто не раскручивался больше, но при этом начинал сильно возрастать ток потребления, а форма напряжения стала прямоугольной, а не трапециевидной. Обороты при этом были большие, около 10к. Вращение было стабильно.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление 3-х фазным sensorless BLDC

Сообщение rhf-admin »

Что-то я мысль перестал улавливать. Что имеется ввиду под источником синхронности?
Переключение обмоток создаёт вращающееся поле. Ротор всегда, пока ему хватает сил, крутится синхронно с этим полем. Частота вращения поля определяется частотой коммутаций обмоток статора. Увеличивать или уменьшать магнитную силу притяжения между ротором и полем статора можно изменяя напругу на обмотках статора. Соответственно, все эти манипуляции с обратными связями - это всего лишь оптимизация напруги на статоре, чтобы лишнего не подавать и в то же время хватало.
Оптимизация эта возможна двумя путями: 1) изменять напругу на статоре, подстраивая её для заданной частоты вращения 2) изменять частоту вращения, исходя из приложенной к статору напруги. А все варианты (сенсорный или бессенсорный) - это всего лишь способы определить оптимальную точку и направление, в котором нужно изменять регулируемую величину, чтобы в эту оптимальную точку прийти.
С уважением, администрация сайта.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление 3-х фазным sensorless BLDC

Сообщение rhf-admin »

Наконец-то удалось снять видео работы моей схемки.
С уважением, администрация сайта.
Ответить