Электротранспорт

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск    

Новости:

Страницы: 123>>ВсеВниз

Автор Тема: Опережение, OVS , алгоритмы и примочка для любых BLDC контроллеров с холлами.  (Прочитано 726 раз)

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

peat

  • Старожил
  • *****
  • Репутация:
    +159/-1
  • :
    50
    1213
  • Сообщений: 3851
  • Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Господа знатоки. Поднимаю тему с 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 производителем  это означет что пик магнитного поля на зубьях появляется не совсем вовремя из за вышеописанных задержек , соответственно то КПД не идеально.  Это касается всех моторов , по этому и важна подстройка углов для каждого комплекта мотор-контроллер причем в индивидуальном порядке.

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





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

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

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

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



« Последнее редактирование: 16 Сен 2016 в 11:44 от peat »

илс

  • Глобальный модератор
  • Старожил
  • ***
  • Репутация:
    +365/-35
  • :
    1774
    2202
  • Сообщений: 20648
  • Москва, Крылатское
  • Оффлайн Оффлайн
    • Награды
, а написать тому мужику в личку?
Задать соотв. вопросы по алгоритму?

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

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

C наилучшими пожеланиями, Сергей.  |MK Bafang CST 250Вт, Мини-Е, LiNMC 48В/32Ач|
Велосериал от илс

peat

  • Старожил
  • *****
  • Репутация:
    +159/-1
  • :
    50
    1213
  • Сообщений: 3851
  • Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
, а написать тому мужику в личку?
Задать соотв. вопросы по алгоритму?

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

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

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

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

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

Night-Prizrak

  • Неравнодушный
  • **
  • Репутация:
    +3/-0
  • :
    13
    21
  • Сообщений: 129
  • Варшава, Польша
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Ну при подмене сигнала с холлов имхо ни о каком "опережении" речи не идет - ибо тут "опаздывание", задержка сигнала минимум на 180%...
Имхо - как это работает.
первые импульсы контроллер "пропускает" без изменений
приходит первый импульс от первого холла, контроллер начинает отсчет до появления второго импульса.
приходит второй - контроллер вычисляет время между импульсами
и вместо третьего импульса он уже генерериут свой, со сдвигом в ту или иную сторону.
Продолжая при этом считать и корректировать все последующие импульсы.
Тоесть по сути есть "опаздывание" на 2 импульса от текущих изменений, но поскольку процессы тут весьма быстротечны, то такое опаздывание в реалиях мало того что не заметно пользователю - оно еще и не особо критично, ибо на маленьких скоростях это вообще не важно, а на больших - все равно нельзя затормозить колесо так быстро, чтобы между 2мя импульсами разница во времени была больше пары процентов. Исключение - заблокированное колесо, но там уже любые рассчеты и опоздания не имеют смысла.
Ну по крайней мере я это вижу себе именно так.

on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    25
    131
  • Сообщений: 1473
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
На низкой скорости изменение не нужно следовательно ничего не делаем, на высокой скорости зная скорость и некоторую частоту выборки вычисляем требуемое значение коррекции холлов, так как частота выборки большая и холлы тикают часто то и частота обновления информации о скорости высокая, а вот механическая постоянная времени низкая и если она различается с частотой выборок раз в 10 или более считаем что за такт расчета скорость не измениться. Коррекция будет плавать конечно с изменением оборотов но не критично.

В жизни все не так, как на самом деле.

peat

  • Старожил
  • *****
  • Репутация:
    +159/-1
  • :
    50
    1213
  • Сообщений: 3851
  • Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
А что если включать с запаздыванием ? как предложил ?
Получается что надо опаздывать  на 6 приходов кода, когда цикл холлов повторяется , а на многополюсных моторах он повторяется через где то 10 градусов положения  колеса , а не 360 как я думал.
Верно иду ?


on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    25
    131
  • Сообщений: 1473
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
ну конечно нужно иметь какойто буфер для того чтоб делать компенсацию по расчетному значению, по идее это все в ЦОС почитать можно. Но запомнить нужно именно полный оборот иначе управление будет не правильное так как оно должно быть синхронизированно с потоком магнитов .

В жизни все не так, как на самом деле.

Night-Prizrak

  • Неравнодушный
  • **
  • Репутация:
    +3/-0
  • :
    13
    21
  • Сообщений: 129
  • Варшава, Польша
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Вобщем то можно - первый полный оборот пропускаем "напрямую", не вмешиваемся в форму сигнала, а с первого импульса второго оборота начинаем коррекцию сигналов. Только как проц поймёт где у мотора оборот закончился? нужно в таком случае под каждый двигатель в программе забивать кол-во полюсов на оборот ротора... Что не совсем "юзерфрендли"
Но все-таки мне не до конца понятно - почему нужно именно целый оборот запоминать? почему нельзя рассчитывать каджый следующий код импульсов по предыдущим 2м?

peat

  • Старожил
  • *****
  • Репутация:
    +159/-1
  • :
    50
    1213
  • Сообщений: 3851
  • Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
