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

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

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

Новости:

Страницы: 123 ... 20>>Вниз

Автор Тема: Делаю себе контроллер BLDC на Arduino )  (Прочитано 6973 раз)

Pawel и 2 Гостей просматривают эту тему.

mr.Dream

  • Старожил
  • *****
  • Репутация:
    +103/-1
  • :
    124
    431
  • Сообщений: 2008
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
И так, решил я немного пожечь мосфетов поэкспериментировать. Покупать контроллер на 80/240А жаба давит, а сделать - руки чешутся :) С силовой частью понятно - будут феты 4110 по 4 шт в параллель на каждое плечо моста. Драйверы нижнего плеча, на котором будет ШИМ - TC4420 (он до 6А током заряжает затвор), драйверы вернего - что то попроще, но с питанием не бустрепом от самих себя, а отдельным источником (возможно).
Мозги планирую делать на "ардуино нано" с 328-й мегой и 20мГц, так как есть "прокладка" между USB и менять прошивку будет легко :)
Планируемый функционал:
 - управление моментом двигателя
 - ограничение по батарейному и фазному току
 - рекуперация с возможностю плавной регулировки
 - режимы мощности (дулишка по току, по мощности, по оборотам, разная плавность реакции ручки газа ("спорт", "дать покататься"), круиз)
 - режим опережения комутации, коррекция угда датчиков. Работа только с ДХ.
 - противоугонная система
 - символьный дисплей 16х2, как у ваттметра "турниджи", для вывода разных.
 - хочется псевдо-синус для уменьшения шума двигателя и повышения эффективности.

Но столкнулся с некотой проблемой, а верней - с прерываниями. У меги 328 их только два, а значит нужно будет извращаться. Но это можно делать и без них, просто читая состояние любых цифрових пинов, а в программе уже делать что нужно. Но тогда любое "подвисание" МК при высокой скорости переключения фаз может сказаться на неправильной коммутации (с задержкой). Тот же самый дисплей, он отжирает некоторое время на запись данных в его память, а соотвественно, пока будем выводить длинную строку - фаза переключится с запозданием. может в пару процентов, а может и вовсе не вовремя. Есть идея сделать дополнительный "внешний компаратор прерываний", который будет читать изменения состояния ДХ и генерировать импульс на вход прерывания МК. Или отказаться от дисплея. но хотелось бы :)

На днях экспериментировал с "тини13". При 1мГц частоте тинька может читать состояние входов и переключать порты с частотой около 70кГц (один пин, один порт), была даже идея сделать контроллер на 3-х тинях, но передумал, а вот как источник прерывания может сойти :) А задержку я все равно буду корректирость атмегой.

Но пока буду экспериментировать, будет только чтение состояния пинов и включение-выключения портов согласно таблице.
Продолжение следует...

poraboloid

  • Старожил
  • *****
  • Репутация:
    +40/-1
  • :
    530
    380
  • Сообщений: 1841
  • Самара
  • подпись удалена ...
  • Онлайн Онлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #1 : 19 Июл 2016 в 18:36 »
Обычно прерывания размножают диодами на имеющийся вход прерывания и на свободный цифровой пин.
По срабатыванию прерывания контроллер опрашивает свободные пины и видит откуда пришел сигнал.

Yedoo Ox, МК DD350W, 9А\ч LiFePo4 - построен.                           Yedoo City, МК QQ85,11A\ч LiIon - построен.
Yedoo Mezec new, MXUS 350, 9А\ч LiFePo4 - построен, продан.  Yedoo Mezec 9А\ч LiFePo4 в планах.
EVO 2xDD500W в сборке.      Oxelo на очереди.

mr.Dream

  • Старожил
  • *****
  • Репутация:
    +103/-1
  • :
    124
    431
  • Сообщений: 2008
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #2 : 19 Июл 2016 в 19:14 »
Обычно прерывания размножают диодами на имеющийся вход прерывания и на свободный цифровой пин.
По срабатыванию прерывания контроллер опрашивает свободные пины и видит откуда пришел сигнал.
Так не выйдет. Ибо 3 датчика имеют 6 рабочих комбинаций. Если на одном датчике выход +, то изменения иного с - на + не даст результата.  Это если нужно "один из" обработать :) буду искать решение.

