Як створити свою Arduino плату: детальний посібник з використання мікроконтролерів, схем і завантажувачів. Покроковий процес від вибору чіпа до складання плати. Поради для макетування, програмування та оптимізації проекту.
Сьогодні існує багато варіантів плат Arduino, які популярні завдяки використанню фреймворку Wiring, широкому вибору шилдів та можливості зручного завантаження програм через USB. Більшість плат являють собою друковані плати з мінімально необхідними компонентами для мікросхем, що значно полегшує роботу з ними. Однак для деяких контролерів готових рішень може не існувати або вони можуть бути універсальними, що призводить до появи неточностей. Це викликає потребу в розробці власної оцінної плати для вітчизняного чіпа.
Однією з перших плат для прототипування є Basic Stamp, яка згадується в класичній літературі з електроніки. Вона включає ланцюг підготовки живлення, конвертор інтерфейсів USB-UART (раніше DB9), сокет для мікросхеми або впаяний контролер, а також макетну плату та PLC-роз’єми. Подібною альтернативою є плата на базі ESP8266, яка також використовується для макетування і прототипування.
Плати Arduino отримали широке поширення, зокрема завдяки використанню «шилдів» – плат розширення, які встановлюються на роз’єми зверху. Ці плати, зазвичай, реалізують одну-дві функції, займають чимало місця, але їх зручність полягає в освітніх цілях і можливості перевірки схем та гіпотез. Однією з перших та найбільш популярних моделей була Arduino Uno, яка стала основою для подальших розробок у цій сфері.
Цікавий факт: перша Arduino була зроблена як конкурент Basic Stamp і підключалася до ПК через порт DB25 COM. Сьогодні COM-порт став віртуальним, але завантаження ПЗ, як і раніше, здійснюється через нього.
Пізніше була випущена більш зручна плата — Arduino Nano. Її компактний форм-фактор дозволяє легко розмістити її на макетній платі, що значно спрощує розведення схем і робить роботу більш наочною. Аналогічним чином можна встановлювати ESP8266 або ESP32, які з’явилися пізніше і також підходять для макетування та прототипування завдяки схожій конструкції.
Було вирішено вибрати плату Arduino Nano, адаптувавши її під конкретний контролер. Встановлені технічні вимоги включали ключові параметри для оптимальної роботи плати, забезпечуючи необхідну сумісність та ефективність при реалізації проекту.
використання контролера К1946 або сумісних AVR,
наявність конвертора інтерфейсів USB-UART із сигналом скидання (DTR);
форм-фактор – друкована плата шириною до 30 мм та довжиною до 50 мм;
два ряди штирьових роз’ємів із кроком 2,54, micro-USB для оновлення.
Вибір micro-USB продиктований практичністю, оскільки для плати, яка використовується для налагодження та прототипування, його простіше перепаяти у разі пошкодження. Широкі ніжки micro-USB краще підходять для таких завдань, ніж тонкі контакти type-C. Крім того, дроти з таким роз’ємом доступні в багатьох магазинах. Як мікроконтролер обрано К1946, оскільки це вітчизняний аналог популярних зразків, для яких вже існують розроблені бібліотеки та середовища, що полегшують експериментування та роботу.
У створенні плати використані загальнодоступні коди, схеми та матеріали, що поширюються в документації та статтях. Основною відмінністю є наявність конденсаторів на входах мікроконтролера, що покращує стабільність роботи, порівняно з китайськими аналогами. Крім того, використано регулятор LP2985, який забезпечує більший струм навантаження, менше падіння напруги та має функцію відключення, що дозволяє підключати USB без відключення зовнішнього джерела живлення.
Проект плати був націлений на створення максимально сумісної версії з Arduino Nano. Було додано три роз’єми для порту С мікроконтролера, щоб використовувати всі контакти чіпа, які виводилися на частину плати, що легко відламується. Такий дизайн дозволяє знімати непотрібну частину для установки в “шилди”. Ідея запозичена з STM8-Discovery від STMicroelectronics, що дозволяє гнучко адаптувати плату до різних потреб.
У процесі експериментів було вирішено відійти від стандартного форм-фактора Arduino 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
Під час складання 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-файлу прошивки, що значно полегшило процес.