avatar_mr.Dream

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

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

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

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

mr.Dream

Если поставить транзистор затвор-исток 100К, то при 4х фетах в параллель постоянная времени будет 4мс. За 20мс эмкость разрядится на 99.2%.  Значит нам нужно делать меньше милисекунды как минимум период комутации на 100% ШИМ. Это килогерц. А у меня максимум частота примрно 600гц выходит. Значит, верхние полевыки будут медленно призакрываться, выходя в линейный режим. Чо неприемлемо.  Делать "разряд" можно будет только в нижних ключах. А верхни пусть драйвер только рулит. Если они произвольно откроются, то на этапе включения, и будут только обмотки коротить. Если есть задержка включения - то драйвер их разрядит все равно. Или нет, если нету питания бутстрепного изначально? Волнует :)
В принципе, полевыки у меня вылетали только во время ребута микроконтроллера для прошивки во время работы. Потому что не было подтяжки к минусу входов драйверов.  Еще какие есть причины произвольного сквозного открытия?

Я все таки хочу экспериментально сделать преобразователь до коммутации ) о чем и писал в соотвествующей теме.

Добавлено 07 Дек. 2016 в 15:34

Цитата: valery66 от 07 Дек. 2016 в 15:32
Gostya, а по каким причинам они могут разбежаться, управляющий сигнал один и тотже. Я когда собираю такие вещи , каждый элемент проверяю, особенно транзисторы, пока без замечаний. Посмотрим далее.
да не могут. Время переключения драйвера на порядок выше мосфетов :)

valery66

А вот, что такое "комплимеетарная шим" мне никто не ответил. Я знаю только лишь одно и духполярные модуляции. Мне по душе -однополярная модуляция.

Pawel

Цитата: valery66 от 06 Дек. 2016 в 10:17
mr.Dream анализировал скаченную у вас схему на Atmega328. Резистор в затворе силовых ключей я бы уменьшил...
[user]mr.Dream[/user], А можно ссылочку на вашу схему? что-то не нашёл здесь.

mr.Dream

Да я вроде никакой схемы еще не приводил :) не знаю, кто там чего скачал)

valery66

Приношу извинения, в папку mr.Dream попал закаченный архив от clawham, от чего и "кипиш".

fondrosel

Я так понимаю что на данный момент, никто так и не сделал законченую схему контроллера на ардуино. Но все же возникает вопрос: имею несколько контроллеров на процах CY8C24533 во всех погорели переферийные порты, а силовая часть жива, пришла мысль заменить данный проц ардуиной. Возможен ли такой вариант?
Фиговый литий лучше хорошего свинца)).5 этаж хрущевки вел 45кг
P.S гиря в колесе рулит фуры не сдувают с трассы
Электротранспорт.ру электротранспорт рулит и точка

mr.Dream

[user]fondrosel[/user], ну я счас занимаюсь рамой, а когда соберу бай в кучу - буду доделывать контроллер. Сейчас у меня приоритеты другие, нету времени. Так так, что мешает поставить ардуинку вместо шатных мозгов? Вращать мотор будет.

mr.Dream

Вечером экспериментировал. Оставил 6 фетов. Помалу добавлял тока. Дошёл до 80А тока фазы. Аж задымились фазные провода.  Отпаялся от истока провод и отлетел, ибо был дрыщавым) Думал все. А нет. Феты живые ) вся проблема была в отсутствии подтягивающих к земле резисторов сигналов управления. Драйвера от ключей по прежнему в двух метрах, соединены витой парой. Честно говоря, не думал, что в конденсаторе 220 МКФ 100в столько заряда, что способен пробить ключи "стойки" при сквозной токе в момент открытия оных.
Добавил так де логику защиты от сквозного тока( открытия обеих плеч) при сбое контроллера. И что интересно, он зависал только когда был подключен ардуино к ПК через юсб.

mr.Dream

