avatar_mr.Dream

Делаю себе контроллер BLDC на Arduino )

Автор mr.Dream, 19 Июль 2016 в 17:58

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

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

VVK

Цитата: Кулибин от 15 Авг. 2016 в 21:00
Сам хочу свой контроллер потому что могу что надо настроить и вообще что хочу то и делаю в прошивке, удобно.
Много идей но так и не могу разобраться, точнее нет времени и сил.
Я бы может и начал но не могу пока найти схему что и и синус можно было сделать и обычный режим.
Что бы схема была простая и ремонтопригодная, можно конечно с инфинеона слизать полностью схему но синуса тогда не будет.
У меня есть толковый программер который любит разбираться во всём, вместе сделали бы что надо, а я паять могу что угодно. ))
Пока затык по схеме.
Я тут клал всю документацию по контроллеру. Там есть исходники для процессора и для ПК, схема и плата. Желающие могут попробовать поразбираться с ним. Есть синус на один канал.

Только сложноват он для любительских задач, и программы безо всяких комментариев. Для того, чтобы разобраться, нужно будет под отладчиками гонять. А так контроллер работает, несколько человек им пользуются.

Кулибин

Да эту схемку я уже изучал, но некоторые вещи непонятны. А когда вопросов много то опять не разобраться будет. ))
Хочу с простого начать, закрутилось, заработало и можно постепенно схемы дорабатывать.
Давно была идея слизать полностью инфинеон только что бы он программировался по человечески и что бы больше параметров регулировалось + плавный рекупер тормоз.
Ну и туда за одно ваттметр, маршрутный комп всунуть.
И в принципе нахрен больше ничего не надо. Мой инфин 12 фет спокойно на мелких 4110 переваривает 100вольт и 80ампер. Больше мне ничего не надо.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

on4ip

Ну на все вами перечисленное люди тратят по несколько лет=)
В жизни все не так, как на самом деле.

nicomunet123

[user]on4ip[/user], мне кажется, что это займет меньше года.
Для управления двигателем уже есть библиотеки (даже для безхолловых). (напр: TI Instaspin) или вот: http://www.atmel.com/images/doc8012.pdf
Плавный реген (электротормоз) - простой в реализации: шимятся просто три нижних ключа и все.
Железо можно взять готовое (KU63 и выдрать из него мозги)

Самое сложное тут - синус.
E-TWOW Eco -> Kugoo -> Ninebot ES1 -> Ninebot ES-Trash

on4ip

[user]nicomunet123[/user], А вы с InstaSpin работали? Я вот да,=) ПО и железо мы свое делаем и на разработку уходит от года, это при том что в команде специалисты по силовой электронике и электроприводу начиная от теории заканчивая испытаниями. Хотя есть талантливые люди могут и за пол года все сделать. Но вся тема говорит мне о том что это не тот случай. Я предложил реальный вариант с стартер китом под который есть все для наладки, но оказывается это очень дорогой вариант+)
В жизни все не так, как на самом деле.

Кулибин

Я поговорил с другом, говорит пипец как хочет разобраться. У него тож самокат. )) Как похолодает начнём, щас гулянки, тусовки, дела, дома торчать не хочется в теплую погоду сидеть над железками. ))
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

electriq

Цитата: nicomunet123 от 16 Авг. 2016 в 21:00
[user]on4ip[/user], мне кажется, что это займет меньше года.
Для управления двигателем уже есть библиотеки (даже для безхолловых). (напр: TI Instaspin) или вот: http://www.atmel.com/images/doc8012.pdf
Плавный реген (электротормоз) - простой в реализации: шимятся просто три нижних ключа и все.
Железо можно взять готовое (KU63 и выдрать из него мозги)

Самое сложное тут - синус.

Нужно партнериться с [user]VVK[/user]  и портировать его код на дуину, там все опенсорс :)

on4ip

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

clawham

#44
я сделал контроллер на меге 328 ради приколу. примитивнейший. и он не контроллер в полноценном понимании этого слова - это электронный колектор и шимка.
тоесть сдлелал скоростную реализацию - табличка состояний холлов (всех возможных) и соответствующая им расстановка 6-ти выходов на силовые.
Подмешивание ШИМа (кстати шимить надо не нижние а верхние а лучше все сразу комплементарно) делаю снаружи диодами и резисторами ибо программно получается не достичь малых значений шим заполнения или высокой частоты комутации датчиков.

вот прерывание по изменению любого пина любого датчика холла.


char HallState[8] =  {0b00000000,
                      0b00001100,
                      0b00010001,
                      0b00010100,
                      0b00100010,
                      0b00001010,
                      0b00100001,
                      0b00000000};


