Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2013 №7

Прецизионные микроконверторы ADuCM36x — быстрый старт

Коваль Кирилл  
Редькин Павел  

Статья содержит сведения об основных характеристиках и архитектуре, а также описание опыта практического использования недавно появившегося на рынке семейства 32‑разрядных прецизионных микроконверторов (аналоговых микроконтроллеров) ADuCM36x с ядром ARM Cortex-M3 компании Analog Devices. Приведен перечень всех аналоговых МК общего назначения, выпускаемых производителем этого семейства, рассказано о существующих средствах поддержки разработки приложений на базе ADuCM36x, основных этапах такой разработки, а также описано реальное устройство на базе МК ADuCM360 — прецизионный измеритель напряжения.

Корпорация Analog Devices, Inc. (ADI) предлагает на рынке широкую номенклатуру так называемых аналоговых микроконтроллеров (МК), известных также специалистам как микроконверторы. Под аналоговым МК понимается устройство, содержащее на одном кристалле приоритетные аналого-цифровые узлы — высокоточные АЦП, ЦАП, а также цифровые узлы — процессорное ядро, память, различную аналоговую и цифровую периферию. Основное внимание производитель этих МК уделяет аналоговым измерениям, а ядро и вся цифровая часть устройства, по сути, является «придатком» АЦП (она выполняет функции обслуживания — обработку данных, интерфейс с внешними устройствами, управление, корректировку измерений). Таким образом, цифровая часть образует необходимые интерфейсы взаимодействия с пользовательской средой.

Помимо собственно АЦП такое устройство может содержать на кристалле различные полезные его дополнения: инструментальные аналоговые усилители, буферы входных аналоговых сигналов, источники опорного напряжения, напряжения смещения и тока возбуждения внешних датчиков, аппаратные фильтры обработки, встроенные процедуры калибровок, средства поддержки цифрового усреднения результатов и т. п. Таким образом, по замыслу производителя, аналоговый МК заменяет сразу несколько микросхем, традиционно образующих систему сбора данных (АЦП, МК, ИОН, микросхемы интерфейсов и питания, входные буферы), за счет чего достигается значительная аппаратная экономия при сохранении точностных и скоростных характеристик такого измерителя.

Обзор семейств микроконтроллеров Analog Devices

В настоящее время все выпускаемые ADI аналоговые МК [1] относятся к трем семействам: с 8-разрядным процессорным ядром 8052 (ADuC8xx), с 32-разрядным ядром ARM7TDMI (ADuC7xxx) и с 32-разрядным ядром ARM Cortex-M3 (ADuCM36x). Основные характеристики перечисленных семейств представлены в таблицах 1-3.

Сравнительный анализ всех перечисленных в таблицах устройств позволяет сделать следующие выводы.

Устройства семейства ADuC8xx [2] (табл. 1) преимущественно имеют «медленный» высокоточный АЦП и значительное количество линий GPIO, достаточное для построения приложений большой сложности. Однако слабая по современным меркам производительность ядра, небольшой объем памяти и сравнительно «медленные» интерфейсы не позволяют использовать их в «быстрых» приложениях и при решении задач, требующих существенных вычислительных ресурсов. Очевидно, что предпочтительная сфера применения этих МК — «медленные» прецизионные измерения.

Таблица 1. Аналоговые микроконтроллеры семейства ADuC8xx

Устройство Производительность ЦПУ, MIPS Размер Flash-памяти, кбайт Размер SRAM, байт Кол-во линий GPIO Разрешение АЦП, бит Скорость преобразований АЦП, SPS Кол-во каналов АЦП Прочее Кол-во выходов
12-разрядного ЦАП
ADUC845 12 62 2,304K 34 24 1,37K 10 ШИМ 1
ADUC847 12 62 2,304K 34 24 1,37K 10 ШИМ 1
ADUC848 12 62 2,304K 34 16 1,37K 10 ШИМ 1
ADUC841 20 62 2,304K 34 12 400K 8 ШИМ 2
ADUC842 16 62 2,304K 34 12 400K 8 ШИМ 2
ADUC843 16 62 2,304K 34 12 400K 8 ШИМ -
ADUC831 1,3 62 2,304K 34 12 247K 8 ШИМ 2
ADUC832 1,3 62 2,304K 34 12 247K 8 ШИМ 2
ADUC834 1 62 2,304K 34 24 105 4 ШИМ 1
ADUC836 1 62 2,304K 34 16 105 4 ШИМ 1
ADUC814 1,3 8 256 17 12 247K 6 - 2
ADUC816 1,3 8 256 34 16 105 4 - 1
ADUC824 1 8 256 34 24 105 4 - 1
ADUC812 1,3 8 256 34 12 200K 8 - 2

Устройства семейства ADuC7xxx [3] с высокопроизводительным 32-разрядным ядром (табл. 2), как правило, имеют «быстрый», но не столь точный АЦП (кроме микроконтроллеров AduC706x, которые содержат 24-разрядный АЦП. — Прим. ред.). Предпочтительная сфера применения этих МК — «быстрые» потоковые измерения, к прецизионности которых не предъявляется повышенных требований.

Таблица 2. Аналоговые микроконтроллеры семейства ADuC7xxx

Устройство Производительность ЦПУ, MIPS Размер Flash-памяти, кбайт Размер SRAM, кбайт Кол-во линий GPIO Разрешение АЦП, бит Кол-во каналов АЦП Скорость преобразований АЦП, SPS Прочее Кол-во выходов
12-разрядного ЦАП
ADUC7019 40 62 8,192 14 12 5 1M - 3
ADUC7020 40 62 8,192 14 12 5 1M - 4
ADUC7021 40 62 8,192 13 12 8 1M - 2
ADUC7022 40 62 8,192 13 12 10 1M - -
ADUC7023 40 62 8,192 20 12 12 1M ШИМ 4
ADUC7024 40 62 8,192 30 12 10 1M ШИМ 2
ADUC7025 40 62 8,192 30 12 12 1M ШИМ -
ADUC7026 40 62 8,192 40 12 12 1M ШИМ 4
ADUC7027 40 62 8,192 40 12 16 1M ШИМ -
ADUC7028 40 62 8,192 40 12 8 1M - 4
ADUC7029 40 62 8,152 22 12 7 1M - 4
ADUC7033 20 96 6,144 9 16 3 8K - -
ADUC7034 20 32 4,096 9 16 2 8K - -
ADUC7036 20 96 6,144 9 16 2 8K - -
ADUC7039 20 64 4,096 5 16 3 1K - 0
ADUC7060 10 32 4,096 14 24 10 8K 14-разр. DAC, ШИМ -
ADUC7061 10 32 4,096 8 24 10 8K 14-разр. DAC, ШИМ -
ADUC7121 40 126 8,192 32 12 9 1M - 4
ADUC7122 40 126 8,192 32 12 13 1M - 4
ADUC7124 40 126 32 30 12 12 1M - 2
ADUC7126 40 126 32 40 12 16 1M ШИМ 4
ADUC7128 40 126 8,192 28 12 10 1M 10-разр. DAC, DDS, ШИМ -
ADUC7129 40 126 8,192 40 12 12 1M DDS -

