田舎の組み込みプログラマーがわざわざ趣味でも色々開発してみようとあがく様を綴るブログです。
DMM.makeのクリエイターズマーケットに出品しています。

しゃべるラップカウンター設計中2021年02月05日

しゃべるラップカウンターは、以前一応使える状態まで出来ていました。

で、サーキットに持って行って試運転していたところ、売って欲しいと 言ってくれる方が何人かいたのでちゃんと格好良く作ろうとして・・・何年か経ってしまいました。

その時は 3D CAD は使っておらず、3Dプリンタも持っていませんでしたので、たった10個作るのにも設計段階で挫折してしまったんですが、今はどちらも使える環境になりましたので何とかできそうな気がしています。

と言うわけで今再設計しています。

ケースは市販品を使いますが、パネルは加工の手間を省くために 3Dプリンタで作るつもりです。

元パーツとCAD画面を同時撮影

どうにも不慣れなもので、時々写真のように表示をほぼ実物大にして実物と並べて眺めたりしています。

回路図CADはまだサッパリ分からないので、今回はユニバーサル基板を使い、ボリュームなども 3D 形状のみです。

他にも色々作りたい物があるので当面は量産するつもりはありませんが、いずれはちゃんと基板も作 りたいとは思っています。

といったところで、今日はここまで。

ラジコン用のコーナーウエイトゲージ3回目2018年11月11日

訂正やら変更やら

先日、今使っているHX711モジュールはRATE端子がどこにもつながっていないと書きましたが、ICの下でちゃんとGNDに接続されていました。
なので、レートは10SPSになっているはずで、readyになるまでの時間が4個のHX711でバラバラになっている理由が分かりません。

そこで、別の用途のために買ってあった赤いヤツを繋いでみました。

HX711 赤いモジュール

あと、先日はPD_SCKの立ち下がりクロックで割り込みをかけていましたが、PD_SCKの立ち上がりに対してDOUTは最長でも0.1μsecで準備ができるとのことで、割り込みのオーバーヘッドよりもはるかに短時間のため、立ち上がりクロックでの割り込みに変更しました。
となると、無理にHIGH時間を短くする必要もなく、PD_SCKの配線を4個のHX711に引き回していることもありますので、HIGH時間も長めにしました。

で、きっと赤いヤツはきっちり10SPSなんだろうと期待して波形を見てみると・・・。

HX711 4連波形・・・一人以外速度違反

違ってました orz
しかも、この接続に変えるまではずっと1番が10SPSだったのに、この接続にしてからはずっと3番が10SPSだったりします。
(赤いヤツは4番)

ミステリーは放置して

次のステップに進みます。

HX711から読み込んだ値を観察していると、下位8bitは常時変動している感じです。
赤いヤツについては繋いだばかりの時は変動は7bitで、流石SparkFunだと思ったんですが、ICが温まってくると8bitになっちゃいました。

しかしまぁ、生データをいくら眺めていても何にもなりませんので、重量値に換算してみましょう。
最近仕事で2点校正をよく使っていたので、それで行ってみます。

HX711の入力値を分銅で校正

この時のために、ちゃんと分銅も用意しましたよ。

で、100gと500gの分銅を乗せたときのデータを記録して、その値を元に換算します。
1番のロードセルだけ負の値を出しますが、そこはきっちり対処して負の値もちゃんと扱えるように作り込みます。

24bitは扱いづらいので符号拡張して32bitにし、平均を取る→2点校正で1mg単位で重量値に→ゼロ点補正→100で割って0.1g単位に・・・といった手順でやってみます。
が、アセンブラではかなり大変そうなので・・・

苦しいときの神頼み

C言語の力を借ります。

C言語の力で2点校正

C言語を使うのは久しぶりすぎて、こんな感じでいいのかどうか分かりませんが、一応ちゃんと動作しているようなので良しとします。
注意点は、整数演算なので有効桁確保のために掛け算を先にやること、その時32bitでは足りなくなるので64bitで演算することくらいでしょうか。

RAMモニタの数値は実際にラジコンを乗せて量ったもので、1行目の左から順に左フロント、左リア、右リア、右フロントとなっています。
HX711の計測値は今のところ加算平均5回で処理していますが、0.1g単位だとほとんどバラつきません。

精度については、多分ロードセルの温度特性なんでしょうけど、これまでのところゼロ点は最大5gくらいズレますし、ゲインは500gの重りで0.2gぐらいズレたりします。
値がバラつくことに関してはシールド線を使ったりコンデンサを入れたりで改善できそうな気もしますが、温度特性は頭の痛いところですね。

まぁ、自分用のコーナーウエイトゲージということを考えると、4個が同じ様にズレるのなら特に問題はないんですけどね。

といったところで、今回はここまで。

ラジコンのコーナーウエイト計測

ラジコン用コーナーウエイトゲージ2回目2018年11月08日

続きです。

