Saturday, January 8, 2022

Alien Die - летопись проекта с картинками и советами

Как я будучи полным нубом дизайнил и паял свой первый проект на голом микроконтроллере


Жил был программист, и случился у него кризис среднего возраста.
Подобрался и потребовал сделать что-то новое, и безбашенное:
  • разработать с нуля печатную плату
  • сделать устройство с голым микроконтроллером, чтоб никаких Arduino
  • спаять микроскопические SMD компоненты
  • и всё это на часовой батарейке.
В общем, взял он в руки паяльник и стал думать.

Идея

Пусть это будет маленькая карманная игрушка, например крестики-нолики. 9 кнопок на лицевой панели. Под каждой кнопкой светодиод на два цвета, например, красный и зеленый, чтобы обозначать ходы разных игроков. Потом добавлю в нее еще игр и чего-нибудь полезного. 
Микроконтроллер должен быть очень маленький и не требовать никакой дополнительной обвязки. Не хотелось бы связываться с другими чипами, типа сдвиговых регистров, поэтому кнопки и светодиоды будут организованы в матрицы.
Я перепробовал несколько разных программ для рисования принципиальных схем и самой удобной оказалась EasyEDA Designer находящаяся на одноимённом сайте https://easyeda.com/editor. Ее вообще можно запускать в браузере. Что самое приятное в ней уже есть огромная библиотека компонентов в том числе маленький симпатичный микроконтроллер AtTiny2313, у которого достаточно пинов для всех трех матриц - матрицы кнопок, и матрицы красных и зеленых светодиодов. Правда у него совсем немного памяти для программ - всего 2 килобайта, и 128 байт оперативной памяти. Но это как раз замечательно: Заодно испытаю свои скилы программирования. :-)
Забегая вперед скажу, что один килобайт из этих двух ушел на стейт машину которая перерисовывает экран в реальном времени и сканирует кнопки, управляет прерываниями и режимами энергосбережения. Зато во второй килобайт удалось запихать:
  • анимированную менюшку,
  • скрин-сейвер,
  • несложную, но интересную головоломку,
  • крестики-нолики,
  • два генератора случайных чисел в виде кубика и "орел-или-решка",
  • таймер (последние две вещи удобны для настолок),
  • плеер и редактор анимаций.

Разбираемся со схематикой

Не буду рассказывать, как рисовать принципиальные схемы: во-первых, EasyEDA очень простая, во вторых, на их сайте полно уроков, в-третьих, я сам плохо в этом деле разбираюсь.:-)
Вот такая получилась схема:
Совет №1: Всегда добавляйте резистор к любому светодиоду. Если вы не знаете сколько надо Ом, используйте удобный онлайн калькулятор. Я к своему стыду этого не знал, поэтому светодиоды в моей железке будут жить очень недолго, хоть я и выбирал их вольтаж максимально близко к вольтажу на пинах контроллера.

Корпус

Со схемой и комплектующими определились.
Пришел черед упаковать это всё в "красивый" корпус.
По легенде создатель КПК Palm носил в кармане деревянный брусок и ножик и постоянно подтачивал этот брусок придавая ему максимально хваткую форму. Поэтому Palm оказался таким удобным. У меня все проще: устройство имеет сетку кнопок 3х3, поэтому пусть будет квадратным. Длина стороны диктуется размером держателя батарейки. Толщина устройства - тоже батарейкой. Проще некуда.
Будем рисовать масштабный прототип.
Я перебрал множество CAD-пакетов и остановился на Fusion 360. Он бесплатен для самодельщиков и довольно удобен. На официальном сайте после регистрации надо скачать месячную демку, а потом получить годовую лицензию самодельщика - это заполнение одной формы. Каждый год лицензия продлевается через ту же самую форму.
Не буду рассказывать как этим CAD-ом пользоваться - на Youtube полно видеоуроков.
Итак моделька github/alien-die/stls (там уже финальная версия):
Она же напечатана:
Она же очищена от саппортов (средняя деталька - это имитация будущей печатной платы):
Размерная моделька в сборе:


Совет №2: Если есть 3D принтер, делайте размерные модели со всеми внутренностями, пусть даже фейковыми. Так можно не только оценить удобство использования, но и поймать всякие косяки сборки, когда детали не подходят или цепляются. Я нашел и исправил не зацепляющиеся замки, неправильные допуски и посадки, и главное понял, что торчащие из корпуса кнопки - выглядят глупо и просто неудобны :-)

Глаза!

Тем временем пришли микроконтроллеры, и я понимаю, что без самых больших паяльных очков я их даже не могу разглядеть (SD и Micro SD для масштаба).
Меня выручили вот такие очки (ищутся на любом маркете по ключевым словам "Head Mount Magnifier"):


