company_banner
26 апреля в 13:47

Электробайк. Контроллер двигателя своими руками

image


Как вы уже знаете из прошлых постов, у нас в компании есть DIY-движение. В свободное от работы время коллеги занимаются фрезеровкой печатных плат в домашних условиях, делают тепловизор на FLIR Lepton, а также решают семейные разногласия с помощью 4 контроллеров и 2 умных часов. Продолжим серию увлекательный историй! Сегодня я расскажу, как сделать контроллер к трехфазному двигателю электровелосипеда своими руками. Целью создания такого контроллера было:


  1. Изучение работы трехфазного мотора под управлением контроллера.
  2. Большинство контроллеров для электровелосипедов, представленных на рынке, — китайские. Они хоть и относительно дешевые (около 2.000 руб в зависимости от мощности), но являются неведомой коробкой, в которой неизвестно что происходит. И сразу к ней возникает очень много вопросов — экономично ли она потребляет и распределяет ток, какой у нее запас мощности, почему так сильно перегревается, преждевременно срабатывает защита по току и т.д.

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


В итоге я решил пойти своим путем: разобраться в устройстве контроллера, сделать его прототип, а затем попытаться сделать контроллер качественнее китайского контроллера. На текущий момент проект у меня в разработке только и на уровне прототипа, готового варианта пока нет. Буду рад услышать ваши комментарии и советы.


Применение


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


  • Бытовая техника
  • Оргтехника
  • Электротранспорт
  • Промышленность

Устройство двигателя


Для разработки контроллера необходимо разобраться с принципом работы самого электродвигателя.


image


Электродвигатель состоит из фазных обмоток, магнитов и датчиков Холла, отслеживающих положение вала двигателя.


Конструктивно электродвигатели делятся на два типа: инраннеры и аутраннеры.


image


У инраннеров магнитные пластины крепятся на вал, а обмотки располагаются на барабане (статоре), в этом случае в движение приводится вал. В случае аутраннера всё наоборот: на валу — фазные обмотки, а в барабане — магнитные пластины. Это приводит в движение барабан.


image


Так как у велосипеда колесо крепится валом на раму, то здесь применителен тип аутраннера.


image


На этой картинке условно представлены три фазы с обмотками, соединёнными между собой. В реальности обмоток намного больше, они располагаются равномерно с чередованием по фазам по окружности двигателя. Чем больше обмоток — тем плавнее, чётче, эластичнее работает двигатель.


В двигатель устанавливаются три датчика Холла. Датчики реагируют на магнитное поле, тем самым определяя положение ротора относительно статора двигателя. Устанавливаются с интервалами в 60 или 120 электрических градусов. Эти градусы относятся к электрическому фазному обороту двигателя. Необходимо учитывать, что чем больше в двигателе обмоток на каждую фазу, тем больше происходит электрических оборотов за один физический оборот мотор-колеса.


image


Обмотки трёх фаз в большинстве случаев соединяются между собой по двум схемам: звезда и треугольник. В первом случае ток проходит от одной из фаз к другой, во втором — по всем трём фазам в разной степени. Иногда эти две схемы подключения комбинируют в одном двигателе, например в электромобилях. При старте и наборе скорости идёт соединение фаз по звезде: она даёт больший момент при относительно низких оборотах; далее, после набора скорости, происходит переключение на треугольник, в результате количество оборотов увеличивается, когда уже не нужен большой крутящий момент. По сути, получается условно автоматическая коробка передач электродвигателя.


Цикл работы


Чтобы привести в движение трёхфазный двигатель, нужно рассмотреть цикл его работы за электрический оборот. Итак, имеем три фазы — A, B, C. Каждая из фаз получает положительную и отрицательную полярности в определённый момент времени. Поочерёдно по шагам пропускается ток от «плюса» одной фазы к «минусу» другой фазы. В итоге получается шесть шагов = три фазы × две полярности.


A+, A–, B+, B–, C+, C–


image


Рассмотрим эти шесть шагов цикла. Предположим, что положение ротора установлено в точке первого шага, тогда с датчиков Холла мы получим код вида 101, где 1 — фаза А, 0 — фаза B, 1 — фаза С. Определив по коду положение вала, нужно подать ток на соответствующие фазы с заданными полярностями. В результате вал проворачивается, датчики считывают код нового положения вала — и т. д.


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


Цикл двигателя представлен в gif-анимации.


image


Транзисторы и Н-мост


Но чтобы поочерёдно подавать ток на каждую из фаз и менять их полярность, необходимы транзисторы. Ещё нам нужна передача больших токов, высокая скорость переключения и чёткость открытия/закрытия затворов. В данном случае удобнее управлять затворами по напряжению, а не по току. Поэтому оптимальны полевые (MOSFET) транзисторы. Чаще всего их используют в контроллерах. Очень редко можно встретить комбинированный вариант транзисторов.


image


Для переключения фаз со сменой их полярностей используют классическую схему Н-моста (H-Bridge) из полевых транзисторов.


image


Он состоит из трёх пар транзисторов. Каждая из пар подключается к соответствующей фазе обмотки двигателя и обеспечивает подачу тока со значением (+ или –). Транзисторы, отвечающие за включение фазы с положительным значением, называют верхними ключами. С отрицательным — нижними. Для каждого шага открывается пара ключей: верхний одной фазы и нижний соседней фазы. В результате ток проходит от одной фазы к другой и приводит электродвигатель в движение.


image


Из схемы видно, что мы не можем включить одновременно верхний и нижний ключ у одной и той же фазы: произойдёт короткое замыкание. Поэтому очень важно быстрое переключение верхних и нижних ключей, чтобы в переходных процессах не появилось замыкание. И чем качественнее и быстрее мы обеспечим переключения, тем меньше у нас будет потерь и нагрева/перегрева транзисторов H-моста.