electriq

  • Начинающий
  • *
  • Репутация:
    +0/-0
  • :
    14
    4
  • Сообщений: 48
  • Россия, Москва
  • électrique наше все!
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #3 : 20 Июл 2016 в 14:23 »
Лучше взять камень 32U4, там с прерываниями получше дела (External Interrupts: 3 (interrupt 0), 2 (interrupt 1), 0 (interrupt 2), 1 (interrupt 3) and 7 (interrupt 4))
Камень есть в том же "нано" формате что и 328, плюс USB уже аппаратный.


on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    26
    131
  • Сообщений: 1481
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #4 : 20 Июл 2016 в 17:38 »
а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.

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

mr.Dream

  • Старожил
  • *****
  • Репутация:
    +103/-1
  • :
    124
    431
  • Сообщений: 2008
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #5 : 20 Июл 2016 в 18:14 »
а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.
не совсем понятно, что оно даст. Нужно прерывания именно по событию переключения холлов. Буду делать на логике "мультиплексор" и подавать на один вход МК, "запоминать" время переключения с опережением на один такс, добавлять период переключения, отнимать постоянную составляющую нарастания тока в обмотках и прерывать по таймеру для изменения состояния портов.
Но на первых порах буду экспериментировать без "опережения" и прерываний, тупо читая состояния пинов в цикле - мелкая програмка будер работать с портами напрямую шустро.

on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    26
    131
  • Сообщений: 1481
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #6 : 20 Июл 2016 в 19:02 »
ну как бы дискретизация системы по времени, регулятор , шим и вуаля токовое управление. Или вы что то другое хотите?На какую частоту рассчитываете выйти по оборотам?

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

i

  • Администратор
  • Старожил
  • *
  • Репутация:
    +265/-2
  • :
    58
    432
  • Сообщений: 3113
  • Иваново
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #7 : 20 Июл 2016 в 19:12 »
...У меги 328 их только два, а значит ...
Странно, а я насчитал 25 векторов прерываний. Кроме того на каждый пин можно навесить прерывание по изменению.
    0002 CONSTANT        INT0addr              \ External Interrupt0
    0004 CONSTANT        INT1addr              \ External Interrupt1
    0006 CONSTANT        PCINT0addr            \ Pin Change Interrupt0
    0008 CONSTANT        PCINT1addr            \ Pin Change Interrupt1
    000A CONSTANT        PCINT2addr            \ Pin Change Interrupt2
    000C CONSTANT        WDTaddr               \ Watchdog Timeout
    000E CONSTANT        OC2Aaddr              \ Timer/Counter2 Compare Match Interrupt
    0010 CONSTANT        OC2Baddr              \ Timer/Counter2 Compare Match Interrupt
    0012 CONSTANT        OVF2addr              \ Overflow2 Interrupt
    0014 CONSTANT        ICP1addr              \ Input Capture1 Interrupt
    0016 CONSTANT        OC1Aaddr              \ Output Compare1A Interrupt
    0018 CONSTANT        OC1Baddr              \ Output Compare1B Interrupt
    001A CONSTANT        OVF1addr              \ Overflow1 Interrupt
    001C CONSTANT        OC0Aaddr              \ Timer/Counter0 Compare Match Interrupt
    001E CONSTANT        OC0Baddr              \ Timer/Counter0 Compare Match Interrupt
    0020 CONSTANT        OVF0addr              \ Overflow0 Interrupt
    0022 CONSTANT        SPIaddr               \ SPI Interrupt
    0024 CONSTANT        URXCaddr              \ USART Receive Complete Interrupt
    0026 CONSTANT        UDREaddr              \ USART Data Register Empty Interrupt
    0028 CONSTANT        UTXCaddr              \ USART Transmit Complete Interrupt
    002A CONSTANT        ADCCaddr              \ ADC Conversion Complete Handle
    002C CONSTANT        ERDYaddr              \ EEPROM write complete
    002E CONSTANT        ACIaddr               \ Analog Comparator Interrupt
    0030 CONSTANT        TWIaddr               \ TWI Interrupt Vector Address
    0032 CONSTANT        SPMRaddr              \ Store Program Memory Ready Interrupt