И сразу три совета:
№3: У большинства моделей очков сменные "стекла" удерживаются весьма хлипким прижимом. Наклеенный на ушко на стекле кусочек скотча, сделает его толще и обеспечит крепкое соединение. Я уронил и разбил одно стекло прежде чем это понял.
№4: В комплекте должна быть эластичная лента для головы, используйте только ее. Вы будете смотреть на рабочий стол сверху вниз, и обычные дужки не удержат очки на голове - будут сползать.
№5: Эти стекла - поликарбонат. Держите их подальше от ацетона и его паров иначе помутнеют и тогда - только выбросить.

Прототипируем схему

Прежде чем рисовать разводку платы, нужно собрать прототип на breadboard-е (макетке). На такой:
Зачем? Так можно:
  • убедиться, что все работает,
  • свободно менять конфигурацию устройства - переставлять, добавлять и убирать компоненты,
  • менять пины при одновременном изменении прошивки контроллера,
  • трогать тестером/осциллографом любое соединение.
А когда все готово - можно и запекать дизайн в виде PCB.

Совет №6: Даже если поначалу макетирование кажется избыточным, все равно собирайте свое творение на макетке. Это сто раз окупается и по времени и по деньгам.

Все о BreadBoard-ax можно узнать на этом сайте (гугло-перевод на русский) how-to-use-a-breadboard. Там можно узнать все, даже о том, откуда взялось такое странное название "BreadBoard".
Итак у нас есть крошечный микроконтроллер и макетка которая требует DIP/Through Hole компонентов. Нужен переходник. Опять же ищется на любом маркете по ключевым словам SMD to DIP adapter. В моём случае контроллер имеет корпус QFN-20 с шагом контактов 0.5 мм. Я нашел такой переходник на ebay за пару долларов. Если бы не нашлось, я бы сделал его как отдельную PCB. В этом случае можно нарисовать сразу много разных переходников для разных корпусов, и распилив его дома на части, получить сразу коллекцию переходников всех типов и размеров.
Мой переходник имеет с одной стороны шаг контактов 0.5 а с другой - 0.6 мм. Это, конечно, очень универсально, но с другой есть опасность перепутать :-)
Контроллер к переходнику я припаял термопастой и феном. К сожалению, картинки не сохранились, но если вам любопытно, вы можете посмотреть в следующей главе как я припаиваю точно такой же контроллер к готовой плате. Технология тоже самая.
А здесь я хочу обратить внимание на то, как припаиваются ножки к переходнику.
Совет № 7: Для поддержания прямых углов нам поможет та же макетка.
Вставляем в нее ножки, но не глубоко, а то она расплавится при пайке:
... Кладем сверху плату:
... И пропаиваем, чередуя максимально далекие ножки. 1-20-6-15-2-19-7-14 и т.д. Это делается для того, чтобы дать ножкам остыть и не расплавить макетку.
В результате получится как-то так. Аккуратно, но грязно.
Разводы флюса не только портят картинку но и приводят к быстрой коррозии. Поэтому:
Совет №8: Помойте плату изопропиловым спиртом, потрите ее зубной щеткой, промокните ватной палочкой. И она долго будет радовать вас красивым внешним видом и безотказной работой. Даже если ваш флюс помечен как бессмывочый, лучше его смыть все равно.
В результате У меня получилось еще одна самодельная "Ардуинка".
На картинке слева направо:

На картинке слева направо:

Model

CPU

Speed (MHz)

RAM

Program Memory

USB

PINs

Price $

Teensy 4.0

ARM

600

1 Mb

2Mb

micro

40

20

Teensy 2.0

AVR

16

2 Kb

32Kb

mini

25

16

Моя поделка

AVR

1

128 bytes

2Kb

-

17

2

Подключаем программатор.
Cовет №9. Купите официальный заводской программатор, например AVRISP MKII. Он сэкономит вам тонну времени и нервов. Я лично потратил месяц пытаясь завести программатор на Arduino. Я нашёл и исправил десяток ошибок в скетче программатора, и это не помогло - все мои припаянные контроллеры не определялись программатором, сделанным из Arduino, а купленный за $20 ISP/PDI программатор влет решил все мои проблемы.
Программатор должен соответствовать модели контроллера:
  • Старые AVR программируются по последовательному ISP протоколу.
  • Новые AVR - по UPDI.
  • ARM-ы по SWD/JTAG
