avatar_peat

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

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

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

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

VVK

Если коротко, то в моем контроллере измерение длительности срабатывания холлов выполняется по прерываниям, а синус (или трапеция) генерируются отдельными таймерами. Эти таймера во времени привязаны к прерываниям холлов, но через дополнительный счетчик, значение которого определяет сдвиг фазы. Это позволяет задавать задержку/опережение фаз по отношению к холлам.
Для такого алгоритма больших вычислительных мощностей не требуется, PIC должен справиться.

Night-Prizrak

Цитата: peat от 16 Сен. 2016 в 17:14
Во всех МК холлы жестко вклеены в пазу между зубьев. Что либо там менять не катит никак.
не совсем... 
в ДД от Спарты - стоит кольцо в крышке и целых 6 холлов на плате статора.
в редукторнике  от Газели 135мм передней (тот еще мутант) - 3 холла на платке, привинчивающейся к корпусу моторчика.
как бы за всех не говорю - это глупо, но есть и исключения в МК ;)

on4ip

А вообще векторный привод решает это все без изврата=)
В жизни все не так, как на самом деле.

Night-Prizrak

Цитата: on4ip от 16 Сен. 2016 в 18:08
А вообще векторный привод решает это все без изврата=)
Ага, схемку бы, с прошивками, с разводками плат..  чтоб самому собрать "за парубаксов"   ;-D

on4ip

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

Yaroslav

Раньше ездил на 36 вольт поэтому режим 120% инфинеона был включен все время. Алгоритм у них там какой то хитрый, если с нуля ехать на 120, то сначала разгоняется до нормальной скорости а когда ток начинает падать, появляется рывок и дополнительное ускорение до 120℅, очень напрягает, в первом контроллере от вольты, ускорение было плавное до максимальной скорости, правда там 115℅. Сейчас езжу на 100℅, 120 использую редко, только когда нужно кого то обогнать.
Вообще круто было бы иметь точную настройку холлов на любом контроллере, думаю девайс будет многим актуален.
Строю лигерад

peat

