Работа с китайской микросхемой АЦП Hx711

Причина написания этого поста заключается в желании разобраться с модулем 24 разрядного дельта сигма преобразователя АЦП на основе микросхеме Hx711. Сам преобразователь собран в виде готового модуля по схеме включения рекомендованного производителем (????). Замечания о работе данного модуля есть и на данном сайте в блоге Герасименко Андрея «АЦП НХ711 от 3,3V- не верьте китайской документации и не только…».

Для испытания данного модуля была собрана схема на основе микроконтроллера ATmega16, модуля АЦП, двустрочного жки BC1602, на основе контроллера HD44780, четырех кнопок. В качестве среды разработки использовалась программа Code Vision AVR, version 1.25.9 professional, AVR Studio 4, Version 4.09.0.338, программатор AVR JTAG USB, позволяющий не только программировать кристалл, но и отслеживать пошагово, если это необходимо, выполнение программы в микроконтроллере, практически в режиме реального времени.



В качестве источника сигнала для АЦП был выбран тензодатчик, китайского производства, с наибольшим пределом взвешивания 40 кг. и стандартным узлом встройки датчика. Следует отметить, что применение «родных» узлов встройки, позволяет получить от тензодатчика типа Single Point, модели CZL A6 все постулируемые выходные данные. Так, тензодатчики типа Single Point, при использовании размера, оговоренной в ТУ платформы для расположения взвешиваемого груза, устроены так, что сигнал разбаланса тензомоста не зависит от положения груза на платформе. Именно МЕХАНИЧЕСКИЕ свойства тела датчика: геометрические размеры, расположение наклеиваемых тензорезисторных пленок, особенно вырез «косточки» посредине тела датчика, размер платформы, влияющий на крутящий момент прилагаемый к телу датчика определяют эту самую независимость.



Ну и последний источник это «ГОСТ 29329-92. Весы для статического взвешивания. Общие технические требования.» Этот ГОСТ определяет свойства средств измерения веса. Важно так же работа с офисной программой EXСEL. Я использую EXCEL 2003 XP3. Это позволяет быстро обработать полученные результаты используя готовые методы.

Надеюсь вся информация, необходимая для повторения моих опытов, приведена полно.

Теперь сама программа, используемая мною, для работы с модулем. Программа ориентирована на ПРОВЕРКУ, и вряд ли прямо, т.е. без изменений, может быть применена для каких то прикладных нужд. Хотя, как говорят, «смотря куда прилагать».

Сама программа представляет собой блочную структуру. Состоит из 4 подпрограмм и пятой основной main. Первая подпрограмма: ReadCount, считывает данные с модуля АЦП и формирует их в переменную Count.

CreatInput, формирует входной массив данных преобразования из 32 значений.

CreatOutput, формирует выходной массив данных преобразования АЦП, путем организации скользящего среднего, с размером окна в 16 данных.

Keys, простая программа для реакции на нажатие кнопок.

Ну вот и все. Переменные в основном все глобальные, тем более, что ресурсы меги позволяли.



Основная программа начинается с того, что создает входной массив CreatInput, затем происходит фильтрация входных данных методом скользящего среднего. Выбор данного фильтра основан на следующем. При работе программы, данные на дисплее меняют свое значение в достаточно большом диапазоне. Мною были сняты значения АЦП при нулевом усилии на платформу и сведены в таблицу. Снятие значений получалось путем использования JATAG USB отладчика в среде AVR Studio.



В экселевском файле «Сбор данных», на вкладке «Скользящее среднее», приведен результат фильтрации колеблющихся входных данных InputBuff (размах колебаний 436 единиц) с окном усреднения3,12,16 интервалов. Результат приведен в А37-А40 ячейках. Из которых видно, что наиболее эффективно, в данном случае, это скользящее среднее с окном в 16 отсчетов.

Построенные графики это показывают наглядно. Приведенные данные взяты из работающего контроллера, остановленного в момент перехода к процедуре индикации данных. Наглядные примеры такого снятия данных приведены на картинках.



Никакие методы фильтрации данных, путем применения всевозможных цифровых фильтров, НИКАК не смогли «укротить» колебания входа. Если посмотреть на график входных данных, то гауссовым распределением здесь даже и не «пахнет». Что подтверждается пользователем Nikopol_86 в блоге «…не верьте китайской документации»

Nikopol_86 5 февраля 2019 в 09:27 0