Для общения с программатором AVR используется command-line утилита AvrDude. Она присутствует в каждом дистрибутиве Arduino и Avr Studio. Неплохое описание можно найти здесь: ladyada.net...avrdude.
Подключенный программатор загорелся зеленым, значит он увидел логические уровни на пинах. Если горит оранжевым, проверьте линии питания VCC/GND. Зеленый - это еще не гарантия, что все работает, если avrdude не сможет прочитать сигнатуру устройства, проверьте MISO/MOSI/RESET/CLK. Они должны звониться до пинов и не коротить за другие пины. Проверьте пайку на bridging.
После того, как AVRDude успешно прочитал сигнатуру, добавим к схеме остальные компоненты: 
 Для таких простых типов компонентов как LEDы и кнопки не обязательно паять переходники с SMD, которые будут использоваться в финальном изделии. Можно взять готовые through-hole компоненты, которые часто идут в комплекте с breadboard-ом.
Совет №10. Прозванивайте мелочевку перед установкой на breadboard Из 18 моих светодиодов три были неисправны.
Поскольку мне была нужна матрица 3x3 кнопок, а breadboard содержит только 2 ряда поперечных соединений, Я соединил 2 breadboard-а. У них для этого есть удобные пазы. Ставим кнопки:
Соединяем их в грид и ставим два грида из красных и синих светодиодов.
Кнопки имеют короткие ножки, Поэтому соединять их в матрицу приходятся джамперами. У светодиодов наоборот ножки длинные поэтому для их соединения в матрицу достаточно просто согнуть ножки. Правда и матрица получается не очень ровная. Помните: светодиод - штука полярная. Земля - короткая ножка. Не обращайте внимание на синий светодиод затесавшийся в группу красных. Будем считать его "логически красным". :-)
Соединяем матрицы светодиодов и кнопок с пинами:
Теперь можно писать и отлаживать прошивку. Я лично предпочитаю AVR Studio в ней есть эмулятор контроллера.
О том как писалась прошивка, я сделаю отдельный пост. А пока просто заливаем и убеждаемся, что все работает
Готовую прошивку можно найти здесь: github/alien-die/firmware.

Печатная плата (PCB)

Для дизайна печатной платы я использовал всё тот же EasyEDA на котором рисовал принципиальную схему. Опять же по EasyEDA есть масса видеоуроков, не стоит их тут дублировать.
Герберы здесь: github/alien-die/gerbers.
Совет №11: Если у вас двухслойная плата, и одна сторона почти полностью занята контактом батарейки, вы можете реализовать пересечения проводников, используя связанные контакты компонентов. Я выбрал кнопки с четырьмя контактами, которые попарно соединены. Между соединенными ножками этих кнопок достаточно места для пропуска до четырех токопроводящих дорожек.
Совет №12: Какая бы у вас ни была мелкая печатная плата и плотная схема, обязательно выводите на нее отдельные контакты для тестирования/прошивки контроллера. Мне пришлось припаивать MISO/MOSI прямо к ногам кнопок. Не делайте так. Даже если нет места для male-female разъемов, выведите площадки под pogo-pins. Программировать будет существенно проще. 
Я заказал платы прямо из EasyEDA на том же сайте JLCPCB.com. Это обошлось мне в $4 за пять плат с доставкой. Итак у нас есть плата и все необходимые компоненты (компоненты можно заказать на digikeys или mouser.com).
Если у вас есть reflow oven, это замечательно, и я вам даже немного завидую. Если нет - вам придётся греть плату горячим воздухом.
Да вы не ошиблись я буду паять самым обыкновенным строительным феном. :-)
Если это тупо, но работает - то это не тупо.
Совет №13. Если вы столь же безбашенны как я и готовы использовать строительный фен, поставьте его на максимальную температуру и минимальный поток воздуха и снимите с него любые раструбы и фокусирующие насадки, иначе сдуете все детали.
Я закрепил фен в держателе для фотоаппарата, примотав его термостойкой изолентой.
Нам также потребуется термометр. Температуру пайки нужно контролировать очень аккуратно. Большинство радиотехнических тестеров идёт в комплекте с термометром вот он-то нам и пригодится.
Еще потребуется устройство, которое называют helping hands или third hand. Но если вы занимаетесь пайкой, оно у вас уже есть.
 Закрепляем в helping hands какую-нибудь левую плату, которую не жалко. Закрепляем на ней термометр и подбираем расстояние до фена которое обеспечивает 250 градусов цельсия. Теперь стоящие на столе helping hands обеспечивают именно такое расстояние и следовательно именно какую температуру.
Возвращаемся к нашей плате и нашему контроллеру. Мажем контактные площадки паяльной пастой. Кстати паяльную пасту нужно хранить в холодильнике.
Совет №14: Если вам дороги ваши нервы и качество результата, потратьте дополнительные 8 долларов на шаблон для нанесения паяльной пасты. Точно и ровно нанесенная паста даже более важна для финального качество пайки, чем правильный источник горячего воздуха.

