Микросхема HX711 с микроконтроллером PIC
Программа считывания данных с микросхемы HX711
В статье пойдет речь о программе взаимодействия микросхемы HX711 с микроконтроллером PIC16F628A, конкретнее модуля, в который входит эта микросхема с контроллером. Внешний вид модуля показан на фото ниже.
Я покупал этот модуль на AliExpress в количестве четырех штук и именно в таком виде. С этими микросхемами я столкнулся впервые. Контактные гребенки припаивал сам. В результате экспериментов у трех из них плавали показания и вверх и вниз. В результате проверки напряжений, присутствующих на элементах модуля, ничего подозрительного выявить не удалось. При визуальном анализе монтажа дефектов тоже выявить не удалось. Грешным делом уже стал подозревать наших китайских партнеров в некачественной продукции. После долгих мытарств снова пропаял гребенки, прополоскал платы в спирте и дрейф показаний прекратился. Грязь порождала неконтролируемые блуждающие паразитные токи, на которые реагировала микросхема. Все это указывает на то, что микросхема способна работать с очень маленьким уровнем входного сигнала. А раз это так, то экранирование платы строго обязательно. Вообще, при работе с этой микросхемой, надо уделить особое внимание и качеству питающего напряжения, его фильтрации, как по частоте первичной сети, так и по частоте преобразования, если блок питания импульсный. Можно поставить на входе модуля LC фильтр по питающему напряжению. Самое лучшее, это питать модуль от аккумуляторных батарей.
Протокол взаимодействия микросхемы с микроконтроллером специфический и очень простой – контроллер формирует на входе синхронизации SCK импульс, а она ему выдает бит данных, причем старшими разрядами вперед. АЦП микросхемы двадцати четырех разрядное, т.е. нам надо будет считать 24 бита информации. Но, так как в соответствии с документацией на микросхему, данные представлены в дополнительном коде, то полезной информации мы будем иметь лишь 23 бита. Потому, что старший бит старшего байта трехбайтового числа в данном случае используется для передачи знака числа. Отсюда следует, что имея максимально возможное 23х битовое число – 0111 1111 1111 1111 1111 1111, мы получим в десятичном коде – 8 388 607, 8 – это килограммы, 388 – граммы, а 607 – миллиграммы. У меня в наличии два тензодатчика на максимальный вес пять килограмм, именно с такими разрядами весовых единиц они и работали, конечно, с расхождениями в показаниях.
Аналогово-цифровой преобразователь HX711, программа.
Программа не сложная с указанием необходимых комментариев. На строках 27 и 28 записана процедура ожидания на считывание данных с АЦП. Для увеличения помехозащищенности в программу можно ввести перепроверку готовности HX711 через небольшую временну’ю паузу. При экспериментах я не использовал экранирование модуля и подводящих проводов с тензодатчика, поэтому разряды миллиграмм и десятков миллиграмм менялись с большой частотой.
По умолчанию, в соответствии с документацией, при подаче на вход SCK двадцати пяти синхронизирующих импульсов, входной усилитель имеет Кус равный 128 и частоту повторений преобразования – 80 раз в секунду. Отсюда и это мерцание разрядов. Чтобы уменьшить частоту вывода информации на индикатор, было решено считывать оцифрованные данные восемь раз и на индикатор выводить их среднее арифметическое значение. Пробовал считывать шестнадцать раз, но частота смены показаний стала слишком медленная.
Если чтение данных с микросхемы закончить не двадцать пятым, а сформировать еще и двадцать шестой импульс (закомментированные строки в коде – 56… 62), то следующее чтение данных будет уже с канала В, у которого фиксированный коэффициент усиления – Кус равен 32. А если сформировать еще и двадцать седьмой импульс, то следующее чтение данных будет опять с канала А, но коэффициент усиления будет уже в два раза меньше – 64.
Успехов! К.В.Ю.