Привет, читатель!
Сегодня существуют десятки вариантов платы Arduino. Их популярность обусловлена, по моему мнению, фреймворком Wiring для микроконтроллеров, распространением «шилдов» (нет необходимости паять компоненты) и, что самое удобное, загрузкой программ по USB. В рамках этой статьи расскажу, как я создал небольшую оценочную плату для микроконтроллера и добавил в нее загрузочную запись.
По своей сути, большинство «ардуинок» (оценочных плат) — это печатные платы с минимально необходимыми для микросхемы деталями. Такие прототипы позволяют сделать работу с чипами удобнее, проще и приятнее. Однако бывает, что под контроллер либо нет подобных решений, либо они универсальные и имеют некоторые неточности. С этим можно бороться, но возникают различные костыли, поэтому я решил разработать оценочную плату для отечественного чипа. Самому чипу посвящена отдельная статья на Хабре, его я использую в паре пет-проектов. Приступим к разработке!
Используйте навигацию, если не хотите читать текст полностью:
→ Референсы и исходные варианты
→ Схема
→ Плата
→ Загрузочная запись
→ Заключение
Референсы и исходные варианты
Можно при помощи ЛУТ собрать свою одностороннюю плату Arduino с DB9-интерфейсом. Подробности описаны в официальной документации.
Существуют уже две отечественных версии Arduino: Elbear Ace-Uno и Vostok UNO-VN035. Давайте реализуем свою?
Basic Stamp
Одной из первых плат для макетирования и прототипирования были Basic Stamp. О них я узнал из старой, но хорошей книги «Радиоэлектроника для чайников». Данная плата имеет цепь подготовки питания, конвертор интерфейсов usb-uart (раньше был просто разъем DB9), сокет для микросхемы или впаянный контроллер, а также небольшую макетную плату (breadboard) и PLC-разъемы. Есть подобная занимательная плата на базе ESP8266 от PINLAB.
Источник.
Классические Arduino
Большее распространение получили платы Arduino. Одна из причин — так называемые «шилды». Это платы расширения, монтируемые на разъемы сверху. Сами платы зачастую реализуют одну-две функции и занимают действительно много места. Но они при этом используются для образовательных целей, а также имеют удобные платы для проверки схем, гипотез и отображения информации. Одной из первых плат была Arduino Uno.
Забавный факт: первая Arduino была сделана как конкурент Basic Stamp и подключалась к ПК через порт DB25 COM. Сегодня COM-порт стал виртуальным, но загрузка ПО по-прежнему осуществляется через него.
Источник.
Nano, ESP
Позже вышла более удобная, на мой взгляд, плата — Aarduino Nano. Мне нравится ее форм-фактор — он отлично встает на макетную плату, тем самым позволяет сделать красивую и наглядную разводку. Аналогичным образом можно смонтировать появившиеся позже ESP8266 или ESP32.
Источник.
Next.module
Отмечу проект Руслана Надыршина на базе esp32, который он описал в своей статье на Хабре. Довольно интересный конструктив в виде небольших квадратных плат, который позволяет собрать несколько необходимых блоков в стойку. Объединение модулей происходит через разъемы 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. Почему? Отечественные контроллеры — отличное решение для экспериментов, если у вас есть возможность их оперативно достать. По сути, это близкие аналоги существующих на рынке образцов, для которых уже есть разработанные среды, библиотеки кода, общие методы и подходы к применению.
Схема
Больших секретов здесь нет. Исходные коды, схемы и платы лежат в свободном доступе как в документации от вендоров, так и в статьях от любителей. Китайцы вообще поставили на поток создание клонов любых цветов и их продажу на маркетплейсах.
Основное отличие от других аналогичных схем в том, что у каждого входа микроконтроллера установлены конденсаторы. Когда работал с китайской отладочной платой, очень пожалел об их отсутствии во время отладки программы.
Другая отличительная черта — использование регулятора LP2985 вместо классического 78L05. Он имеет больший ток нагрузки и меньшее падение напряжения. Еще один его плюс — наличие вывода выключения, который отрубает источник. Использовал этот функционал для одновременного подключения платы к USB без извлечения внешнего источника.
Плата
Изначальным планом было сделать печатную плату, максимально совместимую с Arduino Nano. На схеме было три разъема для порта С-микроконтроллера, чтобы использовать все ножки чипа. Эти восемь ножек вывел на отдельную «отламываемую» часть платы. Перфорация позволяла в таком варианте попросту отломать дополнительный порт, если не нужно установить плату в «шилды» для Nano. Сама идея таких плат не нова и позаимствована у STM8-Discovery от STMicroelectronics.
Один из вариантов. Было много переходных отверстий. Половина схемы — с другой стороны платы, включая все фильтры.
Эксперементируя с форм-факторам отошел от повторения в габаритах Nano. Вместо длинной платы удачнее оказалось сделать ее шире: в таком варианте отладочное устройство удобно встает на большую макетную плату. Идею с портом на одном из торцов решил оставить, обогатив этот разъем двумя аналоговыми линиями и интерфейсом UART.
После всех изысканий и экспериментов заказал партию зеленых плат.
Полученные изделия по габаритам помещаются на большую макетку, оставляя достаточно места для подключения компонентов. Провод с micro-USB предпочитаю использовать угловой: в такой компоновке он достаточно удобен и не мешается.
Загрузочная запись
Зачем на чипе загрузочная запись, если есть программатор? Да, они просты в использовании (все вызывается одной командой), дешевы и довольно надежны. Однако для отладки удобно выводить информацию в последовательный интерфейс. Через него же можно настроить связь с ПО верхнего уровня на ПК. А в готовый проект (уже в виде прибора, а не оценочной платы) можно загружать обновление ПО по USB без дополнительных инструментов и открытия корпуса устройства. Для этого вообще не требуется никаких специальных знаний.
Забавный факт: контроллер можно запрограммировать всего двумя кнопками. На эту тему на Хабре есть замечательная статья.
В качестве загрузочной записи выбрал optiboot. Он имеет достаточную функциональность, активно поддерживается сообществом в официальном репозитории на GitHub и мало весит. На базе этого проекта изначально также были построены загрузчики для других оценочных плат. Кстати, на optiboot работает более эффективное ядро GyverCore.
Итак, сначала необходимо подготовить ОС для сборки файлов. Понадобится avr-gcc, желательно последней версии.
Установка на Ubuntu самая простая и описана в туториале.
Для macOS понадобится brew и установить пакет (можно найти на GitHub).
Установка на Winows чуть сложнее, чем на Linux, но вам поможет пошаговая инструкция.
Альтернативный вариант для Windows — avr-gcc в составе ide arduino.
Для сборки достаточно скачать репозиторий и по инструкции из вики проекта на GitHub собрать исходные файлы и загрузить бинарный код. Для скачивания потребуется 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 модули или даже по радио (при очень большом желании).
Во время сборки make выдаст строки с предупреждением:
Погрешность в 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, описанный ранее на Хабре, пару строк:
pusb: $(TARGET).hex
avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -B $(PORTSPEED) -U flash:w:$(BUILD_DIR)/$(TARGET).hex
На этом этапе основная задача завершена. Плата определяется и обновляется по USB из VSCode:
Заключение
Полученные платы успешно используются для отладки некоторых решений. Опытным путем я понял, что не хватает некоторых элементов, которые делают работу удобнее. Например, стоило добавить:
- стабилизатор 3,3 В — некоторые микросхемы или индикаторы работают от этого напряжения;
- источник опорного напряжения (тот же tl431);
- размыкание сигнала «перезагрузки» контроллера от ch340 (этот вопрос временно решил, изменив загрузчик и разрезанием дорожки).
Однако основная функциональность в виде «бутлоадер + микроконтроллер + конвертор интерфейсов» используется по максимуму. Когда плата установлена в макете и работает, разработчик может подключиться, снять логи, изменить режимы работы или обновить прошивку. Попробовал кейс с обновлением прошивки не специалистом: работа выполнена успешно за счет использования созданного bat-скрипта и hex-файла прошивки.
Комментарии (18)
DungeonLords
11.06.2024 16:39+1Автор предлагает использовать микроконтроллер К1946, который на данный момент не имеет открытой документации... Как статья набрала столько плюсов?
VRyabchevsky Автор
11.06.2024 16:39Как и обсуждали в личных сообщениях: в предыдущей статье указывал, что это клон atmega8535. Производитель обещает выложить документацию в общий доступ, но пока что высылают на почту по запросу.
Также есть репозиторий, в который буду добавлять другие отечественные решения
accurate_random
11.06.2024 16:39+3Очевидно что плюсы не за описание результата, а процесса. Там в конце сказано о вдохновении. Мне например, с учётом моего интереса, результаты не особо актуальны, а описание действий и средств дающих результат - представляют большую ценность.
VT100
11.06.2024 16:39+2Вижу ссылки на схемы других плат. Ссылки на схему этой платы - не вижу. Хочется прояснить, что за магические конденсаторы на каждом выводе.
Такая "блоха", как U2, - неиллюзорно рискует словить отключение по перегреву уже при входном напряжении 7-8 В.
VRyabchevsky Автор
11.06.2024 16:39Ссылки на схему этой платы - не вижу
Потому что не выкладывал. Надо ли?
неиллюзорно рискует словить отключение по перегреву уже при входном напряжении 7-8 В.
Самое долгое ее использование от внешнего источника в виде «кроны» - час, собирали сигналы и выводили на жки. Перегрева и отключений не наблюдали
VT100
11.06.2024 16:39Если случайно запитать от 12 В блока питания вместо "Кроны", то максимальная температура будет превышена уже при токе 65 мА (25 °С окружающая, 125 °С максимальная, 220 °С/Вт тепловое сопротивление).
На полном токе - при входном напряжении 8 В.
vvzvlad
11.06.2024 16:39+112024 год. Люди продолжают закладывать в устройства морально устаревшие контроллеры из нулевых.
ABATAPA
11.06.2024 16:39+5Вы не поверите. В кучу бытовых устройств — ПММ, посудомойки, микроволновки, клавиатуры и многое другое — закладывают МК с архитектурой MCS-51, которая вообще родилась в 1980. И что? Это плохо? Там нужен RISC-V на 4 ядра по 1.1 ГГц?
vvzvlad
11.06.2024 16:39В бытовых устройствах:
а)очень значим вопрос цены, потому что большой тираж, поэтому там и контроллер с mask-rom может быть
б)прекрасно на этапе проектирования понятны функции, и можно подобрать подходящий по цене контроллер впритык, даже если для этого придется озадачить разработчика задачей написать ПО на асме: все равно цена разработчика в стоимости тиража условных микроволновок особого значения не имеет.Тут же назначение железки — макетная плата.
К которой эти два соображения неприменимы — плюс-минут доллар особо значения не имеет, потому что макеток даже не сотни, а обычно десятки (и уж точно тут не имеет смысла ставить атмегу, которая дороже сравнимой стмки), и по определению применяется для макетирования неизвестного устройства, поэтому логично на ней иметь побольше ресурсов и периферии, если это не влияет ни на цену, ни на сложность разработки. В PoF и макетировании ситуация кардинально иная: стоимость времени разработчика важна, а стоимость железа не очень, т.к. даже десяток макеток по сотне долларов это ерунда со ФОТ на пару месяцев разработки. И если макетка за $200 сокращает время разработки на пару недель — она уже себя окупила.Т.е. ситуация получается смешная: закладывая контроллер дешевле, мы получаем больше периферии, вычислительных ресурсов и памяти, что позволяет разрабатывать проще, например, вкорячив туда freertos c вытесняющей многозадачностью и культурно раскидывая задачи по тредам вместо написания своего кооперативного мини-планировщика задач со вставками на асме, но тут приходите вы и начинаете "ко-ко-ко, зачем избыточные ресурсы, деды на 51 ядре программировали и нам велели".
ABATAPA
11.06.2024 16:39но тут приходите вы и начинаете "ко-ко-ко
Начал за здравие, но всё, как обычно, свелось к хамству...
Any_key_pressor
11.06.2024 16:39Есть большое количество задач, для которых ресурсов этого контроллера достаточно.
Да и устаревший он "у них". А "у нас" это новое, революционное изделие, на которое даже документацию не всем дают.
vvzvlad
11.06.2024 16:39+2Есть большое количество задач, для которых ресурсов этого контроллера достаточно.
Есть большое количество задач, где достаточно логики, без всяких этих ваших контроллеров. Можно и без логики зачастую обойтись. И? Предлагаете не использовать в задачах "помигай светодиодом" контроллеры и использовать мультивибраторы? Мир изменился, добрый день, кремний с жирными ядрами, которые бы составили конкуренцию компьютерам начала века, стоит очень дешево. Не уметь их использовать — это стагнация человека как специалиста. Это как бухгалтер, отрицающей эксель и 1С, потому что "ну для кучи задач достаточно ручки и бумаги". Сначала достаточно, да, а потом это начинает ограничивать его как специалиста, потому что в оценку сложных задач он по привычке закладывает месяц бумажной работы, хотя можно было бы ограничиться парой дней в 1С, и это снижает и его конкурентноспособность на рынке труда, и эффективность компании в которой он работает.
А "у нас" это новое, революционное изделие, на которое даже документацию не всем дают.
"У нас" это изделие для замены существующих контроллеров в серийных устройствах, где не хочется или нет возможности заменить контроллер и хочется поставить что-то совместимое или с минимальным портированием.
Параллельно и у нас, и у китайцев существуют клоны STM32, у которых возможностей на порядок больше. В чем революционность-то этой атмеги?
master__v
При подключении USB из VT1 пойдет дым...
VRyabchevsky Автор
Нет, не идет. BCR533 внутри имеет нужные сопротивления
master__v
Ах вот оно что. Символ на схеме вводит в заблуждение
VRyabchevsky Автор
Спасибо, что отметили. Приму к сведению и скорректирую в будущих схемах
VT100
Зачастую - такие транзисторы рисуют в квадрате вместо круга.