avatar_peat

Опережение, OVS , алгоритмы и примочка для любых BLDC контроллеров с холлами.

Автор peat, 16 Сен. 2016 в 11:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

peat

Господа знатоки. Поднимаю тему с OVS. Сама теория ослабления магнитного поля не интересует. Интересует практическая реализация идеи.
Предыстория.
Все началось со стенда , где я мучал 500ваттный циклон. Поворачивая планку с холлами на небльшой градус  относительно оси вращения , я заметил что обороты можно сильно увелчить или уменьшить без поднятия напряжения. . Про падение КПД опустим.


Помучав финик со 120% режимом , я ощутил действие опережения на практике. Если на моем МАС при напряжении 56 вольт максималка без опережения = 48 кмч , то с опережением я еду 60 кмч.
Такой режим необходим скажем на прогазовках , когда ты просто обязан ехать в потоке машин, или когда батарейка с мотором куплена , а максималка неожиданно ниже чем расчитывалось, а переделывать что либо уже нет ни сил ни денег ни желания.
ПОшустрив по инету я наткнулся на очень интересный проект



https://endless-sphere.com/forums/viewtopic.php?f=2&t=19054

Товарищ сделал платку , которая вставляется между контроллером и мотором и динамически изменяет опережение (сигнал с холлов) в зависимости от тока потребления и положения ручки газа.
На выбор по внешней кнопке есть 2 профиля.
Все бы ничего , но на финике режимом 120% пользоваться практически невозможно , если вкачиваемая мощность больше 2 квт. Во время включения режима происходит резкий рывок на скорости. Контроля скорости ручкой газа уже не возможен.
То что предлагает мужик с форума имеет плавное нарастание и аналогичен режиму OVS на минике.
Все бы ничего , но проект у мужика подох. Заказать такую плату не реально.
Так как с 1998 года я плотно сижу на платформе PIC ,то написать такую шню  мне не составит особого труда.
Зачем это нужно.
По мимо того что эта приблуда может увеличить обороты МК , она еще может точно подстроить обороты под KV мотора.
Вращая планку с холлами  на стенде , фактически сымитировав работу этого устройства , я повысил КПД циклона почти на 10% от заводских настроек. То есть появится возможность точно подстроить фазы включения обмоток под вашу связку  контроллер-мотор.