Раз пошла такая пянка, то синхронное выпрямление с рекуперацией буду делать на МК, причем - отдельных ))) так как ПЛИС не освоил (нету в наличии да и времени в обрез), мне так будет проще. На тиньках 13 будут обрабатываться только прерывания PCINT, в прерываниях примитивная микропрограмма сравнения байта порта с байтами регистров и изменения состояния. На каждый полумост - своя тинька. Хочу ими заменить "вот это":

а то очень дурная разводка получается на плате :)
отговорите меня, пожалуйста. Скажите, что быстродействия тини не хватит, чтобы корректно отрабатывать 0,5% ШИМ при 16 кгц (0,25мкс период) и вообще может зависнуть! Да, я это понимаю, что прерывания в тиньке обрабатываюся за десяток+ тактов + чуток на булевые опарации, а один такт занимает 0,104мкс при 9,6МГц.
Хочу максимум разгрузить адруину (мегу328), так как все таки планирую на ней апроксимировать синус. Хотя бы на низких оборотах. И опережение комутации обязательно. а 32 килопрерываения в секунду отнимут у нее много времени.

Frolikum

Тини можно погнать на процентов 25 если не ошибаюсь а может и больше через калибровку внутреннего генератора (OSSCAL). Но так и просится stm32 с уже готовым таймером для этой задачи.

mr.Dream

[user]Frolikum[/user], можно погнать, только стабильность может пострадать :) Я преверженец наоборот снижать обороты.
Все таки передумал эмулировать логику на АВР, хоть и быстро, но медленно )) только ради прототипирования буду пробовать.
Но возможно сразу буду на логике делать. Тем более, все микросхемы у меня есть - 74hc02 (nor), 74hc08 (and), 74hc32(or).
Перерисовал по другому схему. Упростил, сохранив логику.

Вроде бы нигде ошибки не сделал.
На входы (A, B, C)(hi, li), PWM подаются управляющие сигналы с mega328. Вдох Regen - разрешение синхронного выпрямления. Работает на нижних ключах синхронно верхним, но в противофазе по ШИМ, если на "реген" подан сигнал. А сигнал этот формируется компаратором токового шунта. Если ток идет - значит нужно "помогать" диодам ) так же он для рекуперации и электротормоза вплоть до нуля, если ШИМ=0 то всегда коротится между двух фаз с наивысшей ЭДС, если  100%>ШИМ>0 - часть энергии возвращается в батарею, какая часть - зависит от многих факторов. При рекуперации так же синхронное выпрямление получается автоматически. Ну и само собой, уровень рекуперации будет регулироваться :)
Выходы (A, B, C)(ho, lo) - на драйвера ключей.

То есть, к верхним ключам по логическому И подмешивается ШИМ, к нижним по логическому ИЛИ - синхронное выпрямление. Если я правильно понял логику работы, припустим:
подаем ШИМ 10%, сигнал на нижний ключ фазы А, верхний фазы В, и разрешение синхронного выпрямления. В момен наличия напряжения на ШИМ-входе на выходе верхнего ключа фазы В имеем сигнал. КОгда напряжение на ШИМ-входе отсутствует, открывается нижний ключ фазы В (верхний закрывается), и ток продолжает течь за счет самоиндукции между между фаз А и В через нижние ключи, "делая" "фазный" ток.

Кроме того, между входом верхнего и нижнего плеча полумоста будет стоять запрещающая одновременное их открытие логика.  Если случайно МК зависнет, то токовая защита успеет  погасить все каналы. (не рисовал, держу в голове)
Критикуйте :)

Добавлено 12 Март 2017 в 01:05

нашел ошибку в "инверторе" ШИМ-сигнала. потом исправлю

TRO

#353
Может, того, если уж сползать к корпусам на логике, то делать сразу правильно.
Как я уже раньше писал. Аппаратными должны быть ШИМы (желательно синхронизированных) и с аппаратными деадтаймами, с аппаратным стабилизатором тока, с шунтами и обратной связью хотя бы для 2 фаз (нахрена делать токовую защиту если можно сделать сразу токовое регулирование), в третью фазу можно гнать тупо синус напряжения из таблицы, нужный ток на ней сам из остальных двух фаз получится.

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

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

