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

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

Хочешь стать куратором любимой темы?

* Комментарии к новостям

Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 23275 раз

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

19 Июл 2016 в 17:58
Прочитано 23275 раз
Оффлайн

mr.Dream

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

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

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

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

19 Июл 2016 в 18:36
Ответ #1
Оффлайн

poraboloid

Самара Сообщений: 2716
Обычно прерывания размножают диодами на имеющийся вход прерывания и на свободный цифровой пин.
По срабатыванию прерывания контроллер опрашивает свободные пины и видит откуда пришел сигнал.

19 Июл 2016 в 19:14
Ответ #2
Оффлайн

mr.Dream

Ternopil, Ukraine Сообщений: 3042
Обычно прерывания размножают диодами на имеющийся вход прерывания и на свободный цифровой пин.
По срабатыванию прерывания контроллер опрашивает свободные пины и видит откуда пришел сигнал.
Так не выйдет. Ибо 3 датчика имеют 6 рабочих комбинаций. Если на одном датчике выход +, то изменения иного с - на + не даст результата.  Это если нужно "один из" обработать :) буду искать решение.

20 Июл 2016 в 14:23
Ответ #3
Оффлайн

electriq

Россия, Москва Сообщений: 127
Лучше взять камень 32U4, там с прерываниями получше дела (External Interrupts: 3 (interrupt 0), 2 (interrupt 1), 0 (interrupt 2), 1 (interrupt 3) and 7 (interrupt 4))
Камень есть в том же "нано" формате что и 328, плюс USB уже аппаратный.

Сообщение понравилось: mr.Dream

20 Июл 2016 в 17:38
Ответ #4
Оффлайн

on4ip

Россия, Раменское Сообщений: 2331
а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.

20 Июл 2016 в 18:14
Ответ #5
Оффлайн

mr.Dream

Ternopil, Ukraine Сообщений: 3042
а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.
не совсем понятно, что оно даст. Нужно прерывания именно по событию переключения холлов. Буду делать на логике "мультиплексор" и подавать на один вход МК, "запоминать" время переключения с опережением на один такс, добавлять период переключения, отнимать постоянную составляющую нарастания тока в обмотках и прерывать по таймеру для изменения состояния портов.
Но на первых порах буду экспериментировать без "опережения" и прерываний, тупо читая состояния пинов в цикле - мелкая програмка будер работать с портами напрямую шустро.

20 Июл 2016 в 19:02
Ответ #6
Оффлайн

on4ip

Россия, Раменское Сообщений: 2331
ну как бы дискретизация системы по времени, регулятор , шим и вуаля токовое управление. Или вы что то другое хотите?На какую частоту рассчитываете выйти по оборотам?

20 Июл 2016 в 19:12
Ответ #7
Оффлайн

i

Администратор Иваново Сообщений: 3796
...У меги 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

20 Июл 2016 в 19:29
Ответ #8
Оффлайн

mr.Dream

Ternopil, Ukraine Сообщений: 3042
, Pin Change Interrupt - то что нужно. Я не совсем понимал логику работы, но как выяснилось - при любом изменении состояния пина будет срабатывать прерывание, но единственное для целого порта. А уже в программе смотреть, какой пин на что изменился? В отличии от External Interrupt просто не имеет надстройки по "когда генерировать" и использует целый порт вместо единственного пина?
Пока разбирался - вижу, вы уже обьяснили :) Оно самое то, что мне нужно.

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

20 Июл 2016 в 20:18
Ответ #9
Оффлайн

on4ip

Россия, Раменское Сообщений: 2331
ну 2 кгц норм контур тока.  А что у вас там за бяда с жопами?

20 Июл 2016 в 20:45
Ответ #10
Оффлайн

mr.Dream

Ternopil, Ukraine Сообщений: 3042
А что у вас там за бяда с жопами?
Если питать обмотки стабильным напряжением, то ближе в точке переключения фаз ЭДС мотора ниже, и по этому там ток большой, при том, на пике ЭДС он може вообще не быть или быть отрицательным - подзаряжать батарею :) Но бесят как раз броски тока возле момента переключения фаз. Они там малоэффективны, от ниж больше шума чем пользы :)

20 Июл 2016 в 21:40
Ответ #11
Оффлайн

on4ip

Россия, Раменское Сообщений: 2331
Ну и терминология+) понятно в общем.

21 Июл 2016 в 00:41
Ответ #12
Оффлайн

TRO