Недавно появившееся семейство ADuCM36x [4], судя по данным таблицы 3, имеет оптимальное сочетание возможностей как периферии (прежде всего точность и скорость АЦП), так и ядра (разрядность и производительность). Таким образом, МК этой серии можно использовать в «быстрых» приложениях для высокоточных измерений. От МК ADuC7xxx устройства ADuCM36x выгодно отличаются существенно большей экономичностью.

Таблица 3. Аналоговые микроконтроллеры семейства ADuCM36x

Устройство Производительность ЦПУ, MIPS Размер Flash-памяти, кбайт Размер SRAM, кбайт Кол-во линий GPIO Разрешение АЦП, бит Кол-во аппаратных узлов АЦП Скорость преобразований АЦП, KSPS Кол-во каналов АЦП Прочее Кол-во выходов 12-разрядного ЦАП
ADUCM360 20 128 8 19 24 2 3,906 11 ШИМ 1
ADUCM361 20 128 8 19 24 1 3,906 11 ШИМ 1

Выбор ядра Cortex-M3 при разработке микросхемы производителем был обусловлен именно наилучшим соотношением производительности и энергопотребления. Однако скромный набор цифровой периферии и сравнительно небольшое количество линий GPIO все же ограничивает применение ADuCM36x приложениями малой и средней сложности.

Описание микроконтроллера ADuCM360

Структурная схема МК ADuCM360 показана на рис. 1. Главный узел устройства — прецизионный многоканальный 24-разрядный ΔΣ-АЦП (у ADuCM360 — сдвоенный, у ADuCM361 — одиночный), имеющий входной аналоговый мультиплексор, что позволяет коммутировать на входы АЦП любые из 11 линий внешних аналоговых входов, объединяя их в дифференциальные пары или оставляя асимметричными. В АЦП поддерживается режим автоматически производимой «переполюсовки» (chop) симметричных входов в паре при преобразованиях для компенсации внешнего смещения. Помимо внешних, у АЦП есть и несколько внутренних входов, позволяющих измерять напряжение питания МК, температуру (с выхода встроенного датчика) и напряжение с выхода встроенного узла ЦАП.

Структурная схема МК ADuCM360

Рис. 1. Структурная схема МК ADuCM360

В каждом АЦП имеется программируемый усилитель входных аналоговых сигналов, аналоговый буфер для улучшения входных характеристик измерителя и программируемые аппаратные фильтры на выходе ΔΣ-модуляторов, улучшающие помехоустойчивость измерений. Источник опорного напряжения (ИОН) при преобразованиях можно использовать встроенный или подключать к МК внешний (до двух внешних источников одновременно). Помимо этого, на кристалле находятся программируемые источники тока возбуждения внешних (пассивных) датчиков, а также источник напряжения смещения. Эти источники можно программно подключать к внешним входам АЦП. Кроме АЦП, МК ADuCM36x содержат узел одноканального 12-разрядного ЦАП по напряжению.

Столь внушительный перечень аналоговых функций обслуживается 32-разрядным процессорным ядром ARM Cortex-M3 с максимальной тактовой частотой 16 МГц (при удельной производительности ядра 1,25 MIPS/МГц обеспечивается предельная производительность 20 MIPS), 12-канальным контроллером DMA и векторизованным контроллером прерываний. На ядро можно возлагать задачи по обработке результатов преобразований (для чего в МК имеется аппаратная поддержка цифрового накопления/усреднения и нескольких типов калибровок), а также по организации взаимодействия с пользовательской средой через набор традиционных интерфейсов: UART, I2C, 2xSPI, 19 линий GPIO, модуль 6-канального ШИМ и два таймера-счетчика общего назначения.

МК семейства ADuCM36x оптимизированы для устройств с батарейным питанием. Удельное энергопотребление ядра МК составляет 290 мкА/МГц, включая потребление встроенных Flash-памяти и SRAM. В активном режиме на максимальной тактовой частоте 16 МГц с включенной периферией МК потребляет от единственного источника +3,3 В ток 5,5 мА, а на тактовой частоте 500 кГц — 1 мА. В режиме Power-down ток потребления МК составляет около 4 мкА.

МК поставляются в 48-выводном корпусе LFCSP, они работоспособны в диапазоне питающих напряжений от 1,8 до 3,6 В в температурном диапазоне от -40 до +125 °C.

Рекомендуемые производителем области применения ADuCM36x: приборы учета энергоресурсов (теплосчетчики, расходомеры), автомобильная техника (контроль состояния аккумуляторов), промышленность (интеллектуальные датчики и системы сбора данных, прецизионные измерители в системах контроля параметров), передача данных (оптические приемопередатчики).

Поддержка разработки приложений на базе ADuCM36x на момент написания этой статьи была представлена следующими аппаратными и программными средствами. В качестве основного аппаратного средства разработки/отладки предлагается сравнительно недорогой стартовый комплект EVAL-ADUCM360QSPZ [5, 8] (рис. 2), включающий в себя универсальную оценочную плату с МК ADuCM360 с распаянными на контактные площадки выводами (EVAL-ADUCM360MKZ Board), плату-переходник для программирования/отладки приложений на базе ADuCM36x (ADUCM360 USB-SWD/UART-EMUZ), а также USB-JTAG программатор (SEGGER J-Link Lite board). Программирование/отладка МК ADuCM360 осуществляются через USB-JTAG программатор из ПК хоста. Записанное в память МК на заводе ПО внутрисхемного загрузчика (kernel) поддерживает режимы внутрисхемного программирования встроенной Flash-памяти по двухпроводному последовательному интерфейсу SW и через UART МК, а также эмуляции по последовательному интерфейсу. В состав стартового комплекта входят программные библиотеки всех периферийных узлов и примеры демопроектов, использующих эти библиотеки.

