Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Как-то пару лет назад была поставлена задача облегчить работу ОТК и создать для них прибор входного контроля некоторых покупных изделий. Суть проверки заключалась в измерении внутреннего сопротивления и последующей сигнализации сотруднику, что результат измерения находится в пределах заранее заданного допуска.
Оборудование с подобной функциональностью уже присутствует на рынке (милли или микроомметры). Его можно свободно купить, запрограммировать на световую или звуковую индикацию при настройке нужного диапазона, но было несколько НО. Устройство требуется сперва настроить и перед началом каждой смены нужно переключать на необходимый для работы диапазон. Да и ценник у подобного оборудования находится в пределах 50-120тыс. руб., а самих приборов нужно было сразу несколько штук.
Типов контролируемых изделий было несколько и у них совершенно разные характеристики, но самая большая проблема была общая — очень узкий диапазон измерений (от единиц до полутора десятков Ом) и необходимость обеспечения высокой степени точности (в некоторых случаях требовалась погрешность порядка 1%).
Из-за высокого ценника покупных устройств и сложности их эксплуатации была поставлена задача разработать подобное устройство самостоятельно с максимально простым способом выбора режима работы, а потом изготовить небольшую партию в количестве 8-10 штук (с некоторым запасом) и меня подключили к этой работе в качестве разработчика программного обеспечения.
Что из этого в конце концов вышло?
Так как абсолютная величина измеряемых сопротивлений очень маленькая, то была выбрана мостовая схема с четырёхпроводным подключением и схемотехник приступил к работе над прототипом схемы.
Через несколько недель я получил от него какую-то плату и сообщение, что теперь начинается моя часть работы, а он сделал все что мог, (хотя по факту ничего не работает), а дальше нужно уже мне постараться и написать прошивку таким образом, чтобы вытянуть необходимую точность, а ему самому некогда, т.к. его уже завалили другой работой.
Сказать, что я был удивлен таким поворотом событий будет очень мягко сказано. Тем не менее, исходная задача поставлена руководством и от неё никуда не деться, но схемотехник за свою часть, якобы сделанной работы, отчитался и все думают, что мячик на моей стороне.
Кое-как удалось донести до заинтересованных лиц, что рабочего железа нет и работать не с чем, на что мне было сказано, попробуй что-нибудь сделать из того, что есть.
Пришлось немного подумать и я предложил следующий вариант:
- Покупаем готовую измерительною головку с необходимым диапазоном: Миллиомметр TRM1001, измеритель сопротивления с четырьмя половинками, цифровой дисплей, измеритель сопротивления, цифровой Омметр 30 Ом. ~ 3500 руб.
- Миниатюрный процессорный модуль: WeAct STM32F411CEU6 ~ 400руб.
- Готовый блок питания, переключатели, светодиоды и стандартный пластмассовый корпус для РЭА ~ 3000-5000 руб.
- Все это собираем навесным монтажом (проще припаять и собрать в жгут два десятка проводов, чем те же провода паять к отдельной плате, которую еще и нужно разработать).
Правда при разработке прошивки пришлось немного поломать голову со способом получения результатов измерений. В продаже присутствуют измерительные головки с разными вариантами интерфейсов, RS485, RS232, TTL, но я так и не нашел описания протокола связи, поэтому решил сделать максимальной просто — припаяться непосредственно к сегментам индикатора и декодировать величину сопротивления по отображаемым на индикаторе цифрам.
Весь реверс инжиниринг для сканирования сегментов на индикаторе получилось сделать буквально за вечер. Прозвонил катоды, предположил, что оставшиеся 8 выводов, это 7 выводов семисегментного индикатора + десятичная точка и судя по осциллограмме — время развертки около 1 мс.
Но я опасался возможных проблем синхронизации при считывании данных, так как не было гарантии в стабильности тактовых частот у измерительной головки и микроконтроллера. Можно было бы попробовать привязать процедуру дешифровки цифр на прерывание по фронту импульса, но решил сделать еще проще.
Запрограммировал таймер на прерывание 3 раза за 1 мс во время которого считывались уровни сегментов и по мажоритарному принципу "два из трех" вычислял итоговый результат измерений. При такой логике, даже при плавающих частотах как минимум два измерения из трех должны быть корректными.
В результате получился вот такой первый рабочий прототип:
А вот так выглядит уже готовый мелкосерийный прибор:
Вся небольшая партия из 8 устройств обошлась примерно в ~65 тыс. руб., я получил премию и опыт в разработке не только софта, но и мелкосерийного железа, сотрудники ОТК простой и удобный в эксплуатации прибор, а компания сэкономила за счет собственной разработки несколько сотен тысяч рублей и в итоге все остались очень довольны.