От Arduino к микроконтроллеру. Часть 2. Перевод прототипа в «железо».

Категории: 
Тэги: 

 

Я свое знакомство с Arduino начал с Arduino nano. Соответственно и практиковался на ней и ее буду использовать в качестве примера.

Для разработки программного обеспечения используем фреймворк Arduino, затем плавно можно от него отказаться, но это не входит в тему статей этого цикла.

Идея и цель перехода к «голому» микроконтроллеру достаточно проста:

  •  экономим в габаритах устройства
  • для пайки используем SMD компоненты- это дешевле и менее трудоемко
  •  выбрасываем все лишнее
  • определяем соответствие выводов Arduino и микроконтроллера
  •  добавляем все нужное. :-)

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

Сокращения:

  • ПО- программное обеспечение
  • МК- микроконтроллер

1. Смотрим что внутри Arduino nano и убираем лишнее:

  • Arduino nano построена на базе микроконтроллера Atmega 328p — без него нам не обойтись.
  • конвертор USB — UART — лишний хлам если нет постоянной связи с ПК.
  • стабилизатор питания на 5 вольт — пригодится если питание вашей системы будет не совпадать с питанием микроконтроллера.
  • опорный стабилизатор  на 3,3 вольт- пригодится если не хватает внутреннего опорного напряжения на 1,1 В.
  • кварцевый резонатор- может пригодиться, а может и нет. Все зависит от целей и соответственно от тактовой частоты устройства.

 

2. Ставим в соответствие выводы Arduino nano выводам микроконтроллера.

Если у вас есть программное обеспечение для прототипа, то очевидно вы захотите использовать его и на целевом устройстве, возможно на первых этапах, возможно для первичной отладки. Это имеет смысл. Это возможно и несложно.

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

Схема действий:

  • смотрим на прототипе, куда подключена периферия -> находим соответствующий вывод  микроконтроллера -> рисуем связь на схеме электрической принципиальной
  • в программном обеспечении вывод МК обозначаем, как вывод Arduino

Нам пригодится вот такая картинка (если вы знаете ее наизусть, то можно обойтись без картинки) :

И такая картинка:

 

А еще не помешает составить таблицу, которая сильно облегчит работу связки схемотехник, конструктор, программист, даже если это одно лицо.

Сначала описание таблицы:

  • номер контакта на плате Arduino nano, условно сверху вниз, отдельно левый ряд по рисунку (L) и правый ряд по рисунку (R). Пригодится если у вас уже есть схема кроссплаты в которую вы втыкали Arduino nano.
  • наименование контакта на плате, то как подписан контакт на плате и как он называется в ПО
  • номер контакта микроконтроллера, пригодится схемотехнику - наименование вывода в библиотеке CAD системы…
  • функциональные возможности, основные и дополнительные. Этот столбец имеет смысл формировать под ваш проект.

Таблица. Сопоставление выводов Arduino nano и ATmega328PU.

 

Нумерация выводов на плате.Обозначение вывода на плате.Номер контакта микроконтроллераНаименование вывода в библиотеке CAD системыФункциональные возможности. (Формируем под проект)
L 1TX131PD1TXD
L 2RX030PD0RXD
L3RST29PC6RESET
L 4GND   
L 5D232PD2INT0
L 6D31PD3INT1, OC2B
L 7D42PD4T0
L 8D59PD5T1
L 9D610PD6AIN0,
L 10D711PD7AIN1,
L 11D812PB0CLKO
L 12D913PB1OC1A
L 13D1014PB2OC1B
L 14D1115PB3OC2
L 15D1216PB4MISO
R 1Vin   
R 2GND   
R3RST29PC6RESET
R 45V   
R 5A722ADC7ADC7
R 6A619ADC6ADC6
R 7A528PC5ADC5
R 8A427PC4ADC4
R 9A326PC3ADC3
R 10A225PC2ADC2
R 11A124PC1ADC1
R 12A023PC0ADC0
R 13REF21AREFAREF
R 143V3   
R 15D1317PB5SCK

     

3. Добавляем все нужное.

Далее сформулирую некоторые решения к которым я пришел на пробных проектах:

  • загрузка ПО внутрисхемное т. к. без отладки не обойтись. У нас же учебный единичный проект, кроме того и в мелкосерийном производстве без этого не обойтись.
  • выбор программатора для внутрисхемной загрузки, достаточно очевиден- USBasp. Стоит копейки. Поддерживается многими средами разработки. Не забыть, соответствующий разъем вывести на плату.
  • внутрисхемная отладка по аппаратному UART. Не забыть вывести на плате контрольные точки Rx, Tx, GND, +5V . Приобрести конвертер USB-UART.
  • защитный диод по питанию МК для отсечки левой нагрузки при загрузке программного обеспечения. В то же время имеет смысл «легкую» периферию питать от программатора, для первичной диагностики и отладки.
  • светодиод наличия питания - светодиод + резистор на дискретном выходе ( иначе как мы запустим blink), да и вообще индикатор режимов пригодится.
  • использование микроконтроллера в DIP корпусе- малоинтересно, из-за гигантских размеров, соответственно плавно выходим на разработку печатных плат в САПР и заказу их в специализированной фирме. Мной использовался САПР KiCAD и https://jlcpcb.com/, соответственно.

Схемотехника и расположение элементов. Решения к которым я пришел на практике.

Возможно существуют и лучшие решения, но то что я привожу, работает и в моих вариантах меня устраивает.

  • схема первоначального сброса микроконтроллера, на основе RC цепи. (кнопку сброса не впаиваем)
  • кварцевый резонатор и конденсаторы в его цепи, максимально близко к выводам микроконтроллера
  • конденсаторы в цепи питания с обратной стороны платы, под микроконтроллером. Танталовый и керамический, емкостью 10 и 0,1 мкФ соответственно.
  • индикация подачи питания на плату, в цепи питания микроконтроллера - на цифровой выход светодиод и резистор, для первоначальной отладки
  • диод, отсекающий микроконтроллер от других потребителей при прошивке
  • выводы Rx, Tx, GND и +5В, для отладки программного обеспечения по RS интерфейсу
  • на плате расположите подписи элементов, для удобства монтажа. Это важно.