interrupt [PC_INT2] void pin_change_isr2(void)
{
   
    // Place your code here
    HallsChanged = 1;
    unsigned char res = 0;
   
    HallBits=0;
   
    HallBits      = H3;
    HallBits    <<=1;
    HallBits     |= H2;
    HallBits    <<=1;
    HallBits     |= H1;
   
    HallBits ^= 0b00000111;
   
    if((HallBits==1)&&(HalfTurn==1))
    {
        HallsCount+=1;
        HalfTurn=0;
    }
   
    if((HallBits==0b00000101)&&(HalfTurn==0))
    {
        HalfTurn=1;
    }
     
   
    if(HallBits<8)
    {
        res = HallState[HallBits];       
    }
   
    if(((res&0b00000001)&&(res&0b00001000))||
       ((res&0b00000010)&&(res&0b00010000))||
       ((res&0b00000100)&&(res&0b00100000)))
    {
        res=0;
        HallError=1;
    }
   
    if(OutEn)   
        SetOut(res);
    else
        PORTC = 0;

}

void SetOut(unsigned char Bits)
{
    PORTC = 0;
   
    #asm("nop");
    #asm("nop");
    #asm("nop");
    #asm("nop");
    #asm("nop");
    #asm("nop");
    #asm("nop");
    #asm("nop");
   
    PORTC = Bits&0b00111111;
}




SetOut - установка выходов с мертвым временем.
выход с контроллера идет прямо на драйвера через резисторы. отдельной ногой ШИМом я прижимаю все три верхние линии на землю через диоды - таким образом ограничиваю ток батарейный или расчетно-фазный.

Так вот на 8 мегагерцах атмега с вот этим вот примитивнейшим кодом уже не в состоянии обслужить даже 20 килогерц с холлов! отставание от момента изменения холла до момента изменения выхода - до 30 градусов электрических!!!!  все. никакими программными опережениями ардуинами и т.д. не может и пахнуть в нормальном контроллере . не успеею мега даже пару 32битных флоатов перемножить как она уже безоговорочно не успела :) Я лично вижу нормальную реализацию вектора для высокооборотистых моторов (редукторники циклоны и т.д.) только на плисине рядом с которой будет какой-то армик для расчетов тяжелых(или этот же армик внутри плиса сэмулировать - не суть важна) - основные задачи время выполнения которых очень критично - хорошо переносятся на плис. а тяжелые расчеты и хитрые логические сземы воздействия - они не реалтайм и пусть их какой-то проц и решает.

Так что если хотите "абы покрутить" своими руками BLDC блочно до 5 килогерц по холам - пишите мне - дам вас и схему и исходник. я на этом контроллере ездил. он конечно жуть какой недоделаный - это был эксперимент по возможностями отмежки и он доказал - меге там делать нечего а ардуине тем более....

Про синус на меге забудьте впринципе! чтоб синус был похож на синус хотябы на частоте 1 килогерц с холлов - надо как минимум иметь возможность программно миксить два потока(пусть табличных и по прерываниям) на частоте 27 килогерц а это уже не оставляет ни одного свободного такта меге. я пробовал. даже на асме там просто некогда чегото считать - хотя я все делал на интах и юзал апаратный умножитель - делений не применял впринципе - ну не успевает...опаздывает аки лошадь а на 2 килогерцах вообще бывает перескакивает такт ибо накладываются прерывания уже.

ну а примитивный контроллер я написал за вечер да...и он закрутился...да...и не одного фета не спалил да...но...это называется абыкак а не контроллер. любой инфинеон будет на порядок интереснее этой поделки и разве что на высокооборотистых моторах поделко чтото ожет лучшее показать по таймингам. И да я поднимал частоту меги до 25 мегагерц - что мертвому припарка - надо 10-20 кратное ускорение вычислений а не 2-3 кратное :) ну и рамы побольше ...в общем оно то возможно и даже синус вполне возможно но....ничего лучшего того же миника или инфинеона не получится :)

Просто посмотрите на тот dsPIC что применяет VVK.
140 мегагерц. 16 битная архитектура. Одноцикловый 32битный перемножатель делитель аппаратный, DMA. 7 высокочастотных комплементарных шимтаймеров с апаратным дедтаймом и точностью задачи ширины в 8 НАНОсекунд!. А кроме этого куча программируемых компараторов и входов на всякие защиты и ошибки для мгновенного отключения выходов шима - все это апаратно - заполнил нужные битики и оно клокает себе само а ты программкой чтото там себе считай отдельно - одно другому не мешает! Это минимум на чем можно строить чтото серьёзное в приводе....какие атмеги..какая ардуино вы о чем шепчете-то? :)
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

Кулибин

