Почему 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 / усиление: обрыв провода моста, перепутаны питание и сигнал или датчик перегружен. С обычной тарой это не исправить — ищите ошибку в подключении.
Можно ли просто взять модуль числа?
Нет: при неверной полярности тара всё равно уходит в минус, а при снятии груза модуль покажет вес там, где его нет. Поменяйте местами сигнальные провода моста — какие это, смотрите по документу на датчик, цвета у производителей разные, — или знак калибровочного коэффициента.
Почему при нажатии сверху вес растёт, а при подвесе — уменьшается?
Тензодатчик балочного типа знает направление изгиба: сжатие и растяжение дают сигналы разного знака. Если весы перевернули или груз подвешивают снизу, знак меняется — это та же ситуация, что и с перепутанными проводами.
Источники
- 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
- Microchip. Baker B. C. AN717: Building a 10-bit Bridge Sensing Circuit using the PIC16C6XX and MCP601 Operational Amplifier (DS00717A, 1999) — у мостового датчика есть ошибка смещения — выход при нулевом воздействии не равен нулю, и она меняется с температурой и напряжением возбуждения; смещение и чувствительность калибруют по известным точкам
Нашли ошибку?
Смотрите также
- HX711АЦП для тензодатчиков: выводы, каналы и усиление, протокол, шум, питание
- Тензодатчики и HX711Мост и мВ/В, 4 и 6 проводов, HX711 и ADS1232, шум, тара и калибровка гирей, дрейф
- Дополнительный кодTwo's complement: запись отрицательных целых
- Мост УитстонаДва делителя и разность между ними: схема резистивных датчиков
- Почему весы на HX711 показывают скачущий вес?Шум HX711 — сотые доли грамма; скачки дают 80 выборок/с, питание, провода и механика