Arduino Due
Arduino Due - вид спереди | Arduino Due - вид сзади |
Общие сведения
Arduino Due - это устройство на основе микропроцессора Atmel SAM3X8E ARM Cortex-M3 (datasheet). Это первая плата Ардуино на базе 32-разрядного микроконтроллера ARM. В ее состав входят 54 цифровых вывода (из которых 12 могут работать в качестве ШИМ-выходов), 12 аналоговых входов, 4 UART (аппаратных приемопередатчика, осуществляющих последовательную передачу данных), генератор тактовой частоты на 84 МГц, USB с поддержкой технологии OTG, 2 ЦАП (цифро-аналоговых преобразователя), 2 TWI, разъем питания, разъем SPI, разъем JTAG, кнопка сброса и кнопка очистки памяти.
Внимание: в отличие от других плат Ардуино, рабочее напряжение Arduino Due составляет 3.3В. Соответственно, максимальное напряжение, которое могут выдержать его выводы, равно 3.3В. Подача на вывод большего напряжения (например, 5В) может привести к выходу платы из строя.
В состав устройства входит все необходимое для обеспечения работы микроконтроллера; для начала работы достаточно просто подать питание от AC/DC-адаптера или батарейки, либо подключить его к компьютеру посредством USB-кабеля. Arduino Due совместим со всеми платами расширения, работающими от 3.3В, и соответствует требованиям распиновки 1.0:
- Выводы SDA и SCL (TWI) расположены возле вывода AREF.
- Присутствует вывод IOREF, позволяющий платам расширения подстраиваться под рабочее напряжение Ардуино. Благодаря этому, платы расширения могут быть совместимы как с 3.3В-Ардуино (подобными Due), так и с 5В-Ардуино на основе микроконтроллеров AVR.
- Предусмотрен свободный вывод, зарезервированный для будущих целей.
Преимущества использования ядра ARM
Благодаря использованию 32-разрядного ядра ARM, Arduino Due во многом превосходит типичные платы на базе 8-разрядных микроконтроллеров. Наиболее существенные отличия заключаются в следующем:
- 32-битное ядро позволяет обрабатывать 4х-байтовые данные всего за один такт. (Для получения более подробной информации см. описание типа int).
- Тактовая частота - 84 МГц.
- Объем оперативной памяти SRAM составляет 96 КБайт.
- Объем флеш-памяти программ - 512 КБ.
- Наличие DMA-контроллера, позволяющего разгрузить центральный процессор от выполнения ресурсоемких операций с памятью.
Схема, исходный проект и расположение выводов
Файлы EAGLE: arduino-Due-reference-design.zip
Схема: arduino-Due-schematic.pdf
Расположение выводов: распиновка SAM3X
Характеристики
Микроконтроллер | AT91SAM3X8E | |
Рабочее напряжение | 3.3В | |
Напряжение питания (рекомендуемое) | 7-12В | |
Напряжение питания (предельное) | 6-16В | |
Цифровые выводы | 54 (из них 12 могут работать как ШИМ-выходы) | |
Аналоговые входы | 12 | |
Аналоговые выходы | 2 (ЦАП) | |
Суммарный выходной ток всех выводов (максимальный) | 130 мА | |
Максимальный выходной ток вывода 3.3V | 800 мА | |
Максимальный выходной ток вывода 5V | 800 мА | |
Flash-память | 512 КБ в полном объеме доступна пользовательским программам | |
SRAM | 96 КБ (два банка памяти: 64 КБ и 32 КБ) | |
Тактовая частота | 84 МГц |
Питание
Arduino Due может быть запитан от USB либо от внешнего источника питания - тип источника выбирается автоматически.
В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Штекер адаптера (диаметр - 2.1мм, центральный контакт - положительный) необходимо вставить в соответствующий разъем питания на плате. В случае питания от аккумулятора/батареи, ее провода необходимо подсоединить к выводам Gnd и Vin разъема POWER.
Напряжение внешнего источника питания может быть в пределах от 6 до 20 В. Однако, уменьшение напряжения питания ниже 7В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12В.
Ниже перечислены выводы питания, расположенные на плате:
- VIN. Напряжение, поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, когда устройство запитано от внешнего адаптера.
- 5V. На вывод поступает напряжение 5В от стабилизатора напряжения на плате, вне независимости от того, как запитано устройство: от адаптера (7 - 12В), от USB (5В) или через вывод VIN (7 - 12В). Запитывать устройство через выводы 5V или 3V3 не рекомендуется, поскольку в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя.
- 3V3. 3.3В, поступающие от стабилизатора напряжения на плате. Данный стабилизатор также обеспечивает питание микроконтроллера SAM3X. Максимальный ток, потребляемый от этого вывода, составляет 800 мА.
- GND. Выводы земли.
- IOREF. Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Ардуино. В зависимости от напряжения, считанного с вывода IOREF, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5В, так и с 3.3В-устройствами.
Память
Объем флеш-памяти программ микроконтроллера SAM3X составляет 512 КБ (2 блока по 256 КБ). Устройство выпускается с прошитим загрузчиком, расположенном в отдельной памяти ПЗУ. Объем доступной оперативной памяти SRAM составляет 96 КБ, представляющих собой два смежных банка памяти по 64 КБ и 32 КБ соответственно. Вся доступная память (Flash, ОЗУ и ПЗУ) имеет общее линейное адресное пространство.
Кнопка удаления, расположенная на плате, позволяет очистить Flash-память микроконтроллера SAM3X и стереть текущую загруженную программу. Для этого необходимо нажать и удерживать ее в течение нескольких секунд.
Входы и выходы
- Цифровые входы/выходы: выводы 0 - 53
С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 54 цифровых выводов может работать в качестве входа или выхода. Рабочее напряжение этих выводов составляет 3.3В. Максимальный выходной ток каждого вывода колеблется в пределах от 3 мА до 15 мА (в зависимости от вывода), а максимальный входной ток - от 6 до 9 мА (в зависимости от вывода). Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 100 кОм. Помимо этого, некоторые из выводов могут выполнять дополнительные функции:
- Последовательный интерфейс Serial: выводы 0 (RX) и 1 (TX)
- Последовательный интерфейс Serial 1: выводы 19 (RX) и 18 (TX)
- Последовательный интерфейс Serial 2: выводы 17 (RX) и 16 (TX)
- Последовательный интерфейс Serial 3: выводы 15 (RX) и 14 (TX)
Используются для получения (RX) и передачи (TX) последовательных данных (уровень напряжения TTL 3.3В). Выводы 0 и 1 соединены с соответствующими выводами микросхемы ATmega16U2, выполняющей роль преобразователя USB-UART.
- ШИМ: выводы со 2 по 13
С помощью функции analogWrite() могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала. Разрядность ШИМ можно изменить с помощью функции analogWriteResolution().
- Интерфейс SPI: выводы SPI (на платах Ардуино разъем ICSP)
С применением библиотеки SPI данные выводы могут осуществлять связь по интерфейсу SPI. Линии SPI выведены на 6-контактный разъем по центру платы, физически совместимый с Uno, Leonardo и Mega2560. Обратите внимание, что разъем SPI не предназначен для внутрисхемного программирования микроконтроллера SAM3X и может использоваться только для связи с другими SPI-устройствами. Кроме того, в Arduino Due SPI имеет ряд дополнительных возможностей, которые можно использовать с помощью специальных методов.
- Интерфейс CAN: выводы CANRX и CANTX
Данные выводы поддерживают протокол связи CAN, однако на данный момент его реализация в Arduino API пока отсутствует.
- "L" светодиод: вывод 13
Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW - выключается. Помимо этого, яркость свечения светодиода можно регулировать, поскольку вывод 13 может работать как ШИМ-выход.
- Интерфейс TWI 1: выводы 20 (SDA) и 21 (SCL)
- Интерфейс TWI 2: выводы SDA1 и SCL1
С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI.
- Аналоговые входы: выводы A0 - A11
В Arduino Due есть 12 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 12-битного числа (4096 значений). Разрядность АЦП, взаимодействующего с этими выводами, по умолчанию, установлена в 10 бит (для совместимости с другими платами Ардуино). Изменить разрядность АЦП можно с помощью функции analogReadResolution(). На аналоговые входы Arduino Due можно подавать напряжение в диапазоне от 0 до 3.3В. При подаче большего напряжения микроконтроллер SAM3X может выйти из строя. Функция analogReference() в Arduino Due игнорируется.
На плате вывод AREF соединен с выводом опорного напряжения микросхемы SAM3X через резисторный мост. Для использования вывода AREF необходимо выпаять резистор BR1.
- DAC1 и DAC2
Аналоговые выходы 12-битного цифро-аналогового преобразователя. С помощью функции analogWrite() позволяют формировать 4096 различных уровня напряжения. Данные выводы могут использоваться для создания аудио-выхода (см. библиотеку Audio).
Другие выводы на плате:
- AREF
Опорное напряжение АЦП. Используется функцией analogReference().
- Reset
Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения.
Связь
Arduino Due предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Ардуино или другими микроконтроллерами, а также с различными устройствами, такими, как телефоны, планшеты, камеры и т.д. В микроконтроллере SAM3X есть один аппаратный UART и три аппаратных USART для реализации последовательных интерфейсов с TTL-уровнем напряжения 3.3В.
USB-порт для программирования на плате взаимодействует с микросхемой ATmega16U2, выполняющую роль USB-UART преобразователя, который при подключении к компьютеру определяется как виртуальный COM-порт. (Для корректной идентификации на Windows-системах потребуется .inf-файл, на системах с OSX и LINUX плата распознается автоматически). Микросхема 16U2 соединена с аппаратным приемопередатчиком UART микроконтроллера SAM3X. Для программирования микроконтроллера через микросхему ATmega16U2 используются выводы RX0 и TX0. В пакет программного обеспечения Ардуино входит специальная программа, позволяющая считывать и отправлять на Ардуино простые текстовые данные. При передаче данных через микросхему-преобразователь USB-UART во время USB-соединения с компьютером, на плате будут мигать светодиоды RX и TX. (При последовательной передаче данных посредством выводов 0 и 1, без использования USB-преобразователя, данные светодиоды не задействуются).
Штатный USB-порт на плате также соединен с контроллером SAM3X и предназначен для последовательной (CDC) передачи данных через USB. Данный порт позволяет Ардуино взаимодействовать с различными приложениями на компьютере (например, Serial Monitor или др.). Использование штатного USB-порта при подсоединении к компьютеру позволяет Arduino Due работать в качестве USB-мыши или клавиатуры. Более подробную информацию об этом см. в справке по библиотекам Mouse и Keyborad.
Штатный USB-порт также может работать как USB-хост и поддерживает подключение периферийных устройств, таких как мыши, клавиатуры или смартфоны. Более подробную информацию об этом см. в справке по библиотеке USBHost.
В микроконтроллере SAM3X также реализована поддержка последовательных интерфейсов TWI и SPI. В программное обеспечение Ардуино входит библиотека Wire, позволяющая упростить работу с шиной I2C; для получения более подробной информации см. документацию. Для работы с интерфейсом SPI используйте библиотеку SPI.
Программирование
Arduino Due программируется с помощью программного обеспечения Ардуино (скачать). Для получения более подробной информации см. справку и примеры.
Процесс загрузки программ в микроконтроллер SAM3X отличается от процесса прошивки AVR-микроконтроллеров, используемых в других платах Ардуино. Особенность SAM3X заключается в том, что для его перепрошивки требуется предварительно очищать Flash-память контроллера. Такая необходимость обусловлена тем, что процесс загрузки программы контролируется загрузчиком в ПЗУ SAM3X, который запускается только при условии отсутствия программы во Flash-памяти микроконтроллера.
Таким образом, любой из USB-портов может использоваться для прошивки платы. Тем не менее, рекомендуется использовать USB-порт для программирования ("Programming Port" на рисунке) в силу некоторых особенностей процесса очистки памяти микроконтроллера:
- Порт для программирования: Для использования этого порта в среде разработки Arduino IDE в качестве рабочей платы выберите "Arduino Due (Programming Port)". Подсоедините Due к компьютеру, соединив USB-кабель c разъемом для программирования (расположенным ближе к разъему питания). Порт для программирования взаимодействует с микросхемой 16U2, выполняющей роль преобразователя USB-UART. Микросхема 16U2 в свою очередь соединена с первым UART микроконтроллера SAM3X (выводы RX0 и TX0), а также управляет его выводами Reset и Erase. При открытии и закрытии порта на скорости 1200 бод, на выводах Erase и Reset формируется активный уровень, что приводит к очистке памяти микроконтроллера. Таким образом, срабатывает так называемая процедура "аппаратной очистки" перед взаимодействием с UART SAM3X. Этот способ более надежен, чем "программная очистка" при использовании штатного USB-порта, и работает даже в случае зависания процессора. Именно поэтому для прошивки Arduino Due рекомендуется использовать порт для программирования.
- Штатный USB-порт: Для использование этого порта в среде разработки Arduino IDE в качестве рабочей платы выберите "Arduino Due (Naive USB Port)". Штатный USB-порт соединен непосредственно с микроконтроллером SAM3X. Подсоедините Due к компьютеру, соединив USB-кабель со штатным USB-разъемом (расположенным ближе к кнопке сброса). Открытие и закрытие порта на скорости 1200 бод приведет к срабатыванию процедуры "программной очистки", во время которой очищается flash-память, перезагружается микроконтроллер и стартует загрузчик. Поскольку эта процедура выполняется исключительно программой самого микроконтроллера SAM3X, то в случае зависания последнего процесс очистки может не произойти. При этом открытие/закрытие штатного порта на различных скоростях не поможет перезагрузить микроконтроллер.
В отличие от других плат Ардуино, для программирования которых используется avrdude, процесс прошивки Arduino Due осуществляется с помощью программы bossac.
Исходный код прошивки микроконтроллера ATmega16U2 доступен в репозитории Ардуино. Прошить микроконтроллер можно через разъем для внутрисхемного программирования ISP с помощью внешнего программатора (в этом случае затрется DFU-загрузчик).
Защита USB от перегрузок
В Arduino Due есть восстанавливаемые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок. Несмотря на то, что большинство компьютеров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень защиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.
Физические характеристики и совместимость с платами расширения
Максимальная длина и ширина печатной платы Arduino Due составляет 10.2 см и 5.4 см соответственно, с учетом USB-разъемов и разъема питания, выступающих за пределы платы. Три крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2.54 мм и составляет 4 мм.
Arduino Due спроектирован таким образом, чтобы обеспечивать совместимость с большинством плат расширения для Uno, Diecimila или Duemilanove. Расположение основных выводов платы полностью эквивалентно: цифровые выводы 0 - 13 (а также смежные выводы AREF и GND), аналоговые входы 0 - 5, разъем POWER и разъем "ICSP" (SPI) - все выводы расположены на одинаковых расстояниях друг относительно друга. Кроме того, линии основного приемопередатчика UART соединены с одними и теми же выводами (0 и 1). Пожалуйста, обратите внимание, что номера выводов I2C на Arduino Due (20 и 21) отличаются от выводов Duemilanove / Diecimila (аналоговые входы 4 и 5).
Подробная инструкция по работе с Arduino Due (на англ.)