Стартовый комплект EVAL-ADUCM360QSPZ

Рис. 2. Стартовый комплект EVAL-ADUCM360QSPZ

Для того чтобы ускорить процесс разработки, ADI выпускает оценочные комплекты, предназначенные для реализации конкретных приборов. Вместо оценочной платы «общего назначения» EVAL-ADUCM360MKZ в составе стартового комплекта можно использовать узкоспециализированную плату EVAL-CN0300-EB1Z Board, которая представляет собой готовый интеллектуальный датчик — монитор контроллера температуры с интерфейсом термопары и поддержкой промышленного интерфейса «токовая петля 4-20 мА». Для проектирования прецизионного датчика с возможностью питания от «токовой петли 4-20 мА» передачи данных через HART-протокол можно воспользоваться оценочным комплектом DEMO-AD5700D2Z. Он представляет собой физическую реализацию схемы CN0267 из раздела "Circuits From The Lab" сайта Analog Devices [7]. В состав DEMO-AD5700D2Z входят микроконтроллер ADuCM360, выполняющий задачи ввода сигнала с датчика и его первичной обработки, 16-разрядный ЦАП с токовым выходом AD5421 и HART-модем AD5700.

Другая узкоспециализированная плата EVAL-ADuCM360TCZ Board также представляет собой готовый интеллектуальный датчик — монитор контроллера температуры с интерфейсом термопары и встроенным преобразователем интерфейсов UART-USB, через который она и подключается к ПК.

Программная поддержка МК семейства ADuCM36x (и USB-JTAG программатора J-Link Lite) реализована в интегрированных средах разработки/отладки (IDE) μVision4 (V4.51) от Keil и IAR Embedded Workbench (V6.402) от IAR.

Описание макета измерителя

Для практического исследования МК ADuCM360 на предмет оценки возможности его применения в измерительных приборах, а также отладки измерительных алгоритмов авторы изготовили макет базового измерителя, внешний вид которого показан на рис. 3, а структурная схема — на рис. 4.

Макет измерителя напряжения на базе ADuCM360

Рис. 3. Макет измерителя напряжения на базе ADuCM360


Структурная схема измерителя напряжения

Рис. 4. Структурная схема измерителя напряжения

В качестве пользовательских интерфейсов в макете использованы кнопки управления (для ввода команд пользователя), символьный 4-строчный ЖКИ, два индикаторных светодиода (для отображения информации о результатах преобразований, режимах и состояниях измерителя) и стандартный интерфейс RS-232, реализованный с помощью микросхемы — преобразователя уровней MAX3223 (DD2), подключенной к порту UART МК. Этот же интерфейс используется для внутрисхемного программирования встроенной Flash-памяти МК через ПК, о чем будет подробнее рассказано ниже. Отрицательное относительно общего провода напряжение, вырабатываемое микросхемой DD2, помимо прямого назначения — формирования сигналов интерфейса RS-232, поступает также через R12 на ЖКИ HG1 для повышения контрастности его изображения. Необходимый уровень контрастности устанавливается подстроечным резистором R12, а необходимый уровень подсветки ЖКИ — подбором сопротивления R13.

Макет содержит стандартный разъем, предназначенный для подключения средств программирования/отладки из комплекта EVAL-ADUCM360QSPZ. Помимо интерфейсных цепей, к МК подключен внешний источник опорного напряжения — микросхема прецизионного ИОН AD780AN (DA3), имеющего температурную стабильность 7 ppm/°C. Выбор значения выходного напряжения DA3 осуществляется с помощью перемычки на разъеме X2: при установленной перемычке выходное напряжение ИОН равно 3,0 В, при снятой — 2,5 В.

Светодиоды подключены к выходам МК через транзисторные ключи, поскольку низкая нагрузочная способность линий GPIO (максимальный ток нагрузки равен 1 мА) не позволяет подключать их непосредственно. Питание макета осуществляется от внешнего источника постоянного напряжения +9-12 В, подключаемого ко входу первичного стабилизатора DA1 напряжения +6 В. Напряжение от внешнего источника должно иметь уровень пульсаций, не превышающий нескольких милливольт. Дополнительную фильтрацию помех по питанию обеспечивает НЧ-фильтр C1, L1, C2, C3. Катушка L1 представляет собой ферритовое кольцо, обмотанное несколькими витками одножильного медного провода (мы взяли его из старой материнской платы ПК).

Напряжение с выхода DA1 используется для питания ИОН DA3, а также поступает на вход вторичного стабилизатора напряжения DA2, напряжение +3,3 В с выхода которого необходимо для питания цифровой части МК (напряжение DVDD). Для получения напряжения питания аналоговой части МК (AVDD) напряжение с выхода DA2 дополнительно пропускается через НЧ-фильтр L3, R3, C8, C9. Катушка L3 представляет собой проводник, продетый сквозь феррито-вую бусинку или кольцо. Аналогичный НЧ-фильтр используется для подачи питания на микросхему ИОН DA3.

В документации производителя на микроконвертеры подчеркивается, что при разработке практических конструкций с их использованием для достижения максимального возможного разрешения аналого-цифровых преобразований необходимо, как и в случае применения любого другого высокоточного АЦП, корректно выполнить заземление в системе и правильно выбрать топологию печатной платы. В предлагаемом макете реализован один из нескольких возможных подходов к топологии и заземлению, рекомендуемых производителем.

Цифровые компоненты устройства сгруппированы на плате макета отдельно от аналоговых. Они расположены на разных частях платы таким образом, чтобы цифровые «земляные» (возвратные) токи не протекали вблизи аналоговых «земляных» токов. Сам МК размещен посередине между цифровой и аналоговой областями платы. Единственная шина заземления выполнена в виде сплошного проводящего слоя фольги. На принципиальной схеме этой шине соответствует точка соединения аналоговой и цифровой «земли» (точка GND на схеме, приведенной на рис. 5). С этой шиной максимально короткими и толстыми проводниками соединены общие провода всех стабилизаторов напряжения в схеме. Заметим, что сама микросхема ADUCM360 имеет ножку только аналоговой «земли» AGND (вывод 16 DD1), а роль ножки цифровой «земли» (DGND) у МК выполняет металлическая основа подложки кристалла, которая в схеме на рис. 5 обозначена как PADDLE (вывод 49 DD1).

