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

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

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

Сообщение Fai »

Решил на будущий возможный проект сделать себе драйвер, беглое гугление кроме готовых модельных драйверов привело меня к микросхеме LB11880, которую удалось заказать и попробовать. В принципе, я ожидал, что она будет не слишком мощная, но в реальности все хуже, двигатель от винчестера при 12В разгоняется почти до 10К об/мин, но даже при легком нажиме обороты падают на треть, а микросхема начинает довольно быстро греться. Больше разогнать не получится (мне, скорее всего, надо будет 30К макс, но почти без нагрузки), так как максимальное напряжение у нее 13В, а двигатель с меньшей индуктивностью (и соотв. бОльшими токами) быстро нагревает микру.
Тут вспомнил про аппноуты от микрочипа, в которых драйверы были. Таки да, и достаточно разнообразные. Имеющиеся детали были под схему из AN1175, схему я почти не менял, только полевики поставил поновее (немного мощнее и с чуть меньшей емкостью затвора), поставил стабилизатор для МК вместо стабилитрона, да поставил в базу биполярников драйвера верхних ключей резисторы по 1К, что бы можно было испытывать работу при питании от программатора простым замыканием общего эмиттерного резистора, получилось вот что:
Изображение
Для компилирования проекта пришлось узнавать чем и как скомпилить С, для тестов оказалось проще поставить XC8 для MPLABX. После исправления пары мелочей проект скомпилился, а плата заработала. Но не все так радужно, увы. МК позволяет регулировать частоту изменением PWM заполнения нижних ключей, дак вот, при частоте вращения выше определенной (примерно 160Гц коммутации, или 2400 об/мин) начинается "троттлинг", или затягивание текущего шага. Это хорошо видно на осциллограммах (сигналы для верхних ключей, на нижних - PWM) - на первой все хорошо, на второй после поднятия частоты вращения. Такая фигня приводит к жутким вибрациям, ограничению частоты, и повышенному току. Хотя при снижении оборотов нагрузкой ниже какого-то порога все нормально, да и мощность не в пример LB11880. В общем, если бы не эта фигня, почти идеальная схема для меня.
Я попробовал разобраться в программе, но хоть алгоритм достаточно хорошо описан в АН, С я не знаю совсем. Максимум что я добился, это незначительного повышения порога "срыва" примерно до 6К об/мин уменьшением значения PR2_INIT в main.h с 0x7F до 0x50.
В общем, у меня 3 выхода: дальше ковырять программу (подучив хотя бы основы С), забить на нее и написать свою на асме, благо алгоритм описан в АН, или собрать схему по AN1305, правда для нее у меня нет МК. Собственно вопрос: быть может кто-то, знающий С, глянет код, стоит над ним работать или лучше сразу настроиться на написание собственной программы? Проект для MPLABX :
3phase.X.7z
(67.31 КБ) 593 скачивания
ПС: Подумал, что так происходит из-за не оптимального кода компилятора, немного погуглив на эту тему нашел статейку, в которой наглядно показали, как фри версия XC8 портит код - для перемещения данных там, где можно было бы переместить без использования регистра RAM, он вставляет 2 команды операции в регистр и регистр-W: например, константа -> порт/регистр конфига становится константа -> RAM -> W -> нужный регистр конфига, или организация сдвигов регистров через циклы, даже 1, добавление nop'ов и прочее. Поэтому попробовал поставить компилятор MikroC, он таки скомпилил код после нескольких часов исправлений (а-ля GIE=1 нельзя, надо INTCON.GIE=1), но программа от него не заработала вообще, хотя ошибок больше не выдает.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

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

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

О, ни фига себе. Я тоже щас эту тему курю и тоже недавно запускал двигло от винта, только на TDA5144AT. Моё отношение к СИ для МК ты наверное уже знаешь, но свою прогу на асме напишу обязательно. В TDA-шке, кстати, подглядел простое решение, чтобы не оцифровывать обратную ЭДС, как атмелщики в 444-м апноте. TDA-шники тупо воткнули компараторы.
С уважением, администрация сайта.
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

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

Сообщение Fai »

Моё отношение к СИ для МК ты наверное уже знаешь
У меня такое же :) Просто времени сейчас не так много (хотя и понадобится этот драйвер мб не скоро), что бы самому с 0 придумывать, вот и решил попробовать готовое. Сделанная мной схема от микрочипа тоже использует компараторы, как и TDA5144AT, только центральная точка создается искусственно. Так что, наверное, буду потихоньку пилить программу на асме :)