Немного теории почему заводские настройки положения холлов могут снижать КПД мотора.
Спойлер
Разбирая схемы некоторых контролеров BLDC  я заметил одну особенность. Почти у всех на входах с холлов стоит RC цепочка (фильтр)  , которая немного сдвигает время физического прихода сигнала с холлов. У разных контроллеров эта цепь с разными номиналами. Время прихода сигнала будет всегда разным. То есть запаздывать с разным интервалом времени. Ко всему прочему добавляется задержка на обработку сигнала с холлов самим алгоритмом контроллера. Это 2 неизбежных фактора на пути сигнала с датчика холла в моторе.
К ним присоединяется задержка на включение самих фетов (драйвер , большая емкость на затворе , что дополнительно вносит задержку.
После того как феты включились , нарастание магнитного поля в моторе происходит не мгновенно а так же с задержкой. То есть сама конструкция (индукция) мотора вносит задержку к появлению магнитного поля в зубе.
Итого имеем 4 фактора , которые влияют на задержку между приходом сигнала от холлов и появлением магнитного поля на зубах статора.
Перечислю -
1. RC цепочка между холлами и контроллером.
2. Алгоритмы контроллера.
3. Задержка на включение FET .
4. Задержка появления пика магнитного поля на зубьях статора из за индукции мотора.

Если мы меняем контроллер или мотор , 2 любых фактора постоянно меняются. Это может объяснять , почему для некоторых моторов подходит контроллер , а для других нет, или на оборот.
Просто стечение обстоятельств такие что сигнал с холлов конкретного мотора проходя через все 4 задержки , получает порцию магнитного поля вовремя. Замени контроллер , задержка станет другой или больше или меньше , в результате магнитное поле будет заранее или с опозданием, в следствии чего КПД немного падает.
Я видел в некоторых оборотистых моторах , холлы стоят немного вперед. Сделано это как раз для компенсации этих задержек.
К сожалению в наших МК холлы вклеены в зубья и поиграться опережением не получится никак.
Только электронникой.

На практике , если ваши обороты отличаются от заявленного Kv производителем  это означет что пик магнитного поля на зубьях появляется не совсем вовремя из за вышеописанных задержек , соответственно то КПД не идеально.  Это касается всех моторов , по этому и важна подстройка углов для каждого комплекта мотор-контроллер причем в индивидуальном порядке.

Полная аналогия ДВС и зажигание. Расстроили туда-сюда хоть чуть чуть и привет мощность.





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

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

Есть головы чтобы подсказать как это может работать ?

Мое видение этого алгоритма:
Спойлер
Если планку с холлами я двигаю вперед на физическом уровне , то и выход сигнала с холлов будет всегда с постоянным опережением как бы я не изменял обороты. 
В нашем же случае , когда идет полная подмена сигнала с холлов , то определение "наперед" происходит исходя из предыдущего интервала (оборота).
То есть по сути алгоритм смотрит за какое время произошел оборот вала двигателя опираясь на сигнал с физического холла  , и на следующем обороте , генерирует заранее сигнал для контроллера. Все это прекрасно работает на фиксированных оборотах.
А если обороты растут или падают ? Вот тут у меня загвоздка в понимании.
От куда алгоритм будет знать интервал следующего оборота  (чтобы вычислить опережение) , если физически, на следующем обороте  интервал изменится  ? На сколько ?
Машину времени еще не изобрели...
Но у других то рабоает и прекрасно. значит алгоритмы другие. Какие ?




илс

[user]peat[/user], а написать тому мужику в личку?
Задать соотв. вопросы по алгоритму?

Даже если проект забросил, думаю поделится теоретическими наработками..... почему нет?

Опять же можно апнуть тему на Сфере, вдруг кто занимается подобными проектами?
===
Кстати, когда ездил на ДД с магнитами 35мм (эквивалент номинала 1,5кВт), никакого рывка на финике в режиме 120%, не ощущал.
Хотя настройки токов, были в меру агрессивными.  :bn:

peat

Цитата: илс от 16 Сен. 2016 в 11:47
[user]peat[/user], а написать тому мужику в личку?
Задать соотв. вопросы по алгоритму?

Даже если проект забросил, думаю поделится теоретическими наработками..... почему нет?

Опять же можно апнуть тему на Сфере, вдруг кто занимается подобными проектами?
===
Кстати, когда ездил на ДД с магнитами 35мм (эквивалент номинала 1,5кВт), никакого рывка на финике в режиме 120%, не ощущал.
Хотя настройки токов, были в меру агрессивными.  :bn:

Так пиал не раз.. еще с прошлого года. Тишина.. Причем судя по уходу писем с аутбокса , он их читает.

Спойлер
Кстати, когда ездил на ДД с магнитами 35мм (эквивалент номинала 1,5кВт), никакого рывка на финике в режиме 120%, не ощущал.

Там на токах 99 батарейного и 180 фазного. У тебя таких нету.
На низких токах рывка не ощущается.

Night-Prizrak

Ну при подмене сигнала с холлов имхо ни о каком "опережении" речи не идет - ибо тут "опаздывание", задержка сигнала минимум на 180%...
Имхо - как это работает.
первые импульсы контроллер "пропускает" без изменений
приходит первый импульс от первого холла, контроллер начинает отсчет до появления второго импульса.
приходит второй - контроллер вычисляет время между импульсами
и вместо третьего импульса он уже генерериут свой, со сдвигом в ту или иную сторону.
Продолжая при этом считать и корректировать все последующие импульсы.
Тоесть по сути есть "опаздывание" на 2 импульса от текущих изменений, но поскольку процессы тут весьма быстротечны, то такое опаздывание в реалиях мало того что не заметно пользователю - оно еще и не особо критично, ибо на маленьких скоростях это вообще не важно, а на больших - все равно нельзя затормозить колесо так быстро, чтобы между 2мя импульсами разница во времени была больше пары процентов. Исключение - заблокированное колесо, но там уже любые рассчеты и опоздания не имеют смысла.
Ну по крайней мере я это вижу себе именно так.

on4ip

На низкой скорости изменение не нужно следовательно ничего не делаем, на высокой скорости зная скорость и некоторую частоту выборки вычисляем требуемое значение коррекции холлов, так как частота выборки большая и холлы тикают часто то и частота обновления информации о скорости высокая, а вот механическая постоянная времени низкая и если она различается с частотой выборок раз в 10 или более считаем что за такт расчета скорость не измениться. Коррекция будет плавать конечно с изменением оборотов но не критично.
В жизни все не так, как на самом деле.

peat

А что если включать с запаздыванием ? как предложил [user]Night-Prizrak[/user] ?
Получается что надо опаздывать  на 6 приходов кода, когда цикл холлов повторяется , а на многополюсных моторах он повторяется через где то 10 градусов положения  колеса , а не 360 как я думал.
Верно иду ?


on4ip

ну конечно нужно иметь какойто буфер для того чтоб делать компенсацию по расчетному значению, по идее это все в ЦОС почитать можно. Но запомнить нужно именно полный оборот иначе управление будет не правильное так как оно должно быть синхронизированно с потоком магнитов .
В жизни все не так, как на самом деле.

Night-Prizrak

Вобщем то можно - первый полный оборот пропускаем "напрямую", не вмешиваемся в форму сигнала, а с первого импульса второго оборота начинаем коррекцию сигналов. Только как проц поймёт где у мотора оборот закончился? нужно в таком случае под каждый двигатель в программе забивать кол-во полюсов на оборот ротора... Что не совсем "юзерфрендли"
Но все-таки мне не до конца понятно - почему нужно именно целый оборот запоминать? почему нельзя рассчитывать каджый следующий код импульсов по предыдущим 2м?

peat

Цитата: Night-Prizrak от 16 Сен. 2016 в 13:58
Вобщем то можно - первый полный оборот пропускаем "напрямую", не вмешиваемся в форму сигнала, а с первого импульса второго оборота начинаем коррекцию сигналов. Только как проц поймёт где у мотора оборот закончился? нужно в таком случае под каждый двигатель в программе забивать кол-во полюсов на оборот ротора... Что не совсем "юзерфрендли"
Но все-таки мне не до конца понятно - почему нужно именно целый оборот запоминать? почему нельзя рассчитывать каджый следующий код импульсов по предыдущим 2м?

Цитироватьпочему нельзя рассчитывать каджый следующий код импульсов по предыдущим 2м?
Я тоже так думаю.
1 полный цикл холлов - 6 комбинаций. Для контроллера начало 7-й комбинации и есть полный цикл. А сколько там на длине окружности колеса (диаметр) циклов , контроллеру по ходу дела фиолетово. Я только только начал изучать тему , по этому на точность не претендую.
Во всех работающих системах никуда не забивается длина окружности и кличество магнитов. Финик вообще ничегопро это не знает , однако работает там ovs



acyd

полный цикл 360гр (в мк это расстояние в 2 магнита), переключения холлов идет каждые 60гр. Надо уметь определять положение в промежутке 60гр. Т.е преобразователь предугадывает на основании ранее полученных данных.  Для тех кто на треугольник перешел хорошее подспорье - на 30гр сдвинуть программно.

clawham

Привет! Я такое делал на атмеге
Закончилось тем что нужно это делать не на меге а на плисине. на меге на програмных прерываниях сильный джиттер особенно на низких скоростях(с нуля вообще нереально - приходится один-в-один выдавать на ружу входа) и на высоких оборотах(у меня редукторник 8FUN SWXK) - не хватает частоты процу хотя я до 25 мегагерц задирал - не успевает нормально. приходится планку с холами сильно отклонять на позднее зажигание и процем только задержку увеличивать но со стартом всеравно беда.

Ну и неравномерность холловых сигналов. они не работают симетрично ни между собой ни на протяжении круга так что предсказать по предыдущему такту следующий - очень сомнительное удовольствие - промаживаемся и как следствие гудение повышеный нагрев и мало кпд. пробовал и на редукторнике и на дд звезда тяговом и треугольнике - забросил - гиблая затея...или на апаратных таймерах 103-х стмовских армов или на плисине и частоте 66 мегагерц чисто аппаратно.

Как делал я в простом случае алгоритмически?
Заводил входы холлов на аппаратные прерывания.
считал сколько тактов прошло с прошлого переключения состояния холлов в тактах процессора.
дальше выдавал следующую комбинацию сигнала холлов через промежуток от текущего срабатывания в кол-во тактов прошедшых за прошлое изменение состояния /360 * 60 * коэфф смещения. все это на прерываниях аппаратных и от таймера. в основном цикле латентно насколько успевалось - обрабатывались времена последнего изменения сосояния холлов, искалось в табличке соотношение нужного опережения от тока и положения ручки газа и частоты ну и выдавалось новое значение коэффициента задержки. ну и так де отрабатывались аварийные ситуации.

Атмега 328 была. 25 мегагерц. код оптимизировался на скорость выполнения и использовались битовые операции и асемблерные вставки дабы сэкономить время. но всеравно срабатывание прерывания и момент попадания в обработчик иногда занимает 6 тактов иногда 20 а иногда они накладывались и вообще привет...
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

acyd


peat

ЦитироватьЗакончилось тем что нужно это делать не на меге а на плисине. на меге на програмных прерываниях сильный джиттер
Мне это не грозит. Наверное ..  :laugh:  PIC  я програмлю на чистом асме. Там время на обработку четко фиксровано и не зависит ни от чего. Естессно прерывания аппаратные.  Частота кварца ..если 16-18 серия то 20 мгц. Я думаю этого вполне хватит чтобы обработать аппаратное прерывание для PIC. Компилятор атмеги сильно раздувает задачи. на нем хорошо интерфейсы писать да не сложные задачи. Что касается быстрой обработки сигнала , то это только асм.
Естессно сам обработчик вылизывается и оптимизируется под одинаковое время счета для стабильности.
В пике есть 16-ти битные таймера , аж 2  штуки. Тактировать можно как с кварца , так и внешне. Снаружи можно поставить кварцевый осциллятор повышенной стабильности  отдельно. Интервал счета будет ровным. Это аппаратные таймеры.
Ладно , сейчас алгоритмы надо выявить. И понять что как делать для начала. Пока нет четкого понимания процесса.


okyar

А что мешает сделать механическое опережение с запасом на весь диапазон регулировок и от него уже запаздывать? Или желание не трогать конструкцию МК ?

acyd


okyar

Цитата: acyd от 16 Сен. 2016 в 15:59
запаздывание 330гр = опережение  30гр?
Неа, к тому моменту оно может стать и 20 и 40.

TRO

360 градусов / 6 положений холлов это уже 60 градусов опережения которые есть, от них легко запаздывать на разогнанном моторе. Если хотим точности и желательно с низов, то для првильности предсказания прийдется считать еще ускорение и делать на него поправку (фанаты могут пойти дальше и обсчитывать еще динамику изменения ускорения как уже третью производную). Короче все сведется к банальному ПИДу. При этом за одно можно неравномерность срабатывания датчкивов холла поправить (замерить за несколько кругов неравномерность и прописать для каждого поправку, эту калибровку контроллер может делать сам между делом, чтобы не калиброватся отдельной процедурой на каждый мотор), то что для кого то это проблема еще не значит что та же мега не успеет с нормальным оптимизированным подходом на асме (заедейсвовав по максимуму таймера и модули захвата, чтобы бОльшая часть времязависимого алгоритма крутилась вообще аппаратно). По уму можно вообще сделать процесс обучения (завести на платку ток потребления и газульку, желательно и регеном, чтобы для многих иттераций не ждать выбега колеса).
Ну и как уже писали, с низов включать этот режим смысла нет.

Теперь все же немного теории, что касается повышения оборотов. Самый правильный способ для этого не опережение (опережение нужно в основном для компенсации запаздывания тока из за индуктивности, и выражается не в градусах, а в константе времени). Правильно это плавно исключать верхушку синусоиды из цикла ШИМ, при этом получаются два временных интервала на один такт коммутации (что в принципе продвинутые контроллеры и делают, т.е. то что многие принимают за режим с опережением на самом деле более сложный финт). Но для достижения этого эффекта манипуляции с холлами не помогут, нужно фактически менять мозги контроллеру.



Wahoo 2012 29er, +собран складной двухосис на раме"Land Rover" 69er с эл. мотором, и и МОНОКОЛЕСО

peat

Цитата: okyar от 16 Сен. 2016 в 15:45
А что мешает сделать механическое опережение с запасом на весь диапазон регулировок и от него уже запаздывать? Или желание не трогать конструкцию МК ?
В циклоне так и сделано простым поворотом магнитного кольца энкодера. Там холлы считывают информацию от отдельного кольца а не от магнитов.
Во всех МК холлы жестко вклеены в пазу между зубьев. Что либо там менять не катит никак.