Принципиальная схема измерителя напряжения

Рис. 5. Принципиальная схема измерителя напряжения

Подключения цепей МК в схеме к «земляной» шине выполнены проводниками возможно большого сечения и наименьшей длины. Это же относится и к проводникам, соединяющим выходы ИОН DA3 с входами подключения внешнего ИОН МК VREF+, VREF- (выводы 14, 15 DD1). В качестве линий подачи входного измеряемого напряжения в схеме выбраны аналоговые входы AIN0, AIN1 (выводы 8, 9 DD1), снабженные внешними фильтрующими RC-цепочками (R4, C13, R5, C14). Эти входы сконфигурированы в управляющей программе МК как дифференциальная пара.

Описание программы для измерителя

Для исследования характеристик главного узла МК — модуля ΔΣ-АЦП — была написана несложная управляющая программа, реализующая функции измерителя постоянного напряжения. Исходный текст этой программы содержится в проекте adc_aducm, подготовленном в среде μVision4 V4.51. Архив проекта доступен для скачивания на сайте компании «ЭЛТЕХ» (www.eltech.spb.ru). Алгоритм работы программы приведен на рис. 6.

Алгоритм работы программы

Рис. 6. Алгоритм работы программы

В качестве основы был использован проект adc из доступного на сайте производителя МК набора примеров для ADuCM360/1. Программа позволяет осуществлять циклические преобразования (измерения входного напряжения) и все виды калибровок для модуля ADC1 МК в выбранном входном канале (AIN1-AIN0), в выбранном диапазоне усиления входных измеряемых сигналов (PGA GAIN = 1, то есть в диапазоне от 0 до напряжения используемого ИОН), в режиме представления результата (биполярном) и при частоте обновления выходных данных АЦП (3,75 Гц). Есть также возможность выбора «на лету» в качестве ИОН для АЦП: встроенного ИОН МК (1,2 В), внешнего ИОН DA3 (3 В) или источника напряжения питания аналоговой части МК AVDD (3,3 В). Все приведенные параметры настройки АЦП можно изменить путем редактирования в программе функции инициализации АЦП ADC1INIT().

Результат каждого преобразования индицируется на ЖКИ в десятичном представлении со знаком полярности в двух различных форматах: в вольтах (с десятичными разрядами после запятой) и в разрядах АЦП. Заметим, что биполярный режим представления результата не означает, что АЦП может измерять напряжения, отрицательные относительно общего провода AGND. Это просто означает, что напряжение на одном из входов дифференциальной пары может быть как больше, так и меньше напряжения на другом входе на величину, не превышающую абсолютного значения опорного напряжения VREF. При этом напряжение на каждом из входов не должно выходить за пределы абсолютного диапазона входных напряжений АЦП (от AGND до AVDD).

Обновление показаний ЖКИ производится после каждого преобразования АЦП с заданным в программе интервалом между отдельными преобразованиями, равным 0,5 с. Синхронизация ядра и всех остальных узлов МК в программе задана от внутреннего генератора МК с частотой 16 МГц. Процедуры аналого-цифрового преобразования и вывода информации на ЖКИ и светодиоды в программе разнесены по времени, с тем чтобы перепады цифровых сигналов на линиях подключения ЖКИ и светодиодов не ухудшали реальное разрешение АЦП, ограниченное шумами.

Запуск преобразования АЦП осуществляется в обработчике периодических прерываний от одного из таймеров МК (TIMER0). При запуске каждого рабочего (некалибровочного) преобразования загорается светодиод HL2, а при завершении преобразования он гаснет. При запуске любой калибровки загорается светодиод HL3, а при ее завершении он гаснет. По готовности результата преобразования в программе генерируется прерывание от АЦП, в обработчике которого устанавливается программный флаг готовности результата, опрос которого, обработка и вывод полученных данных на ЖКИ осуществляются в главном цикле основной программы.

При работе программа опрашивает состояние пяти кнопок. Их опрос производится в обработчике периодических прерываний от системного таймера МК (SysTick), входящего в состав процессорного ядра Cortex-M3. Запуск калибровок осуществляется из главного цикла основной программы. Во время калибровок рабочие преобразования не проводятся.

При нажатии на кнопку SB2 «Выбор ИОН» можно выбрать используемый ИОН по кольцу из приведенного выше перечня. При этом в правой части нижней строки ЖКИ отображается аббревиатура текущего выбранного ИОН: «INT», «EXT» или «AVD». При нажатии на кнопку SB3 «OFFS_I» производится внутренняя калибровка «нуля» (internal zero-scale), при этом в левой части нижней строки ЖКИ отображается надпись «OFFS_I». При нажатии на кнопку SB5 «GAIN_I» производится внутренняя калибровка верхнего предела шкалы (internal full-scale) с отображением на ЖКИ одноименной надписи. При нажатии на кнопку SB4 «OFFS_S» осуществляется системная калибровка «нуля» (system zero-scale) с отображением на ЖКИ одноименной надписи. Заметим, что перед проведением системной калибровки «нуля» на входы выбранного канала АЦП необходимо «вручную» подать системное напряжение «нуля», то есть попросту закоротить их между собой. При нажатии на кнопку SB6 «GAIN_S» производится системная калибровка верхнего предела (system full-scale) с отображением на ЖКИ одноименной надписи. Заметим, что перед проведением системной калибровки верхнего предела на входы выбранного канала необходимо «вручную» подать системное напряжение верхнего предела, то есть напряжение выбранного в качестве ИОН источника. Напряжения ИОН могут быть сняты в схеме с соответствующих разъемов: X7 «INT», X5 «EXT» или X4 «AVDD».

В пользовательском руководстве по ADuCM360/1 [6] сказано, что при проведении внутренних калибровок «нуля» и верхнего предела на выбранные входы АЦП внутри МК автоматически подаются нулевое напряжение и напряжение верхнего предела соответственно. Однако на практике оказалось, что у используемого авторами экземпляра ADuCM360 внутренняя калибровка «нуля» производилась нормально, а вот запуск внутренней калибровки верхнего предела фактически приводил к запуску системной калибровки верхнего предела. То есть микросхема почему-то использовала в качестве верхнего предела внешнее напряжение, присутствующее на выбранных входах АЦП в момент запуска калибровки. Попытки добиться «штатного» проведения этой калибровки без участия внешнего напряжения путем варьирования режимов и настроек АЦП результата не дали. В документации, касающейся ошибок и аномалий ADuCM360/1, представленной на сайте производителя, упоминания указанной ситуации найти не удалось.

