Благодарен всем высказавшимся, дополню и разожгу. http://caxapa.ru/722185.html
1. Качественная аналоговая периферия - да, это отлично. У рассматриваемого семейства 10 битный АЦП мало отличим от идеального, но 500ksps - не сказать, что "поросто офигеть". С другой стороны, больше таким ядром и не обработать.
Еще надо бутлоадер упомянуть. Для серийного производства - бесценно. Там более в таком ценовом классе.
2. Система команд. Большинство команд там все же 2-х тактные, а есть и более. FLASH там работает с ускорителем 2:1, повышение тактовой более 25 Мгц иногда вставляет дополнительные такты. Я бы ождал реального перфоманса 20 MIPS, что тоже очень и очень неплохо.
3. С KEIL все понятно, про него много отзывов как про самый эфективный С компилер для 51. А что насчет SDCC?
Вот тут какое-то бредовое сравнение, KEIL сливает SDCC кратно :)
https://sourceforg …/1864/thread/c296954d/
4. Вообще к 8 битникам у меня одна фундаментальная претензия. 8 битность :)
Есть у меня переменная 8 бит, то она занимает 1 регистр, а указатель на нее - 2 регистра. И операции с этим указателем не будут однактовыми. Что порождает использовать совсем другой стиль использования С для 51.
AVR имеет 32 регистра, и эта проболема в значительной степени снижена. + система команд более подходящая для компиляции из С.
Хорошая статья.
Using Pointers, Arrays, Structures and Unions in 8051 C Compilers
http://www.esacade …-8051-c-compilers.html
В этом смысле 16 битники выглядят куда лучше для небольших систем, где код и данные влазят в 64к.
32 битники - само совершенство :)
5. Переходим к шине. В AVR внешняя шина не была проблемой - у первого поколения было немало камней с ней. Сейчас у семейства шина осталась только в вариенте ATxmega-128A1 (и ее вариант с USB). ATXMEGA128A1U $2.98 @1500 ШТ @DigiKey.
В таком диапазоне цен много MCU с внешней шиной, в том числе Cortex. Есть dsPIC около $2 (крупный опт) с PMP.
6. Внешняя шина нужна не для SRAM, а для FPGA.
ICE40UL1K-CM36AI 100 - $1.86 1248 LUT + Flip-Flop, 14 блоков памяти по 512 байт. Да, у него очень противный корпус - 36-ball ucBGA, 0.40 mm, 2.5 mm x 2.5 mm, 26 IO (внешняя шина шире 8 бит противопоказана). Но мы говорим о достаточно крупносерийном производстве небольших модульков, там BGA 0.4 пережить можно. У более дорогих подсемейств есть и QFN48, но дороже.
Подробности про ICE40
http://caxapa.ru/721108.html
http://caxapa.ru/721212.html
http://caxapa.ru/721719.html
http://caxapa.ru/719768.html
Вот тут лежит статья
http://caxapa.ru/732082.html
В которой сказано, что если FPGA синтезировать не ломом, то RISC-V влазит в 1521 - 1320 LUTs iCE40. Цельный 32 битный процессор. (статья про другое модсемейство ice40, более дорогое, но ячейки те же самые - есть шанс что можно экстраполиовать и на это дешевое подсемейство).
7. Чудо АЦП. ADS7949SRTER 3000 - $0.84 8 Бит, 3MSPS при правильном тактировании, которое никакой MCU не сможет сделать (!), 2 диф. входа (!) В такую цену есть немало подобных АЦП - этот выбран как пример.
8. Теперь делаем контроллер для DC-DC. [кто о чем, а вшивый о бане :) ]
FPGA + ADC = $2,7
+ MCU ($0.8) = $3,5 - это для дешевых MCU без шины
+ MCU ($1.5) = $4,2 - рассматриваемые 51
+ MCU ($3) = $5,7 - распространенный MCU с шиной.
Эффект стоимости MCU очень сильный!
9. Ну а шина то нафига??? SPI чем не угодил?
Пусть наш DC-DC работает на 125 Кгц (чтобы транс был маленьким и помехи давились компактными фильтрами). 8 мкс - цикл. Пусть у нас 3 мкс - накачка трансформатора, 5 мкс - передача энергии по вторичную или "разрядка" forward. Рассматриваем fly back или forward.
Делаем мы DC-DC не как в учебнике, а продвинутый. Алгоритм коммутации ключей никак не коррелирован с классическим PWM. Псевдослучайные задержки для снижения палок спектра помех. ZVS. Защиты по току. Контроль состояния сердечника (есть обратная связь в процессе цикла, и запуск следующего по результатам отслеживания). Много чего еще.
Стандартные таймера, даже с генераторами времянок, даже для DC-DC, не смогут синтезировать такое. Я их тщательно изучил.
Точнее таймера смогут, если MCU будет их дергать в процессе цикла. Но это стремно - а ну как он не успеет - и фсе, "волшебный дымок"?
А указанная ice40 точно сможет. Она не просто указанным АЦП сможет измерить токи в нужные моменты, она даже усреднить несколько отсчетов сможет - для повышения качества измерений.
Схема такая. MCU программирует параметры цикла и запускает его. Цикл отрабатывается автономно. Далее MCU считывает параметры прошедшего цикла и программирует новый цикл.
Если MCU не успел - повторяется предыдущий цикл. Нет обновления несколько раз - MCU сдох - корректно гасим БП.
Самая главноя тонкость. Вот начался новый цикл. У нас есть 3 мкс, чтобы скачать, подсчитать и обновить. и 5 мкс для медленных операций.
Например, у нас fly back с контролем размагничивания сердечника. Т.е. в момент открытия ключа у нас ток намагничиания нулевой, мы знаем время открытия кюча (сами программировали его), знаем ток перед выключением ключа, знаем напряжение на входном конденсаторе (оно медленно меняется - меленного АЦП MCU хватит).
АЦП одним каналом постоянно мониторит ток ключа, и логика вырубает цикл, если превысили. Есть защитный интервал вначале - чтобы пережить бросок при открытии ключа.
Но это не все.
За счет двухканального АЦП мы еще знаем напряжение на выходе в начале цикла и в сего конце. И знаем напряжение в момент начала нового цикла. Емкость на выходе мы тоже знаем.
Мы можем подсчитать сколько энергии мы передали в нагрузку в прошедшем цикле, и можем оценить результат - напряжение в прелах цикла выросло, упало, или осталось прежним. Можно подсчтать в лоб энергетический баланс.
Дальше, мы должны решить, сколько энергии надо вкачать в текущем цикле. Точне, дельту энергии по отношению к предыдущем циклу. Коридор очень прост - исправить энергетический перекос и не вылететь за пределы регулирования. Не шибко сложные вычисления, особенно, если в памяти есть готовые таблицы - напряжение на входе и напряжение на выходе. Пусть таблицы будут грубые, в сумме 256 вариантов, например - должно хватить. + некий поправочный коэффициент от "медленного цикла".
На быструю часть у нас 3 мкс, или 60 команд. В варианте 51 уже пахнет хардкорным асмовым кодингом, но успеть можно.
Медленный цикл - это обычная система обратной связи, ТАУ. Она точно регулирует выход. На основе 10 битного АЦП MCU. Она может реагировать каждый 10 цикл работы преобразователя. 5 мкс на кадом цикле - 50 мкс в сумме на такт регулирования. Это 1000 команд рассматриваемой 51. На С закодится за милую душу.
В итоге имеем максимально возможную скорость реакции на скачки нагрузки и точное регулирование классикой.
Если мы подцепим FPGA через SPI - так быстро мы реагировать не сможем. У нас только за счет SPI будет задержка 2-3 цикла работы БП. С эгергетическим балансом будет гораздо сложнее разбираться. Там будет куча побочных эффектов, и кончится это все возбудом при неудчном сочетании параметров.
В целом все задуманное выглядит сложноватым для 51 ядра. Не шибко охота вспоминать молодость и хардкорить все на asm.
Самый дешевый PIC24 c PMP - PIC24FJ16GA002-I/ML (16k FLASH 4k RAM ) 100 - $2. PIC24FJ32GA002-I/ML (32k FLASH 8k RAM ) 100 - $2.19 16 MIPS, зато 16 битность честная.
dsPIC PMP - чуть больше $3.
Nuvoton, M058LDE 500 - $1.69. Но как-то стремно с ним связваться. :(
Можно заняться извращениями. FPGA на IO, изменения полярности на пине - это типа тактовый сигнал, дальше читать/писать в регистры IO. Если есть запас по MIPS оно может и прокатит, но извращение оно и есть извращение.
-> предыдущий очень интересный топик про DC-DC. Там рассмотен совсем дешевый вариант.