Хорошо, забьём на синус и хрен с ним. Что если скопировать полностью схему силовую с инфинеона? Он прекрасно работает и никаких нареканий нет для простых великов и самокатов.
А ваш код по идее должен подойти.
Например я на неделе спаяю на пике своём любимом пока что простом 18f 64мгц схемку сдёрну с инфинеона точно, есть МК который можно покрутить.
Если закрутится то можно дальше извращаться и до идеала доводить.
Хрен уж с ним, пусть будет аналог фина только с плавной рекуперацией чего дико не хватает.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

mr.Dream

Цитата: clawham от 18 Авг. 2016 в 00:09
кстати шимить надо не нижние а верхние а лучше все сразу комплементарно
а какая разница? Верхние затворы дергать трудней, а драйверов нижнего плеча выбор больший и они есть очень мощные, так что можно ШИМить очень крутыми фронтами и высокой частотой. А всесразу для блочной коммутации - лишний нагрев, а результат тот же. ИМХО.


Добавлено 18 Авг. 2016 в 00:28

Цитата: clawham от 18 Авг. 2016 в 00:09
Так вот на 8 мегагерцах атмега с вот этим вот примитивнейшим кодом уже не в состоянии обслужить даже 20 килогерц с холлов! отставание от момента изменения холла до момента изменения выхода - до 30 градусов электрических!!!!
Нужно брать значения с "предыдущих" датчиков и через задержку переключать.

А я вообще хочу сделать "электронный коллектор" на логике, а МК только шимить и мерить-ограничивать.
Сколько там мне нужно переключений обмоток в секунду? 12 обмоток, 8 магнитов, 5 тыщ оборотов.

clawham

#47
не советую пики. частоты много толку мало. берите мегу.

схема инфинеона хрень! не берите с него пример - драйвера на рассыпухе не аайс. Сделайте драйвера нормальные с бутстрепом. сделайте операционник с низкоомным шунтом батарейным ивпринципе больше ничего не надо..а ну да - питалку лучше сделать импульсную - если интересно могу всем этим поделиться ) есть наработки :)  Но их надо доводить до того что вы хотите. Я например предлагаю до 500 герц по фазам таки генерить синус какой-никакой но успеваем. а основной гул именно на низах. Ещё у меня есть много замашек на апаратное токоограничение (чисто на внешних компараторах) и ещё очень много идей :) было б кому их обкатывать...

Или у Вас цель самому руками код написать который моторчик крутит? так я ж говорю это делается за вечер - ничего сложного в этом нет.

Схема плата прошивка лежат у меня в папке релиз - https://www.dropbox.com/sh/nrg2xibpur1cvd4/AAA0Bcs0RtCNQG7GL0u0U-EAa?dl=0 - пожалуйста смотрите :) но тут я повелся на драйвера с рассыпухи...впрочем для тока 7 ампер оно вполне себе годится


По ШИМингу просто скажу так - гораздо лучше когда индуктивность "бьет" в землю чем в космос за напругу батареи на нулевом состоянии ШИМа :) Кроме того НИКАКИХ проблем нет шимить верхние ключи я могу вам привести два приема когда драйвер нижнего фета становится с помошью одного транзистора npn 2 резисторов 2 диодом и конденсатора - полностью верхним драйвером со всеми своими фронтами и т.д. Кстати именно по этому - бутстрепное питание - тоже хорошо шимить именно верхние полевики. если их не шимить - они не будут проваливать фазы на землю и не будет подзаряжаться бустсрепный кондер. Поверьте с этим нет никаких проблем. пролема есть на низких значениях шима и больших фазных токах ибо весь фазный ток упирается в один нижний открытый фет и один закрытый нижний фет в его диод. там падает 0.8 вольт и потому это греет контроллер. вот открывать бы этот нижний фет тоже в противофазе с верхним да так чтоб не допускать рекуперации - вот это крутое делло сильно экономящее нагрев и кпд но слишком сложное - надо контроллером расчитывать на основании данных о его KV и текущих оборотах - напругу противоэдс(ну или напрямую мерять чем-то) и шим выдавать сразу такой как надо или выше но ни в коем случае не ноль ибо это будет максимальное торможение и сгорание фетов обмоток и т.д. :) в общем-то ничего сложного но надо аппаратные скоростные токовые защиты на каждой фазе и очень быстрый мозг для просчета заполнения шима. Ну или забить - я так катался - но тогда отпуцскание ручки приводит не к накату а к реактивному торможению :)

Когда сделаете свой контроллер - выведите в терминалку хотябы 20 последних времен переключения холлов. и вы поймете что они скоты ниразу не линейные равномерное вращение колеса не приводит к табличке
001
8мсек
011
8мсек
010
8мсек
110
8мсек
100
8мсек