Для запуска остаётся обеспечить управление затворами ключей H-моста. Для управления H-мостом нужно:


  1. Считать показания датчиков Холла.
  2. Определить, в каком положении какую пару ключей включать.
  3. Передать сигналы на соответствующие затворы транзисторов.

Прототип на Ардуино


Под рукой у меня была Arduino UNO, и я решил собрать контроллер на её основе.


image


Первым делом я подал на датчики Холла питание 5 вольт от Ардуино (его достаточно для датчиков). Сигнальные провода от датчиков подключил на цифровые пины Ардуино, написав простейшую программу для считывания и обработки сигналов с датчиков.


//Пины ключей Н-мостов 
const int TRAplus = 8;
const int TRAminus = 9;
const int TRBplus = 10;
const int TRBminus = 11;
const int TRCplus = 12;
const int TRCminus = 13;

//датчики холла
const int HallA = 3;
const int HallB = 1;
const int HallC = 0;

boolean vala;
boolean valb;
boolean valc;

boolean pvala;
boolean pvalb;
boolean pvalc;

int pHall;

int turns;

void setup() {
  //Установка пинов ключей на выход
  pinMode(TRAplus, OUTPUT);
  pinMode(TRAminus, OUTPUT);
  pinMode(TRBplus, OUTPUT);
  pinMode(TRBminus, OUTPUT);
  pinMode(TRCplus, OUTPUT);
  pinMode(TRCminus, OUTPUT);
  //Вывод данных через серийный порт  
  Serial.begin(9600); 
}

void loop() {
  //Считываем датчики Холла и записываем их значение в val
  vala = digitalRead(HallA);
  valb = digitalRead(HallB);
  valc = digitalRead(HallC);

//Счётчик оборотов колеса. Необходима доработка

  if(vala && !pvala) {
    if(pHall == HallC) // или HallB в обратную сторону
      turns++;
    pHall = HallA;
  }
  if(valb && !pvalb) {
    if(pHall == HallA) // или HallC в обратную сторону
      turns++;
    pHall = HallB;
  }
  if(valc && !pvalc) {
    if(pHall == HallB) // или HallA в обратную сторону
      turns++;
    pHall = HallC;
  }

  digitalWrite(TRAplus,  (vala && !valb) ? HIGH : LOW); //если vala==HIGH и valb==LOW, тогда записать HIGH, иначе LOW
  digitalWrite(TRAminus, (valb && !vala) ? HIGH : LOW);
  digitalWrite(TRBplus,  (valb && !valc) ? HIGH : LOW);
  digitalWrite(TRBminus, (valc && !valb) ? HIGH : LOW);
  digitalWrite(TRCplus,  (valc && !vala) ? HIGH : LOW);
  digitalWrite(TRCminus, (vala && !valc) ? HIGH : LOW);

  pvala = vala;
  pvalb = valb;
  pvalc = valc;

  Serial.print(vala);
  Serial.print(valb);
  Serial.println(valc);

  //Serial.println(turns/3);

}

Затем собрал Н-мост из полевых NPN-транзисторов. Подвёл к мосту независимое питание на 12 вольт. Но при отладке, чтоб убедиться в работоспособности, я подключил напрямую шесть пинов 5V из Ардуино на затворы H-моста. У большинства полевых транзисторов затвор работает на 20 вольт. Так делать нельзя, потому что Н-мост будет плохо работать и перегреваться. Но для кратковременных тестов это пойдёт. Кое-как, с сильными перегревами и страшными звуками, вибрациями и толчками колесо медленно закрутилось. Начало положено.



Мостовые драйверы


Далее предстояла работа над напряжением 20 вольт на управление затворами. Для этого существуют мостовые драйверы транзисторов, они обеспечивают стабильные импульсы в 20 вольт на затвор и высокую скорость отклика. Сначала у меня были популярные драйверы для маломощных моторов L293D.


image


Для управления затворами его достаточно, к тому же их очень просто использовать. Один такой драйвер может обеспечить питанием две пары ключей. Поэтому я взял две штуки L293D. Собрал контроллер с этими драйверами, и колесо начало крутиться существенно плавнее, посторонних звуков стало меньше, нагрев транзисторов уменьшился. Но при увеличении оборотов синхронизация с контроллером пропадала, появлялся посторонний звук, колесо дёргалось, вибрировало и полностью останавливалось.


В это же время я наткнулся на два варианта мостовых драйверов:


  • HIP4086
    image
  • IR2101
    image

Что касается HIP4086, то это полноценный мостовой драйвер, предназначенный для трёхфазного электродвигателя. Мне он показался несколько замороченным, и мои попытки использовать его в контроллере не увенчались успехом: он у меня так и не заработал. Углублённо разбираться в причинах не стал.


А взял я IR2101 — полумостовой драйвер, обеспечивающий работу нижнего и верхнего ключей для одной фазы. Несложно догадаться, что таких драйверов нужно три. К слову, драйвер очень прост в использовании, его подключение происходит безболезненно и легко. Получилась такая схема:


image


Печатная плата


image


И готовый результат


image


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


Аппаратное прерывание


И тут я понял, в чём дело: Ардуино не успевает обрабатывать показания датчиков Холла! Поэтому необходимо было использовать пины Ардуино с аппаратным прерыванием. Так как у Ардуино УНО таких пинов всего два, а под датчики нужно три пина, надо взять Ардуино Леонардо или Искра Нео, где таких пинов — четыре штуки.


image


Переписав программу под прерывания и подключив Искру Нео вместо УНО, я повторил испытания.


