HX711のデータシートにない定期的なパルス出力について
Periodic pulse output of HX711 by I.N. 2021/06/23

1.概要
 ロードセルを用いた荷重測定のために便利なAvia SemiconductorのHX711(24ビットA/Dコンバータ)
ですが,謎の信号を出力するという報告[1]があります.このたび私も遅ればせながらHX711を使うことに
なったのですが,この謎の信号出力について分かったことを紹介します.
 異常値を拾ってしまわないための参考になれば幸いです.特に,1つのマイコンに複数のHX711をつなげて
使う場合には注意が必要となるでしょう.

2.ナゾ信号(?!)の正体
 結論から言うと,HX711では一定間隔(10Hz動作モードでは約89ms)で78μs幅の正のパルス
(以下,リセット信号と勝手に呼びます)
がDOUTから周期的に出力されています.
このリセット信号はクロック(PD_SCK)信号の入力とは無関係に出力されます.(図1,図2)
80Hz動作モード時では約12msの周期で出力されています.


図1 PD_SCK(CH1)の入力がなくてもDOUT(CH2)から一定間隔で出力されるリセット信号


図2 図1のCH2を拡大した様子

 データシートの説明では,HX711のクロック(PD_SCK)へパルスを25〜27個送ってデータを読み出した後は,
次の読み出しができるようになるまでDOUTはHighを維持するとされていますが,このDOUTがLowへリセット
されるタイミングが,先に述べた78μs幅のリセット信号が出力されるタイミングというわけです.
 HighだったDOUTがLowへリセットされるときは,78μsのパルスではなく,単にLowへの立ち下がりの形と
なります.
 ここで厄介なのは,DOUTがリセットされてLowの状態であっても,
次のタイミングが来ると,データの読み出しをしていなくても78μsだけ
必ずHighになります.
(図3)
 ここからは私の経験による憶測ですが,運悪く,DOUTからこのリセット信号が出力
されるタイミングでデータの読み出しを行うと,その時のPD_SCKは無視
されるか何かで正常な読み出しができない
,または,リセット信号が出力さ
れるタイミングの直後以外で読み出したデータは正常値ではないことが
ある
,ということです.
 注意点を一言で言えば,
ユーザの好きなタイミングでHX711のデータを読んではいけない

ということです.特に初回の読み出しには注意が必要となります.


図3 100ms間隔でクロック(CH1)を送った場合のDOUT出力(CH2)
(クロックは1つに見えるところが実際には25個のパルスとなっている)
(89ms間隔のリセット信号のタイミングでDOUTがリセットされていることが分かる)


3.これが問題となるケース
 HX711が1つだけマイコンにつながっていて,前のデータ読み出した後,DOUTがHighからLowになった
直後に次のデータ読み出す,というプログラムであれば気にすることはありません.
 問題となるのは,前のデータを読み出した後,別の処理をする必要があり,その間の知らないうちに
DOUTがLowに戻っており,DOUTがLowになってからどれくらい時間が経っているか分からない状態で
次のデータを読み出す場合です.このとき,もしかすると,リセット信号の出力と読み出しのタイミングが
重なるかもしれません.
 複数のHX711が1つのマイコンにつながっている場合は,これに相当するでしょう.HX711が複数接続
されていると,DOUTがリセットされるタイミングはバラバラです.

4.対策
 では,どうすれば良いかというと,単純な方法としては,データが読み出せるかどうかチェックする際,これまでは
「DOUTがLowであるか」
としてきたところを,今後は
「DOUTがLowであるか」 → 「DOUTがHighであるか」 → 「DOUTがLowであるか」
という感じで,リセット信号が出たのを確認したのち,さらにそれがLowになったことを確認した直後に
データを読み出せば確実でしょう.ただし,これだと,若干ムダな時間を消費することになります.もっと
上手い方法があるかもしれません.
 私の場合,(1)クロックパルス1個の送信,(2)データ1ビットの読み出し,(3)DOUTの確認,をセンサの
数だけ順に切り換えながら並行して処理することで,バラバラのタイミングで動作する4つのHX711を各89ms
周期で異常値を取得することなく安定して読み出すことができました(Arduino Nano Every使用).ただし,
このプログラムでも,初回の読み出しだけはタイミングが分からないので,対策の始めに書いたように
DOUTの2回目のLow検出直後から読み出しを開始するようにしています.

参考
[1] ココアシステムズ:「ひずみゲージADC HX711 のナゾシグナル」


1つ上へ戻る