Введение
Раньше, чтобы собрать программируемое устройство на микроконтроллере, необходимо было знать основы схемотехники, архитектуру и особенности работы конкретного микроконтроллера, уметь его программировать на ассемблере. Кроме того, требовался программатор, отладчик и другие вспомогательные устройства. В итоге без огромного объёма знаний и дорогостоящего оборудования было не обойтись. Сегодня, с появлением плат Arduino [1], дающих возможность работать с микроконтроллерами без наличия серьёзной материальной базы, всё изменилось.
Платы Arduino, а их выпускают уже в большом количестве и на разных микроконтроллерах, представляют со-
бой наборы, состоящие из готового электронного блока и программного обеспечения. Электронный блок – это печатная плата с установленным микроконтроллером и минимумом элементов, необходимых для его работы. Фактически, электронный блок Arduino является аналогом материнской платы современного компьютера. На нём имеются разъёмы для подключения внешних устройств, а также разъём для связи с компьютером, по которому и осуществляется программирование микроконтроллера.
Особенности используемых микроконтроллеров фирмы Atmel позволяют производить программирование без применения специальных программаторов. Всё, что нужно для создания нового программируемого устройства, – это плата Arduino, USB-кабель связи и компьютер c программным обеспечением, представляющим собой систему проектирования нового программируемого устройства. Система проектирования объединила в себе простейшую среду разработки и язык программирования – вариант языка С/С++ для микроконтроллеров. Поэтому для работы с Arduino достаточно знаний только основ программирования на С/С++.
Имеется для Arduino и множество готовых библиотек, содержащих код, работающий с различными внешними устройствами. О популярности плат Arduino говорит и такой факт: фирма MathWorks в MATLAB 15 выпустила приложение, позволяющее загружать программы из MATLAB в платы Arduino [2]. Не отстаёт в этом смысле и фирма Labcenter Electronics, которая в восьмой версии программного комплекса Proteus внесла в библиотеку моделируемых схем и платы Arduino [3].
Программа расчёта π
Обладая несомненными преимуществами, особенно в учебных целях, платы Arduino позволяют, как и при работе на современном компьютере, не задумываться о функционировании его отдельных частей, а просто запускать нужные программы и работать с ними. Нет надобности и в создании законченных плат и модулей. Можно воспользоваться готовыми платами расширения или просто напрямую подключить к разъёмам платы Arduino необходимые элементы. Все основные усилия направляются на разработку и отладку программы для микроконтроллера на языке высокого уровня. Наличие готовых модулей и библиотек программ позволяет в процессе обучения создавать новые работающие программируемые устройства для решения учебных задач. Варианты использования Arduino ограничены только возможностями микроконтроллера и имеющегося варианта платы, а также фантазией пользователя. И вот тут возникает главный вопрос, касающийся возможностей микроконтроллеров, используемых на платах Arduino с точки зрения их производительности. Поскольку сравнительная оценка производительности плат Arduino никем так и не была произведена, в данной статье предлагается восполнить этот пробел.
Применяемые в настоящее время способы оценки производительности цифровых процессоров обработки сигналов (ЦПОС) основаны, главным образом, на алгоритме быстрого преобразования Фурье (БПФ) с разным числом точек преобразования. Такие тесты не могут быть использованы для оценки производительности микроконтроллеров из-за их низкой производительности и ограниченной разрядной сетки по сравнению с ЦПОС. По этой причине для оценки производительности плат Arduino предлагается способ вероятностного свойства. В его основе лежит программа расчёта числа π методом статистического моделирования (метод Монте-Карло). Производительность же разных плат оценивается временем расчёта числа π при определённом одном и том же числе испытаний [4]. Данная методика была успешно применена при оценке производительности плат STAMP с ЦПОС Blackfin [5].
Задачи статистического моделирования требуют для получения точного результата достаточно большого числа статистических испытаний. Поэтому было выбрано 10 000 испытаний. Числовые случайные величины в процессе исполнения тестовой программы меняются в широком диапазоне значений, а выходные оценки производительности, в виде времени расчёта числа π при выполнении заданного числа испытаний, наиболее интегрально и полно характеризуют производительность микроконтроллеров, установленных на разных платах Arduino. Более того, по точности расчёта числа при большом количестве испытаний можно судить и о качестве применяемого программного обеспечения для компиляции и ассемблировании текста данной тестовой программы и об используемых библиотеках функций.
Несколько слов об алгоритме расчёта числа π. В его основе лежит формирование двух независимых случайных чисел x и y, распределённых равновероятно в диапазоне от –1 до +1. Существуют разные алгоритмы генерации случайных чисел. В нашем случае мы воспользуемся датчиком случайных чисел, который входит в систему проектирования плат Arduino. Полученная с помощью этого датчика каждая пара чисел в каждом испытании проверяется на попадание в круг единичного радиуса с центром в начале координат, то есть x2 + y2 ≤ 1. Таким образом, фактически рассчитывается площадь круга, которая, как известно, выражается через искомое число π. Программа расчёта числа π легко переносится на любые платы Arduino с разными микроконтроллерами, так как в ней использованы только стандартные библиотечные функции.
В листинге приведён программный код оценки производительности. Программа одинакова для всех плат, и после компиляции загружается в тестируемые платы. Результат работы программы выводится на двухстрочный жидкокристаллический дисплей. Для измерения времени расчёта π в миллисекундах используется функция millis().
Результаты тестирования плат Arduino
Рассмотрим оценку производительности следующих четырёх плат Arduino с разными микроконтроллерами, используя одну и ту же программу расчёта π:
- Плата Arduino Uno (см. рис. 1) c 8-разрядным AVR-микроконтроллером ATmega328 с RISC-архитектурой, который имеет 14 цифровых входов/выходов (6 из которых могут быть использованы как выходы для широтно-импульсной модуляции), 6 аналоговых входов, кварц на 16 МГц, USB-интерфейс, разъём питания и кнопку сброса.
- Плата Arduino Leonardo (см. рис. 2) c 8-разрядным AVR-микроконтроллером ATmega32u4 с RISC-архитектурой, который имеет 20 цифровых входов/выходов (7 из которых могут быть использованы как выходы ШИМ), 12 аналоговых входов, кварц на 16 МГц, USB-интерфейс, разъём питания и кнопку сброса.
- Плата Arduino Mega (см. рис. 3) c 8-разрядным AVR-микроконтроллером ATmega2560 с RISC-архитектурой, который имеет 54 цифровых входов/выходов (15 из которых могут быть использованы как выходы для широтно-импульсной модуляции), 16 аналоговых входов, кварц на 16 МГц, USB-интерфейс, разъём питания и кнопку сброса.
- Плата Arduino Due (см. рис. 4) c ARM-микроконтроллером SAM3X8E Cortex-M3, который имеет 54 цифровых входов/выходов (12 из которых могут быть использованы как выходы для широтно-импульсной модуляции), 12 аналоговых входов, кварц на 84 МГц, USB-интерфейс, разъём питания и кнопку сброса. Это первая плата Arduino на базе 32-битного микроконтроллера c ARM-ядром.
Результаты оценки производительности четырёх плат показаны на рисунке 5.
Видно, что наибольшей производительностью обладает плата Arduino Due (см. рис. 6).
Затем следуют платы Arduino Leonardo и Arduino Uno. Они близки по производительности. Arduino Mega имеет самую низкую производительность, на порядок меньше, чем у платы Arduino Due.
Безусловно, за такую высокую производительность приходится платить – стоимость платы Arduino Due значительно превышает стоимость других рассмотренных плат, что несколько сужает область экспериментов с ней. Наибольший интерес, благодаря соотношению эффективность/стоимость, представляет Arduino Uno. На её базе можно построить большое количество разнообразных интеллектуальных устройств, схемы и программный код которых широко освещены в интернет-сообществе Arduino.
Литература
- Петин В.А. Проекты с использованием контроллера Arduino. 2014. СПб. БХВ-Петербург.
- Arduino Support from MATLAB. www.mathworks.com/hardware-support/arduino-matlab.html.
- Proteus VSM for Arduino AVR. www.labcenter.com/products/vsm/arduino.cfm.
- Бартенев В.Г., Бартенев М.В. Об оценке производительности плат Arduino. Сборник научных трудов II Международной научно-практической конференции «Актуальные проблемы и перспективы развития радиотехнических и инфокоммуникационных систем». РАДИОИНФОКОМ-2015. В 2 ч. Ч. 1. 2015. Москва. МГТУ МИРЭА.
- Бартенев В.Г., Бартенев М.В. Программируем ЦПОС Blackfin. Журнал «Современная электроника». 2008. №6.