ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
732261 Топик полностью
Evgeny_CD, Архитектор (30.01.2017 03:21, просмотров: 437) ответил Evgeny_CD на Интересно, почему до сих пор еще живы, и, что еще странее, активно развиваются SiLabs 8 битники на основе 51 ядра? Для примера я глянул семейство EFM8 Universal Bee.
Благодарен всем высказавшимся, дополню и разожгу. 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. Там рассмотен совсем дешевый вариант.