на самом деле там получается драмандбасс самый жесткачий!
001
3мсек
011
2мсек
010
8мсек
110
6мсек
100
5мсек


что с этим будете делать? :) а ещё прикол в том что оно повторяется у меня например 12 раз за оборот полный ротора и при равномернейшем вращении колеса это дело не одинаково выдает эти же промежутки. даже в пределах одного оборота эта комбиначия постоянно перемтавляет короткие и длинные задержки местами :) а ещё там в этих холлах часто появляется заполнение ШИМом :) дада 16 килогерц  левые прямоугольники а не просто иголочки :) вот такие китайцы молодцы :)
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

Кулибин

А отчего такие времена переключения холлов? Почему так происходит?

И ещё  в холлы лезет шим?? Я как то боролся однажды с этим, помогла ёмкость 0.1мкф.
Снимал с холлов сигнал на маршрутник, так вот он бесился как ненормальный пока ёмкость на поставил на 0.1. Осциллограф тыкнул и всё, чёткий прямоуголник, а до этого там мусора было хрен разберёшь сколько.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

clawham

#49
а от того что кривые магниты криво намагниченные и криво приклеенные. так же и сами холлы - они только примерно на своих местах стоят - на самом деле стоят невпопад.

С ШИМом конечно можно и кондером бороться но вы хоть представляете как вы зарягиваете фронты этих датчиков и как вы ограничиваете полосу возможных скоростей? Датчик только на землю тянуть может а вверх поднимает резистор в контроллере.... на циклоне например за один такт 8 килогерцового шима может состояние холлов пролететь :)  Естественно на максимальных оборотах и высоком напряжении. потому и приходится задирать частоту шима, потому и приходится с холлов вести экранированный кабель и вообще холлы не в зубах ставить а отдельно от зубов статора чтоб магнитное поле катушки не мешало собственно датчику я например для компенсации беспредела - ставил доп датчик  в диаметрально противоположном месте чтоб он давал сигнал в противофазе со средним холом - так я вычислял реальный момент пролета - среднее между этими двумя датчиками :)

И там ещё очень много нюансов :) Но впринципе абыкак покрутить - и так можно.
Я в процессе колупайства пришел к выводам таким :
1) из всех холлов наиболее правдивый тот что между двух противоположно намотанных зубцов одной фазы стоит.
2) атмеги может и хватит на кручение низкооборотистого ддшки но писать надо будет на асме и безо всяких вычислений опережений и синусов.
3) холлы вообще нужны только для начала движения - остальное желательно ловить по переходу нуля виртуальной средней точкой или ставить оптический энкодер из скоростного фотодиода и кружка из принтера
4) в идеале конечно же нужно обучать контроллер записав один полный физический оборот и заставлять контроллер воспроизводить всю эту гармошку с разнобоем - тем самым компенсируется несиметричность обмоток и магнитов.
5) динамическое опережение "зажигания" - самая важная фича контроллера даже блочного. впринципе синус дает только бесшумность.
6) силовая часть должна работать в комплементарном режиме ( по аналогии с силовыми преобразователями - синхронный выпрямитель) иначе на мощных моторах контроллер будет греться аки утюг.
1)8FUN SWXK 250w24V@17A48V 13S4P LGD1, China kontr
3)MXUS 3000 @90A80V LiFePo 20Ah 25S, Nucular 12F
Telegram @clawham

Кулибин

Это если делать ну прям супер идеальный контроллер. Пока хочется сделать просто копию инфинеона но человеческого. ))
Мало мне инфинеона это раз, два, если что то сдохнет то я себе за день новый соберу и мне не надо 8 тыс где то доставать. ))
Да я просто закажу сразу 10шт плат на заводе, они будут сущие копейки стоить, просто напаял за 2 часа деталек и вот те человеческий контроллер. ))
Пусть хотя бы будет инфинеон для начала, потом постепенно надо будет дорабатывать.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

clawham

Ну занимайтесь :) я ж говорю - сделать подобие инфинеона просто и не сложно и атмеге хватит на это ресурсов....

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

Кулибин

Ну адаппто сделали же. Зато теперь живут. ))
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?

clawham

 а кто вам сказал что там чтото реализовано нормально?
и проц там 16битный MSP так что его возможности тоже заранее известны - даже за редукторниками он уже никак не успевает а за циклоном и подавно. И это при том что програмер их уже до битика все оптимизировал в асме. там вся моторная часть на асме написана. доволдьно грамотно но оно уже превратилось в такой клубок что чтото в него добавить уже очень проблематично. Но да вы правы - низкоскоростные моторы он коекак крутит :) и иногда даже попадает в такт :)

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