//Пины ключей Н-мостов 
const int TAH = 8; //T — транзистор, А — фаза (синяя), Н — верхний ключ полумоста
const int TAL = 9; //T — транзистор, А — фаза (синяя), L — нижний ключ полумоста
const int TBH = 10; //T — транзистор, B — фаза (зелёная), H — верхний ключ полумоста
const int TBL = 11; //T — транзистор, B — фаза (зелёная), L — нижний ключ полумоста
const int TCH = 12; //T — транзистор, C — фаза (жёлтая), H — верхний ключ полумоста
const int TCL = 13; //T — транзистор, C — фаза (жёлтая), L — нижний ключ полумоста
//------------------------------------------------------------------------------------------------
//датчики холла
int HallA = 3;  //пин 1 (с прерыванием)
int HallB = 1;  //пин 2 (с прерыванием)
int HallC = 0;  //пин 3 (с прерыванием)
//------------------------------------------------------------------------------------------------
volatile boolean vala;
volatile boolean valb;
volatile boolean valc;
//------------------------------------------------------------------------------------------------
void setup() {  
    //Установка пинов ключей на выход
    pinMode(TAH, OUTPUT);
    pinMode(TAL, OUTPUT);
    pinMode(TBH, OUTPUT);
    pinMode(TBL, OUTPUT);
    pinMode(TCH, OUTPUT);
    pinMode(TCL, OUTPUT);
    //Считывание датчиков Холла
    vala = digitalRead(HallA);
    valb = digitalRead(HallB);
    valc = digitalRead(HallC);

    //Аппаратное прерывание на пинах датчиков Холла
    attachInterrupt (digitalPinToInterrupt(HallA), changeA, CHANGE);
    attachInterrupt (digitalPinToInterrupt(HallB), changeB, CHANGE);
    attachInterrupt (digitalPinToInterrupt(HallC), changeC, CHANGE);
    //LOW вызывает прерывание, когда на порту LOW
    //CHANGE прерывание вызывается при смене значения на порту с LOW на HIGH, и наоборот
    //RISING прерывание вызывается только при смене значения на порту с LOW на HIGH
    //FALLING прерывание вызывается только при смене значения на порту с HIGH на LOW
}
void Fases() {
    digitalWrite(TAH,  (vala && !valb) ? HIGH : LOW);
    digitalWrite(TAL, (valb && !vala) ? HIGH : LOW);
    digitalWrite(TBH,  (valb && !valc) ? HIGH : LOW);
    digitalWrite(TBL, (valc && !valb) ? HIGH : LOW);
    digitalWrite(TCH,  (valc && !vala) ? HIGH : LOW);
    digitalWrite(TCL, (vala && !valc) ? HIGH : LOW);

void changeA() {
    vala = digitalRead(HallA); 
    Fases();
}
void changeB() {
    valb = digitalRead(HallB);  
    Fases();
}
void changeC() {
    valc = digitalRead(HallC); 
    Fases();
}

void loop() {
}

Колесо наконец-то заработало чётко, без вибраций, шумов, отлично стало набирать обороты без рассинхронизации. Прототип оказался жизнеспособным. Но это ещё не полноценный контроллер, поскольку в нём не было обвязки с защитами и обеспечением качественного ШИМ-сигнала.




Прототип на базе микросхемы MC33035


Параллельно с разработкой контроллера на Ардуино я рассматривал альтернативные варианты логической части контроллера. И это привело меня к микросхеме MC33035. Это старая разработка от Motorola, сейчас её выпускает ON Semiconductor. Создана специально для мощных трёхфазных двигателей.


image


image


Данная микросхема:


  • Отвечает за всю логическую часть контроллера
  • Считывает показания с датчиков Холла
  • Определяет положения вала
  • Выдаёт сигналы для затворов Н-моста на их драйверы
  • Имеет возможность подключения индикатора ошибок, перегрева
  • Обрабатывает и передает ШИМ-сигнал (PWM)
  • Осуществляет реверс (обратный ход колеса)

Одним словом, микросхема содержит всё необходимое для управления электродвигателем. Её стоимость очень низкая: на Алиэкспрессе — около 50 рублей. Для сборки полноценного контроллера на её основе потребуется микросхема MC33035, полумостовые драйверы и Н-мост из полевых транзисторов. Я также собрал контроллер на этой микросхеме. Работает отлично, стабильно, колесо крутится как надо на различных оборотах. Но функционал микросхемы ограничен, если необходимо наворотить различные функции, вывод на дисплей скорости, одометр, расход батареи, то опять же возникает необходимость дополнительно подключить Ардуино или что-то аналогичное.


Схема с MC33035


image


Печатная плата


image


Готовый вариант


image


Итог


Главное преимущество контроллера на базе MC33035 — это простота в использовании. Просто покупаете микросхему, собираете Н-мост, спаиваете всё на плату с небольшой обвязкой — и контроллер готов. Если нужно просто запустить двигатель с ШИМ-сигналом и управлять им — оптимальный вариант.


Контроллер на базе Ардуино — вариант сложнее, понадобится писать логику, обеспечивать дополнительные защиты контроллера. Но для экспериментов, прототипов, дополнительного функционала, использования различных режимов работы двигателя — подходящий вариант. Поэтому я решил пока отложить MC33035 и продолжить работу с Ардуино.


Планы на будущее контроллера


Продолжая работу над контроллером, планирую сделать следующее:


  • IGBT-транзисторы для H-моста вместо полевых транзисторов.
  • Обвязку с защитами по току, перегреву и т. п.
  • Полноценный круиз-контроль с возможностью выставлять необходимую скорость движения.
  • Расходомер. Когда задаётся необходимое расстояние, а контроллер, исходя из этого значения и заряда аккумулятора, дозирует разряд аккумулятора на всём протяжении маршрута так, чтобы зарядки хватило.
Автор: @makarenko

Комментарии (88)

  • +1
    off Интересующимся вопросом стоит изучить готовые решения от Texas Instruments http://www.ti.com/solution/e_bike
    например Hardware Design Considerations for an Electric Bicycle
    Using a BLDC Motor

    ..«чтобы не изобретать велосипед»
    • 0
      Ну оно не новое, таки 2014 год. Даже по мерках тексаса это уже старье. А вот у ST есть действительно свежак на эту тему: https://www.digikey.com/product-detail/en/stmicroelectronics/STSPIN32F0/497-16978-ND/6236758
      И всего 4$.
      • +1
        Если свежак — лучше подождать, пока появится первый errata sheet. :)
        • 0
          Как показывает практика, то и эррата не спасает от багов и проблем если они есть)) По крайней мере у TI. Проще взять отладку да попробовать. Хотя именно с этим камнем пока проблем нет, правда погонять удалось лишь пару недель.
      • 0
        В их доках самое полезное — теория вопроса. Это не устаревает.
  • +3
    Первым пунктом запланируйте изучить как правильно разводить платы под сильноточные цепи в электроприводах. Без этого хорошего результата не будет.
    • 0
      Да, этим вопросом позже нужно будет заняться) Пока ориентируюсь на то, как собран китайский контроллер
    • 0
      Инженеры тратят по несколько лет фул тайм, чтобы изучить, а советуете как будто это дело 15 минут)))
  • +1
    IGBT-транзисторы для H-моста вместо полевых транзисторов.

    Простите, а какой в этом смысл? Преимущество IGBT, обычно, проявляются при напряжениях выше 300-400 В, и то, при ограниченной частоте переключения 20-50 кГц.
    • 0
      Возможно и нет смысла. Полевые все-таки капризные транзисторы и часто ставят их не по 6 штук, а по 12. С IGBT кажется проще будет. На них только наткнулся недавно, может вы и правы, смысла особо не будет.
      • 0
        на низких напряжениях у IGBT преимуществ действительно нет. более того они сочетают в себе минусы как мосфетов, так и биполярных. а вообще не нужно путать все полевые в одну кучу, а конкретно — MOSFET'ы не такие уж капризные. и что за 12 транзисторов? нигде не встречал.
      • 0
        меньше тепловыделение на самих транзисторах при больших токах.
      • 0
        12 штук — это не для надежности, это другая схема. :)
        Что до «капризов» — какие-никакие защитные цепи надо ставить сразу.
        Специально под байки заточена вот эта микросхема, тут предусмотрены входы для тормозных ручек, датчика каденса и прочих велоприбамбасов. А вот ею вполне можно рулить и с ардуинки.
        Желаю успеха, не бросайте это дело. Не Будды горшки обжигают! :)
        • 0
          Спасибо
        • 0
          Ошибочка вышла.
          Та микросхема для газонокосилок, не для транспорта. Принял на радостях тахометр за датчик каденса. :)
          Ниже посоветовали две, туда же можно DRV8303/8305
      • 0
        У меня опыт в силовой электронике околонулевой...)) Однако, с IGBT/MOSFET у меня было примерно так. Я делал регулятор скорости вентилятора (обычный однофазный асинхронный двигатель на 100Вт). Сначала на IGBT (потому что в оригинальной схеме были именно они, впрочем схема оказалась в принципе неработоспособной), потом переделал на MOSFET'ы. С IGBT основные грабли оказались в том, что они исключительно плохо работают на высоких частотах. У меня были какие-то особо быстрые, IRF-овские с буквой W в конце, от слова «warp»:) И несмотря на их, практически, максимально возможное быстродействие (по сравнению с аналогами), они грелись на 20-30кГц (хотя 30 была заявлена как максимальная рабочая частота). Более менее работало на 10-15 (ну как работало… один фиг грелись и мотор свистел). При этом они были жутко дорогие (рублей по 300). Поменял на самые дешевые MOSFET'ы какого-то древнего поколения за 50 рублей/штука — 50кГц, тишина и абсолютно никакого нагрева.

        В принципе, IGBT, как я понимаю, ставят, если напряжение большое (MOSFET'ы на 1000+ вольт практически не бывает, особенно новых). Либо, если управляемый привод почти всегда работает с максимальной нагрузкой Не помню деталей, но идея примерно в том, что при высоких температурах и больших токах у IGBT меньше потери. При этом при преобладании малых нагрузок MOSFET'ы выгоднее.

        А статики IGBT боятся точно так же.

        >> и часто ставят их не по 6 штук, а по 12
        Так делают, потому что с MOSFET'ами такое прокатывает. Их можно взять практически сколько угодно и соединить параллельно, чтобы увеличить мощность. C IGBT так делать, насколько я понимаю, нельзя (MOSFET'ы самобалансируются, IGBT-нет).
        • 0
          Чтобы IGBT не грелись и работали на нормальных частотах — нужен грамотный драйвер со смещением нуля и импульсным током не менее 2.5А. Это не IGBT плохие, а уровень знаний (не оскорбление).

          Мосфеты на 1700В сейчас есть и дешевые, есть SiC до 4700В, они тоже по сути мосфеты. И это именно одиночные ключи, сборки и на 35 кВ бывают у SiC.
          • 0
            Драйвер был. HCPL-3120. В даташите ток как раз 2.5А

            >>… со смещением нуля
            Если я правильно понимаю, о чем речь, то в том же даташите декларировалось, что все ОК: «0.5 V maximum low level output voltage eliminates need for negative gate drive»

            Но вы, конечно, правы, теорию работы импульсных ключей я до конца понять не смог, хотя честно пытался.
            • 0
              А оптрон чем питали то? Как минимум надо запитывать двухполярным питание +12В/-5В. В идеале +15/-15В. При однополярном питание 15В/GND ключ просто не закроется полностью, а значит дополнительный нагрев.
              Так же надо еще побороть тиристорное защелкивание ключа, этот минус IGBT унаследовало от биполярника со всеми вытекающими последствиями.
              • 0
                >> А оптрон чем питали то?
                От 1-ваттного маленького трансформатора. ±15В как раз.
                • 0
                  1 Вт мало, так понимаю речь о dc/dc идет. У меня ключики на 50А хотят 2.5-4А, а при 15В это уже 40-60 Вт. В реальности 40-60 Вт это только в момент зарядки затвора, но в номинале все равно 10-15 Вт требует, не меньше.
                  • 0
                    Хм, вот оно что… может быть. Я высчитывал, что сглаживающего конденсатора должно хватить, чтобы драйвер мог выдавать нужный ток на протяжении переключения. И что мощности хватит, чтобы достаточно дозарядить его между переключениями. Вполне возможно, что просчитался. Думаю, время переключения взял какое-то не то.

                    Ключ, вроде бы, на 20А был.
                    • 0
                      а конденсатор пленочный был?) Проблема электролитов и тантала в том, что они из-за достаточно высокого ESR не способны отдавать большой ток. Например, 100 мкФ 25В может отдать 1-1.5А, а пленка 1 мкФ 40В может отдать 4-5А. Правда ценник определенно выше.
                      Как вариант можно использовать керамику, но надо несколько штук параллелить. Это снизит ESR, а так же победит главную проблему — емкость керамики падает при увеличении напряжения на ней. Например, керамика 100 мкФ и 16В при диэлектрике X7R будет иметь емкость при 16В около 45-55 мкФ. Это явление тоже надо учитывать.
                      Хотя 3-5 пленок в параллель это явно дешевле пленки.

                      Самый кошерный вариант — собрать драйвер на коленке, запитать от лабораторника и посмотреть осциллографом какой ток нужен, чтобы транзистор быстро открывался/закрывался, исходя из полученных цифр уже выбирать/проектировать драйвер.
                      • 0
                        Электролит и параллельно ему — «капелька», вроде бы керамический (и, кажется, его наличие, расположение и номинал указывались в документации). Номинал электролита не помню сейчас… нашел только разводку платы, между ножками 5мм и известно, что он на 25В. По идее, должен был быть 470мкФ или 1000… Но не факт, конечно…
  • +15
    Я конечно не великий программист.
    Но понять в середине проекта, что входа от датчиков надо вешать на прерывания, это вин. Вообще делать подобное из под Ардуины эпик просто.
    Забавно смотреть, как люди не имеющие квалификации берутся за такие вещи.
    Это очень сложная штука, очень очень, и даже китайцы потратили дофигища времени на разработку.
    Вы даже не в начале пути — вы просто закрутили колесо. Это как светодиодом помигать.
    А тут делов то — Ардуина.
    Минусуйте :)
    • –4
      «Дилетант построил Ковчег, а крутые профи — 'Титаник'.» :)
      • +1
        Крутые профи его утопили.
      • +11
        Всё ж Титаник существовал в реальности, а вот ковчег — таки байка. Некорректно сравнивать в одном предложении вещи реальные и вымышленные. И тем более делать на основе этого сравнения выводы космического масштаба.
        • 0
          Кроме того, Титаник и сейчас еще есть, большей частью своей…
    • 0
      Да какая разница, в начале пути человек, или в середине? Он что-то делает, и это «что-то» — ему интересно. Это самое важное! А ошибки бывают у всех, и непонимание в начале каких-то особенностей конструктива — тоже. Это несущественно. На самом деле имеет значение только огонь в глазах, а всё остальное — лишь его аттрибуты.
      К сожалению, до определённого возраста это совершенно неочевидно.

      А ваш пост, извините, содержит лишь порцию сарказма, с намёком на то, что уж вы-то разбираетесь во всём этом куда лучше автора…
  • +4
    На ардуине в классическом варианте нормально не сделать. Программу надо писать в атмел студии на си а не на ардуино иде. Тогда любой пин можно обработать хоть в конечном автомате хоть в прерывании. Даже ШИМ контроллера полноценно можно использовать, а среда ардуино даст урезанный вариант
    • –1
      В arduino ide точно также можно работать с пигами, шимом и писать на си. Я бы даже сказал, что в этом плане атмел студия урезанный вариант.
    • +2
      Зачем вообще атмел брать, надо что-нибудь пошустрее, stm, например.
      • +1

        Мда, из — за подобного подхода у нас программы на Java отжирают гиг памяти, не ну а чо, просто нужно взять что нибудь пошустрее )

        • 0
          Не согласен, для таких вещей недостаточно производительности атмелов. Я вообще сильно удивился, когда увидел ардуино, дочитав до середины, стоило об этом сразу в заголовке или в начале написать. Я ожидал что-то наподобие своего ESC, двигателями вообще не управляют без обратной связи по току.
          • 0
            Не знаю достаточно ли производительности атмелов конкретно для этой задачи, тут ничего не скажу, может Вы и правы, но в последнее время замечаю тенденцию хаить ардуину и атмел, а когда посмотришь на код испещренный вызовами delay, то становится понятно, что основная проблема — не производительность, а слишком низкий порог входа. Человек научился моргать лампочкой, потом пишет что нибудь не имея навыков программирования, вставляет повсюду блокирующие вызовы delay, все начинает работать мягко говоря «хреново», и выход из этого какой? Перейти на STM, там тот же говеный код — будет работать быстрее. Вывод, ардуина и атмел — плохо, а на самом деле «На зеркало неча пенять, коли рожа крива.»
            • 0
              Я имею некоторый опыт работы с атмелами, контролировать ток в обмотке и шейпить его шимом производительности не хватит. Вот пример моего проекта, там есть ссылка на гитхаб, delay'ев нет, планировщик, прерывания.
          • 0
            разбирал исходники китайских esc. там ассемблером чудеса наворочены. и все это чтоб засунуть в авку то что ей практически не по силам…
        • 0
          Ценник одинаковый (ну +-, разведенный medium-density F103 на али — ~1.7 бакса, ардуинка что-то на том же уровне), а мощей больше, периферии туча, тут и dma, и EXTI на все ноги, ляпота просто. Да, писать на си/с++ придется (сильно урезанном, правда), но за несколько вечеров вполне можно разобраться, благо информации в интернетах вагон.
    • +3
      Надо было в самом начале или в заголовке про ардуино написать. А то дочитал до середины и там внезапно оно. Расстроился.
  • +1
    У атмеловских контроллеров шим можно для работы моста настроить, там спец режимы шима есть.
    • 0
      У некоторых, если память не изменяет, и AtPWM… серия… короче те, у которых есть аппратный DEAD TIME, аппаратная обработка превышения тока… короче некоторые только, но да, есть.
  • +3
    DIY — это конечно хорошо, но вот это пренебрежение «каким-то китайским контроллером», которые выпускаются миллионными тиражами (реально, там миллионы электробайков) и сделать свой кустарный из всего того же самого… Ну не знаю, вон пацаны с форума электротранспорта пару лет назад заморочились и сделали «наш» модный контроллер — там тебе и синус и противоугонка, и всякие кастомные кривые ручки газа и чего блин только нет. А тут какой-то синдром not invented here.
    • 0

      Нравится человеку самому делать, ну и ладно. Заодно и закладок нет, а то ну как велосипед понесется неожиданно, как тоёта.

  • 0
    Используйте DRV8301/DRV8302 от Texas Instruments, ну либо A4915 от Allegro. Эти микросхемы — это драйвера 3-х фазных мостов на N-канальных полевых транзисторах. Они имеют в составе всё что надо — измерение тока, накачку верхнего плеча, компараторы, встроенная защита от КЗ (т.н. DeadTime, «мёртвое время» переключения в течение которого верх и низ закрыты) и прочее. Обеспечивают очень большие затворные токи открывания/закрывания. Датчики Холла подключаются отдельно на контроллер и влияют только на частоту управляющих ШИМ импульсов, подаваемых на микросхему драйвер.
    • 0
      Чем плох MC33035 в таком случае?
      • +2
        Во-первых, рабочее напряжение 30В, а хорошие мощные моторы имеют рабочее напряжение 48В. Во-вторых, предельный ток затвора 100мА для нижнего плеча и жалкие 50мА для верхнего. Хороший современный mosfet имеет сопротивление канала в единицах миллиОм при емкости затвора в десятках нанофарад. При таких токах на затворе (я о тех 100мА которые являются предельной характеристикой MC33035, а рабочие и того меньше) Ваши полевые транзисторы крутых фронтов напряжения на затворе не получат, и следовательно будут находится львиную часть времени в переходном режиме, в котором сопротивление перехода сток-исток порядка единиц/десятков ом, а это большие потери (падение напряжения). Следствием будет сильное ограничение частоты переключения транзисторов моста, короче — преобразование электричества аккамуляторов в нагрев транзисторов. Для того, чтобы обеспечить резкие фронты на затворах нужны большие токи. Соответственно микросхема-драйвер должна их обеспечить. Техасовские и Аллегровские чипы дают порядка 1.8 ампера на заряд и разряд емкости затвора. В общем я хочу сказать, что чтобы снизить потери и повысить КПД схемы управления нужно максимально быстро открывать/закрывать транзисторы, чтобы они как можно меньшее время находились в переходном состоянии. Кстати, есть микросхемы дающие и по 10 ампер, но под них нужны соответствующие транзисторы, у которых от такого тока не сгорит затвор.
        • 0
          У меня представлена схема разводки MC33035, но так или иначе между MC33035 и транзисторами ставятся еще драйверы IR2103. Может они решают проблему.
          Кто-то из Европы в такой комплектации собирал жизнеспособный контроллер для электро-картинга. Оценить сложно как себя чувствует его контроллер, но ездит картинг неплохо.
          • 0
            Тогда уж лучше IR2110 (2 ампера), ну либо IRS21867S (4 ампера).
            Да есть швед, который очень неплохой драйвер собрал (ищется по VESC — Open Source ESC). Драйвер у него DRV8302 напрямую рулит IRFS7530 (у которых 13 нФ затвор), вроде по отзывам людей повторивших его схему — вообще не греется.
  • 0
    http://radioparty.ru/prog-avr/program-c/611-lesson-bldc-sensorless
  • 0
    Несколько вопросов:

    Никогда не занимался электро байками и иже с ними, потому, — о каких конкретно токах идёт речь? И заодно какой обычно акк используется? Я так понимаю там набор из стандартных 18650?

    Нельзя ли взять обычный самый ESC за рублей 600, разве что рассчитанный на много ампер, и с той же дуинки им рулить?

    Почему именно датчики холла, а не как в ESC по измерению с тех же фаз?

    К ESC есть вполне открытые прошивки, в которых уже расписано все что только может прийти в голову в плане защит и разных режимов работы.
    • 0
      Пиковые токи порядка 20 А
      Набор из 18650 с балансиром
      Вариантов с ESC не встречал
      Датчики Холла же установлены во всех двигателях электровелосипедов.
      Надо будет глянуть что можно сделать с ESC

      • 0
        Немного из другой области: для коптеров есть большое количество регуляторов оборотов.
        К примеру комплект с банга:
        https://www.banggood.com/4X-Racerstar-RS30A-V2-30A-Blheli_S-ESC-OPTO-2-4S-Support-Oneshot42-Multishot-for-FPV-Racer-p-1074733.html?rmmds=search
        Там же можно поискать штучно и разных производителей
        Токи тоже приличные, на указанной модели 35А в пике (до 10 секунд)
        Единственное, это дело питается до 6S LiPo, как у велосипедов — не в курсе…
        Всё это в большинстве своём крутится на открытой прошивке
        https://github.com/bitdump/BLHeli
        Посмотрите, возможно, что-нибудь сможете применить.
        P.S.: Не железячник, обычный пользователь ESC на коптере
    • 0
      без датчиков Холла сложно работать (а тем более выдавать момент) на низких оборотах. если изучить модельные эски, то можно заметить что авионика работает без датчиков, а автомодельные — с датчиками.
      • 0
        Не видел моделей с датчиками, может это какие-то спецательные. У меня бесколлекторная багги с бездатчиковым мотором.
  • +5
    Конструктивно электродвигатели делятся на два типа: инраннеры и аутраннеры.

    Синхронные машины бывают с индуктором на роторе, статоре или комбинированного типа. По сути тоже, только без сраннеров

  • 0
    задумался над тюнингом связки «стандартный китовый контроллер под редукторниик 36-48в» и штатной бутылки 48в.

    при разряде бутылки ниже половины начинает отрубать при резком газе — если надо газануть а не набирать постепенно скорость ( приходиться перезапускать систему на ходу вкл-выкл, или ждать когда она перезапуститься чрез 10сек )

    видимо ячейки в бутылке не самые качественные и неплохо проседают. но не нстолько критично чтобы считать их разряженными.
    кто отрубает работу — бмс или контроллер? как можно это пофиксить на хардварном уровне?
    • 0
      Защиты обычно и там и там. Но обычно если бмс срабатывает, то он не перезапускает систему
    • 0
      Поменять бутылку на сборку из 18650, они сейчас реально подешевели, по сравнению даже с тем, что было пару лет назад (и будут только дешеветь, спасибо электромобилям). Будет и легче и мощнее.
  • 0
    Если отказаться от ардуиновских функций digitalWrite();, то можно немного увеличить быстродействие.
  • +5
    Поэтому необходимо было использовать пины Ардуино с аппаратным прерыванием. Так как у Ардуино УНО таких пинов всего два, а под датчики нужно три пина, надо взять Ардуино Леонардо или Искра Нео, где таких пинов — четыре штуки.


    Ох, печаль какая! А давайте документацию почитаем? Документацию производителя контроллера, а не ардуиноделов. Впрочем, последняя нам тоже понадобится, правда, сугубо для того, чтобы выяснить, какой контроллер стоит на этой чудесной плате. Так то, марку контроллера можно просто прочесть, просто у меня нет под рукой Arduino UNO.

    Итак, в Arduino UNO стоит ATmega328P. Идем и читаем даташит, откуда всякий желающий может узнать, что наш чудесный чип поддерживает прерывания на всех ножках (PCINT)!

    Фантастика, да? Просто ардуиноделы почему-то не говорят про это, и, похоже, не сделали API к этой аппаратной возможности.

    И с ардуиной такое на каждом шагу.
    • 0
      Что тут сказать… Я не программист и не электротехник, с ардуиной познакомился полгода назад. Многих тонкостей и нюансов не знаю.
      Спасибо за информацию
    • 0
      Ардуина и её IDE не предназначены для подобного. В качестве макетки её можно использовать, если контроллера, установленного на ней, хватит для задуманного.
    • 0

      PCINT значит Pin Change Interrupt, что в свою очередь означает, что обработчик прерывания можно назначить лишь на изменение значения. API есть, все работает через attachInterrupt. Проблема ардуины не в ардуине, а в тех кто пишет корявый код для неё.

    • 0

      И да, Вы правы, такое на каждом шагу...

  • 0
    Если на пятом изображении у вас изображено велосипедное мотор-колесо, то вы перепутали ротор со статором.
    • 0
      Изображен общая схема работы
  • 0

    А поясните, плиз, по датчикам Холла. На анимашке они срабатывают от южного полюса, так и в реале? А от северного не сработают?

    • 0
      в реале датчик Холла — это мост, который выдаёт напряжение пропорционально проекции вектора B на нормаль к пластине, т.е. полярность напряжения зависит от направления вектора. Далее всё зависит от схемы, стоящей за датчиком. Обычно датчики Холла к специализированным контроллерам подключают напрямую, а к контроллерам общего назначения — через схему сопряжения. Если же брать датчики со встроенным усилителем/компаратором, то те датчики, которые используются в двигателях, поляризованные, да.
  • 0
    Зачем столько бубна и гадостей? Есть современные контроллеры от ST и Texas, которые управляются по одному единственному SPI. У ST даже есть такие контроллеры с интегрированным Cortex-M0 (SoC). Цена вопроса: 6-7$ на digikey.
    И зачем вообще IGBT упоминули? Во-первых, они уже «умерли» морально, т.к. появились дешевые SiC ключи. Во-вторых, зачем вам высоковольтные ключики? В-третьих, судя по уровню статьи мне кажется вам не хватит знаний, чтобы нормально управлять IGBT.
    Если уж тут и есть какая-то альтернатива мосфетам, так это GaN.
    • 0
      появились дешевые SiC ключи

      пруф, пожалуйста. И на GaN, если тоже есть сведения о дешевых

      • 0
        А вас гугл уже к себе не пускает? Нумбер 1 и Нумбер 2

        Так же предлагаю взглянуть на емкость затвора. А теперь покажите мне IGBT за 3$, который еще и на 0.5-1 МГц сможет переключаться без проблем.
      • 0
        Ах да, на GaN забыл ссылку.

        2$ стоит ключик на 10А. 5$ на 50А. Дорого? Мосфеты или igbt дешевле? А параметры как?
        • 0

          Спасибо за ссылку. То, что параметры SiC и GaN на порядок лучше IGBT, сомнений не вызывает. Сомнения были только по низкой цене. Два года назад вот такая штука приобреталась за 300 €. С учетом прыжка рубля, психологический барьер держался до сих пор.

          • 0
            Да цены собственно с осени только и упали, вроде как Cree свой завод запустили в Норвегии. А модули всегда дорого стоят, адекватные цены видел только если напрямую у производителя брать и от 5000 штук, но такое себе позволить могут не все конторы в нашей стране. 300 евро конечно ценник весомый)) Хотя никогда даже не задумывался есть ли они на мосфетах, обычно сборки на IGBT и только для частотников.
  • +1
    Минутка практики в увлекательный мир конструктивизима

    Расходомер. Когда задаётся необходимое расстояние, а контроллер, исходя из этого значения и заряда аккумулятора, дозирует разряд аккумулятора на всём протяжении маршрута так, чтобы зарядки хватило.


    Самая бесполезная функция в мире. В контроллере адапто никто, вообще никто из русских не пользуется ей. Потому что, оказалось, нагляднее просто видеть расходомер и прогноз пробега при текущем потреблении на текущей скорости. А дальше все зависит от пользователя, которому обычно не по вкусу, когда его ограничивают искуственно
  • 0
    Не очень понятна цель. Повторить китайские разработки? Вероятно, они сделаны примерно на той же аппаратной базе. Хотя, думаю, наверняка, получится что-то улучшить.

    Если же хочется поднять на уровень выше получить аналог дорогих контроллеров, то задача более сложна. Я не особо знаком с двигателями с трапециевидной противоЭДС, но алгоритмы для двигателей с синусоидальной противоЭДС алгоритмы управления достаточно сложны. Обычно они направлены на обеспечение заданного момента при достижении цели минимизации оммических потерь, что требует точного контроля вектора тока. Но выгода понятна — меньший перегрев двигателя и больший запас хода. Как бонус можно сделать cruise control. Обзор типовых схем управления можно посмотреть тут: http://engineering-solutions.ru/motorcontrol/pmsm/

    Указанная микросхема точно работает не по такому алгоритму, ардуино наверняка не хватит вычислительной мощности, чтобы проводить нужные расчеты в реальном времени.
    • –2
      Я скажу большее — у 99,999% местной публики в принципе не хватит уровня, чтобы понять хотя бы основы векторного управления. А если учесть, что используют всякие ардуины и максимум STM32, то данный метод еще и на данном железе не реализовать в адекватном виде, в лучше случае ПИД простейший.
      И стоит уже упомянуть о цене, векторник на порядок дороже будет чем скалярный контроллер.
      • +2
        Ну, не согласен. Не такой уж там сложный принцип: вращающаяся с ротором система координат и два регулятора тока. На arduino его не реализовать, но какой нибудь Cortex-M с аппаратными плавающими точками должен осилить.

        Но сначала надо понять, каких целей хочется достичь и какой метод управления лучше для этого подходит.
        • 0
          Вроде все просто и понятно, но еще не видел статей тут подобных. Максимум синхронниками крутят скалярно и все. Если же судить по комментариям, то получим 99,999% не способны осилить ЦОС приминительно к силовухи.
          К тому же я говорю именно о полноценном, около промышленном решение, а не о «простейший ПИД с датчиком Холла».
      • 0
        ПИД простейший на меге8 реализуется, да так, что обсчитывает контур управления 20000 раз в секунду на 16 МГц. А уж что на 32 битном с MAC STM32F4xx можно сделать на ста мегагерцах, у меня фантазии не хватит написать (шутка, хватит). STM32F4xx пару таких движков закрутит уверенно с FOCом и со всеми делами и, возможно, без датчиков ОС совсем.
  • 0
    Для IR2101(и другими подобными) рекомендуется использовать быстродействующие диоды. Вместо 1N4007 лучше поставить UF4007. Резисторы на затворах полевиков лучше уменьшить в 2 раза.
    • 0
      Все таки резисторы в затворах лучше рассчитать, а не от балды советы давать. А про диоды верно и если напруга до 100В, то еще лучше поставить Шоттки.
    • 0
      Сначала нужно плату переразвести, а то на показанной плате индуктивности полно паразитной: уменьшишь резисторы затворные — увеличится di/dt, ну и далее надо вспомнить правила увгна Кирхгофа.
  • 0

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

    • +1
      Велосипед придумали. Есть камни Piccolo, Delfino и Concerto. Это разного уровня линейки, но все они позволяют построить векторное управление на одном камне и еще прицепить кучу интерфейсов. TMS320F28069 позволяет полностью реализовать управление для онлайн UPS, то есть PFC, инвертор dc/ac, инвертор dc/dc и зарядник.
      На concerto реализовывается целый обрабатывающий центр ЧПУ фрезер и его хватает на управление консолью оператора еще.

      А лепить кучу модулей, а сверху еще атмел — это для старых извращенцев, т.к. им обычно уже просто лень учиться и осваивать нормальные решения))
    • 0
      dsPIC xxMU8xx на 80 MIPSax тянет бездатчиковое управление одним асинхронником, вдобавок на нём крутится нейросеть для адаптации регуляторов/вычислителей к АД, CAN и дисплей/кнопочки. По сравнению с этим управиться BLDC вообще легко для пряморукого кодера, обладающего тайныме знанияме физики и арехметеки.
      Да и референс десигнов тонны в сети — бери и делай.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое