- PVSM.RU - https://www.pvsm.ru -

Как я сделал свою Arduino

Как я сделал свою Arduino - 1

Привет, читатель!

Сегодня существуют десятки вариантов платы Arduino. Их популярность обусловлена, по моему мнению, фреймворком Wiring [1] для микроконтроллеров, распространением «шилдов» (нет необходимости паять компоненты) и, что самое удобное, загрузкой программ по USB. В рамках этой статьи расскажу, как я создал небольшую оценочную плату для микроконтроллера и добавил в нее загрузочную запись.

По своей сути, большинство «ардуинок» (оценочных плат) — это печатные платы с минимально необходимыми для микросхемы деталями. Такие прототипы позволяют сделать работу с чипами удобнее, проще и приятнее. Однако бывает, что под контроллер либо нет подобных решений, либо они универсальные и имеют некоторые неточности. С этим можно бороться, но возникают различные костыли, поэтому я решил разработать оценочную плату для отечественного чипа. Самому чипу посвящена отдельная статья на Хабре [2], его я использую в паре пет-проектов. Приступим к разработке!

Используйте навигацию, если не хотите читать текст полностью:

Референсы и исходные варианты [3]
Схема [4]
Плата [5]
Загрузочная запись [6]
Заключение [7]

Референсы и исходные варианты

Можно при помощи ЛУТ собрать свою одностороннюю плату Arduino с DB9-интерфейсом. Подробности описаны в официальной документации [8].

Существуют уже две отечественных версии Arduino: Elbear Ace-Uno [9] и Vostok UNO-VN035 [10]. Давайте реализуем свою?

Basic Stamp

Одной из первых плат для макетирования и прототипирования были Basic Stamp. О них я узнал из старой, но хорошей книги «Радиоэлектроника для чайников». Данная плата имеет цепь подготовки питания, конвертор интерфейсов usb-uart (раньше был просто разъем DB9), сокет для микросхемы или впаянный контроллер, а также небольшую макетную плату (breadboard) и PLC-разъемы. Есть подобная занимательная плата на базе ESP8266 от PINLAB [11].

Как я сделал свою Arduino - 2

Источник [12].

Классические Arduino

Большее распространение получили платы Arduino. Одна из причин — так называемые «шилды». Это платы расширения, монтируемые на разъемы сверху. Сами платы зачастую реализуют одну-две функции и занимают действительно много места. Но они при этом используются для образовательных целей, а также имеют удобные платы для проверки схем, гипотез и отображения информации. Одной из первых плат была Arduino Uno.

Как я сделал свою Arduino - 3

Забавный факт: первая Arduino была сделана как конкурент Basic Stamp и подключалась к ПК через порт DB25 COM. Сегодня COM-порт стал виртуальным, но загрузка ПО по-прежнему осуществляется через него.

Как я сделал свою Arduino - 4

Источник [12].

Nano, ESP

Позже вышла более удобная, на мой взгляд, плата — Aarduino Nano. Мне нравится ее форм-фактор — он отлично встает на макетную плату, тем самым позволяет сделать красивую и наглядную разводку. Аналогичным образом можно смонтировать появившиеся позже ESP8266 или ESP32.

Как я сделал свою Arduino - 5

Источник [13].

Next.module

Отмечу проект Руслана Надыршина на базе esp32, который он описал в своей статье [14] на Хабре. Довольно интересный конструктив в виде небольших квадратных плат, который позволяет собрать несколько необходимых блоков в стойку. Объединение модулей происходит через разъемы BLD с длинными штырями.

В этом видео автор проекта описывает идеи и прототипы плат next.module:

STEMTera

Еще один классный и удобный вариант для отладки и обучения — плата STEMTera. Это макетная плата, в которую встроили atmega32 и вывели порты наружу. Пины микроконтроллера соответствуют расположению и функционалу на отладочной плате Uno и дополнительно продублированы.

Обзор и пример работы с платой STEMTera:

Я решил остановиться на варианте Nano, немного его изменив под используемый контроллер. Для себя поставил следующие технические требования:

  • использование контроллера К1946 или совместимых AVR,
  • наличие конвертора интерфейсов USB-UART с сигналом сброса (DTR);
  • форм-фактор — печатная плата шириной до 30 мм и длиной до 50 мм;
  • два ряда штырьевых разъемов с шагом 2,54, micro-USB для обновления.

Вы можете спросить, почему планируется устаревший micro-USB? Исключительно из соображений практичности. Это плата для отладки и прототипирования. Если на ней будет случайно отломлен интерфейс или сломан «язычок» внутри, micro-USB проще перепаять. В этом бою пять широких ножек выглядят более привлекательно, чем 13 тонких контактов type-С. К тому же, провода с таким разъемом сейчас можно найти во многих магазинах.

В качестве основного микроконтроллера рассматриваю К1946. Почему? Отечественные контроллеры — отличное решение для экспериментов, если у вас есть возможность их оперативно достать. По сути, это близкие аналоги существующих на рынке образцов, для которых уже есть разработанные среды, библиотеки кода, общие методы и подходы к применению.

Схема


Больших секретов здесь нет. Исходные коды, схемы и платы лежат в свободном доступе как в документации от вендоров [15], так и в статьях от любителей [16]. Китайцы вообще поставили на поток создание клонов любых цветов и их продажу на маркетплейсах [17].

Основное отличие от других аналогичных схем в том, что у каждого входа микроконтроллера установлены конденсаторы. Когда работал с китайской отладочной платой, очень пожалел об их отсутствии во время отладки программы.

Другая отличительная черта — использование регулятора LP2985 вместо классического 78L05. Он имеет больший ток нагрузки и меньшее падение напряжения. Еще один его плюс — наличие вывода выключения, который отрубает источник. Использовал этот функционал для одновременного подключения платы к USB без извлечения внешнего источника.

Как я сделал свою Arduino - 6

Плата


Изначальным планом было сделать печатную плату, максимально совместимую с Arduino Nano. На схеме было три разъема для порта С-микроконтроллера, чтобы использовать все ножки чипа. Эти восемь ножек вывел на отдельную «отламываемую» часть платы. Перфорация позволяла в таком варианте попросту отломать дополнительный порт, если не нужно установить плату в «шилды» для Nano. Сама идея таких плат не нова и позаимствована у STM8-Discovery от STMicroelectronics.

Как я сделал свою Arduino - 7

Один из вариантов. Было много переходных отверстий. Половина схемы — с другой стороны платы, включая все фильтры.

Эксперементируя с форм-факторам отошел от повторения в габаритах Nano. Вместо длинной платы удачнее оказалось сделать ее шире: в таком варианте отладочное устройство удобно встает на большую макетную плату. Идею с портом на одном из торцов решил оставить, обогатив этот разъем двумя аналоговыми линиями и интерфейсом UART.

После всех изысканий и экспериментов заказал партию зеленых плат.

Как я сделал свою Arduino - 8

Полученные изделия по габаритам помещаются на большую макетку, оставляя достаточно места для подключения компонентов. Провод с micro-USB предпочитаю использовать угловой: в такой компоновке он достаточно удобен и не мешается.

Как я сделал свою Arduino - 9

Загрузочная запись


Зачем на чипе загрузочная запись, если есть программатор? Да, они просты в использовании (все вызывается одной командой), дешевы и довольно надежны. Однако для отладки удобно выводить информацию в последовательный интерфейс. Через него же можно настроить связь с ПО верхнего уровня на ПК. А в готовый проект (уже в виде прибора, а не оценочной платы) можно загружать обновление ПО по USB без дополнительных инструментов и открытия корпуса устройства. Для этого вообще не требуется никаких специальных знаний.

Забавный факт: контроллер можно запрограммировать всего двумя кнопками. На эту тему на Хабре есть замечательная статья [18].

В качестве загрузочной записи выбрал optiboot. Он имеет достаточную функциональность, активно поддерживается сообществом в официальном репозитории на GitHub [19] и мало весит. На базе этого проекта изначально также были построены загрузчики для других оценочных плат. Кстати, на optiboot работает более эффективное ядро GyverCore [20].

Итак, сначала необходимо подготовить ОС для сборки файлов. Понадобится avr-gcc, желательно последней версии.

Установка на Ubuntu самая простая и описана в туториале [21].

Для macOS понадобится brew [22] и установить пакет (можно найти на GitHub [23]).

Установка на Winows чуть сложнее, чем на Linux, но вам поможет пошаговая инструкция [24].

Альтернативный вариант для Windows — avr-gcc в составе ide arduino.

Для сборки достаточно скачать репозиторий и по инструкции из вики проекта на GitHub [25] собрать исходные файлы и загрузить бинарный код. Для скачивания потребуется git на ПК. Либо можно скачать архивом:

git clone https://github.com/Optiboot/optiboot.git
cd optiboot/optiboot/bootloaders/optiboot

Далее выполняем сборку. Необходимо указать используемую ОС, чтобы скрипт донастроил некоторые переменные, а также исправил символы пути (на Windows).

make OS=macos 
UART=0 BAUD_RATE=115200 
LED=B7 LED_DATA_FLASH=1 
AVR_FREQ=16000000L atmega8535

Дополнительно можно указать опцию BOOT_ON_POR=1. В таком случае бутлоадер будет ожидать сигнал от ПК в течении секунды (настраивается опцией TIMEOUT) после включения, прежде чем начнет проводить загрузку. Это полезно в ситуациях, когда необходимо подключаться по USB, не выполняя перезагрузку контроллера. Также с этой опцией можно выполнять загрузку ПО через RS-485, по беспроводной связи через стандартные Bluetooth, Wi-Fi модули или даже по радио [26] (при очень большом желании).

Во время сборки make выдаст строки с предупреждением:

Как я сделал свою Arduino - 10

Погрешность в 2% не страшна, но вас предупредили. Чтобы этого избежать, можно изменить частоту резонатора или скорость интерфейса.

Последней командой загрузим сформированный бутлоадер в плату. Для этого использую avrdude:

avrdude -P usb -c usbasp -p ATmega8535 -s -B 16kHz -U flash:w:optiboot_atmega8535_UART0_115200_16000000L.hex

Для дальнейшего использования из консоли берем эту строку и заменяем поля на собственные:

avrdude -p m8535 -c arduino -P /dev/tty.usbserial-0001 -b 115200 -U flash:w:build/k1946vm014.hex

Я же добавил в makefile, описанный ранее на Хабре [2], пару строк:

pusb: $(TARGET).hex
avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -B $(PORTSPEED) -U flash:w:$(BUILD_DIR)/$(TARGET).hex

На этом этапе основная задача завершена. Плата определяется и обновляется по USB из VSCode:

Как я сделал свою Arduino - 11

Заключение


Полученные платы успешно используются для отладки некоторых решений. Опытным путем я понял, что не хватает некоторых элементов, которые делают работу удобнее. Например, стоило добавить:

  • стабилизатор 3,3 В — некоторые микросхемы или индикаторы работают от этого напряжения;
  • источник опорного напряжения (тот же tl431);
  • размыкание сигнала «перезагрузки» контроллера от ch340 (этот вопрос временно решил, изменив загрузчик и разрезанием дорожки).

Однако основная функциональность в виде «бутлоадер + микроконтроллер + конвертор интерфейсов» используется по максимуму. Когда плата установлена в макете и работает, разработчик может подключиться, снять логи, изменить режимы работы или обновить прошивку. Попробовал кейс с обновлением прошивки не специалистом: работа выполнена успешно за счет использования созданного bat-скрипта и hex-файла прошивки.

Автор: Владислав Рябчевский

Источник [27]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arduino/391995

Ссылки в тексте:

[1] Wiring: http://wiring.org.co/

[2] отдельная статья на Хабре: https://habr.com/ru/articles/815269/

[3] Референсы и исходные варианты: #1

[4] Схема: #2

[5] Плата: #3

[6] Загрузочная запись: #4

[7] Заключение: #5

[8] в официальной документации: https://docs.arduino.cc/retired/boards/arduino-serial-single-sided-3/

[9] Elbear Ace-Uno: https://www.ixbt.com/news/2024/04/22/sdelano-v-rossii-predstavlena-polnostju-otechestvennaja-plata-sovmestimaja-s-arduino.html

[10] Vostok UNO-VN035: https://www.rlocman.ru/news/new.html?di=658807

[11] ESP8266 от PINLAB: https://www.chipdip.ru/product/laboratorija-internet-veshchej-medium

[12] Источник: https://www.techspot.com/article/2126-arduino/

[13] Источник: https://www.serveronthemove.com.au/blogs/tips/nodemcu-esp8266-w-lua-moisture-sensor-display-and-extended-breadboard

[14] в своей статье: https://habr.com/ru/articles/714998/

[15] в документации от вендоров: https://docs.arduino.cc/learn/hardware/nano-pcb-guide/%23soldering-directly-to-pcb

[16] в статьях от любителей: https://oshwlab.com/Alex_Tien/arduino-nano

[17] на маркетплейсах: https://ru.banggood.com/5Pcs-RGBDuino-UNO-V1_2-Jenny-Development-Board-ATmega328P-Chip-CH340C-VS-UNO-R3-Upgrade-for-Raspberry-Pi-4-Raspberry-Pi-3B-Geekcreit-for-Arduino-p-1759979.html?cur_warehouse=CN

[18] замечательная статья: https://habr.com/ru/articles/152052/

[19] на GitHub: https://github.com/Optiboot/optiboot

[20] ядро GyverCore: https://github.com/AlexGyver/GyverCore

[21] в туториале: https://baremetalmicro.com/tutorial_avr_toolchain/03-Install-on-Ubuntu-Linux.html

[22] brew: https://brew.sh

[23] на GitHub: https://github.com/osx-cross/homebrew-avr

[24] пошаговая инструкция: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/windows_avr.html

[25] на GitHub: https://github.com/Optiboot/optiboot/wiki/CompilingOptiboot

[26] радио: https://habr.com/ru/companies/audiomania/articles/572982/

[27] Источник: https://habr.com/ru/companies/selectel/articles/820731/?utm_source=habrahabr&utm_medium=rss&utm_campaign=820731