thkanaのアイコン画像
thkana 2025年05月05日作成 (2025年05月05日更新) © CC0 1+
セットアップや使用方法 セットアップや使用方法 閲覧数 296
thkana 2025年05月05日作成 (2025年05月05日更新) © CC0 1+ セットアップや使用方法 セットアップや使用方法 閲覧数 296

HX711がSpresenseで読めない!?

発端

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10314549380
Yahoo! 知恵袋にて、HX711 + Spresenseでデータが取れない、との質問がありました。
とりあえず本体(1.8VI/O)とHX711を直結しちゃってるんじゃないか、と軽く考えて回答しましたが...

再現

どうもそういうことではないとのことで、自分でも試してみたら、確かに読めない。
ライブラリは https://github.com/bogde/HX711 のもの。これに同梱されているexampleのbasic_exampleで"HX711 not found."になりました。
このときのHX711のDOUT(マゼンタ)/PD_SCK(黄)波形が以下。DOUTが1.2Vぐらい浮いていて、Spresenseからは1に見えてしまってつまりHX711がreadyでないと判断され、SCKは振られていません。
そのまま接続したときの波形
(プローブのキャリブレーションが甘いのはご容赦)
ここで、Spresense側DOUTをGNDに落として(強制的にreadyと認識される。データはとれない)、HX711側DOUTをオープンにしてそこを観察してみました。SCKが振られると、DOUTもちゃんと出ていて、Spresense端子に繋がない状態ではLレベルも低くなっていることがわかります。
DOUTをGNDに

調べる

さて、ここで、Spresenseの拡張ボードの回路図を見てみます。外部に出てるI/O端子のあたりを抜粋すると以下のようになっています。
Spresense拡張ボード外部端子まわり
端子が1kΩでプルアップされています。なぜそんなに低い値でプルアップしているのかはわかりませんが...
とにかく、HX711の出力端子がこの1kΩをドライブ仕切れないためにL電圧が上がってしまう、ということのようです。

対策

とりあえず、適当なバッファICとかが手もとに無かったので、トランジスタ2本でDOUT端子をバッファしてやりました。
バッファ回路例

結果

これでそれらしい値が取得できるようになりました。そんなに速いクロックではないのでオープンコレクタ2段でもまぁ大丈夫、というところでしょう。
これを挟んだときのSpresense端子側の波形は以下のようでした。
対策後波形

(なんかオシロのキャプチャがそのままだと表示されないみたい?なのでALT文字列をクリックしてやってください。Spresense回路図も、キモの部分が表示されていないのでクリックして全表示をお願いします)

thkanaのアイコン画像
一応組み込みエンジニアのつもり... でも最近製品になるようなコード書いてないなぁ。
  • thkana さんが 2025/05/05 に 編集 をしました。 (メッセージ: 初版)
  • thkana さんが 2025/05/05 に 編集 をしました。 (メッセージ: 公開)
  • thkana さんが 2025/05/05 に 編集 をしました。 (メッセージ: マークダウン誤記修正)
ログインしてコメントを投稿する