Блок управления дозатором
Блок управления дозатором

История о том как мы с моим другом разрабатывали дозатор для красителей, продолжение . В этой части расскажу о том как я разрабатывал и собирал электронику, всем кому все еще интересно, прошу под кат.

Часть вторая. Электронная

Пока Евгений разбирался с железками, я приступил к электронике. Из описанного ТЗ было понятно, что необходимо обрабатывать сигналы с нескольких тензометрических датчиков. Реализовать управление шаговым двигателем, а также коллекторным мотором ворошителя. Весь интерфейс с пользователем должен быть реализован на сенсорном дисплее размером не менее 7 дюймов для комфортной работы. Так же для ускорения сушки после чистки дозатора мы решили внедрить в металическую часть корпуса электрический нагреватель от 3D принтера с датчиком температуры. Для обновления микропрограмм планировалось использовать USB, что в свою очередь ограничивало свободу в выборе дешевых микроконтроллеров, но т.к. устройство было не серийным это особо не меняло итоговую стоимость изделия.

Основываясь на требованиях, я разработал следующую структурную схему всего дозатора:

Структурная схема блока управления
Структурная схема блока управления
Структурная схема блока питания
Структурная схема блока питания

В качестве сердца конструкции был выбран МК компании STM STM32F407, это было излишне для такого функционала, но нам нужна была поддержка USB Host и это был самый доступный МК с такими возможностями.

В предыдущих конструкциях собственной разработку в качестве дисплея я использовал TFT дисплеи с резистивным сенсором и подключал их через FSMC интерфейс, очень удобная штука, но требует уйму соединений и все работа с графикой перекладывается на плечи ядра МК. В целом это не проблема при грамотно спроектированном ПО, но кода приходится писать сильно больше, да и ресурсы с изображениями куда то тоже нужно сохранить. И вот тут мне Женя предложил попробовать дисплеи от компании Nextion. Методом коммуникации и разработки интерфейса для них они чем то мне напоминали промышленные панели оператора. Т.е. вы разрабатываете все экраны и элементы в специальном редакторе, а потом загружаете этот проект в панель, с МК она общается через UART. Вся забота по хранению картинок, логике переключения экранов, и т.д. мы перекладываем на контроллер панели, а наш МК получает уведомления об изменениях произведенных пользователем на том или ином экране в конкретном элементе. Например пользователь нажал кнопку для которой мы назначили отправку уведомления в качестве реакции на нажатие, МК получит уведомление по UART. Очень удобно. Для тестов Женя даже дал мне один из таких экранов, только маленький. Я попробовал и решил его использовать в данном проекте, тем более обновлять проект в панели также можно было через тот же UART, да еще и протокол открыт. В таком случае обновление проекта можно было делать с того же носителя подключенного по USB через программу загрузчик в МК, что не противоречило ТЗ.

Самой сложной задачей оказался выбор АЦП для считывания и обработки сигналов с тензодатчиков.

Поиск решения я начал с изучения литературы и application notes от AD, у них много годных документов хорошо описывающих готовые решения и весы не являются исключением. Вот перечень того что мне в целом пригодилось при анализе, выборе и работе в программе с АЦП:

Ознакомившись с литературой, а также с некоторыми готовыми решениями я пришел к выводу что для достижения заданной точности необходимо использование АЦП с разрядностью 28 бит и определил несколько моделей АЦП в качестве кандидатов.
В моей практике я довольно много работал с АЦП, но не с таким большим количеством разрядов. Я осознавал что при такой разрядности требования к схеме, трассировке печатной платы и дальнейшей математической обработке являются не самой простой задачей с которой мне придется совладать.

Прежде чем окончательно выбрать конкретную модель АЦП я решил провести ряд экспериментов с теми моделями, которые у меня были под рукой, среди них был и дешевый вариант HX711. Также была быстро спроектирована и изготовлена плата для тестов с использованием AD7710.