Вобщем то можно - первый полный оборот пропускаем "напрямую", не вмешиваемся в форму сигнала, а с первого импульса второго оборота начинаем коррекцию сигналов. Только как проц поймёт где у мотора оборот закончился? нужно в таком случае под каждый двигатель в программе забивать кол-во полюсов на оборот ротора... Что не совсем "юзерфрендли"
Но все-таки мне не до конца понятно - почему нужно именно целый оборот запоминать? почему нельзя рассчитывать каджый следующий код импульсов по предыдущим 2м?

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



acyd

  • Старожил
  • *****
  • Репутация:
    +69/-0
  • :
    1086
    592
  • Сообщений: 2832
  • Киров-на-Вятке
  • Оффлайн Оффлайн
    • Награды
полный цикл 360гр (в мк это расстояние в 2 магнита), переключения холлов идет каждые 60гр. Надо уметь определять положение в промежутке 60гр. Т.е преобразователь предугадывает на основании ранее полученных данных.  Для тех кто на треугольник перешел хорошее подспорье - на 30гр сдвинуть программно.

clawham

  • Старожил
  • *****
  • Репутация:
    +27/-2
  • :
    44
    316
  • Сообщений: 1216
  • Жемчужина у моря
  • Одесса
  • Оффлайн Оффлайн
    • Награды
Привет! Я такое делал на атмеге
Закончилось тем что нужно это делать не на меге а на плисине. на меге на програмных прерываниях сильный джиттер особенно на низких скоростях(с нуля вообще нереально - приходится один-в-один выдавать на ружу входа) и на высоких оборотах(у меня редукторник 8FUN SWXK) - не хватает частоты процу хотя я до 25 мегагерц задирал - не успевает нормально. приходится планку с холами сильно отклонять на позднее зажигание и процем только задержку увеличивать но со стартом всеравно беда.

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

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

Атмега 328 была. 25 мегагерц. код оптимизировался на скорость выполнения и использовались битовые операции и асемблерные вставки дабы сэкономить время. но всеравно срабатывание прерывания и момент попадания в обработчик иногда занимает 6 тактов иногда 20 а иногда они накладывались и вообще привет...

Что нас не убило - так ему и надо

acyd

  • Старожил
  • *****
  • Репутация:
    +69/-0
  • :
    1086
    592
  • Сообщений: 2832
  • Киров-на-Вятке
  • Оффлайн Оффлайн
    • Награды
значит надо брать подходящее железо

peat

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

« Последнее редактирование: 16 Сен 2016 в 15:44 от peat »

okyar

  • Неравнодушный
  • **
  • Репутация:
    +1/-0
  • :
    4
    11
  • Сообщений: 141
  • Povarovo
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
А что мешает сделать механическое опережение с запасом на весь диапазон регулировок и от него уже запаздывать? Или желание не трогать конструкцию МК ?

acyd

  • Старожил
  • *****
  • Репутация:
    +69/-0
  • :
    1086
    592
  • Сообщений: 2832
  • Киров-на-Вятке
  • Оффлайн Оффлайн
    • Награды
запаздывание 330гр = опережение  30гр?

okyar

  • Неравнодушный
  • **
  • Репутация:
    +1/-0
  • :
    4
    11
  • Сообщений: 141
  • Povarovo
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
запаздывание 330гр = опережение  30гр?
Неа, к тому моменту оно может стать и 20 и 40.

TRO

  • Старожил
  • *****
  • Репутация:
    +193/-49
  • :
    551
    885
  • Сообщений: 6170
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
360 градусов / 6 положений холлов это уже 60 градусов опережения которые есть, от них легко запаздывать на разогнанном моторе. Если хотим точности и желательно с низов, то для првильности предсказания прийдется считать еще ускорение и делать на него поправку (фанаты могут пойти дальше и обсчитывать еще динамику изменения ускорения как уже третью производную). Короче все сведется к банальному ПИДу. При этом за одно можно неравномерность срабатывания датчкивов холла поправить (замерить за несколько кругов неравномерность и прописать для каждого поправку, эту калибровку контроллер может делать сам между делом, чтобы не калиброватся отдельной процедурой на каждый мотор), то что для кого то это проблема еще не значит что та же мега не успеет с нормальным оптимизированным подходом на асме (заедейсвовав по максимуму таймера и модули захвата, чтобы бОльшая часть времязависимого алгоритма крутилась вообще аппаратно). По уму можно вообще сделать процесс обучения (завести на платку ток потребления и газульку, желательно и регеном, чтобы для многих иттераций не ждать выбега колеса).
Ну и как уже писали, с низов включать этот режим смысла нет.

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


« Последнее редактирование: 16 Сен 2016 в 17:27 от TRO »


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

peat

  • Старожил
  • *****
  • Репутация:
    +159/-1
  • :
    50
    1213
  • Сообщений: 3851
  • Москва
  • Ездю на батарейках!
  • Оффлайн Оффлайн
    • Награды
А что мешает сделать механическое опережение с запасом на весь диапазон регулировок и от него уже запаздывать? Или желание не трогать конструкцию МК ?
В циклоне так и сделано простым поворотом магнитного кольца энкодера. Там холлы считывают информацию от отдельного кольца а не от магнитов.
Во всех МК холлы жестко вклеены в пазу между зубьев. Что либо там менять не катит никак.

Страницы: 123>>ВсеВверх