Если честно, то шума у него хватает на всех коэффициентах. Я проводил небольшие исследования по изучению плотности распределения выдаваемых кодов АЦП при закороченных входных цепях, так вот там разброс до 1000 1_5В и нифига не нормальный закон распределения, что говорит о том, что либо с разводкой платы беда, либо с АЦП, либо все вместе взятое. Так же заметил, что температурной стабилизации у него тоже нет, а заявленный рабочий диапазон температур не соответствует действительности. Хотя бы потому, что при подключении к АЦП тензодатчика на 5 кг изменение температуры в комнате на 1 градус уводят показания на 2 грамма, а если подогреть микросхему банально пальцем, то показания улетают до 5-7 грамм. В общем для себя сделал выводы, о том, что на этом устройстве можно сделать только дозатор для кошачьего корма, где точность в одну трамвайную остановку будет более чем достаточно. А нормальные решения увы, дешевыми не получаются, потому как приходиться использовать качественные АЦП от АО или Т1.

Как видим, выводы подтвердились. Верно, так же и:
jushabrauser 4 февраля 2019 в 12:52
При соотношении сигнал/шум < 1 это ни разу не поможет.
Даже при мостовой схеме.

Поэтому в нормальных условиях (без специальной математики и/или схемотехники) минимум 8 младших бит выдают ерунду (скорее всего).

24 честных китайских бита за 350 рублей? Не смешите мои тапки.
Если само железо «врёт» — что с этим поделать?
Здесь даже нелинейный фильтр 3-го порядка не поможет, потому что исходные данные не торт.

Именно с этого места и захотелось посмотреть на что же способен данный модуль в составе весов. Поиск в сети проблем дрожание последних разрядов АЦП, привел на форум kazus.ru/forums/showthread.php?t=105320&page=4. Здесь целая дискуссия о стабилизации показаний. Однако ни один из предложенных математических методов не «успокоил» входные данные, получаемые мною. Из самого «железа», для стабилизации отсчетов, введено: соединение цифровой и аналоговой земли, а так же закоротка входа В на землю. Применялось полное экранирование и запитка модуля от аккумулятора 6v (с последующим стабилизатором 7805) отдельно от цепей контроллера. Результата нет, входные данные раскачиваются…

Итак, «чистые» 24 разряда, получить не получается и причина здесь мне кажется в некачественной м/схемы. Значит нужно урезать получаемый диапазон преобразования. Именно для этого, в программе ReadCount и введена строка с делением данных на 100. 100 это чуть меньше 2 в 8 степени. Т.о. АЦ преобразование идет в 16 бит. Однако, даже такое ограничение не сделало показания надежно устойчивыми. И причина здесь в свойствах тензодатчика.

Так, после применения процесса калибровки (связывание величины АЦП и веса на платформе), вес индицируется в граммах. 500 грамм он индицирует как цифру 500, один кг как 1000. Цена деления 1 грамм. Т.е. мы получаем с 40 кг датчика 40000 делений. По техническим данным на тензодатчик, мы можем получить с датчик только 3000 делений (символ С3 в наименовании датчика). Стало быть цена деления должна быть (40000/3000)=13,3 грамма. Однако, по ГОСТ 29329, весовая метрология не оперирует цифрой 3. Должны применяться цифры:

2.1.3 Значение цены поверочного деления (e), цены деления шкалы (d) и дискретности отсчета (dd) в единицах массы следует выбирать из ряда: 1Х10a; 2Х10a; 5Х10a, где a — целое положительное, отрицательное число или нуль.

Т.о. цена деления для данного датчика, гарантированная производителем 10 грамм. Т.е формат вывода должен быть 0,0х кг. где х=1,2,3,….0. Попробуем сделать цену деления в 5 грамм. Соответствующие программные действия приведены в листинге. После ТАКОГО ограничения мы «берем» из датчика 40000/5=8000 делений, что в 2,6 раза больше допустимого. После этих допущений получившиеся весы работают достаточно устойчиво.

Приведенное замечание о примененном тензодатчике и его «разрешающей способности», не позволяют окончательно утверждать, что данный модуль не может выдавать преобразование в 24 бита. Однако, мною проверен данный датчик на работу с разрешением в 1 грамм, на другом устройстве, с другим АЦ преобразователем. На этом устройстве работу датчика и преобразование можно считать удовлетворительным, ибо колебание веса составило не более 3 грамм.

Что, не позволяет использовать данный АЦП в коммерции? Ну первое и самое главное это зависимость измерения от температуры. Второе, использование операций деления и умножения встроенного в ATMEGA, тем более для 8 бит, трудно обеспечить калибровку весов во всем весовом диапазоне при этих условиях. Следует учитывать и то, что программа никак не реагирует на перегруз датчика.

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

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

Для полноты описания требований к созданию программы для весов, необходимо использовать «Программу метрологической (аттестации) поверки весов", прилагаемой к каждым весам.

