Перейти к содержанию

Почему HX711 показывает отрицательный вес?

Обновлено Редакция GAW

У HX711 выход — 24-битное число в дополнительном коде, от 800000h до 7FFFFFh, то есть от −8 388 608 до +8 388 607. Знак у него появляется естественно: мост Уитстона при нагрузке даёт напряжение одной полярности, при разгрузке или обратном изгибе — другой. Поэтому отрицательный вес — не поломка, а подсказка, какая из трёх ошибок допущена.

Три причины

Что видноПричинаЧто сделать
С грузом код уменьшаетсяперепутаны сигнальные провода моста на INA+ и INA− или датчик стоит «вверх ногами»поменять провода или знак коэффициента
Без груза — отрицательное число, с грузом растётсмещение нуля моста и АЦПтара: запомнить среднее без груза и вычитать
Вместо отрицательных — около 16,7 млн24-битный код прочитан в беззнаковую переменнуюрасширить знак до 32 бит

У любого мостового датчика есть смещение — выход при нулевой нагрузке не равен нулю, и Microchip в AN717 относит его к основным ошибкам моста. Поэтому знак сырого кода без тары ничего не значит.

Расширение знака

24 бита из HX711 читаются старшим вперёд. Если сложить их в uint32_t, отрицательные значения превратятся в числа от 8 388 608 до 16 777 215:

// 24-bit two's complement from HX711 to a signed 32-bit value
int32_t hx711ToSigned(uint32_t raw24) {
  if (raw24 & 0x800000UL) raw24 |= 0xFF000000UL;   // copy the sign bit up
  return (int32_t)raw24;
}
// 0xFFFFFF -> -1, 0x800000 -> -8388608, 0x7FFFFF -> 8388607

Пример: 0xFFFC18 без расширения знака — 16 776 216, с расширением — −1000 (наш расчёт).

Если код упирается в 800000h или 7FFFFFh, это насыщение: сигнал вышел за полную шкалу, и искать нужно обрыв или ошибку в подключении моста. Протокол чтения и выбор канала — на странице HX711, калибровка коэффициента — в статье «Тензодатчики и HX711».

Похожие вопросы

Что значит 8388607 или −8388608 в показаниях?

Это 7FFFFFh и 800000h — пределы шкалы, на которых по даташиту код насыщается. Сигнал на входе больше ±0,5 · AVDD / усиление: обрыв провода моста, перепутаны питание и сигнал или датчик перегружен. С обычной тарой это не исправить — ищите ошибку в подключении.

Можно ли просто взять модуль числа?

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

Почему при нажатии сверху вес растёт, а при подвесе — уменьшается?

Тензодатчик балочного типа знает направление изгиба: сжатие и растяжение дают сигналы разного знака. Если весы перевернули или груз подвешивают снизу, знак меняется — это та же ситуация, что и с перепутанными проводами.

Источники

  1. Avia Semiconductor. HX711 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales, V2.0 — табл. 2: выходной код — дополнительный, от 800000h до 7FFFFFh; полная шкала ±0,5 · AVDD / GAIN; разд. Serial Interface: при выходе за 24-битный диапазон код насыщается на 800000h (минимум) или 7FFFFFh (максимум); 24 бита читаются старшим вперёд по 25–27 импульсам PD_SCK, число импульсов задаёт следующий канал и усиление — 25: A 128, 26: B 32, 27: A 64
  2. Microchip. Baker B. C. AN717: Building a 10-bit Bridge Sensing Circuit using the PIC16C6XX and MCP601 Operational Amplifier (DS00717A, 1999) — у мостового датчика есть ошибка смещения — выход при нулевом воздействии не равен нулю, и она меняется с температурой и напряжением возбуждения; смещение и чувствительность калибруют по известным точкам

Нашли ошибку?