После сброса МК в двух верхних строках ЖКИ начинают отображаться два десятичных числа, каждое из которых будет соответствовать входному измеряемому напряжению, представленному в вольтах и разрядах АЦП соответственно. При этом младшие несколько разрядов обоих чисел будут хаотически меняться от преобразования к преобразованию, ограничивая, таким образом, реальное разрешение АЦП шумами.

Закоротим между собой внешние концы проводников, подключенных к выбранным входам АЦП AIN0 и AIN1. Если считать, что меняющиеся младшие разряды отражают влияние собственных шумов АЦП, то число неизменных нулевых старших разрядов как раз и будет отражать реальное разрешение данного АЦП. Другими словами, АЦП интерпретирует внешнее короткое замыкание своих дифференциальных входов как нулевое входное напряжение с точностью до нескольких младших разрядов. Отображаемые на ЖКИ значения дают возможность количественно оценить результаты проведения всех доступных калибровок. В исследуемом макете до проведения калибровок величина диапазона шумовых флюк-туаций составляла прядка 300 мкВ.

Нажмем на кнопку «OFFS_I», запустив внутреннюю калибровку «нуля». На время проведения калибровки программа прекращает преобразования, а после ее окончания запускает их вновь. После завершения этой калибровки отображаемый на ЖКИ результат остается практически неизменным, поскольку эта калибровка не компенсирует влияние на результат внешних входных цепей АЦП, вносящих основную составляющую в шум. При нулевых старших разрядах хаотически меняются три младших разряда значения напряжения в вольтах (единицы, десятки и сотни микровольт) и пять младших разрядов значения результата АЦП в битах.

Теперь нажмем на кнопку «OFFS_S», запустив системную калибровку «нуля». После ее завершения в значении результата будут хаотически меняться только разряды, соответствующие единицам и десяткам микровольт, то есть реальное разрешение АЦП теперь составляет порядка десятков мкВ.

Проведем системную калибровку верхнего предела шкалы. Для этого разомкнем перемычку между входами АЦП и подключим отрицательный дифференциальный вход AIN0 к аналоговой «земле» AGND, а положительный AIN1 — к разъему X7 «INT» (1,2 В). На ЖКИ отобразятся результаты, близкие к 1,200000 В и к 268 435 456 разрядам (268 435 456 = 228 — верхний предел шкалы АЦП). После нажатия на кнопку «GAIN_S» отображаемые результаты максимально приблизятся к указанным значениям.

После проведения перечисленных калибровок можно окончательно оценить реальное разрешение АЦП. Для этого снова закоротим между собой проводники на входах AIN0 и AIN1. Результат мало отличается от указанного выше, поскольку проведение системной калибровки верхнего предела изменяет абсолютное значение результата (приводит его к выбранным пределам), но не улучшает реального разрешения.

Практика работы с макетом показала, что зачастую две-три системные калибровки «нуля», проведенные подряд с интервалами в несколько секунд, в итоге дают лучший результат, чем однократная калибровка. Кроме того, в ходе экспериментов было установлено очевидное влияние на результаты калибровки «нуля» температуры окружающей среды. Так, при температуре +26 °C после проведения системной калибровки «нуля» величина диапазона шумовых флюктуаций (отличие показаний напряжения ЖКИ от нуля) составляла порядка 150 мкВ, а при температуре +32 °C — порядка 30 мкВ.

Выбор в качестве источника опорного напряжения внешнего прецизионного ИОН AD780AN дает примерно такое же значение реального разрешения АЦП, как и для внутреннего ИОН: порядка десятков мкВ при наличии аналогичной температурной зависимости. Заметим, что полученные результаты существенно хуже заявленного производителем для этого диапазона измерений значения разрешения, равного 1 мкВ [6]. Это несоответствие, очевидно, можно объяснить отсутствием экранировки входов АЦП и цепей подачи внешнего опорного напряжения. Возможно, результат был бы лучше при наличии экранировки всей схемы.

Абсолютные значения результатов, полученные при измерениях одного и того же ненулевого напряжения с использованием разных ИОН, будут несколько отличаться друг от друга. Это объясняется тем, что опорные напряжения в программе принимаются равными строго 1,2, 3,0 и 3,3 В, а на самом деле они могут отличаться от указанных значений в пределах допустимых отклонений, заявленных в документации на соответствующие микросхемы. Например, для встроенного ИОН ADuCM360/1 этот допуск составляет ±0,1% [4], для ИОН AD780AN — ±0,2% при напряжении 2,5 В и ±0,16% при напряжении 3,0 В. Чтобы устранить это расхождение, необходимо эталонным вольтметром с разрешением не менее пяти десятичных разрядов после запятой на пределе «единицы вольт» и погрешностью на этом пределе не хуже двух-трех единиц младшего разряда измерить указанные напряжения и полученные значения в вольтах поместить в константы U_INT, U_EXT и U_AVDD, находящиеся в заголовочном файле adc_aducm.h. В крайнем случае при коррекции констант можно обойтись и без измерения напряжений, а просто привести измерения со всеми ИОН к единому результату по одному из них (с самым маленьким допуском).

Для этого следует использовать формулу, по которой программа вычисляет входное измеряемое напряжение:

Vизм = (VREF)/228)×ADC_DAT,

где Vизм — входное измеряемое напряжение в вольтах. Оно отображается в первой строке ЖКИ. ADC_DAT — результат АЦП в битах, возвращаемый при программном чтении регистра результата АЦП ADC1DAT. Он отображается во второй строке ЖКИ. VREF — значение выбранного опорного напряжения в вольтах. В программе оно содержится в константах типа float: U_INT=1.2, U_EXT=3.0, U_AVDD=3.3.

Выявленный выше дефект АЦП, заключающийся в невозможности корректного проведения внутренней калибровки верхнего предела, существенно осложняет пользовательскую калибровку измерителя. Если в конечном устройстве к измерительному каналу АЦП постоянно подключен какой-то внешний датчик, то после каждого включения питания пользователю придется вручную отключать его, коммутировать на вход канала напряжение верхнего предела, проводить системную калибровку, а затем снова подключать датчик. Одно из возможных решений этой проблемы состоит в следующем.