Вывод: Создание весов на основе м/с Hx711 возможно при соблюдении всех метрологических требований предъявляемых к весам. Введение поправок на температурную зависимость преобразования, необходимо предусмотреть отдельной процедурой. Использование модуля при разрешении более 16 бит требует отдельного подхода и контроля.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 19

    +1

    Неплохое продолжение темы по HX711!


    На самом деле, изначальная концепция моих "весов" состояла вовсе не в получении абсолютных значений.
    Идея как раз была в возможности оценки разницы прироста между ульями.
    Вот почему их должно быть как минимум три.
    То-есть если к примеру два из них показывают прирост 5 единиц а третий — две, то в нем с пчелами что-то не так, и тут уже не особо важно — граммы, фунты или просто число, считанное из АЦП.
    В данном случае все АЦП находятся в одинаковых условиях, и система просто указывает на необходимость вмешательства пчеловода.


    Точно так-же как уже неоднократно говорилось, что невозможно сказать при каком приросте веса нужно качать мед — следует учитывать общую динамику, наличие медоносов и календарное время.


    Ну и наконец, на вкус и цвет — микроконтроллеры разные, есть вот 32-битная атмега, есть STM и ESP


    А по поводу дозатора для кошачьего корма — это верно!
    К примеру, для взвешивания с точностью до сотых грамма пользуюсь механическими весами, ибо дешевая "электроника" дает соответствующий разброс.

      0
      Я тут нашел esp8266.ru/forum/threads/vesy-na-hx711.4438/page-3 не ваш ли почин в заявленной теме?

      Мне не совсем понятна ваша метода определения необходимости вмешательства в содержание пчелиной семьи. Если вы хотите использовать весовые методы, то необходимо определить входные данные. Например, вес улья с семьей и сотами 80-120 кг. Насколько должен измениться вес улья что бы можно было сделать выводы о состоянии семьи? При этом необходимо учесть и дестабилизирующие факторы, такие как влажность материала из которого сделан улей, сколько меда в улье и пр. Только после этого можно определить требования к весовой системе.
      Дайте цифры, для определения диапазона фиксации изменений и требования к весовой системе можно будет сформулировать.
        0

        На самом деле вес ульев с пчелами разнится от десяти клограмм(для только заселенного пенопластового жилища) и до сотни для Украинского лежака.
        Выбранная мной система в начале сезона медосбора весит 30-40кг.


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


        Таким образом пчеловод видит динамику того-же медосбора.
        То-есть если я к примеру знаю, что в корпусе медовые соты могут иметь вес до 12 кг, то +8 это знак, что нужно ставить следующий (к примеру).


        А так все на относительном изменении параметров между ульями.


        Пока конкретно можно сказать только две вещи — уменьшение веса на килограмм за 10 минут — вылет роя, на 5кг сразу — сняли крышку улья, воруют пчел.

          +1
          Да, конкретика у вас жестокая! Даже не представлял, что можно пчел воровать!

          Да, введение относительной системы слежения позволяет избавиться от многих вопросов. Итак, Наибольший Предел Взвешивания (НПВ) для вашей системы 60 кг, достаточно. При использовании обычных тензодатчиков для ширпотреба, максимальная цена деления, при нахождении измеряемого параметра в рамках допустимой погрешности составит 10 грамм до 30 кг и 20 грамм свыше 30 до 60 кг. Это обычные параметры электронных весов. Далее, в качестве тензодатчика лучше использовать один датчик типа Single Point. НПВ датчика должен быть выше суммы веса самого улья и веса весопремной платформы. Выбор датчика определяется так же и размером платформы допустимой для данного датчика. В инете я встречал ссылки на ТЕХНИЧЕСКИЕ каталоги на тензодатчики от разных фирм производителей. Лучше всего фирма Zemic, они работали в нашем регионе и документацией обеспечивали, даже на русском языке. У меня есть этот каталог, но он объемом свыше 40Мб. Думаю в сети он есть. Ну вот собственно и все. Китайский модуль на Hx711 подходит по всем статьям, ибо все относительно.
        0
        Андрей, мне кажется это описка: «есть вот 32-битная атмега,» Вообще то пенек(пентиум) в вашем компе 32 разрядный а микроконтроллер…
          +2
          Смею предположить, что имелась ввиду AVR32
        0
        А какой модуль с HX711 тестировали? Такой же как на фото в статье Андрея или с другой схемой, где на каждом канале симметричные RC-фильтры установлены?
          +1
          Да, такой как у Андрея. Только поднята скорость обработки данных, путем соединения 15 pin (Rate) микросхемы с питанием, 16 pin.


            0

            Скорость это Вы зря подняли — так шумит больше.


            Советую для начала вернуть 10SPS.
            При питании 3.3В шумы тоже заметно уменьшаются.
            Говорят, канал B чуть получше — не проверял


            Вообще, хочу заказать "голые" чипы HX712 и поэкспериментировать с ними.


            Их отличия:
            1 канал вместо двух
            скорость уменьшена — 10/40SPS против 10/80 у hx712
            усиление увеличено — выбирается 128/256


            Но самое главное, в даташите они явно говорят о свободных от шумов битах (16-19 в зависимости от режима работы)


            И несмотря на явное отсутствие преимуществ, согласно отдельным публикациям, нужно убедиться самому.

              +1
              Говорят, канал B чуть получше — не проверял

              На канале B меньше шумов из-за того, что там коэффициент усиления только x32, а на канале A — х64 и x128
                0
                Уж если брать другой АЦП то «24-Bit ADC with Built-in Temperature Sensor (HX710A)
                24-Bit ADC with (DVDD-AVDD) Voltage Difference Detection (HX710B)»

                У 710А встроен температурный сенсор, корректирующий значение преобразователя от температуры, что самое то.

                Насчет 24 битного преобразования, так резисторные тензодатчики не могут обеспечить разрешения более чем в 10 000 единиц. А это где то порядка 2 в 13 или 14 степени. Учитывая необходимость в точности измерения, то 16 битное АЦ преобразование сигнала с датчика, хватит на все случаи весовых систем.

                Насчет соотношения сигнал/шум в зависимости от скорости обмена и питающего напряжения целенаправленно проверка мне производилась. Хотя вначале, до того как была поднята 15 ножка микросхемы и после соединения ее с питанием, входные данные «болтались» в диапазонах не слишком различающихся наглядно.
                0
                У меня другая плата:
                image
                Ещё видел почти такие же, но ещё с экраном.
                Надо будет тоже шумы проверить…
                  0
                  У меня тут сохранилась АЦП плата с фирменного весового терминала, вот фото:

                  Так вот нижняя часть, до операционных усилителей это ВСЕ фильтрация. Здесь и проходные емкости, индуктивности, блокирующие емкости… Точно такая фильтрация и с выводов преобразователя AD7710 на контроллер. Вся эта плата вмонтирована в экран.

                  Сказать что подобное РЕЗКО сказалось на болтанке преобразованного сигнала… Да сказалось, но затраты… А если учесть, что 7710 имеет на борту настраиваемые цифровые фильтры то…
              0

              Лично мои мучения с HX711 закончились установкой AD7730 в устройств. Результат куда более стабильный, а при соответствующей мат обработке удалось получить хорошие показатели погрешности, даже с не дорогими тензодатчиками.
              В итоге вышло так

                0
                Собрано добротно! Сам корпус из пластика? Я смотрю у вас два тензодатчика? Что за функционал у этого устройства?

                Ну знаете, сравнивать AD7730 и Hx711… Наличие цифрового фильтра на борту 7730, возможности запитки тензодатчика переменным напряжением для нейтрализации помехи в линии связи с датчиком, термокомпенсация да вообще эти корпуса в разных весовых категориях, если можно так выразиться. Проблема в том, что бы правильно выставить доступные для настройки параметры.

                Нх711, как мне кажется, этот корпус можно использовать в качестве АЦ преобразователях для бытовых нужд, что собственно я и хотел показать. Для серьезных разработок…

                Вы упомянули, о мат обработке выходного сигнала с 7730. Доводилось встречать устройства АЦП на базе AD7730 где число поверочных(гарантированно точных) интервалов составляло 60 000. Если учесть, что 60 000 делений декларировались как эксплуатационные, то внутреннее разрешение было раз в 10 выше. Какую математику там применяли… Единственно что точно, что в устройстве использовался не 8 разрядный контроллер.
                  0

                  Корпус Gainta, из пластика. Устройство — шнековый дозатор сыпучих веществ небольшими дозами от 1 до 50 г. Второй канал измерения использован для оценки остатка дозируемого вещества в бункере, так как дозировали краситель, то смотровое окно не имеет смысла.
                  В АЦП включен стандартные фильтры, а также есть небольшая фильтрация в CPU. Сильно фильтровать тоже нельзя, будут проблемы с задержкой измерения, а в результате погрешность дозирования. В итоге выбрал оптимум. Что касается мат обработки, то основные алгоритмы изложены в документах из моего комментария к статье на которую Вы ссылались линк.

                    0
                    Да, да помню эти ваши ссылки, весьма информационны. Интересно, использование пластикового корпуса и экранирование АЦП как то заметно в вашей конструкции?
                      0

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

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое