Взято со sxem.net
Электронные весы на базе HX711
На сегодняшний день в продаже имеются необходимые инструменты, чтобы буквально «на коленке» собрать свои электронные весы: микросхема АЦП HX711 (продается на AliExpress), специально предназначенная для применения в весах разрядностью 24 бита и датчик массы, представляющий собой мостовой или полумостовой измеритель на базе тензорезисторов в качестве чувствительного элемента.
Если при подборе элементной базы микросхемы HX711 представлены практически одними и теми же модулями, то датчики массы можно подобрать различной конфигурации. Главный параметр таких датчиков – это измеряемая масса (1 кг, 3 кг, 5 кг, 50 кг и так далее), в зависимости от этого параметра датчики могут иметь так же различную форму и исполнение. По сути, датчики массы измеряют приложенное усилие относительно плоскости датчика – вес тела, но при помощи несложных физических формул можно вычислить массу тела. А раз мы измеряем силу, с которой тело давит на датчик, то и сфера применения подобных схем резко увеличивается. В самом простом случае – это обычные весы, для которых масса тела будет пропорциональна данным, получаемым от АЦП. В более сложных случаях при помощи схем на основе данной элементной базы можно измерять, например, скорость ветра (сила, с которой ветер давит на опору датчика, будет пропорциональна размеру опоры и скорости ветра) или регулировать прикладываемую силу к какому-либо предмету относительно получаемых данных.
При измерении массы тела данным методом стоит учитывать при разработке некоторые нюансы. Как уже отмечалось, датчик регистрирует вес тела, а вес тела это масса, умноженная на ускорение свободно падения или силу тяжести (~9,8 м/c2). Таким образом, видим, что измеренная масса тела будет зависеть от значения силы тяжести планеты, что значит, что в разных точках Земли, а также с увеличением высоты (расстояния от поверхности земли) сила тяжести будет изменяться, что повлияет на то, что масса тела в различных условиях может быть в небольшой степени различна. Хотя масса тела неизменна, но способ измерения связан этими физическими явлениями, поэтому это может являться причинами погрешности измерений кроме основных причин.
Как же мы все-таки измеряем массу (вес) тела этим датчиком, с виду напоминающим железную болванку?
Для начала необходимо иметь понятие о чувствительном элементе этого датчика – тензорезисторе.
Тензорезистор – это резистор, сопротивление которого изменяется в зависимости от его деформации.
С этим понятно – есть некий резистор (обычно это гибкая пластинка – пленочный тензорезистор, на который напылены проводящие элементы), который при изгибе, растяжении и прочих деформациях изменяет свое сопротивление. На датчике массы тензорезистор располагается под слоем белого защитного полимера. Основание датчика – алюминиевый брусок с отверстиями для крепления и большим отверстием для задания модуля упругости бруска таким образом, чтобы тензорезистор улавливал упругую деформацию этого бруска в заданном диапазоне измерения массы. Итак, собирая воедино способность тензорезистора изменять свое сопротивление при его деформации и способность металла бруска при упругой деформации растягиваться или сжиматься (деформироваться) при воздействии силы, получаем датчик, который измеряет деформацию при приложенной силе к этому датчику. А так как модуль упругости в самом распространенном варианте имеет линейный характер (закон Гука), получаем вполне точный датчик, с помощью которого можно измерять усилие, приложенное к датчику в заданной плоскости, и, следовательно, вес тела (и массу), прикладывая груз перпендикулярно датчика.
Направление усилия (приложения груза) указывается на самом датчике, там же указывается и вес, на который рассчитан этот датчик. Схема измерителя на этом датчике является полумостовой – один тензорезистор сверху, второй снизу, при приложении усилия один тензорезистор растягивается, второй сжимается. Схема способна регистрировать вес до сотой грамма, но в этом диапазоне очень много шумов, поэтому схема вполне стабильно способна регистрировать вес до десятых долей грамма. Однако, это применительно к датчику FZ0967 на 5 кг, если взять датчик на 1 кг, то теоретически минимально стабильный порог будет меньше. И аналогично при применении датчиков на больший вес минимально стабильный порог увеличится. Таким образом, при выборе датчика стоит учитывать сферу применения для получения максимально точного результата.
Для измерения массы различных тел был сделан измерительный столик из подручных материалов, а именно старой коробки DVD дисков и самих дисков (или подкладных болванок).
Одной стороной датчик прикручивается к центру коробки от дисков, ко второму конце датчика прикручивается диск, на которой будут ставиться грузы (диски хотя и гибкие, но при приложении чрезмерной силы хрупкие, это стоит учитывать при сверлении отверстий в них, чтобы не расколоть). Таким образом, один конец датчика зафиксирован, а вес прикладывается к другому концу – приложенный груз как бы действует на изгиб датчика, хотя этого вы не заметите.
Для работы с такими датчиками была специально разработана микросхема АЦП HX711.
На базе этой микросхемы в поднебесной делается несколько видов модулей: копеечные модули без экрана и чуть дороже с экранированием элементов. Модуль с экранированием теоретически должен давать более стабильный результат измерений.
Основные параметры микросхемы АЦП HX711:
- Два входных канала для измерения
- Регулируемый коэффициент усиления 32, 64, 128
- Простой цифровой интерфейс, не требующий программирования (так гласит даташит, хотя по большому счету программирование параметров присутствует)
- Регулируемое количество выборок 10 или 80
- Разрядность АЦП 24 бита
- Фильтр на 50 и 60 Гц питания
- Потребление тока до 1,5 мА
- Напряжение питания от 2,7 до 5,5 вольт
- Диапазон рабочих температур от минус 40 до плюс 85 градусов Цельсия
- Знаковые выходные данные от 800000h до 7FFFFFh
Для подключения к микроконтроллеру используется простой цифровой интерфейс, схожий с I2C, но имеющий с ним мало общего, поэтому придется управлять выводами интерфейса выводами микроконтроллера (в простонародии ногодрыг), так как аппаратного интерфейса ни на одном микроконтроллере нет – это некоторая импровизация для упрощения работы микросхемой, хотя на самом деле, уходя от стандартов, это все только усложняет. Пример использования этого интерфейса присутствует в даташите, поэтому все можно делать просто по примеру и аналогии.
После того, как получим данные от АЦП необходимо учесть два нюанса. Первое, значение представляет собой чистые данные АЦП, то есть количество отсчетов относительно приложенного веса. Что бы не забивать себе голову пересчетами количества отсчетов в значение веса или массы, вспоминаем, что все зависимости у нас линейные, а значит пропорциональные, поэтому нам нужен всего один общий коэффициент для этого пересчета. Для моего экземпляра коэффициент равен 430 при пересчете в единицы грамм. Как это узнать? Есть два способа – строгий математический, с поиском различных справочных данных по материалу из которого изготовлен датчик, поиска параметров тензорезисторов для выведения зависимости модуля упругости материала в данной геометрической конфигурации к сопротивлению тензорезисторов при упругой деформации датчика. Второй способ не самый точный, но крайне быстрый и простой. Необходимо просто замерить сколько отсчетов АЦП приходится на единицу приложенной массы. Для этого необходимо учесть второй нюанс – сама конструкция имеет некоторый вес и перед измерениями его нужно просто убрать – вычесть и получить «ноль» на весах. Далее поставить на весы гирьку определенной известной массы и получить некоторое значение АЦП. Это количество отсчетов будет приходится на единицу массы на весах:
К=(количество отсчетов с массой гирьки – количество отсчетов без приложенной массы) / масса гирьки
Далее этот коэффициент используется после каждого измерения АЦП для перевода в значение единиц массы и выводится на дисплей. Для моего экземпляра этот коэффициент равен 430.
Для сборки весов используем микроконтроллер STM32.
Исходный код для микроконтроллера находится в конце статьи. Схему удобно собирать на минимальной отладочной плате, потому что в этом случае необходимо минимум деталей для сборки — соединяем между собой плату с микроконтроллером, дисплей и модуль АЦП с датчиком, подключаем к питанию.
Для оценки точности измерений, а также для определения коэффициент для перевод значения АЦП в массу лучше всего использовать груз с заведомо точно известной массой. Для этой цели хорошо подойдут мерные гирьки. Вот такой раритетный экземпляр, например.
Как видим, схема показывает весьма неплохие результаты точности измерения (небольшое видео находится в конце статьи). Стоит помнить также о том, что датчик рассчитанный на измерение массы до 200 кг не даст такой точности до сотых долей грамма как датчик, рассчитанный на измерение массы до 100 г. Поэтому при выборе датчика обязательно нужно учитывать сферу применения весов для получения наиболее оптимальных результатов.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин |
---|---|---|---|---|---|
IC1 | МК STM32 | STM32F103C8 | 1 | Поиск в Fivel | |
HG1 | LCD-дисплей | ILI9341 | 1 | Поиск в Fivel | |
MOD1 | Модуль АЦП | HX711 | 1 | Поиск в Fivel | |
MOD2 | Тензодатчик | FZ0967 | 1 | 5 кг | Поиск в Fivel |
VR1 | Линейный регулятор | AMS1117-3.3 | 1 | Поиск в Fivel | |
Z1 | Кварц | 8 МГц | 1 | Поиск в Fivel | |
S1, S2 | Кнопка тактовая | 2 | Поиск в Fivel | ||
HL1 | Светодиод | 1 | Поиск в Fivel | ||
R1 | Резистор | 100 Ом | 1 | Поиск в Fivel | |
R2-R4 | Резистор | 10 кОм | 3 | Поиск в Fivel | |
R5 | Резистор | 390 Ом | 1 | Поиск в Fivel | |
C1, C2 | Конденсатор | 22 пФ | 2 | Поиск в Fivel | |
C3-C7, C9 | Конденсатор | 100 нФ | 6 | Поиск в Fivel | |
C8 | Электролитический конденсатор | 220 мкФ | 1 | Поиск в Fivel | |
C10 | Электролитический конденсатор | 100 мкФ | 1 | Поиск в Fivel |
Скачать список элементов (PDF)
Sorry, the comment form is closed at this time.