Системные калибровки «нуля» и верхнего предела можно произвести однократно в начале эксплуатации измерителя, а после их проведения содержимое калибровочных регистров АЦП по команде пользователя сохранить во Flash-памяти МК. При последующих включениях питания устройства содержимое соответствующих ячеек Flash-памяти автоматически или по команде пользователя может быть загружено в соответствующие калибровочные регистры АЦП. Заметим также, что калибровки (и запись во Flash-память полученных в результате значений) можно произвести при оптимальной (с точки зрения минимизации величины диапазона шумовых флюктуаций) температуре.

Массив Flash-памяти МК ADuCM360/1 размером 128 К организован как 32 блока. Каждый блок содержит восемь страниц, а каждая страница имеет размер 512 байтов. Содержимое Flash-памяти МК доступно для непосредственной записи из пользовательской программы со следующими ограничениями:

  • Поддерживается запись только 32-разрядных значений.
  • Перед записью содержимое Flash-памяти должно быть стерто, причем поддерживаются только постраничное стирание или стирание всего массива памяти.
  • Ресурс количества циклов стирания/записи составляет минимум 10 000 циклов [4].

Исходный текст управляющей программы, реализующей измеритель напряжения с возможностью сохранения калибровок во Flash-памяти МК, содержится в проекте adc_aducm_f, архив которого доступен для скачивания на сайте «ЭЛТЕХ» (www.eltech.spb.ru). Параметры и пользовательский интерфейс этого измерителя аналогичны предыдущему, но в качестве ИОН для АЦП программа использует только внешний ИОН DA3 (3 В). Кроме того, интерфейс не поддерживает возможность проведения внутренних калибровок АЦП. Для запуска системных калибровок «нуля» и верхнего предела, как и в предыдущем случае, используются кнопки SB4 «OFFS_S» и SB6 «GAIN_S». Эти калибровки достаточно произвести однократно в начале эксплуатации устройства.

При нажатии на кнопку SB2 текущее содержимое калибровочных регистров АЦП «нуля» (ADC1OF) и верхнего предела (ADC1EXTGN) записывается во Flash-память на страницу с адресом 0x1FC00. Предварительно программа производит стирание этой страницы, используя функции работы с Flash-памятью из библиотеки FlashEraseWrite.c. Процесс стирания/записи Flash-памяти индицируется на ЖКИ надписью «SAVE_K», а его завершение — надписью «_OK_». При нажатии на кнопку SB3 сохраненные ранее во Flash-памяти калибровочные значения копируются в калибровочные регистры ADC1OF и ADC1EXTGN, что сопровождается последовательным выводом на ЖКИ надписей «LOAD_K» и «__OK__».

Работа с программной средой μVision4 V4.51

Немного о разработке приложений для МК ADuCM360/1 в среде μVision4 V4.51. Разработка приложения начинается с создания нового проекта. В меню главного окна IDE μVision4 следует выбрать Project → New μVision Project..., затем в открывшемся стандартном диалоговом окне дерева файлов и каталогов выбрать Create New Project. Рекомендуется размещать все файлы каждого проекта в отдельной папке. После создания папки проекта и задания его имени μVision4 создаст новый файл проекта с этим именем и расширением .uvproj, который содержит сведения о заданной по умолчанию целевой системе, а также заданные по умолчанию имена групп файлов.

Следующий шаг — это выбор из базы поддерживаемых IDE μVision4 устройств требуемого МК. Когда IDE описанным выше образом создает новый проект, то вслед за созданием проектного файла сразу же автоматически открывается диалоговое окно Select Device for Target, показанное на рис. 7. Это окно отображает базу поддерживаемых μVision4 устройств. В нашем случае выбираем ADuCM360.

Диалоговое окно выбора МК целевой системы Select Device for Target

Рис. 7. Диалоговое окно выбора МК целевой системы Select Device for Target

Следующим шагом является добавление к созданному проекту так называемого кода запуска выбранного ранее МК. Для любой встроенной программы всегда необходимо наличие некоторого кода начальной низкоуровневой инициализации МК, который должен соответствовать требованиям, задаваемым в приложении. Помимо инициализации МК целевой системы, код запуска выполняет также инициализацию некоторых параметров компилятора IDE μVision4. Для удобства модификации кода запуска при работе с проектом его рекомендуется хранить в отдельном файле. В общем случае разработчик может написать код запуска вручную, как и остальной пользовательский код. Однако для облегчения написания встроенных программ IDE μVision4 при создании проектов предлагает пользователю скопировать в его новый проект уже готовый код запуска, соответствующий данному МК.

Диалоговое окно предложения копирования готового кода запуска в новый проект показано на рис. 8. Рекомендуется ответить на вопрос μVision4 щелчком на кнопке Дa, после чего к проекту будет автоматически добавлена папка с именем по умолчанию Source Group1, содержащая файл с готовым кодом запуска, имеющий по умолчанию имя startup_ADuCM360.s.

Предложение копирования готового кода запуска в отдельный файл нового проекта

Рис. 8. Предложение копирования готового кода запуска в отдельный файл нового проекта

Следующий шаг разработки приложения — создание файла (файлов) с исходным текстом встроенной программы. Пользователь может создать новый исходный файл, выбрав в меню File → New... После этого откроется пустое окно редактора, в котором можно набрать исходный текст вручную или скопировать его из буфера. Когда пользователь сохраняет созданный файл с помощью диалогового окна File → Save as... как файл с расширениями .c, .h, IDE μVision4 осуществляет цветовое подсвечивание синтаксиса кода на языке C.

Как только пользователь создал файл с исходным текстом, он может добавить этот файл к своему проекту. IDE μVision4 предлагает несколько способов такого добавления. Например, можно выбрать курсором позицию табуляции всего проекта (верхнего уровня проекта) в окне Project, а затем щелчком правой кнопки мыши открыть для этой группы контекстное меню, как показано на рис. 9. Затем выбрать в меню опцию Add Group..., после чего в проекте будет создана новая группа, которой можно дать какое-то имя. Если выбрать курсором позицию табуляции этой группы и щелчком правой кнопки открыть для этой группы контекстное меню, то в нем будет доступна опция Add Files to Group., при выборе которой откроется стандартное диалоговое окно файлов и каталогов. Если выбрать в этом окне нужный файл и щелкнуть на кнопке Add, то в результате этот файл будет включен в состав проекта и его позиция табуляции появится в окне Project ниже позиции уровня проекта. Если дважды щелкнуть на имени этого файла в окне Project, то он откроется для просмотра и редактирования на странице Text Editor стандартного окна редактора. В итоге все созданные и включенные в состав проекта группы и файлы отобразятся в окне Project, как показано на рис. 10.