Для дальнейших тестов я использовал тензодатчик на 5 кг, который я нагружал при помощи лабораторных грузов. Для оценки качества работы АЦП я сделал небольшие программы, которые считывали сырые данные из АЦП с фиксированной частотой и оправляли их в UART, в дальнейшем я сохранял полученные данные и обрабатывал их в Excel. Я выполнял замеры для 2х случаев: при подключенном датчиком и статически нагруженном на 50 граммовую гирю, что бы оценить комплексный шум АЦП + датчик. А также измерения с заземленным входом, что бы понять как шумит сам АЦП.

В качестве метода оценки качества измерений я выбрал банальный расчет плотности распределения значений отсчетов. Критерием качества по сути выступает «кучность» множества значений в окрестностях правильной точки и при использовании качественного АЦП в сочетании с корректной схемотехникой дает в результате график очень близкий к Гаусcовскому распределению. Такие значения хорошо фильтруются при помощи скользящего среднего или медианного фильтра. Этот метод описан в одном из документов в списке выше.

Исследования я начал с дешевого HX711. Вот некоторые результаты мои расчетов, как можно увидеть сигнал имеет абсолютно случайную величину, даже без использования датчика, т.е. это выдаем сам АЦП. Я проводил эксперименты с разными значениями коэффициентами усиления, в целом картина только усугублялась при увеличении коэффициента усиления.

HX711
HX711

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

AD7710
AD7710

Если бы не нужно было производить динамическое измерение в короткие промежутки времени, то с большим размером выборки и помощи математики можно было использовать и дешевый АЦП, но это было бы очень медленно и меня такой результат не устраивал. Поэтому я продолжил работы с микросхемами от AD и попробовать еще один вариант более специализированный под работу в весоизмерительных комплексах - AD7730. К тому же, у меня было где подсмотреть для нее разводку платы, что внушало дополнительный оптимизм на успех.

С этим АЦП я также провел ряд тестов, но к сожалению результаты у меня не сохранились, в итоге именно этот АЦП я и выбрал для дальнейшей работы.

Вот несколько сохраненных фоток процесса тестирования:

Тесты с AD7730
Тесты с AD7730
Тесты с AD7710 и HX711
Тесты с AD7710 и HX711

После анализа и окончательного утверждения выбора АЦП, я разработал отдельно структурную схему данного узла, т.к. необходимо было разобраться с питанием АЦП, а также полностью гальванически отвязать цифровую часть МК от блока АЦП.

Структурная схема АЦП
Структурная схема АЦП

Завершив все тесты и эксперименты над сложными для меня узлами я был готов к проектированию полной схемы. Для этого был использован бесплатный сервис EasyEDA. По функционалу он сильно уступал Altium Designer, но при этом его функций было больше чем достаточно для решения моих задач сквозного проектирования, к тому же по интерфейсу и горячим клавишам он сильно повторяет Altium.

Для удобства работы со схемой, она была разделена на логические участки и вычерчена на 8 листах.

Обвязка микроконтроллера стандартная, схемам сброса и запуска загрузчика не представляет из себя ничего особо интересного. Для управления питанием и защиты USB была применена специализированная микросхема. Для хранения настроек была установлена микросхема EEPROM.

Схема МК
Схема МК
Схема USB
Схема USB

Для управления шаговым двигателем я установил стандартный модуль на DRV8825, он меня устраивал по все характеристикам, к тому же у него есть сигнал ошибки по которому я мог оценивать состояние работы мотора.

Коллекторный двигатель ворошителя управлялся через полевой транзистор и защищен предохранителем. При выходе из строя предохранителя, МК получал сигнал об этом при помощи схемы на оптопаре. Это так же позволяло делать мониторинг работы двигателя и сообщать пользователю о том что пошло не так, толи мотор заклинило или сильно возросла нагрузка на валу. Самовостанавливающиеся предохранители позволяли возобновлять работу устройства после устранения механических неисправностей без вмешательства в корпус контроллера дозатора.

