avatar_mr.Dream

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

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

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

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

mr.Dream

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

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

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

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

poraboloid

Обычно прерывания размножают диодами на имеющийся вход прерывания и на свободный цифровой пин.
По срабатыванию прерывания контроллер опрашивает свободные пины и видит откуда пришел сигнал.
Yedoo Ox, МК DD350W, 9А\ч LiFePo4  Yedoo City, МК QQ85,11A\ч LiIon
Yedoo Mezec new, MXUS 350, 9А\ч LiFePo4 Самовар на тесте.
EVO 2xDD500W в ремонте.Оxelo Dirt в доделке

mr.Dream

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

electriq

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


on4ip

а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.
В жизни все не так, как на самом деле.

mr.Dream

Цитата: on4ip от 20 Июль 2016 в 17:38
а почему холлы не обрабатывать в прерывании шим например
сделать шим 10 кгц и обрабатывать.
не совсем понятно, что оно даст. Нужно прерывания именно по событию переключения холлов. Буду делать на логике "мультиплексор" и подавать на один вход МК, "запоминать" время переключения с опережением на один такс, добавлять период переключения, отнимать постоянную составляющую нарастания тока в обмотках и прерывать по таймеру для изменения состояния портов.
Но на первых порах буду экспериментировать без "опережения" и прерываний, тупо читая состояния пинов в цикле - мелкая програмка будер работать с портами напрямую шустро.

on4ip

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

i

#7
Цитата: mr.Dream от 19 Июль 2016 в 17:58
...У меги 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 входа прерываний. Для холов более чем достаточно.

mr.Dream

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

Добавлено 20 Июль 2016 в 19:32

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

on4ip

ну 2 кгц норм контур тока.  А что у вас там за бяда с жопами?
В жизни все не так, как на самом деле.

mr.Dream

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

on4ip

Ну и терминология+) понятно в общем.
В жизни все не так, как на самом деле.

TRO

#12
Как вспомню ту авральную жуть, когда я мутил подобный проэктик, на ардуинской платке (вроде мега2560), но писал на бейсике. Синус выгребал из таблицы (16 восьмибитных значений на половину горба ЭДС между сработкой холлов). Частоту выборки коректировал тупо по разнице времени между сработкой холлов (прошлой и текущей), получал значение которое заносил в таймер, от которого получал условные 32 прерывания (до предполагаемой следующей сработки холлов). Частоту переключения холлов (пересчитывал из времени между сработками) принимал за текущую ЭДС. Поскольку делалось для одного мотора, а напряжение было фиксированным, то на обратную связь по току забил, просто выяснил опытным путем какой нужен прирост напряжения между нулевым и максимальным моментом при фиксированных оборотах, добавлял к расчетному ЭДС, перемножал его с заданием и синусом из таблицы каждой фазы, и выводил в ШИМ. Основные танцы с бубнами были в оптимизации расчетов чтобы успевать считать в отведенное время, програмка разрослась ассемблерными вставками (бейсик аппаратный умножитель использовать не хотел). Короче, оно работало (тянуло через редуктор конвеер), но до максимальных оборотов я так и недооптимизировал (приехал контроллер к штатному движку).

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

Кулибин

А 20Mhz не мало? До каких оборотов раскрутится?
А вообще этих тем расплодилось не мало, а сделали пару человек, адапто засекретил сразу  а начиналось то как. ))
Сам хочу свой контроллер потому что могу что надо настроить и вообще что хочу то и делаю в прошивке, удобно.
Много идей но так и не могу разобраться, точнее нет времени и сил.
Я бы может и начал но не могу пока найти схему что и и синус можно было сделать и обычный режим.
Что бы схема была простая и ремонтопригодная, можно конечно с инфинеона слизать полностью схему но синуса тогда не будет.
У меня есть толковый программер который любит разбираться во всём, вместе сделали бы что надо, а я паять могу что угодно. ))
Пока затык по схеме.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

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

on4ip

Стартер кит от тмс купите и доделайте. Будет вам счастье делов то. Цена около 60 000.с ним разберетесь и свой запустите.
В жизни все не так, как на самом деле.

Кулибин

Какая цена??? 60 тыс рублей???? Да нахрен мне усрался такой кит, шутка не прокатила совсем. На PIC32 хочу.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

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

nicomunet123

[user]Кулибин[/user], мне тоже бы хотелось программируемый контроллер...
Я пока ломаю голову над KU63 (контроллер на плате от XCM (X8M06-x). Самый частый китайский контроллер. Вроде бы.). Но если ничего дельного из прошивки дешманского контроллера не получится - то могу попробовать помочь в разработке контроллера на ардуинке.
Вот только у меня требования немного другие: 6 фетов, 15А. Но я думаю это не проблема будет
E-TWOW Eco -> Kugoo -> Ninebot ES1 -> Ninebot ES-Trash

Кулибин

Да фетов то скока угодно можно хоть 50 ??? Дело не в них.
Всякое видео самокатное.
http://www.youtube.com/user/VakuumTonus/videos

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