Pin Change InterruptХ срабатывает при любом изменении состояния пина из обслуживаемых (задается портом и маской). С их помощью можно получить 24 входа прерываний. Для холов более чем достаточно.
« Последнее редактирование: 20 Июл 2016 в 19:20 от i »

mr.Dream

  • Старожил
  • *****
  • Репутация:
    +103/-1
  • :
    124
    431
  • Сообщений: 2008
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #8 : 20 Июл 2016 в 19:29 »
, Pin Change Interrupt - то что нужно. Я не совсем понимал логику работы, но как выяснилось - при любом изменении состояния пина будет срабатывать прерывание, но единственное для целого порта. А уже в программе смотреть, какой пин на что изменился? В отличии от External Interrupt просто не имеет надстройки по "когда генерировать" и использует целый порт вместо единственного пина?
Пока разбирался - вижу, вы уже обьяснили :) Оно самое то, что мне нужно.

Добавлено 20 Июл 2016 в 19:32
ну как бы дискретизация системы по времени, регулятор , шим и вуаля токовое управление. Или вы что то другое хотите?На какую частоту рассчитываете выйти по оборотам?
Токовое управление я делал на ардуине, 2 тыщи раз в секунду (так уж вышло) опрашивал сигнал шунта и менял ШИМ. Возможно, в такой же способ удасться сделать псевдо-полу-синус. Синус по напряжению, когда ток стабилен во всем промежутке, а не напоминает задницу :)

on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    26
    131
  • Сообщений: 1481
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #9 : 20 Июл 2016 в 20:18 »
ну 2 кгц норм контур тока.  А что у вас там за бяда с жопами?

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

mr.Dream

  • Старожил
  • *****
  • Репутация:
    +103/-1
  • :
    124
    431
  • Сообщений: 2008
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #10 : 20 Июл 2016 в 20:45 »
А что у вас там за бяда с жопами?
Если питать обмотки стабильным напряжением, то ближе в точке переключения фаз ЭДС мотора ниже, и по этому там ток большой, при том, на пике ЭДС он може вообще не быть или быть отрицательным - подзаряжать батарею :) Но бесят как раз броски тока возле момента переключения фаз. Они там малоэффективны, от ниж больше шума чем пользы :)

on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    26
    131
  • Сообщений: 1481
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #11 : 20 Июл 2016 в 21:40 »
Ну и терминология+) понятно в общем.

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

TRO

  • Старожил
  • *****
  • Репутация:
    +193/-49
  • :
    551
    887
  • Сообщений: 6166
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #12 : 21 Июл 2016 в 00:41 »
Как вспомню ту авральную жуть, когда я мутил подобный проэктик, на ардуинской платке (вроде мега2560), но писал на бейсике. Синус выгребал из таблицы (16 восьмибитных значений на половину горба ЭДС между сработкой холлов). Частоту выборки коректировал тупо по разнице времени между сработкой холлов (прошлой и текущей), получал значение которое заносил в таймер, от которого получал условные 32 прерывания (до предполагаемой следующей сработки холлов). Частоту переключения холлов (пересчитывал из времени между сработками) принимал за текущую ЭДС. Поскольку делалось для одного мотора, а напряжение было фиксированным, то на обратную связь по току забил, просто выяснил опытным путем какой нужен прирост напряжения между нулевым и максимальным моментом при фиксированных оборотах, добавлял к расчетному ЭДС, перемножал его с заданием и синусом из таблицы каждой фазы, и выводил в ШИМ. Основные танцы с бубнами были в оптимизации расчетов чтобы успевать считать в отведенное время, програмка разрослась ассемблерными вставками (бейсик аппаратный умножитель использовать не хотел). Короче, оно работало (тянуло через редуктор конвеер), но до максимальных оборотов я так и недооптимизировал (приехал контроллер к штатному движку).
« Последнее редактирование: 21 Июл 2016 в 00:50 от TRO »


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