コーナーウエイトゲージということで当然秤は4つあるわけで、HX711も4つ使っています。
なので、ロジアナでまとめて観察してみたところ、気になることが・・・

HX711の足並みが揃わない

1回目の読み出しは次のチャンネルとゲインを指定するためのものなので除外するとして、それ以降のREADYになるタイミングがバラバラです。

DOUT 1(1個目のHX711のDOUT)だけは95msec弱とほぼ10SPS相当なので、それ以外はダメということになりそうです。
もしかすると、使っているHX711をモジュール化した基板でRATE端子をどこにも接続していないのが問題なのかもしれません。

その辺の調査は後回しにするとして、次にデータを見てみます。

HX711 4個のデータもバラバラ

データも見事にバラバラですね。
ゲインを64に抑えてもいますので、先頭から12ビットくらいは揃って欲しかったんですが・・・。

特にDOUT 1がいきなりFFhから始まっているのは、配線ミスやロードセルの不良も疑ったんですが、データシートを見ると測定値は2の補数形式ということなので、単にマイナスの値になっているということのようです。

この辺も使っているモジュールが推奨回路通りになっていなくて、入力抵抗が片側にしか入っていないことも影響しているかもしれません。

なので、推奨回路通りになっていると思われるモジュールを発注済みです。
中国発送のようですので、到着までまだしばらくかかりそうですが。

もうひとつ気になっていたこと

それは、割り込み中のデータシフト処理にどのくらいの時間がかかっているかということです。
これもロジアナを使って確認してみました。

割り込み処理タイミング

割り込み処理の入り口でポートビットをオンし、出口でオフしています。
クロックの立ち下がりで割り込みをかけるようにしていますが、割り込み処理に入るまでに1.96μsecかかっていますね。
そして、割り込み処理が5.556μsec。

次のクロックまでにはまだ若干の猶予がありますが、計測結果を別のマイコンに転送することになると思いますので、そうなると割り込み処理が増えるのでちょっと厳しいかもしれません。

そんなこんなで

一応、年内にはサーキットでコーナーウエイト調整の効果を確認してみたいとは思っているんですが、こんな感じでちまちまやっていますので、どうなることやら。

ラジコン用のコーナーウエイトゲージを作ろう2018年11月07日

またもや随分更新をサボってしまいました。

忙しかったと言えばそれまでですが、やはり具体的なビジョンがなければ頓挫しやすいということだと思います。

ということですので

ラジコン用のコーナーウエイトゲージを作ってみることにしました。

元々電子工作を始めようと思ったのはラジコン用の何かを作りたいというのが一番の理由で、コーナーウエイトゲージもずっと以前から作りたいと思っていた物です。

ぐずぐずしているうちに市販品が出てしまったわけですが、ロードセルとかロードセル用ADコンバータとかが簡単に手に入るようになったので、今更ながらやってみます。

ラジコン用コーナーウエイトゲージ試作品

で、これが試作品。
ロードセルは2kg、ADコンバータは定番のHX711、マイコンはいつものようにR8C/32Mです。

20MHzで不足とは・・・

HX711の使い方はあちこちで解説されていますが、マイコンからパルスを送ると同期してデータが出てくるという、クロック同期シリアルインターフェイス的なやつですね。

「的な」と言っているのはちょっと独自仕様が入っているからで、おかげでマイコンのシリアル通信機能が使えないわけですが、今回のように4つの物を使うとなるとクロック同期シリアルが4つも使えるマイコンなんて見当たらないので結局は自力でなんとかするしかないわけですね。

具体的には、転送クロックをタイマー機能で生成し、立ち下がりで割り込みをかけてシフトするわけですが、クロックパルスの幅は標準1μsecとかなり高速です。
この速度だと、1周期は2μsecですので20MHzだと40サイクルしかなく、この時間で4つ分のデータのシフトは無理そうというか実際無理でした。

ゆっくりしていってみる

標準はあくまでも標準ですので、ゆっくりやれば別に問題はないわけです。

が、一つ注意が必要なのはパルスがHIGHになっている時間が60μsecを超えるとHX711がパワーダウンモードに入ってしまうということです。
で、通常は50μsecまでにしろとのことですので、そこは守らないといけないわけですね。

ということで、実際の波形がこちら。

HX711クロック、データ波形

クロック周期を10μsec、HIGH時間を0.5μsecにしてみました。
具体的には、タイマRC機能でTRCIOAに出力、TRCGRAで10μsec周期を作りつつパルスの立ち下げと割り込み処理を、TRCGRCで9.5μsecの時点でパルスを立ち上げています。

どうやら10μsecもあればHX711の4個分のシフト処理は間に合うようです。

あとはメインループでHX711のデータ出力を監視し、4個全部の出力がLOWになったらタイマRCをスタート、タイマRCは1回分の入力処理が終わったら停止するように作り込んでいます。

といったところで、今回はこの辺で。