mr.Dream

#354
[user]TRO[/user], да, но не все сразу. Силовая часть у меня будет отдельно, по этому в любой момент могу при наличии желания, знаний и времени сделать "по уму".  А пока что будет апроксимация синуса через единственный вывод ШИМ, который будет отрисовывать 6 верхушек синусов (ну или что там выйдет) за один оборот. Только еще не придумал толком алгоритм для минимума аппаратных затрат. Одно понятно - прерывание по совпадению (СТС). В зависимости от периода щелчков холлов меняется период  пересчета значений ШИМа.
Только вот один вопрос. Придется использовать два таймера? Один таймер для ШИМ - в нем меняем только регистр совпадения, второй для дисретизации. Припустим, период смены фаз у нас занимает 1000 тактов, в массиве имеем 10 корректирующих значений для ШИМа, а значит каждые 100 тактов делаем прерывание, записываем новое значение в модулятор, обнуляем счетчик и считаем опять 100 тактов. Если 200 тактов переключение фаз - то каждые 20 тактов
Использовать буду таймер1 для подсчета. Так как он 16-битный, а остальных 8-битных моет не хватить диапазона. Только дело в том, что у меня на OC1A уже висит ШИМ-вывод. Канал В этого таймера независим, или если я буду обнулять значения или записывать значения начала отсчета, они не будуть влиять на А? Я с таймерами никогда не работал вплотную. Надо будет на досуге изучить их регистры.
------------------
таки да, TCNT1 единственный. если буду его обнулять, будет расти частота ШИМ и плыть скважность.

TRO

[user]mr.Dream[/user], Когда то меня умные люди натыкали носом с таймерами. А именно не мешать таймеру работать, (не обнулять и не менять его значение), делаем два прерывания, одно по холлам, второе по переполнению таймера (и в этих двух прерываниях считываем показания таймера и считаем в накопительном сумматоре сколько натикало тактов между сработками холлов).  Тут и восьмибитного на все хватит.

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

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

mr.Dream

[user]TRO[/user], ну примерно понял, что имелось ввиду :) только я подстрою предделитель так, чтобы  обнулиение таймера происходило чуть добльше периода переключения холлов на ХХ азделеного на дискретность - чтобы ничего не пересчитывать, а делать за один цикл тймера. а это 5000рпм (30 000 ерпм, 600 переключений холлов в секунду). Как
т.е. насчитали Х тиков от смены до смены холлов, записали в регистр сравнения, сдвинули на 3 бита, и имеем период 1/8 от периода смены фаз. туда же и опережение можно будет засунуть ступенчатое :)
но обнулять счетчик придется все равно. или выставлять начальное значение счета и ждать прерывания по переполнению, или писать в регистр сравненения и сбрасывать по совпадению.
А синус считать по таблице коэфициентов от 0,866 до 1 и обратно.

Frolikum

Что то я несколько последних постов ничего не понимаю. Синус планируется табличный или вычисляемый? Считать тики от холлов до холлов для определения периода синуса?
Чем подробнее тем более благодарнее я буду :)

mr.Dream

[user]Frolikum[/user], я так думаю, что несколько поправочных коэфициентов с таблицы заберут меньше процессорного времени, нежели каждый раз вычислять.
От холлов до холлов считать тики, чтобы из таблицы с равными (насколько выйдет) промежутками изменять % заполнения ШИМа. Если от холла до холла 200 тиков, то каждые 200/8=25 тиков считать новое значение. и так далее.

Frolikum

Трудно себе представляю таблицу поправочных коэффициентов а вот таблицу синуса да. Только она может быть разной, я имею в виду не её значения а их количество. Имея таблицу у вас будет форма сигнала для одного периода, но замечу что необходимо менять не только его длительность но и амплитуду. Как вы планирует это делать? И просто для интереса как будет себя при этом вести шим? Будет ли его частота менятся, к примеру с ростом частоты синуса растёт и частота шим, или же она останется фиксированной?