田舎の組み込みプログラマーがわざわざ趣味でも色々開発してみようとあがく様を綴るブログです。
DMM.makeのクリエイターズマーケットに出品しています。
ラジコン用のコーナーウエイトゲージ3回目 ― 2018年11月11日
訂正やら変更やら
先日、今使っているHX711モジュールはRATE端子がどこにもつながっていないと書きましたが、ICの下でちゃんとGNDに接続されていました。
なので、レートは10SPSになっているはずで、readyになるまでの時間が4個のHX711でバラバラになっている理由が分かりません。
そこで、別の用途のために買ってあった赤いヤツを繋いでみました。
あと、先日はPD_SCKの立ち下がりクロックで割り込みをかけていましたが、PD_SCKの立ち上がりに対してDOUTは最長でも0.1μsecで準備ができるとのことで、割り込みのオーバーヘッドよりもはるかに短時間のため、立ち上がりクロックでの割り込みに変更しました。
となると、無理にHIGH時間を短くする必要もなく、PD_SCKの配線を4個のHX711に引き回していることもありますので、HIGH時間も長めにしました。
で、きっと赤いヤツはきっちり10SPSなんだろうと期待して波形を見てみると・・・。
違ってました orz
しかも、この接続に変えるまではずっと1番が10SPSだったのに、この接続にしてからはずっと3番が10SPSだったりします。
(赤いヤツは4番)
ミステリーは放置して
次のステップに進みます。
HX711から読み込んだ値を観察していると、下位8bitは常時変動している感じです。
赤いヤツについては繋いだばかりの時は変動は7bitで、流石SparkFunだと思ったんですが、ICが温まってくると8bitになっちゃいました。
しかしまぁ、生データをいくら眺めていても何にもなりませんので、重量値に換算してみましょう。
最近仕事で2点校正をよく使っていたので、それで行ってみます。
この時のために、ちゃんと分銅も用意しましたよ。
で、100gと500gの分銅を乗せたときのデータを記録して、その値を元に換算します。
1番のロードセルだけ負の値を出しますが、そこはきっちり対処して負の値もちゃんと扱えるように作り込みます。
24bitは扱いづらいので符号拡張して32bitにし、平均を取る→2点校正で1mg単位で重量値に→ゼロ点補正→100で割って0.1g単位に・・・といった手順でやってみます。
が、アセンブラではかなり大変そうなので・・・
苦しいときの神頼み
C言語の力を借ります。
C言語を使うのは久しぶりすぎて、こんな感じでいいのかどうか分かりませんが、一応ちゃんと動作しているようなので良しとします。
注意点は、整数演算なので有効桁確保のために掛け算を先にやること、その時32bitでは足りなくなるので64bitで演算することくらいでしょうか。
RAMモニタの数値は実際にラジコンを乗せて量ったもので、1行目の左から順に左フロント、左リア、右リア、右フロントとなっています。
HX711の計測値は今のところ加算平均5回で処理していますが、0.1g単位だとほとんどバラつきません。
精度については、多分ロードセルの温度特性なんでしょうけど、これまでのところゼロ点は最大5gくらいズレますし、ゲインは500gの重りで0.2gぐらいズレたりします。
値がバラつくことに関してはシールド線を使ったりコンデンサを入れたりで改善できそうな気もしますが、温度特性は頭の痛いところですね。
まぁ、自分用のコーナーウエイトゲージということを考えると、4個が同じ様にズレるのなら特に問題はないんですけどね。
といったところで、今回はここまで。
コメント
トラックバック
このエントリのトラックバックURL: http://trident.asablo.jp/blog/2018/11/11/8995652/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。