Схема управления двигателями
Схема управления двигателями

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

Дискретные входы\выходы
Дискретные входы\выходы

Блок АЦП состоит из отдельных источников для раздельного питания цифровой части, аналоговой части АЦП, а также третий источник используется как опорный, от него же осуществляются питание датчиков для уменьшения шума в сигнале. Сигналы с датчиков подаются на входы АЦП через RC фильтры, смена полярности для питания датчика не применялась, хотя много написано о том, что это сильно увеличивает стабильность и качество измерения.

Схема блока АЦП
Схема блока АЦП

Для питания устройства был использован готовый БП от компании MeanWell EPS-65-12 - 12В, 5.42А, 72Вт. Остальные необходимые напряжения были сформированы уже на плате. Для питания АЦП был использован DC/DC преобразователь с гальванической развязкой AM1DE-0505DZ с двух полярным выходом, это позволило сформировать 10 вольт, смотрите схему ниже:

БП часть 1
БП часть 1
БП часть 2
БП часть 2

После завершения разработки схемы я приступил к разводке платы, но для начала мне пришлось определиться с ее габаритами. В качестве корпуса была выбрана готовая модель от Gainta - G3127, Женя помог мне с 3D моделью для нее и я начал проектировать будущий блок управления для дозатора. Сначала сделал плату размером в половину площади дна коробки, а во второй половине разместил пару БП ( один только для питания нагревателя сушилки, а второй для питания всех остальных узлов).

Первая версия компонновки
Первая версия компонновки

Но после первых попыток расставить все компоненты на плате я понял, что они все на нее не влезут и мне пришлось изменить компоновку расширив плату на все дно корпуса, а блоки питания перенести на «второй этаж», установив их на стойках:

Вторая версия компоновки
Вторая версия компоновки
Внешний вид в 3D
Внешний вид в 3D

После всех согласований размеров, и убедившись что места теперь хватит для всего, я приступил к трассировке платы:

PCB
PCB

Изготовление плат было заказано в Китае, а пока они ехали ко мне, я начал приобретать необходимые компоненты для сборки. Т.к. не все компоненты было легко достать, то на этапе проектирования схемы я старался закладывать альтернативные модели компонентов и проектировал для них отдельную разводку, если они не были полными аналогами и пин в пин совместимыми. Поэтому покупались те модели, которые были в наличии. Время ожидания изготовления плат не прошло зря, я начал разработку первых версий ПО, поэтому к моменту приезда плат у меня уже было что тестировать. Для проверки кода и отладки была задействована гора отладочный и макетных плат, но это позволило сильно сократить сроки разработки и упростило проверку аппаратных решений, некоторых даже на начальных этапах проектирования. По истечению нескольких недель платы наконец были у меня.

Изготовленные платы
Изготовленные платы

После нескольких часов сборки, первая плата приобрела вот такой вид:

Первые тесты после сборки
Первые тесты после сборки

К этому моменту мы поняли, что нагреватель для сушки нам таки не нужен, поэтому компоненты для этого узла я не устанавливал. После сборки платы и полного тестирования всех ее узлов, приступил с изготовлению корпуса блока управления дозатора, точнее установки всех необходимых разъемов и органов управления в готовую коробку. Процесс не сложный, но когда хочется сделать хорошо, то делать нужно не торопясь и использовать хороший инструмент. Отверстия под круглые разъемы я сверлил на станке при помощи ступенчатых сверл. Маленькие прямоугольные отверстия для выключателя и разъема питания доводил при помощи напильников и надфилей, так как в наш ЧПУ в таком положении коробка не входила, не хватало высоты портала, а вот отверстие под дисплей мы уже вырезали на ЧПУ, что бы все было совсем ровно.

Врезка дисплея
Врезка дисплея