>TDA5144AT
По сути, в интернете гуляет 2 готовые схемы - на ней и на LB11880, я мог купить только лб-шку. Кстати, (по крайней мере, для LB11880) не обязательно подключать центр треугольника двигателя, можно сделать треугольник из резисторов (0,5-3k) и подключить их параллельно двигателю, а центр - на соотв. вход, так можно подключать движки с 3-мя контактами, я так и сделал, разницы в работе по 3-м и 4-м проводам не заметил. Еще у меня была мысль сделать внешний умощнитель для LB11880, но потом понял, что проблем с обнаружением "1 фаза полностью выключена" будет много, хотя у нее есть отдельные контакты для входа сигнала ЭДС, куда можно было бы подать напряжение фазы через нормирующий усилитель...Или попробовать использовать микры от винчестеров, но я не нашел ни 1 даташита :(
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

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

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

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

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

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

Бр-р-р. Хотел написать про управление этим двиглом с помощью TDA-шки, а вышло вот что: принципы работы синхронных электродвигателей :shock:
Похоже про BLDC будет позже... :lol:
С уважением, администрация сайта.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

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

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

А теперь ещё и вот что: Заметки о трёхфазных BLDC-моторах. Часть 1. Алгоритм блочной коммутации :lol: , но я до TDA-шки всё равно доберусь... :x :lol2:
С уважением, администрация сайта.
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

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

Сообщение Fai »

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

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

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

О! А на асме можешь исходники выложить?
С уважением, администрация сайта.
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

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

Сообщение Fai »

Конечно.
3phase_main.7z
(1.89 КБ) 540 скачиваний
Правда, его будет крайне тяжело смотреть в блокноте - строки кода в блокноте почему-то образуют 1 целую строку, как будто нет признака конца строки и/или перевода каретки (скорее всего второе), но в самом MPLABX 2.3 все ок. Почему так, даже не знаю.

По поводу программы (подробно о математике в AN1305): там, вобщем-то, все просто: прерывания имеют 2 источника:
- от компаратора, тогда проверяется, не одиночный ли пиковый импульс, или ШИМ, если все нормально - содержимое таймера 1 помещается в переменную ZC.
- от таймера 1, самое основное прерывание. Тут считывается АЦП для изменения ШИМ, коммутация следующего шага, и вычисление времени до следующего на основании значения в ZC.

Контроля скорости, старт-стопа, заклинившего ротора и прочей мелочевки нет. При запуске начинается коммутация на небольшой скорости по таймеру 1 и ожидание перехода через 0. Для контроля, что переход имеет место быть устанавливаю 1 из свободных пинов в 1, а сбрасываю в следующем шаге. Смотрел осциллом, импульсы есть при переходе, но, как уже говорил, где-то математика хромает...
Fai
инженер, программист, читатель
инженер, программист, читатель
Сообщения: 213
Зарегистрирован: 01 июн 2011, 13:02

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

Сообщение Fai »

Появилось немного времени, решил еще помучить программу. В итоге нашел, что совершенно криво вычисляется половина времени коммутации (для сравнения с временем перехода через 0), подправил его и еще пару мелочей. В итоге.....ничего не изменилось :( то есть точно так же двигатель стартует, раскручивается, и останавливается. Правда, есть положительный момент - если пальцем придерживать ротор, ограничивая скорость, то чувствуется, что программа работает как надо - при усилении нажима обороты падают, при ослаблении увеличиваются. То есть математика таки работает. Что бы окончательно в этом убедиться, я сделал вычисление времени однобайтовым - то есть с TMR1 берется только старший байт. Программа все равно работала, двигатель вращался, но все так же останавливался после определенной скорости. Кстати, совсем небольшой - около 150Гц коммутацй, что очень далеко от предела таймера и вообще всего. Кстати, на 1 скрине как раз работа с "торможением", оранжевый - верхние ключи, фронт зеленого - детект перехода через 0, спад - начало следующей коммутации, синий - соотв. напряжение на двигателе, с PWM. То есть все вообще ок, как по учебнику.

В общем, точную причину мне установить так и не удалось, хотя примерное направление определил: на втором скрине видно, что незадолго (4 такта коммутации) до сбоя пропадает детектирование ZC. Почему - непонятно, форма BEMF трапецевидная, как и должно быть...Если же убрать код сбрасывания переменной времени коммутации при отсутствии ZC, то в половине случаев ничего не поменяется, в половине частота коммутаций резко уходит в небо.

Изображение Изображение
Файлы проекта:
3_phase.X.zip
(99.42 КБ) 509 скачиваний
Короче, я пока в тупике, и, видимо, подожду твоего, rhf-admin, опыта :)
Ответить