Кулибин

  • Старожил
  • *****
  • Репутация:
    +20/-0
  • :
    65
    291
  • Сообщений: 3342
  • Москва,ЮЗАО,м."Академическая".
  • Мастерская 100KWT
  • Онлайн Онлайн
    • Производство аппаратов вакуумного массажа.
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #13 : 15 Авг 2016 в 21:00 »
А 20Mhz не мало? До каких оборотов раскрутится?
А вообще этих тем расплодилось не мало, а сделали пару человек, адапто засекретил сразу  а начиналось то как. ))
Сам хочу свой контроллер потому что могу что надо настроить и вообще что хочу то и делаю в прошивке, удобно.
Много идей но так и не могу разобраться, точнее нет времени и сил.
Я бы может и начал но не могу пока найти схему что и и синус можно было сделать и обычный режим.
Что бы схема была простая и ремонтопригодная, можно конечно с инфинеона слизать полностью схему но синуса тогда не будет.
У меня есть толковый программер который любит разбираться во всём, вместе сделали бы что надо, а я паять могу что угодно. ))
Пока затык по схеме.

Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

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

on4ip

  • Старожил
  • *****
  • Репутация:
    +5/-2
  • :
    26
    131
  • Сообщений: 1481
  • Россия, Раменское
  • Испытываю Контроллер на MOSFET
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #14 : 15 Авг 2016 в 21:58 »
Стартер кит от тмс купите и доделайте. Будет вам счастье делов то. Цена около 60 000.с ним разберетесь и свой запустите.

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

Кулибин

  • Старожил
  • *****
  • Репутация:
    +20/-0
  • :
    65
    291
  • Сообщений: 3342
  • Москва,ЮЗАО,м."Академическая".
  • Мастерская 100KWT
  • Онлайн Онлайн
    • Производство аппаратов вакуумного массажа.
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #15 : 15 Авг 2016 в 22:26 »
Какая цена??? 60 тыс рублей???? Да нахрен мне усрался такой кит, шутка не прокатила совсем. На PIC32 хочу.

Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

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

nicomunet123

  • Местный
  • ****
  • Репутация:
    +3/-0
  • :
    227
    106
  • Сообщений: 939
  • Россия, Москва
  • Просаживаю батарейки!
  • Оффлайн Оффлайн
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #16 : 15 Авг 2016 в 22:46 »
, мне тоже бы хотелось программируемый контроллер...
Я пока ломаю голову над KU63 (контроллер на плате от XCM (X8M06-x). Самый частый китайский контроллер. Вроде бы.). Но если ничего дельного из прошивки дешманского контроллера не получится - то могу попробовать помочь в разработке контроллера на ардуинке.
Вот только у меня требования немного другие: 6 фетов, 15А. Но я думаю это не проблема будет

E-TWOW S2 Eco (без кронштейнов и экрана)
Kugoo S1 (36V)
Kugoo FAQ

Кулибин

  • Старожил
  • *****
  • Репутация:
    +20/-0
  • :
    65
    291
  • Сообщений: 3342
  • Москва,ЮЗАО,м."Академическая".
  • Мастерская 100KWT
  • Онлайн Онлайн
    • Производство аппаратов вакуумного массажа.
    • Награды
Делаю себе контроллер BLDC на Arduino )
« Ответ #17 : 15 Авг 2016 в 22:48 »
Да фетов то скока угодно можно хоть 50 ??? Дело не в них.

Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

Поехали вместе кататься если живешь рядом?
Страницы: 123 ... 20>>Вверх