Плата была закреплена при помощи винтов к корпусу, а блок питания установили над основной платой на нейлоновых стойках. В таком положении он легко снимался при необходимости доступа к элементам на основной плате находящимся под ним. Итог такой работы выглядел уже прилично и блок управления был полностью готов к дальнейшим работам над разработкой ПО и его наладкой, но об этом мы поговорим в следующей части.

Итоговая конструкция
Итоговая конструкция
Итоговая конструкция
Итоговая конструкция
Итоговая конструкция
Итоговая конструкция
Собранные блок на испытаниях
Собранные блок на испытаниях

Комментарии (12)


  1. IDDQDesnik
    22.05.2023 11:15

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


    1. Nikopol_86 Автор
      22.05.2023 11:15

      Перфекционист во мне абсолютно с Вами согласен, но так было проще развести и лень поборола.


  1. placidity_master
    22.05.2023 11:15
    +2

    немного странно выглядят некоторые вещи.

    Hidden text

    DRV8825
    вывод fault по документации ВЫХОД открытый коллектор.
    у Вас на схеме он коротит питание 3.3 В ?

    земля аналог, питание цифра, в чём юмор ?

    на схеме вывод 1 подключён к конденсатору,
    но вывод НА СХЕМЕ подписан как "не подключён".
    хотя по документации вывод называется Bypass

    изображён 2 полярный изолированный источник.
    не хорошо общий вывод 5 оставлять висеть в воздухе,
    надо через конденсаторы соединить с 4 и 6 выводом.
    либо тут ошибка, так как COMMON и есть GND для второй стороны.

    U7: AD7730BNZ
    в чём смысл изображать две разные земли
    и соединять их напрямую ?
    вывод 9 AVDD идёт на "простую" землю через конденсатор.
    вывод 23 DVDD через конденсатор идёт на "аналоговую" землю.
    в чём юмор делать всё наоборот ?


    1. Nikopol_86 Автор
      22.05.2023 11:15

      Отвечу по порядку на Ваши замечания:

      1. R12 для DRB8825 не установлен, там есть комментарий в схеме. Он нужен только при использовании другого модуля на A4988.

      2. Тут тоже все верно, т.к. это "цифровая" земля модуля АЦП, а он изолирован от "цифровой" земли остальной платы. Аналоговая земля модуля АЦП обозначена просто треугольником без подписи. Вот выбор именования с моей стороны не очень удачен это факт, немного путает.

      3. Если честно, то я даже не обратил внимание на то что обозначение в стандартной либе отличается от офф документации, но подключение тут тоже корректное.

      4. На счет конденсаторов в двухполярном преобразователе. Тут я с Вами соглашусь, возможно стоило их установить.

      5. Если Вы еще раз внимательно рассмотрите схему модуля АЦП, то поймете, что аналоговая и цифровая земли соединены только в одной точке. Разводка на плате была сделана так же, что эти контактные площадки соединялись в близи источника питания. В разной литературе в это место рекомендуют устанавливать дополнительные фильтры или ферритовые бусины, но я не стал.

      Спасибо за внимательное изучение схемы и за конструктивные вопросы!


      1. placidity_master
        22.05.2023 11:15
        +3

        1. моя ошибка, бегло смотрел схемы, и комментарий прочитал криво.

        2. можно придумать что то типа GND1, GND2, GND3, где цифры как степень "шумности".

        1. прикол в том что редактор МОЖЕТ запутать Вас самого.
          когда заливку или разводку будете делать,
          редактор может подсветить синхронно
          все соединённые земли.
          и чтоб такого не было, их лучше соединить
          через резистор на 0 Ом, и тогда при трассировке
          редактор платы будет подсвечивать
          разные земли по отдельности,
          и места для ошибок будет меньше.
          а самое главное что "заливка" будет выглядеть по другому
          и это сразу бросится в глаза
          и станет ясно где не так полигоны расставлены.


        1. Nikopol_86 Автор
          22.05.2023 11:15

          Да, стоит взять на заметку Ваши предложения, спасибо!


        1. VT100
          22.05.2023 11:15

          прикол в том что редактор МОЖЕТ запутать Вас самого.
          когда заливку или разводку будете делать, редактор может подсветить синхронно все соединённые земли. и чтоб такого не было, их лучше соединить через резистор на 0 Ом

          Как вариант (PCAD что-ли) — ничего не рисовать в схеме, а в трассировке сделать полигон, принадлежащий двум цепям (tie net) и соединить им. Но тут — надо не забыть сделать этот полигон хотя бы со второй ревизии платы.


      1. placidity_master
        22.05.2023 11:15
        +2

        кстати, если люди МОГУТ соприкасаться с проводами
        на "холодной стороне", то провода от входа 240VAC
        лучше сделать в двойной изоляции, чтоб
        с "горячей" стороны не пробило на "холодную",
        и случайно не дёрнуло током людей.
        2 слоя изоляции делают для того чтоб
        трещины в изоляции не становились "прямыми",
        крайне мало вероятно что 2 изоляции
        треснут в одном месте синхронно.
        И заземление на входе тоже лучше использовать по прямому назначению, если БП пробьёт, то УЗО спасёт людей/технику.


      1. VT100
        22.05.2023 11:15

        R12 для DRB8825 не установлен, там есть комментарий в схеме. Он нужен только при использовании другого модуля на A4988.

        Однако номинал — должен быть правильный. А то потом так и впаяете перемычку.


        1. Nikopol_86 Автор
          22.05.2023 11:15

          Так там и должна быть перемычка для модуля на A4988. Посмотрите схему подключения модуля на этой микросхеме и сравните ее со схемой на DRV8825.


  1. VT100
    22.05.2023 11:15

    Исследования я начал с дешевого HX711. Вот некоторые результаты мои расчетов, как можно увидеть сигнал имеет абсолютно случайную величину, даже без использования датчика, т.е. это выдаем сам АЦП. Я проводил эксперименты с разными значениями коэффициентами усиления, в целом картина только усугублялась при увеличении коэффициента усиления.

    Схема была — по типовой или своя? Сохранились ли данные о номиналах пассивки?
    Возможно, авторам ИМС не вполне удались стабилизатор AVdd и/или опорный источник...


    При выходе из строя предохранителя, МК получал сигнал об этом при помощи схемы на оптопаре.

    Полькольку силовая земля не изолирована от земли МК, то можно было бы обойтись и транзисторами.


    Светодиоды оптронов дискретных входов — хорошо было бы зашунтировать резисторами (1-10 кОм, на вскидку) и обратными диодами.


    Напряжение питания Ext было бы неплохо увеличить до 24 В, чтобы следовать в русле "промавтоматики".


    1. Nikopol_86 Автор
      22.05.2023 11:15

      Схема была — по типовой или своя? Сохранились ли данные о номиналах пассивки?
      Возможно, авторам ИМС не вполне удались стабилизатор AVdd и/или опорный источник...

      Для HX711 использовалась готовая заводская плата от ребят из поднебесной.

      Поскольку силовая земля не изолирована от земли МК, то можно было бы обойтись и транзисторами.

      Тут вероятней всего Вы правы, можно было взять сигнал после предохранителя и через инвертор на одном транзисторе подать на МК, но в тот момент я посчитал что решение на оптроне гарантирует не попадание высокого напряжения на вход МК. Хотя Ваше решение имеет право на жизнь.

      Светодиоды оптронов дискретных входов — хорошо было бы зашунтировать резисторами (1-10 кОм, на вскидку) и обратными диодами.

      Это Вы уже совсем в пром электронику свернули, тогда уже и 24В нужно было формировать для работы с дискретными входами\выходами, а у меня они на 5 Вольт рассчитаны в данной схеме. (Упс, Вы же об этом и написали в последнем абзаце). В общем я с Вами тут спорить не буду, замечание по сути корректное, но я таких целей перед собой не ставил на этапе разработки.