Русские ардуины: простые же платы, что там проверять?
Когда мы разработали первые Arduino-совместимые изделия на MIK32 Амур - ELBEAR ACE-UNO, и они завелись без «волшебного дыма» - мы воодушевились. После нескольких правок и пары итераций запустили небольшую серию – и поняли: «Хьюстон, у нас проблемы»… Далеко не все платы заводились сразу – сказывались особенности монтажа микроконтроллера (потребовалось определенное время, чтобы набить на этом шишек и наладить тех процессы и в нанесении пасты, и в ее оплавлении, и в самом выборе пасты), и иногда ошибки при монтаже на любой из стадий - авторастановщик/печь/отмывка/ручной монтаж... Как мы поняли довольно быстро - визуальный контроль не панацея, далеко не все получалось отследить «глазками»…
В итоге проверка плат после монтажа производилась вручную – в ход шли осциллограф, мультиметр и знания о том, как это должно работать. Проверялись напряжения на основных тестпоинтах, загрузка прошивки и работа самого микроконтроллера, связь по интерфейсу USB.


И делали это на первых порах не ребята на производстве, а высококвалифицированные инженеры, что конечно было в целом «из пушки по воробьям».
По мере наращивания производства стало понятно, что нужно более тщательно проверять монтаж элементов на плате и желательно так, чтобы это занимало поменьше времени.
Попытки улучшить и ускорить проверку
Для упрощения проверки плат ELBEAR ACE-UNO на MIK32 Амур была создана специальная тестовая плата. Предварительно перед ее использованием всё так же проверялись уровни напряжений на тестпоинтах и отсутствие коротких замыканий на плате по питанию.
Сначала это была просто плата со светодиодами (как на самой первой фотографии сверху), позже уже был разработана специальная тестовая плата.
Тестовая плата при использовании с проверочной прошивкой позволяла проверить и цифровую, и аналоговую части платы. На ней находился набор светодиодов для каждого вывода проверяемой платы, переключатели для перемычек BOOT, некоторые дополнительные кнопки и светодиоды. Проверочная прошивка загружалась в проверяемую плату UNO (вместе с ней загружался и начальный загрузчик), а после тестовая плата надевалась сверху на проверяемую. Для проведения проверки проверяемая плата подключалась к ПК по интерфейсу USB, а на ПК открывалась программа монитора последовательного порта.


В прошивке на первом этапе все цифровые выводы платы по очереди выставлялись в 1, при этом на тестовой плате рядом с каждым выводом должен был зажигаться свой (только один) светодиод. Эта проверка позволяла выявить непропаи или закорачивания цифровых выводов платы.
На втором этапе проверялась работа АЦП и ЦАП – на двух каналах ЦАП формировались изменяющиеся в разные стороны уровни напряжений – один на увеличение, другой на уменьшение. Формируемые аналоговые сигналы подавались на светодиоды SDA, SCL на тестовой плате, а ожидаемые значения выводились в монитор порта. По итогам сравнения ожидаемых значений с яркостью свечения соответствующих светодиодов делался вывод о корректности работы каналов ЦАП.
Для проверки каналов АЦП в монитор порта на втором этапе выводились значения, измеренные на каждом канале. По умолчанию эти значения должны быть относительно маленькими. На тестовой плате есть кнопка, по нажатию которой на аналоговые выводы проверяемой платы подается высокий уровень напряжения. В процессе проверки платы данная кнопка нажималась, а проверяющий контролировал значения, выводимые в монитор порта – все они должны значительно увеличиться. Таким образом проверялась корректность работы каналов АЦП.
Помимо этого, в процессе проверялась работа встроенных на плату светодиода и кнопки.
После выхода пакета поддержки плат ELBEAR в ArduinoIDE к проверке добавился еще один этап – загрузка проверочного скетча на проверяемую плату в ArduinoIDE по интерфейсу USB и проверка работы интерфейса UART (при получении любых сообщений микроконтроллер эхом отправлял их обратно в порт).
Автоматизированная проверка плат
С появлением плат ELBEAR ACE-NANO на MIK32 Амур появилось и желание еще как-то ускорить и улучшить проверку плат после монтажа. Хотелось использовать для проверки не светодиоды и глаза проверяющего, а другой микроконтроллер, который сам будет принимать решение об успешности прохождения проверки. И почему бы для этого не использовать микроконтроллер с точно такой же платы с точно таким же набором выводов? И специальную тестовую плату делать не придется. Так родилась наша автоматизированная насколько это возможно проверка плат. Начали мы с платы ACE-NANO.
Для проверки нужна одна уже проверенная, заведомо рабочая плата NANO – она будет платой-мастером. В эту плату загружается специальная прошивка, которая управляет процессом проверки. Проверяемая плата изначально проверяется на наличие коротких замыканий, после чего в нее загружается проверочная прошивка (а вместе с ней и начальный загрузчик), которая слушает команды от платы-мастера и выполняет их. После загрузки прошивок проверяемая плата и плата-мастер соединяются друг с другом pin-to-pin в этакий «бутерброд», и плата-мастер подключается к ПК по интерфейсу USB.


Проверка состоит из нескольких этапов:
• Stage MISO: проверяемая плата по очереди изменяет состояние цифровых выводов, а плата-мастер считывает состояние выводов и анализирует результаты.
• Stage MOSI: плата-мастер по очереди изменяет состояние цифровых выводов, проверяемая плата считывает состояние выводов, отправляет результаты мастеру, а тот их анализирует.
• Stage Analog: плата-мастер по очереди подает высокий уровень на все аналоговые выводы, а проверяемая плата каждый раз измеряет напряжение на всех своих выводах и отправляет результаты мастеру, а тот их анализирует. Проверяются и прямые каналы АЦП, и переключаемые.
• Stage OTP content: проверяемая плата считывает из OTP памяти тестовую строку и результат отправляет плате-мастеру. Если память не запитана, плата-мастер получит пустую строку, а проверяющему придется проверить плату вручную.
• Stage End Time: на этом этапе проверятся точность работы часов реального времени на проверяемой плате – при старте проверки по команде время заводится на обеих платах, а на данном этапе проверяемая плата присылает свое текущее время. Если оно близко к времени платы-мастера – с трактом часового кварца все в порядке.
На этапах MISO, MOSI, Analog в каждый момент времени активен только один вывод. Если это так – этапы проверки пройдены успешно. Если нет – в монитор порта выводится информация о «лишних» сработавших выводах – это повод проверить указанные выводы вручную.
После успешной автоматизированной проверки проводится проверка в ArduinoIDE – по интерфейсу USB в проверяемую плату загружается проверочный скетч, в котором проверяется работа встроенного светодиода и интерфейса UART – все сообщения, полученные от ПК, микроконтроллер отправляет обратно в порт. Этот этап остался неизменным.
Такая проверка для плат ACE-NANO нам понравилась, поэтому было решено сделать аналогичную проверку для плат ACE-UNO. Проверка производится точно так же, как с платами ACE-NANO. Единственное отличие – платы ACE-UNO не получается соединять «бутербродом» из-за некоторых разъемом, поэтому платы соединяются pin-to-pin проводами.
С этого момента все стали предельно довольными - все платы без исключения проходят проверку, пропустить ошибку или не заметить из-за того, что устал, просто невозможно - практически все происходит автоматически, ну а сама скорость проверки существенно выросла.
Ссылка на проект: https://elron.tech/russian-arduino-compatible-board/