Берем пинцетом и аккуратно ставим на место контроллер, выравнивая его по границам контактных площадок.
Аккуратно, чтобы не сбить настройки высоты закрепляем плату в зажимах helping hands. Она должна быть строго горизонтальной. Поток горячего воздуха и так может сдуть компоненты. Если еще и гравитация будет помогать им соскользнуть, будет совсем обидно.
И не забываем про термометр.
Последовательность пайки:
  1. Берём helping hands за основание и опускаем его чуть ниже стола, подносим плату под поток горячего воздуха и следим, чтобы температура была в пределах 150 градусов цельсия. Ждем, чтобы плата равномерно прогрелась и в паяльной пасте растаял флюс.
  2. Далее поднимаем helping hands и ставим на стол, обеспечивая ранее скалиброванное расстояние между платой и феном.
  3. Теперь следим чтобы температура поднялась до 240 градусов, смотрим на плату и убеждаемся что компоненты не поехали, что паста расплавилась, стала металлом и заняла свои места и притянула на свои места компоненты силами поверхностного натяжения. Подправляем пинцетом, если надо.
  4. За это время температура поднимется до 250 градусов и у нас есть примерно 3 секунды, чтобы подвигать плату и подуть на все места пайки.
  5. После чего плата убирается в сторону и остывает.
У меня не было шаблона и я намазал слишком много пасты, и эта паста образовала мосты. Исправим это паяльником.
Совет № 15: У вашего паяльника должно быть узкое жало с плоской фаской. Вот такое:
Чтобы убрать мостики из припоя, Нужно нанести на торец между платой и корпусом контроллера немного флюса. И провести паяльником. Припой равномерно прилипнет к контактным площадкам и останется только всё прозвонить.
Вот так красиво и аккуратно все получилось.
Наносим паяльную пасту на обратную сторону, туда где будут припаиваться кнопки и светодиоды. Перед установкой светодиоды нужно прозвонить, чтобы найти неисправные и определить полярность.
Ставим кнопки и убеждаемся что паяльная паста смочила все контакты.
Повторяем вышеописанную процедуру с установкой в helping hands, прикреплением термометра:
Снова греем до 150° и делаем короткий нагрев до 250.
Я опять добавил слишком много паяльной пасты и у меня склеились контакты красных и зеленых светодиодов. Пришлось их разделять паяльником флюсом и даже оловоотсосом.
После того как все прозвонилось, я припаял держатель для батарейки, и поставил саму батарейку.
И тут я обнаружил, что одну контактную площадку для красного светодиода я забыл соединить с пином контроллера. Отсутствует одна перемычка между слоями (via).
Совет № 16: проверяйте правильность разводки средствами EasyEDA прямо непосредственно перед созданием герберов. Даже если вы проверяли 5 минут назад и всё было хорошо, все равно еще раз проверьте прямо перед созданием герберов.
Я выкрутился, припаяв провод от витой пары. Да выглядит это как бревно. К сожалению это был единственный одножильный провод на моем столе. А многожильные тут использовать очень сложно: они не держат форму. Вообще лучшие проводки для байпасов - получаются от старого параллельного IDE-шлейфа винчестера. Не выбрасывайте.
Итак, всё собрано. Можно отмывать плату от флюса и включать для smoke-теста.
Работает!
Упаковываем устройство в корпус. Как я уже сказал выше, первая версия корпуса с торчащими из него кнопками мне совершенно не понравилась. Поэтому в новой версии микропереключатели спрятаны внутрь.
Если кто-нибудь захочет повторить, STL-файлы здесь: github/alien-die/stls.
Вот так выглядит корпус из белого ABS-пластика:
Но мне больше понравился прозрачный PLA-пластик: Есть в нем какой-то шарм шестидесятых :-)
Уcтройство в работе:
Итоги и выводы:
  • Недорого. Плата обошлась меньше доллара даже за микропартию в 5 штук. Компоненты - $12. В больших партиях цены уменьшаются в разы.
  • Спрос есть. На рынке есть игрушки с сенсорным экраном и механические спиннеры. Но нет их комбинаций. Ниша свободна. Объективно игрушка получиласть интересная, сын унес одну в школу и там продал за $15.
  • Можно сделать версию на более мощном контроллере (стоит он столько же) и добавить туда еще головоломок.
  • Но главное не это. Главное, я набил шишек, сделал выводы, научился делать микроконтроллерные устройства без Ардуино, и поделился своей историей с вами :-)

No comments:

Post a Comment