А как OVS у адапто работает ? В плане эксплуатационных параметров.
Алгоритмы опустим.
То есть уопережение начинается от чего? от некой около предельной скорости ? Тоесть контроллер , зная Kv мотора и зная текущее напряжение понимает что скорость околопредельная и начинает плавно с этой скорости повышать опережение с коээфициентом заданным в настройках.. верно ?
Допустим . При няпряжении 60 вольт , предельная скорость МК - 60 кмч (или сколько то там оборотв скорее всего.
На скорости скажем 55 кмч , начинается  плавный рост опережения и на 60 кмч оно достигает воего максимума. Дальше как байк поедет так и поедет..
Но там по ходу дела еще и ток подключается.
Очень не хочется огорода с шунтами.

on4ip

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

peat

ПОка все в тумане по алгоритмам. Если бы планку можно было бы наперед поставить , то с попаданием в нужный угол путем торлько задержки - все тут прозрачно.  С другой стороны , наперед будет , если задерживать на 1 оборот минус требуемый градус ( по времени).
Пока собираю данные.
Еще есть мысль задерживать опираясь на цикл холлов. Это 6 комбинаций всего. Тоесть не 1 оборот , а 6 тактов.
Смотрим.
Пришли 6 тактов. Интервалы между сменами кода скажем 10мс.

Нужно 2 распареллеленные задачи.

1. Смотрим , с каким интервалом пришли 6 тактов с холлов. Допустим 10мс.
2. Чтобы было опережение , генерим следующие 6 тактов , только с интервалом уже 9 мс,
3 Пока подмененные такты уходят в контроллер, параллельно смотрим с каким интервалом приходят следующие 6 тактов с холлов.
4. цикл непрерывен и замкнулся.
Остается вопрос чтоделать на самом старте , ведь подмены там не должно быть. Вот тут просто делаем задержку 0 и все что пришло с холлов тут же отправляется в контроллер.
Алгоритм по ходу до безобразия прост.



mr.Dream

[user]peat[/user], я себе буду делать контроллер, и алгоритм будет такой: меряю с запаздыванием не на целый оборот минус опережение, а только на 1/6 оборота (электрического), то есть на один такт переключения состояния холлов.  Грубо говоря, это приблизительно то, как бы сместили все холлы на 60° физически, и сделали управляемую линию задержки.  Только я думаю еще, делать это на МК, или же сделать "аналоговую" задержку сигналов? Это разгрузит МК,
Короче, пока обороты низкие и на старте - переключаем ключи "как надо", после определенных оборотов (периода переключения состояния холлов) программно подменяем холлы, как будто бы мы их физически свернули на угол, и тогда измеряя период переключения ставим такую же задержку, но с коррекцией в нужную сторону. Используя три таймера.

Yaroslav

[user]mr.Dream[/user], я тоже про это думал, зачем пропускать целый оборот, если достаточно одного такта
Строю лигерад

Frolikum

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

TRO

Цитата: Yaroslav от 17 Сен. 2016 в 18:34
[user]mr.Dream[/user], я тоже про это думал, зачем пропускать целый оборот, если достаточно одного такта
Походу Чупа не читает что ему пишут в теме, так как об этом уже было написано уже как минимум раза три включая меня, и вот еще раза три написали

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

Frolikum

Проблема не в самом алгоритме а в его реализации. На практике приходится использовать фильтры не только для скорости но и для ускорений так как реальный мир куда более "жесток" чем всякие там протеусы.

Цитата: mr.Dream от 17 Сен. 2016 в 18:25
Только я думаю еще, делать это на МК, или же сделать "аналоговую" задержку сигналов? Это разгрузит МК,

Используя три таймера.

Прерывания от датчиков не так уж и нагрузят МК. Даже десять килогерц для этих ребят не проблема. А вот программные фильтры вот это проблема, иначе не нужны были бы ДСП процы.

А вот насчёт трёх таймеров вы однозначно погорячились. Это расточительство.

okyar


peat

Цитата: TRO от 17 Сен. 2016 в 18:46
Цитата: Yaroslav от 17 Сен. 2016 в 18:34
[user]mr.Dream[/user], я тоже про это думал, зачем пропускать целый оборот, если достаточно одного такта
Походу Чупа не читает что ему пишут в теме, так как об этом уже было написано уже как минимум раза три включая меня, и вот еще раза три написали

да нет жеж.. я же написал что 1 оборот не нуден.. достаточно 6 тактов. Просто каждые 6 сменикомбинаций холлов, на 7й комбинации  по пололожению  магнитов и тоже самое что начало 1й комбинации. Это цикл длящийся ровно 6 проходов магнитов через один зуб. По этому нет необходимости делать 1 оборот. Сейчас картина вырисовывается уже в деталях.

mr.Dream

[user]peat[/user], один цикл - это две смены полярности на отдельно взятом зубе. Рассматривайте любой мотор, как простейший, для лучшего понимания: два магнытных полюса и три фазных обмотки.  Остальные моторы контроллер видит аналогично, и он вообще не знает сколько там пар полюсов и фазных зубов, и не нужно ему знать. 6 тактов - это каждая фаза, смещена относительно другой на 120 градусов пересекающаяся с магнитами, смещеннымти на 180. За этот "оборот" каждый холл один раз включится, один раз выключится, но каждый из них соотвественно с задержкой 1/3 оборота или 120°. Мотор при этом физически может провернуться на часть оборота, или даже на малую долю его, если соотношение пар полюсов магнитов и зубцов статора не 2:3. При 4:3 будет два "электрических" оборота на один физический, при 10:12 будет еще больше, и так далее ))

TRO

Цитата: peat от 18 Сен. 2016 в 01:18
Цитата: TRO от 17 Сен. 2016 в 18:46
Цитата: Yaroslav от 17 Сен. 2016 в 18:34
[user]mr.Dream[/user], я тоже про это думал, зачем пропускать целый оборот, если достаточно одного такта
Походу Чупа не читает что ему пишут в теме, так как об этом уже было написано уже как минимум раза три включая меня, и вот еще раза три написали

да нет жеж.. я же написал что 1 оборот не нуден.. достаточно 6 тактов. ...
Это и есть один электрический оборот. Про механические мы тут речь не ведем.
Речь о том что достаточно замерить время от одной до другого смены (два такта).
А что бы вычислить ускорение (разницу) достатчочно двух таких тактов.
А полный ЭЛЕКТРИЧЕСКИЙ оборот из шести тактов (на линейной скороти) нужен толко один раз для калибровки ошибки положения датчиков холла.

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