ブレーキペダルをロードセルにしたい1

今使ってるT300RSもいいんだけどダイレクトドライブのハンコンも欲しいよね。ってことでCSL-DDとかをウォッチしてるわけですが、その界隈見てるとブレーキをロードセルに、っていう情報がチョイチョイ出てくるので気になっていて、そういえば昔買ったロードセルキット(HX711と1kgとか)

があったなーと思い出したので、arduinoで動作検証してみる。HX711は80Hzモードに変更済み。

適当なライブラリでHX711を連続読み出ししてみると、読めるときと読めないときがあって、読めても逸脱値だったりして、はかりを作る用途なら1秒とか待って逸脱値を捨てちゃえばいいんだろうけど、ゲームのような値が常に変化する用途だと逸脱値と決めつけるのが難しいよなー。

なんて調べていたら、どうもHX711は、データ読み取りピンに、仕様書にないナゾパルスが出ているとのこと。

まじか

ってことでかんたんオシロで見てみる。まぁ2chなら1013Dのほうが使いやすいんだけど、この簡易なオシロがちゃんと使えるかの検証も兼ねて。

とりあえずHX711に電源通した状態だと

まじだった。約86Hzでナゾのパルスが出てますな。つまり適当なタイミングで読み出しすると、このナゾパルスをデータとして拾ってしまって、値が逸脱値となる。と。

じゃぁarduinoの入力割り込みでこのパルスを拾って、パルスをやり過ごしたあとに読み出せばいいんじゃね。ってことでプログラムしてみた。

青い線はHX711のデータ線、オレンジはarduinoからのクロック。HX711が読み出しOKになったら、arduinoからクロック信号をON/OFFすると、データ線にHX711のデータ線が1か0になるので、それを24回繰り返して24ビットのデータを得る。って仕様なのでこんな画像になります。
一番左の青い線(ナゾパルス)の立ち上がりをarduinoの割り込みルーチンで検知したあと、100μsec待ってから読み出ししてます。ナゾパルスはだいたい80μsecくらいだったので100μsec待ってやり過ごしてるってことね。

ところが、コレで逸脱値は読まなくなったけど、なぜか1回おきに同じ値を読むようになってしまったので、おそらくヘンなタイミングで割り込み検知してるんだろうなーってことで、割り込みルーチンに入るたび、arduinoの特定のピンを1,0に変化させるようにしてオシロで見ると
コレはRigolの4chのやつですが、3番紫の線がON/OFFしているところが割り込み検知しているところ。

つまりその紫線がUP/DOWNする部分で割り込み検知してしまっていて、そこから読み出しているので、2回目の読み出しは全て1が読み出せてしまっていたということ

表示レンジを変更してみると、読み出し完了後、11msくらいONの状態が続き、OFFになってます。

仕様書通りなら、OFFになったタイミングですぐデータ読み出してOKのはずですが、そのあと12msくらいしたらナゾパルスがONとなるので、結局そのタイミングまで読み出せず。
結局、割り込み発生したタイミングを記録しておき、以前の割り込みから2ms以上経過していたら読み出し開始する、とすることで正常値のみ読み出せるようになった。
しかしこの読み方だと、1秒間に43回しか読めないので、80Hzモードとはなんだったのか、って感じにはなりますが、でもまぁ格ゲーとかじゃないしブレーキペダル用途としてはまぁそのくらいでも問題ないかと。

しかしよく見ると、ナゾパルスのタイミングで読み出しして、その後読み出しOKとなるのが次のナゾパルスのタイミングなんですよねコレ
HX711のリセット信号なんかな。
なので、試してないけど読み出しOKになった瞬間読み出しするようにすれば、80Hzくらいでは読めるかも。とも思いますが面倒なので未検証。

とりあえずロードセルは正確な値取れるようになったので一安心。
手持ちのロードセルは1kgのと5kgのだったので、20kgのロードセルをaliに注文しとく。
ロードセルへの道(Road to Load Cell?)はまだ遠いね

おすすめ