ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
733877
Evgeny_CD, Архитектор (04.02.2017 01:26, просмотров: 563)
iCE40 + PIC32MM - созданы друг для друга. Слава быстрому SPI! http://caxapa.ru/683708.html
http://caxapa.ru/732261.html
Я тут на днях хорошо "поразмышлял" на тему iCE40 и правильных MCU софткоров, которые должны в них влезть. Это полезно, но еще раз перечитал все свои посты, и понял, что можно не так красиво, но проще и быстрее. Как всегда, перфекционизм не выдержал столкновения с реальностью :) -> Описан алгоритм управления совершенного fly back DC-DC active clamp 125 Кгц, где решение о судьбе текущего цикла надо принять за 3 мкс. 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 PIC32MM --> PIC32MM0016GPL020-I/ML IC MCU 32BIT; 16KB FLASH; 4Kb SRAM; 20QFN (4x4); 2 UART; 2 SPI; 2 CLC - 100 $0.968 PIC32MM0032GPL020-I/ML IC MCU 32BIT; 32KB FLASH; 8Kb SRAM; 20QFN (4x4); 2 UART; 2 SPI; 2 CLC - 100 $1.05 PIC32MM0064GPL020-I/ML IC MCU 32BIT; 64KB FLASH; 8Kb SRAM; 20QFN (4x4); 2 UART; 2 SPI; 2 CLC - 100 $1.153 Малоприментные фишки PIC32MM: • Two 4-Wire SPI modules (up to 25 Mbps) 16-byte FIFO. Separate SPI FIFO Buffers for Receive and Transmit FIFO buffers act as 4/8/16-level deep FIFOs based on 32/16/8-bit data width. Скорость одинаковая для master slave! Вообще говоря, в даташите времянки клоков SPI в обоих режимах описаны как бы до 50 МГц, но по свойствам делителя получается максимальная тактовая 24 Мгц. • DC-25 MHz Operating Frequency • 3.17 CoreMark®/MHz (79 CoreMark) Performance • 1.53 DMIPS/MHz (37 DMIPS) (Dhrystone 2.1) Performance • 16-Bit/32-Bit Wide Instructions with 32-Bit Wide Data Path • Two Sets of 32 Core Register Files (32-bit) to Reduce Interrupt Latency • Single-Cycle 32x16 Multiply and Two-Cycle 32x32 Multiply • Hardware Divide Unit • 64-Bit, Zero Wait State Flash with ECC to Maximize Endurance/Retention По SPI можно дуплексно передать 3 байта за мкс! В описанном мной алгоритме управления DC-DC в конце каждого цикла надо передать в MCU: * отсчет тока силового ключа перед выключением оного - чтобы оценить индуктивность первички, не сдох ли случайно транс (внешнее подмагничивание, перегрев и прочее). Или в момент срабатыаания защиты по току. 8 бит ок. * отсчет напряжения на выходе перед включением силового ключа на новый цикл. 8 бит достаточно. * момент срабатывания защиты по току - если что пошло не так - 8 бит. 0 - не было срабатывания. Как раз в 1 мкс укладывается! Обратно надо 4 байта: * момент выключения силового ключа * момент включения ключа active clamp * момент выключения ключа active clamp * момент завершения цикла и включения ключа на новый цикл Быть модет удастся сэкономить и будет 3 байте и та же 1 мкс. Итого у нас 1 мкс на принятие решения. И для этого у нас все есть! Срабатывает прерывание. Переключаемся на второй банк регистров! И вот у нас 25 команд, чтобы отработать. С учетом достаточно мощной (и, говорят, извратной) системы команд MIPS при асмовом кодинге можно попробовать успеть. asm будет немного, можно пережить. За 25 команд все сделать малореально - с учетом обмена с SPI и проч. А вот за 2 мкс - 50 команд - можно попробовать. Т.е. минимальная длительность открытия ключа у нас 4 мкс, что, в принципе, терпимо - ну придется частоту со 125 Кгц до 100 или даже 80 уронить. Ничего, колечко поболее поставим :) Если экономть время, то надо использовать PMP. Самый дешевый PIC32 с PMP, 50 Мгц, что крайне полезно в данном случае. PIC32MX120F032B-I/ML IC MCU 32BIT 32KB FLASH 28QFN (6x6) 100 - $1.9158. Этот чип сильно забажен, едва ли стоит его использовать. PIC32MX130F064B-I/ML IC MCU 32BIT 64KB FLASH 28QFN (6x6) 100 - $2.16300. Самые критичные баги пофиксили. Не смертельно дороже. Хардкоримся дальше. 100 МГц. PIC32MX330F064H-I/PT IC MCU 32BIT 64KB FLASH 16K RAM 64TQFP (10x10) 100 - $2.89 Больше треша и угара! 250 МГц. Дабловая плавучка. 50 МГц 6 штук SPI!!! PIC32MZ0512EFE064-I/MR IC MCU 32BIT 512KB FLASH 128K ОЗУ 64QFN (9x9) 100 - $6.72590 Слава быстрому SPI! Ваще не мужик (КПСС) :) Что касается размышлений, то они были полезными. По сути, вырисовалась потребность в некоем совсем крошечном недояре, которое бы имело в качестве памяти кода 1 (или более) блок памяти 512 байт, 1 (или более) блок 512 байт на память данных, и набор специфических для задачи исполнительных блоков, которыми бы это ядро командовало. Причем написать бы это чудо в функциональном стиле, на каком нибудь Chisel, и пусть оно само оптимизируется длинными ночами :) caxapa.ru/441444.html Суперкомпилятор прикрутить к этому делу. https://ru.wikiped …1%8F%D1%86%D0%B8%D1%8F