Украина, г. Запорожье. Сообщений: 7217
Как вспомню ту авральную жуть, когда я мутил подобный проэктик, на ардуинской платке (вроде мега2560), но писал на бейсике. Синус выгребал из таблицы (16 восьмибитных значений на половину горба ЭДС между сработкой холлов). Частоту выборки коректировал тупо по разнице времени между сработкой холлов (прошлой и текущей), получал значение которое заносил в таймер, от которого получал условные 32 прерывания (до предполагаемой следующей сработки холлов). Частоту переключения холлов (пересчитывал из времени между сработками) принимал за текущую ЭДС. Поскольку делалось для одного мотора, а напряжение было фиксированным, то на обратную связь по току забил, просто выяснил опытным путем какой нужен прирост напряжения между нулевым и максимальным моментом при фиксированных оборотах, добавлял к расчетному ЭДС, перемножал его с заданием и синусом из таблицы каждой фазы, и выводил в ШИМ. Основные танцы с бубнами были в оптимизации расчетов чтобы успевать считать в отведенное время, програмка разрослась ассемблерными вставками (бейсик аппаратный умножитель использовать не хотел). Короче, оно работало (тянуло через редуктор конвеер), но до максимальных оборотов я так и недооптимизировал (приехал контроллер к штатному движку).
« Последнее редактирование: 21 Июл 2016 в 00:50 от TRO »

15 Авг 2016 в 21:00
Ответ #13
Оффлайн

Кулибин

Москва,ЮЗАО,м."Академическая". Сообщений: 5055
А 20Mhz не мало? До каких оборотов раскрутится?
А вообще этих тем расплодилось не мало, а сделали пару человек, адапто засекретил сразу  а начиналось то как. ))
Сам хочу свой контроллер потому что могу что надо настроить и вообще что хочу то и делаю в прошивке, удобно.
Много идей но так и не могу разобраться, точнее нет времени и сил.
Я бы может и начал но не могу пока найти схему что и и синус можно было сделать и обычный режим.
Что бы схема была простая и ремонтопригодная, можно конечно с инфинеона слизать полностью схему но синуса тогда не будет.
У меня есть толковый программер который любит разбираться во всём, вместе сделали бы что надо, а я паять могу что угодно. ))
Пока затык по схеме.

15 Авг 2016 в 21:58
Ответ #14
Оффлайн

on4ip

Россия, Раменское Сообщений: 2331
Стартер кит от тмс купите и доделайте. Будет вам счастье делов то. Цена около 60 000.с ним разберетесь и свой запустите.

15 Авг 2016 в 22:26
Ответ #15
Оффлайн

Кулибин

Москва,ЮЗАО,м."Академическая". Сообщений: 5055
Какая цена??? 60 тыс рублей???? Да нахрен мне усрался такой кит, шутка не прокатила совсем. На PIC32 хочу.

15 Авг 2016 в 22:46
Ответ #16
Оффлайн

nicomunet123

Заграница Сообщений: 2785
, мне тоже бы хотелось программируемый контроллер...
Я пока ломаю голову над KU63 (контроллер на плате от XCM (X8M06-x). Самый частый китайский контроллер. Вроде бы.). Но если ничего дельного из прошивки дешманского контроллера не получится - то могу попробовать помочь в разработке контроллера на ардуинке.
Вот только у меня требования немного другие: 6 фетов, 15А. Но я думаю это не проблема будет

15 Авг 2016 в 22:48
Ответ #17
Оффлайн

Кулибин

Москва,ЮЗАО,м."Академическая". Сообщений: 5055
Да фетов то скока угодно можно хоть 50 ??? Дело не в них.

 

неспеша делаю BLDC и контроллер к нему

Автор GostyaРаздел Электродвигатели и генераторы

Ответов: 28
Просмотров: 2844
Последний ответ 17 Авг 2015 в 20:52
от Gostya
Делаю контроллер для МК. Много вопросов

Автор VVKРаздел Микроэлектроника

Ответов: 123
Просмотров: 20220
Последний ответ 20 Апр 2013 в 20:02
от mevial
Перенесено: Делаю контроллер для МК. Много вопросов

Автор zapРаздел Электродвигатели и генераторы

Ответов: 0
Просмотров: 868
Последний ответ 31 Окт 2012 в 19:11
от zap
Делаю резистивную смарт БМС с BlueTooth каналом.

Автор VVKРаздел Системы управления аккумуляторными батареями (BMS)

Ответов: 62
Просмотров: 15039
Последний ответ 22 Май 2016 в 22:48
от Unhis
Делаю стенд для проверки БМС.

Автор TROРаздел Микроэлектроника

Ответов: 9
Просмотров: 1538
Последний ответ 04 Мар 2018 в 15:28
от Genadi