Контекстное меню для уровня проекта

Рис. 9. Контекстное меню для уровня проекта


Все созданные и включенные в состав проекта группы и файлы

Рис. 10. Все созданные и включенные в состав проекта группы и файлы

Входящие в проект файлы пользователь может объединять в группы и помещать их в разные папки и другим способом. Выбор в меню опции Project → Manage → Components, Environment, Books... приведет к открытию страницы компонентов проекта Project Components диалогового окна Components, Environment and Books. С помощью средств этой страницы пользователь может создавать, удалять или переносить объекты и таким образом группировать файлы в папки в соответствии с логикой их содержимого. Это рекомендуемая практика построения проекта, повышающая степень его структурированности и облегчающая ориентацию в нем разработчика.

В составе одного проекта в IDE μVision4 могут быть заданы несколько различных целевых систем, например целевая система для симуляции выполнения пользовательского кода в ПК и целевая система для записи кода во Flash-память МК. При этом опции для каждой из них можно задавать независимо. Для добавления в проект новых целевых систем в дополнение к заданной по умолчанию (Target 1) используется окно Components, Environment and Books...

Диалоговое окно задания опций целевой системы Options for Target открывается с помощью соответствующего значка на панели инструментов IDE μVision4 или путем выбора в меню Project → Options for Target. Это окно имеет несколько страниц, каждая из которых содержит специфический набор настроек, например параметры компилятора C/C++ (C/C++), компоновщика (Linker), отладчика (Debug), перечень генерируемых в проекте выходных файлов (Output) и т. д. В рассмотренных выше проектах все необходимые опции целевой системы уже заданы.

После этого можно перейти к формированию проекта, под которым понимается процесс компиляции его исходных файлов, а также их последующей компоновки (линковки). Процесс запускается нажатием на кнопку Build панели инструментов или выбором в меню Project → Build Target. В ходе формирования проекта μVision4 отображает ошибки, предупреждения и любые другие сообщения в окне Build Output. Если дважды щелкнуть на сообщении об ошибке, то в окне редактора откроется соответствующий исходный файл, а курсор будет указывать местонахождение в нем ошибочной или некорректной строки. В случае безошибочного формирования проекта IDE μVision4 сообщит об успешном завершении формирования, как показано на рис. 11.

Результат безошибочного формирования проекта

Рис. 11. Результат безошибочного формирования проекта

После формирования проекта разработчик может изменить существующий исходный текст или добавить новые исходные файлы к проекту, а затем повторно сформировать проект. Если при этом использовать кнопку Build или опцию меню Project → Build Target, то повторно откомпилированы и скомпонованы будут только измененные или новые исходные файлы. При использовании кнопки Rebuild или опции меню Project → Rebuild all target files будут откомпилированы и скомпонованы заново все исходные файлы, независимо от наличия модификаций.

Как уже упоминалось, программирование встроенной Flash-памяти ADuCM360/1 может быть осуществлено двумя способами: с помощью USB-JTAG-программатора и через порт UART МК, снабженный внешней микросхемой — формирователем уровней RS-232. Второй способ обеспечивает минимальные затраты аппаратных средств. Программная поддержка этого способа реализована производителем МК с помощью компьютерной программы-загрузчика CM3WSD, которую можно бесплатно загрузить по ссылке со страницы [7]. Загрузчик позволяет производить стирание всего массива Flash-памяти МК, ее простое программирование, программирование с верификацией (сравнением) и просто верификацию содержимого памяти с содержимым заданного в программе файла «прошивки». Программа поддерживает только один формат файлов прошивки — с расширением .hex. Заметим, что для генерации выходного hex-файла при формировании проекта в IDE μVision4 необходимо на странице Output окна задания опций целевой системы Options for Target отметить галочкой опцию Create HEX File.

Скорость обмена с МК в программе CM3WSD может быть выбрана пользователем из стандартного ряда. Пользовательского задания скорости обмена модуля UART МК при этом не требуется, так как он автоматически конфигурируется в ходе выполнения протокола последовательной загрузки.

Загрузка прошивки приложения в МК осуществляется в следующем порядке. Устройство с МК подключается через интерфейс RS-232 к COM-порту ПК прямым (не нульмодемным) кабелем, а в окне запущенной программы CM3WSD необходимо указать: номер используемого COM-порта ПК, путь к hex-файлу прошивки, скорость обмена и требуемую операцию с Flash-памятью МК. Затем нужно однократно щелкнуть на кнопке Start программы, после чего она будет ожидать перевода МК в режим последовательной загрузки. Перевод МК в этот режим производится в момент включения его питания или генерации внешнего сброса при внешнем низком уровне на линии порта P2.2. В нашем макете для перехода в режим последовательной загрузки следует нажать на кнопку SB1 «Сброс», удерживая при этом в нажатом состоянии кнопку SB4. При переходе в режим последовательной загрузки инициируется резидентная подпрограмма загрузчика, размещенная в области Flash-памяти МК kernel space, которая и выполняет требуемую операцию с памятью. Процесс записи/верификации индицируется нарастающей шкалой в нижней части окна программы CM3WSD, как показано на рис. 12.

Окно программы-загрузчика CM3WSD

Рис. 12. Окно программы-загрузчика CM3WSD

Примечательно, что при записи пользовательского кода во Flash-память МК с помощью операций программы CM3WSD Program, Program and Verify загрузчик производит предварительное стирание не всего массива памяти, а только необходимого количества ее страниц от начала адресного пространства (адрес 0x0000). Так, при записи кода проекта adc_aducm_f размером 8908 байтов стирается только 18 страниц (9216 байтов). Таким образом, содержимое страницы с адресом 0x1FC00 в конце адресного пространства, где приложение хранит калибровочные значения, указанными операциями не затрагивается.

Работа с оценочным комплектом EVAL-ADUCM360QSPZ

Другим этапом работы стала оценка возможностей АЦП микроконтроллера при использовании оценочного комплекта EVAL-ADUCM360QSPZ.

