HX711
- Войдите на сайт для отправки комментариев
Втр, 15/03/2016 - 01:32
Доброго времени суток. Подключил четыре весовых датчика мостом к hx711, по инструкции с этого сайта:
http://www.instructables.com/id/Make-your-weighing-scale-hack-using-arduino/step2/Understanding-the-sensor/
При загрузке тестового скетча, вес отображался через серийный монитор, как я понял в ADC. Поставив известный вес, я вычислил коэффициент, и умножил на нужное число(просто домножив вывод в скетче). При взвешивании веса (110 грамм), результат постоянно отличается и колеблется. В чем может быть проблема? Возможно плохой контакт? И как нормально сделать привидение?
ээээ...1) без оу подключать мост к АЦП не корректно. 2) Изучайте источник погрешности АЦП.
Как я понял необходимо усреднять значение в скетче? Измерять раз 20 подряд и просто выводить среднее, тогдла такого разброса не будет. Это так нужно делать?
Если арифметика целочисленная, а величины невелики, то правильнее накапливать несколько замеров суммированием и под конец делить на количество замеров. Если замеры кратны степени 2, то делить можно будет сдвигом, что существенно шустрее.
Если величины замеров велики в среднем и есть риск переполнения при сложениях, то правильнее делать "бегущее среднее", добавляя 1/N от текущего замера.
Иногда полезно и то и другое: накапливаем суммированием 2,4 замера и потом добавляем их алгоритмом бегущего среднего ..
Иногда требуется отбрасывать из усреднения заведомо ошибочные результаты, особенно когда датчик может тупо глукнуть и выдать "стандартное значение". Но тут часто надо уметь верно классифицировать это "стандартное значение". Так, к примеру замер расстояний - датчик может выдать "таймаут" как при состоянии "очень далеко", так и в случае сбоя .. у меня: 1 раз - сбой, 2-4 раза подряд - "далеко".
Каких-то единых, общих рекомендаций нет. Но надо помнить, что количество замеров улучшают точность от "белого шума" примерно в корневой зависимости. То есть 4 замера снижают шумы в 2 раза.
Огромное спасибо за информацию.
Допишусь сюда же.. Тоже возникла задача подключения к ардуине тензодатчиков из кухонных весов. Там 4 тензодатчика, соединенных по схеме топикстартера. Вобщем подключил через HX711 по инструкции, взятой отсюда http://www.naylampmechatronics.com/blog/25_Tutorial-trasmisor-de-celda-de-carga-HX711-Ba.html . Откалибровал на весе 2 кг. Всё хорошо, но! Значения очень "плавающие". То есть разбег измерений +/- 15-20 грамм. Во время включения вес показывается 0.000 кг, а дальше начинает расти с каждой секундой до значения 78-80 грамм, а дальше медленней, но продолжает расти. Для меня это плохо. Нужна точность +/- 2 грамма.
Мои мысли почему так происходит:
1) Помехи. Возможно на входе в АЦП НХ711 появляются посторонние сигналы в проводах тензодатчиков. Может попробовать заэкранировать провода?
2) слишком большой коэффициент усиления, и, как следствие, большой разбег выходного сегнала. Что-то про это писали вот тут https://forum.arduino.cc/index.php?topic=226314.0 но я не на столько силен в английском (хром тоже тот ещё переводчик).
Вобщем прошу помощи (((
а дальше начинает расти с каждой секундой до значения 78-80 грамм
Тут возможен прогрев тензодатчика. Попробуйте:
а) Калибровать после прогрева.
б) Использовать меньшее напряжение подаваемое на мостовую схему.
в) Питать мост и измерять в импульснм режиме. Припустим 10 раз/с по 10-20 мс.
а) Про прогрев не думаю, что он настолько долгий. Ведь в весах это происходит за пару секунд. И уже сделал задержку калибровки примерно на 5 секунд. Не помогает. Вес растёт примерно в течении 2-х минут, затем, вроде как останавливается.
б) Использовал 5В и 3,3В (от ардуины) результат одинаковый.
в) А вот тут поподробнее можно? Не совсем понял как это реализовать? Посредством програмного кода (скетча)?
а) Есть тензодатчики с термокомпенсацией и без нее. Я не работал с обычными датчиками, но много работал с датчиками промышленного исполнения стоимостью от 100$. Так вот на них обязательный прогрев 2-5 минут. Боюсь, что проблема именно в прогеве тензорезисторов. Еще заметил, что дешевые датчики "плывут" со временем. Некоторые при включении 2-5 минут, некоторые при постоянной нагрузке за сутки.
б) Для поднятия тосности измерения, некоторые приборы поднимают напряжение подаваемое на измерительный мост. Отсюда следует следующий пункт:
в) При повышеном напряжении питания , происходит нагрев тензорезисторов. Потому питание (и измерение) производят импульсами по несколько милисекунд. За это время датчик не успевает нагреватся и держит стабильную температуру.
Вобщем добился таки точности 2 грамма следующим образом.
1) Заэкранировал НХ711. По колхозному обмотал изолентой а поверх него фольгу и подсоединил на общую землю.
2) Укоротил по минимуму провода на тензодатчиках и припаял экранированный провод от USB удленителя. Экран также присоединил к земле.
3) также фольгой заэкранировал и весы.
4) подал на мост напряжение 3,3 вольта.
5) В скетче добавил время "на прогрев" 10 секунд. Т.е. обнуляю датчики, жду 10 секунд и ещё раз обнуляю. Только пришлось по новой градуировать контрольным весом в 2 кг.
P.S. а датчики всё-таки "ползут".. В состоянии покоя весы за 10 минут потяжелели на 2 грамма.
Теперь точность 1 грамм! И датчики не ползут. Уменьшил коэффициент усиления с 128 на 64. Откалибровал по новой и заработало.
Пожалуйста опишите как вы изменили коэфициент усиления. Какой библиотекой пользовались?
Да там всё просто. В стандартной библиотеке HX711-master в файле HX711.cpp всё про это написано.
Когда в скетче прописываются параметры АЦП надо указать коэффициент усиления (у НХ711 это 128 и 64 на канале А и 32 на канале В). У меня это выглядит так:
Правда могу ошибаться.. Во всяком случае у меня работает.
Кстати ещё есть момент в самом АЦП. Есть которые работают на 10 Гц, есть на 80. Сначала я использовал тот что на 10. он просто ужасен. Потом из Китая заказал экранированный Красный НХ711 на 80 Гц, вот с ним полёт вообще отличный. С ним точность до грамма без проблем.
Дело в том что последняя версия arduino ide предлогает мне скачать библиютеку с точно таким же названием, однако она другую (пины для передачи данных по другому задаются) и мне почемуто не попадалась пока такая библиотека как вы описываете. Может у вас осталась ссылка именно на эту библиотеку?
Я отсюда скачивал. Вроде эта https://github.com/bogde/HX711
Вот по этому гайду делал http://www.naylampmechatronics.com/blog/25_Tutorial-trasmisor-de-celda-de-carga-HX711-Ba.html
попробуй по этой схеме подключить. питание не 3.3В а с платы
и еще один вариант. у нижних по схеме синий с черным поменять. если есть возможность конечно
хотя для проверки можно попробовать запитать схему и от 3.3В. итого 4 варианта. экранирование оставить как есть
еще вариант по китайской схеме. итого 6 вариантов
У меня тензодатчик с 4-мя проводами.
а я для Jackson_KHV писал раз у него схема уже собрана
Да у меня всё работает, так-то )) Четыре трехпроводных датчика собраны как раз по этой схеме. На питание подано 3.3 В с Ардуины, а на питание АЦП подано 5 В.
Да у меня всё работает, так-то )) Четыре трехпроводных датчика собраны как раз по этой схеме. На питание подано 3.3 В с Ардуины, а на питание АЦП подано 5 В.
почему не с e+ e-? проверял и получилось хуже?
почему не с e+ e-? проверял и получилось хуже?
Да, проверял. У меня хуже. Там, правда, как то можно регулировать напряжение, но я не стал заморачиваться. Подал 3.3 с ардуино, полет нормальный.
Тем более для моих тензодатчиков 3.3 В "родное" напряжение.
Здраствуйте!
А почему выставлая коэфициент усиления (64 или 128) эффект виден только используя функцию:
scale.read_average(20);
Почему на однократное щитавание нет никакова эффекта (функция - scale.read();)?
Да и при измерение усредненного значения значение ADC не становится меньше два раза (у меня в конкретной ситуации при GAIN=64 ADC=94750 а при GAIN=128 ADC=164000).
Библиотеку изучал, но в лучшем случае получались теже результаты.
Андрей, доброго времени суток!
А вы какой библиотекой чтения HX711 пользуетесь? Дело в том, что их в сети море, но все кривые (в чем-то). У некоторых GAIN только для виду - ничего не переключает по жизни.
П.
Здраствуйте!
А почему выставлая коэфициент усиления (64 или 128) эффект виден только используя функцию:
scale.read_average(20);
P.S. В целом... с Gain = 64 и 32 АЦП работает заведомо хуже - см. даташит.
Необходимость в них возникает только если при усилении 128 сигнал выходит за измеряемый диапазон, что очень нестандарно. т.е. оно вам точно надо? )))