Как-то прошла мимо новость о появлении нового микроконтроллера
К1921ВК01Т ОАО «НИИЭТ». Чем он примечателен? Своей периферией, предназначенной для управления электродвигателями (motorcontrol). Это не просто пара-тройка ШИМ каналов. Это девять навороченных двухканальных модулей ШИМ (PWM), из них три модуля (HRPWM) с режимом «высокого» разрешения. Это шесть отдельных 32х разрядных модулей захвата CAP. Двадцать четыре(!) канала 12ти разрядных АЦП с гибким менеджером их запуска, встроенным усреднителем и цифровыми компараторами. Два квадратурных декодера (QEP), куча интерфейсов связи, внутренняя пользовательская память, часы — и всё это на ядре ARM Cortex-M4 °Fс мегабайтом флеш-памяти «на борту» и производительностью 100 MIPS! Интересно?
Собственно, чтобы в статье не перечислять все технические характеристики изделия, отправляю на страницу
сайта производителя. Там есть как краткий список, так и полноценный даташит (правда он всё время прячется по разным углам сайта и на момент написания статьи его можно скачать… из таблицы
текущих разработок). А в статье лучше расскажу что-нибудь такое, чего в даташитах не напишут.
Немного из истории создания
Работы над микроконтроллером (далее МК) начались в 2012м году компанией
ООО «НПП «Цифровые решения» по заказу
ОАО «НИИЭТ» (г. Воронеж.). На ядро ARM Cortex-M4 °F и часть коммуникационных периферийных модулей были приобретены лицензии, а часть модулей были разработаны этой компанией самостоятельно: модули ШИМ, контроллер АЦП (не сам АЦП, а менеджер по управлению им), модуль захвата CAP и модуль квадратурного декодера QEP. НПП «Цифровые решения» сначала изготовила макет микроконтроллера на ПЛИС Kintex7, который реализовывал всю логику будущего микроконтроллера, включая ARM ядро. Но ПЛИС — это свободно перепрограммируемое изделие, что позволяет исправлять ошибки в логике МК, если они обнаруживаются после прохода тестов (это помимо тестирования на симуляторе). Но как тестировать motorcontrol микроконтроллер? Помимо синтетических тестов, конечно же на реальной задаче управления электродвигателем! Для этого НПП «Цифровые решения» обратились к нам — в
ООО «НПФ Вектор», так как у нас очень большой опыт работы в сфере электропривода на базе МК Texas Instruments, хотя скорее потому, что мы сидим в соседнем здании. В совместных обсуждениях при проектировании периферии для управления электродвигателям было решено взять за образец TMS320F28335 Texas Instruments (TI), так как этот микроконтроллер имеет, наверное, самую мощную и гибкую периферию motorcontrol, заслуженно пользующуюся мировым уважением. Поэтому, вооружившись даташитами TI, «Цифровые решения» создали на их основе внутреннюю логику работы модулей ШИМ, CAP и QEP для К1921ВК01Т. Кроме того, по опыту работы с МК TI мы дополнительно предложили некоторые улучшения, которых не хватает у TI. Это фильтр коротких импульсов в модуле ШИМ (не все драйверы силовых ключей любят открытие/закрытие на очень короткий промежуток времени, IGBT может попасть в линейный режим), это некоторые нюансы в модуле квадратурного декодера, которые позволяют избавиться от проблем с переключением делителей счетчиков на ходу и т. п. «Цифровые решения» учли их и расширили соответствующим образом функционал периферии по сравнению с модулями TI. Во время того, как НПП «Цифровые решения» разрабатывали внутреннюю логику работы модулей, мы в «НПФ Вектор» делали стенд для тестирования будущего микроконтроллера. Это был небольшой преобразователь частоты на шести транзисторах («сервоусилитель»), который цепями управления подключался к макету микроконтроллера на ПЛИС, а силовой частью подключался к небольшому серводвигателю с датчиками положения Холла (для проверки модуля CAP) и квадратурным датчиком положения (для проверки модуля QEP). Наша цель была такая: написать программное обеспечение для микроконтроллера, чтобы обеспечивалось полноценное векторное управление электродвигателем, используя любой датчик положения по выбору или оба сразу. И, конечно же, сообщать о всех найденных проблемах в периферии «Цифровым решениям». Несмотря на множество собственных тестов МК у «Цифровых решений», в ходе испытаний на живом электродвигателе было найдено немало ошибок. В основном они были связаны с неточной реализацией внутренней логики блоков, которая не была описана в явном виде в даташитах Texas Instruments. Например, что должен выдавать модуль ШИМ, если уставка сравнения задана выше периода таймера? Или если для квадратурного декодера включен делитель входного сигнала, должен ли модуль детектировать смену направления вращения по деленному сигналу или по оригинальному входному? Ответы на эти вопросы могут быть очевидны электроприводчику, но не очевидны архитектору логики микроконтроллеров. Насколько мы смогли, настолько мы подобные баги совместно с «Цифровыми решениями» выловили. Привод успешно заработал в векторном управлении без каких-либо проблем. Однако все баги таким тестированием мы, конечно же, охватить не могли — наверняка в других задачах ошибки начнут вылезать еще. Но для этого и существует errata и новые ревизии микроконтроллеров: чтобы исправить баги, нужно их сначала насобирать. После завершения отладки логики МК на ПЛИС «Цифровыми решениями» была сделана «разводка» МК (или как там
это называется у микроконтроллеров? Топология?), после чего все результаты работы были переданы в НИИЭТ. К слову, мы уже нашли несколько ошибок после выпуска МК в «камне», но НИИЭТ посчитал их пока недостаточно критичными, чтобы менять разводку МК: накопятся еще - исправят.
Название
Еще надо сказать, что микроконтроллер пережил несколько названий. Сначала во время разработки он имел кодовое название «МС01», затем опытная партия камней называлась NT32M4F1, а затем он уже стал К1921ВК01Т (причем в названии в одних местах буквы пишут русские, в других английские). Поэтому если увидите эти названия в ранних статьях и публикациях по этому МК, не удивляйтесь.
Как дорого?
В настоящее время (на начало 2016г) у НИИЭТ готова к продаже первая партия микроконтроллеров, которая уже начала поступать к заказчикам. Кристаллы корпусированы часть в пластик, часть в керамику. Цена камня в пластике на конец 2015-го года, кажется, была чуть меньше 3 т.р., что выше цены TI TMS320F28335 при покупке в России (на момент написания статьи коэффициент пересчета «их» цен в «наши» составлял 76). Однако в TMS320F28335 нет EEPROM и часов, нужно ставить внешние, из-за чего стоимость в итоге становится сравнимой. Это делает К1921ВК01Т перспективным не только в плане импортозамещения, но и для простых «меркантильных интересов». Хотя это сравнение, конечно, не совсем корректное — можно найти кучу примеров более дешевых кристаллов на Cortex-M4 °F и с большей тактовой частотой, но с меньшем количеством периферии. Поэтому для простых задач К1921ВК01Т будет избыточно и большим, и дорогим. Но для основного применения (управление электродвигателями и сложной силовой электроникой) — он конкурентоспособен.
Что у нас с производительностью?
Мы год назад выступали с докладом на выставке по этому поводу, презентацию можно найти
здесь. Проведенные нами тесты, конечно, не претендуют на особую точность — всё-таки мы запускали не настоящие бенчмарки, а «закатали» в тест всё ту же векторную систему управления (а что ещё может волновать электроприводчиков?). Но краткий пересказ презентации таков: архитектура ARM Cortex-M4 °F отстает от DSP ядра C28 TI на среднестатистических расчетах, требуемых для задач электропривода. Если снизить точность расчетов, там, где это можно, использовав аппроксимированные тригонометрические функции и прочее, можно сократить этот разрыв где-то до 15%. Но при этом тактовая частота топовых ядер С28 (тот же TMS320F28335) составляет 150МГц, а частота К1921ВК01Т — 100МГц. Поэтому со всеми оптимизациями библиотек К1921ВК01Т эквивалентен по вычислительной мощности где-то МК TI серии piccolo частотой 90МГц. Что можно трактовать как… очень неплохо, на наш взгляд, потому что если правильно использовать все аппаратные навороты нового МК типа DMA и самофильтрующего измерения АЦП, то можно неплохо сэкономить на тактах. Так или иначе у нас получилось «запихать» в К1921ВК01Т наш самый требовательный к производительности проект, базирующийся на TMS320F2810 (150МГц, ядро C28), который с треском уже влезает в этот самый 2810.
Что у нас со средствами разработки?
А что с ними может быть, это же ARM! Обычный, без всяких «но». Берете любой JTAG, любую среду разработки, но… нет, все-таки любая не заработает. «Но» заключается в прошивке флеш-памяти. Несмотря на то, что само ядро ARM стандартизировано и любой JTAG и среда к К1921ВК01Т подключатся, с прошивкой флеша не всё так просто. Кажется, каждый производитель микроконтроллеров считает своим долгом сделать именно свои регистры для работы с прошивкой своей флеш-памяти, поэтому создатели средств разработки мучаются с поддержкой всего этого зоопарка. Не отстает в этом плане и К1921ВК01Т — там методы работы с флеш тоже свои. Но если для именитых производителей программаторы флеш памяти (драйвер, прошивальщик или как это назвать?) в средах разработки написаны и работают «из коробки», то для К1921ВК01Т всё работает только для тех сред, для которых написали программаторы в НИИЭТ. К счастью, для IAR и Keil все уже готово и примеры проектов с инструкциями по прошивке могут быть найдены на
форуме НИИЭТ, а также в открытом
репозитории на Bitbucket, который ведет НИИЭТ. Кроме того, мы в «НПФ Вектор» написали поддержку программирования флеш К1921ВК01Т для
OpenOCD (Open On-Chip Debugger). Это такая прослойка между отладчиком GDB и железом в виде разных JTAG-эмуляторов и разных камней. Но пока мы тянули с разрешением конфликтов и «код ревью» в репозитории OpenOCD, разработчики НИИЭТ написали всё тоже самое, но своё и лучше (они еще добавили помимо прожига основной флеш-памяти функцию прожига пользовательской), но… это всё лирика. Что же дает этот OpenOCD? Это своеобразный слой абстракции железа, что позволяет сделать свою свободную и бесплатную среду разработки для К1921ВК01Т на базе любой популярной IDE. Мы в «Векторе» любим Eclipse (потому что среда Code Composer Studio от TI, начиная с v4 на нем основана, мы к нему привыкли и вообще, нет на свете IDE лучше Eclipse). А разработчики НИИЭТ сделали среду разработки на Qt Creator. Но, в общем, смысл и там и там один: берется среда, берется набор свободных кросс-средств разработки GCC, берется плагин для работы с OpenOCD, сам OpenOCD, немного конфигов, немного магии… и вы уже полноценно работаете с К1921ВК01Т, забыв про IAR и Keil. На момент написания статьи свою сборку Eclipse (назвали мы её VectorIDE) для К1921ВК01Т мы
выложили у себя на сайте, рецепт по приготовлению Qt Creator смотрите на
форуме НИИЭТ. Лично мы ведем все проекты для К1921ВК01Т в бесплатной среде и вам советуем — набор компиляторов GCC не особо отстает от фирменных IARовских (смотрите всю ту же нашу
презентацию), а зато, если вы солидная фирма, вам не нужно закупать дорогое импортное ПО (уже с коэффициентом пересчета 76, Карл! 78!).Ах, да. Есть еще кое-что. Называется оно
Codemaster++[ARM]. Это 100% отечественная среда разработки, включая компиляторы, и предназначенная также для К1921ВК01Т. Мы исследовали год назад её первые версии, но нашли что она была еще не готова, немного по части компиляторов и сильно по части удобства редактирования кода (хотя в этом она может посоревноваться с IAR, кто понимает, о чём я). Зато она маленькая и быстрая, а по интерфейсу напоминает какой-нибудь «хакерский» отладчик типа OllyDbg (сравните:
рази
два). В общем, возможно, кому-то будет интересно. Надо сказать, что разработчики (компания «
Фитон») очень старались, даже запрашивали в свое время наш бенчмарк а-ля «векторное управление двигателем» чтобы оптимизировать свои компиляторы.
Что у нас с отладочными комплектами?
На начало 2016 г в природе известно четыре отладочных платы на К1921ВК01Т. Это наша
VectorCARD K1921BK01T и другие… от конкурентов. Ладно, так и быть, вот ссылки
LDM-HELPER-K1921BK01T и
MBS-К1921ВК01Т. Еще, кажется, у самого НИИЭТ есть своя плата NIIET_1921BK01T, но на их сайте, видимо, она от меня прячется — если кто-то обнаружит ссылку, с удовольствием дополню статью. В чём между ними разница? Мы продаем не голую плату, а комплект с инвертором, электродвигателем, векторным управлением в исходных кодах на Си (на базе того, что писали в свое время для «Цифровых решений»), а также с программой верхнего уровня и драйвером CANopen для наблюдения всех процессов внутри привода — смотрите нашу
первую статью. Поэтому если вы хотите просто поиграть с новым МК, мигая светодиодом или пересылая данные по всяким интерфейсам связи, то оптимальнее будет купить отладочные платы конкурентов (хотя у нас тоже есть вариант голой платы, но она совсем «голая» — одни выводы). Однако если вы хотите создать на новом МК электропривод, то наш отладочный комплект и ПО может сэкономить вам полгода-год времени разработки (а может и больше, в зависимости от того, знаете ли вы теорию электропривода и есть ли у вас собственные средства отладки и осциллографирования, аналогичные нашим). Если вы внимательно читали
первую статью, то, наверное, помните, что отладить систему управления для электропривода без средств визуализации процессов внутри — невозможно. И если у Texas Instruments среда разработки умеет «из коробки» показывать осциллограммы, построенные по данным массива оперативной памяти МК, то для ARM в универсальных средах разработки (не от конкретного производителя МК) такой функции пока не наблюдается (если это читают разработчики «Фитон» - не хотите ли доработать построителем осциллограмм свою Codemaster++[ARM]? Это же несложно сделать!). В нашем отладочном комплекте такие средства визуализации осциллограмм присутствуют, поэтому можно сразу увидеть всё, что полагается для управления электродвигателями: форму токов фаз, напряжения, входы/выходы всех регуляторов и т. п. Цена нашего комплекта — большая, ориентировочно около 130 т.р. (один только электродвигатель со всеми датчиками положения стоит на текущий момент около 30 т.р.). Но для организации, желающей освоить новое изделие, это не должно быть критично — одна только коммерческая среда разработки под ARM может стоить больше.
Недостатки К1921ВК01Т
Какие главные недостатки нового К1921ВК01Т можно отметить уже сейчас?
• Во-первых, это несомненно сырой продукт, так как его по-настоящему программировали пока от силы человек 10-20. Когда большее количество разработчиков на него насядут, будут обнаруживаться баги — будут выходить новые ревизии. Так что готовьтесь. Но, тем не менее, двигатели им крутить можно — крутил лично.
• На текущий момент документация тоже сыровата. Ошибок там мало, но некоторые вещи объяснены… не совсем понятно. Можно было бы расписать чуть подробнее, привести примеры. Думаю, со временем она доработается.
• Микроконтроллер очень большой и навороченный. Это для кого-то плюс, для кого-то минус. Очень немногие применения охватят весь спектр его возможностей. Уже сейчас НИИЭТ думает над серией МК на его основе, с разными корпусами и набором периферии. Но пока — есть только К1921ВК01Т.
• У него специфический АЦП. Часто производители МК ставят один быстрый (12 MS/s) модуль АЦП и мультиплексируют его по нескольким каналам — например, так сделано у Texas Instruments в серии C2000. Но в К1921ВК01Т стоит 12 двухканальных медленных (1.7MS/s) модулей АЦП, работающих параллельно. Чем это плохо помимо невозможности очень быстро что-то измерить? Если АЦП в МК один, то на плате контроллера можно на два неиспользуемых канала подать калиброванные референсные сигналы, скажем, 1 В и 2 В, и по ним вычислить и скомпенсировать мультипликативную ошибку и ошибку смещения этого одного АЦП, распространив коррекцию на все каналы (АЦП же один). Когда АЦП в МК много, такой трюк не пройдет — все они будут иметь свои персональные ошибки. Трюк с калибровкой мы применяли на МК Texas Instruments типа TMS320F2810 (это описывается в даташите и рекомендуется), здесь же в К1921ВК01Т без калибровки мы получили более низкую точность АЦП по сравнению с калиброванным TMS320F2810. Нам пришлось сделать специальный стенд для калибровки независимо каждого модуля АЦП К1921ВК01Т и зашить калибровочную таблицу во встроенный EEPROM. Тогда точность аналоговых измерений получилась сравнимой (от температуры калибровка почти не уплывает — проверяли). Наверное, НИИЭТ стоит прошивать такую таблицу на заводе, было бы удобно. Но пока во флеше пусто.
• Частота 100МГц, конечно, низковата, хотелось бы быстрее. Но что есть, то есть. Хотя в некоторых местах пишут частоту 125МГц — всё зависит от температуры окружающей среды. «Цифровые решения» сообщили такую неофициальную информацию: внутри кристалл рассчитан на максимум 125 градусов. Температура на нём выше примерно на 15 градусов, чем окружающая среда. По проекту К1921ВК01Т должен работать при 85 градусах окружающей среды + запас, что гарантировано достигается на 100МГц. По факту можно разгонять МК выше 100МГц, отдельные образцы работали и на 140-170МГц, но зависит от образца. Поэтому, если кристалл не перегревать (а у него есть встроенный датчик температуры, заведен на АЦП), то его можно разгонять, если кому-то это требуется. Но если в вашем применении жарко (+85), то лучше выше 100МГц не задирать.
• Пока нет никакого официального загрузчика (программатора) через интерфейсы связи (CAN, RS). Шить МК можно только через JTAG/SWD. Соответственно, если контроллер изделия находится в закрытом корпусе, то нужно писать свой загрузчик для желаемого интерфейса связи. Или ждать, пока напишет НИИЭТ. Пока — нету, но, думаю, появится.
Заключение
Хотя какое еще заключение? Всё только начинается! Наконец-то есть отечественный микроконтроллер, на котором действительно можно сделать электропривод! До этого все существующие отечественные МК были или слабы ядром, или слабы периферией, чтобы справляться с задачами motorcontrol. Но теперь — полная свобода для самых сложных структур управления и самой сложной силовой части. Особенно хочется отметить перспективы этого микроконтроллера для станочных сервоприводов. До настоящего времени в России не было возможности изготовить полностью отечественный многокоординатный прецизионный станок, так как (одна из причин) не на чем было сделать качественный сервопривод. Теперь такой микроконтроллер есть.
http://geektimes.ru/company/npf_vektor/blog/269246/