Результаты, полученные ранее при исследовании самодельного макета, было решено сравнить с результатами измерений, проведенных с помощью оценочного комплекта, сделанного в фабричных условиях. Для адаптации проекта adc_aducm на плате EVAL-ADUCM360MKZ ее пришлось несколько доработать: разомкнуть перемычки J6 и J7, а также изъять из схемы резисторы R5 и R4, чтобы освободить используемые программой каналы АЦП от посторонних внешних цепей. (Принципиальную схему платы EVAL-ADUCM360MKZ можно загрузить в виде архивного файла со страницы по ссылке [8].) После этой доработки входное положительное напряжение (канал AIN1) на плате подавалось на контакт REFIN+, а входное отрицательное (канал AIN0) — на контакт перемычки J6, к которому в схеме подключен резистор R8. С помощью имеющихся на плате разъемов к ней в соответствии со схемой, показанной на рис. 4, были также подключены кнопки, ЖКИ с подстроечным резистором и преобразователь уровней MAX3223 (последний — в качестве источника отрицательного напряжения для ЖКИ). Питание платы осуществлялось от первичного стабилизатора DA1 от самодельного макета.

Эксперименты с платой EVAL-ADUCM360MKZ при использовании только встроенного ИОН МК (1,2 В) дали следующие результаты.

До проведения калибровок величина диапазона шумовых флюктуаций составляла порядка 40 мкВ. Объяснить это, вероятно, можно тем, что у платы EVAL-ADUCM360MKZ линейные размеры (и, следовательно, диапазон шумовых флюктуаций) внешних цепей в используемых каналах АЦП значительно меньше, чем в самодельном макете.

Выявленный выше дефект АЦП, заключающийся в невозможности корректного проведения внутренней калибровки верхнего предела, здесь также был обнаружен.

Зависимость результатов калибровки «нуля» от температуры окружающей среды также имела место, но была несколько слабее выражена. Так, при температуре +26 °C после проведения системной калибровки «нуля» величина диапазона шумовых флюктуаций составляла порядка 25 мкВ, а при температуре +32 °C — порядка 18 мкВ.

Для адаптации проекта adc_aducm под загрузку/отладку средствами комплекта EVAL-ADUCM360QSPZ необходимо на странице отладчика Debug окна Options for Target проекта указать используемый программатор-отладчик (J-LINK/J-Trace Cortex), как показано на рис. 13, а затем подключить через USB-порт к ПК хоста USB-JTAG-программатор J-Link Lite и кликом на кнопке Settings страницы Debug открыть окно Cortex JLink/JTrace Target Driver Setup. При этом IDE μVision4 должна опознать подключенное устройство и на странице Debug указанного окна отобразить его уникальные параметры: серийный номер, название, версии прошивок, как показано на рис. 14.

Страница Debug окна Options for Target

Рис. 13. Страница Debug окна Options for Target


Страница Debug окна Cortex JLink/JTrace Target Driver Setup

Рис. 14. Страница Debug окна Cortex JLink/JTrace Target Driver Setup

Доступные для пользовательской установки настройки на этой странице следует задать так, как показано на рис. 13. Затем необходимо перейти на страницу Flash Download (рис. 15) и в ее поле Programming Algorithm задать загрузчик Flash-памяти МК, выбрав его из списка, открывающегося при нажатии на кнопку Add.

Страница Flash Download окна Cortex JLink/JTrace Target Driver Setup

Рис. 15. Страница Flash Download окна Cortex JLink/JTrace Target Driver Setup

На этой же странице можно задать или изменить заданный по умолчанию набор операций, производимых загрузчиком при обращении к Flash-памяти МК: стирание всего массива, стирание секторов, программирование, верификацию и пр.

Загрузка файла прошивки, сгенерированного в результате успешного формирования проекта, во Flash-память МК с помощью программатора J-Link Lite может быть осуществлена из главного меню IDE μVision4 путем использования кнопки Download на инструментальной панели или опции меню Flash → Download.

Выводы

Авторы статьи постарались как можно подробнее описать все этапы работы с микроконтроллером, начиная с выбора микросхемы в соответствии с решаемой задачей и заканчивая работой с настройками микроконтроллера для достижения наилучших результатов. Подробно описан процесс калибровки АЦП для различных вариантов проведения измерения и выяснено, насколько соответствуют параметры микросхемы, заявленные в технической документации производителем, тем, что получены на практике. Очевидно, что при использовании платы, конструкция которой выполнена в соответствии с рекомендациями фирмы — производителя микросхемы (в нашем случае это был оценочный комплект), характеристики микросхемы соответствуют заявленным.

Мы надеемся, что материалы этой статьи пригодятся инженерам-разработчикам при создании собственных устройств, позволят им уменьшить время работы по проекту, избежать ошибок при проектировании и написании программ, а фирмам-производителям — вывести их продукцию на рынок в более короткие сроки.

Выражаем благодарность компании «ЭЛТЕХ», предоставившей оценочный комплект EVAL-ADUCM360QSPZ и микросхемы ADuCM360BCPZ128 для работы.

Авторы будут рады получить отзывы на этот материал по адресам электронной почты, указанным в начале статьи.

Литература

  1. Analog Microcontrollers. http://www.analog.com/en/processors-dsp/analog-microcontrollers/products/index.html
  2. Виноградов А. Б., Редькин П. П. Микроконвертеры фирмы Analog Devices в микропроцессорных приборных комплексах: уч. пособие. Ульяновск: УлГТУ, 2005.
  3. Редькин П. П. Применение микроконтроллеров семейства ADuC70xx // Радио. 2007. № 2-5.
  4. ADUCM360: Low Power, Precision Analog Micro-controller with Dual Sigma-Delta ADCs, ARM Cortex-M3 Data Sheet. http://www.analog.com/en/processors-dsp/analog-microcontrollers/ADuCM360/products/product.html
  5. UG-457: ADuCM360 Development Systems Getting Started Tutorial. http://search.analog.com/search/default.aspx?query=UG-457&local=en
  6. UG-367: Using the ADuCM360/ADuCM361 Low Power, Precision Analog Microcontroller with Dual Sigma-Delta ADCs, ARM Cortex-M3: http://search.analog.com/search/default.aspx?query=UG-367&local=en
  7. CN0267: Complete 4 mA to 20 mA Loop Powered Field Instrument with HART Interface; http://www.analog.com/en/circuits-from-the-lab/CN0267/vc.html
  8. http://www.analog.com/en/processors-dsp/analog-microcontrollers/aducm360/products/EVAL-ADUCM360/eb.html

Другие статьи по данной теме:

Сообщить об ошибке