ロードセルなどのひずみゲージ式のセンサー用のADC(アナログデータ取得)のちょっとした調査結果です
ロードセル用ADCといえばHX711があまりにも有名で、多くの電子工作者、DIYをする人たちが使用しています。
北海道大学の西村先生はかなり積極的に使われていると聞きます。
性能的に24bitを謳ってはいるものの、実際のところどうなんだというのを確認した報告です。(by 久野)
1.検証環境
Arduino Uno 328P クローン(互換)品
ロードセル 10kg (秋月電子)
ほぼ2kgの真鍮重り
24bitADC( HX711 / TM7711 / CS1237 )
2.計測条件など
3Dプリンタで印刷した受け皿を使用
いずれもゲイン(PGA)128で計測
HX711 の10Hzモードは 80-90ms/sample でデータを返す
HX711 の80Hzモードは 10-12ms/sample でデータを返す
有効ビット数の計算は厳密ではなく、2kgの重りを乗せた際にぶれない桁とする
CS1237 は Aliexpressでモジュールを購入、電源が2.5Vシャントレギュレータなのが良い
TM7711は Aitendo で購入したICを 典型的な利用例 (典型应用) の回路を適当に自作して使用、本当に適当
3.ざっくりとした検証結果
ICチップ | ゲージ電圧(V) | サンプルレート(Hz) | 有効ビット数(bits) |
HX711 | 4.2 | 10 (多分12くらい) | 15~16 |
HX711 | 4.2 | 80 (多分90くらい) | 14.5~15 |
TM7711 | 5.0 | 10 | 16~16.5 |
TM7711 | 5.0 | 40 | 15.5~16 |
CS1237 | 2.5 | 10 | 18~20 |
CS1237 | 2.5 | 40 | 15.5~16 |
CS1237の40Hzモードだけ様子がおかしかった、全然定期的に値を返してくれない。
データが準備完了になるまでのmsを計測すると
[0, 45, 31, 46, 0, 46, 0, 36, 0, 42, 32, 0, 45, 33, 0, 44, 31, 0, 47, 47, 32, 0, 44, 34, 0, 43, 46, 0, 37, 0, 41, 33, 0, 48, 30, 0, 46, 31, 0, 46, 47, 0, 47, 0, 37, 0, 40, 34]
平均値は 約25ms で 40Hzなのだが、標準偏差が20 近くある
使い方を間違っていないか心配になるが、10Hzモードではかなり精度良く100msでデータが返ってきている
きっと40Hz動作時のFIFOとReadyの仕組みにエラッタと抱えていると思われる、、、思いたい
7/25 追記
ArduinoボードのUSB-UART変換ICがUSB FullSpeed(12Mbps)の挙動が、ICなのかドライバなのかわからないがおかしい可能性が浮上してきた。
低レートで転送すると、受信タイミングがおかしいことがある。20msくらいずれる。
バッファとUSB転送の問題なのかもしれないが結構致命的。
RyzenのUSBスタックの作りの可能性もあるし、詳しい調査をしている時間はない。
40Hzちゃんと送れていると信じて使った方が良いかも。
4.結果と考察
ゲージ電圧の時点であまりフェアではないが
HX711を使うメリットはあまりない事がわかった
TM7711は適当に作ってもそれなりに動いてくれるいい子
CS1237モジュールは電源的にフェアではないが、20bit近く性能が出るのが素晴らしい40Hz以上で使いたいなら、TM7711かHX711
10Hzで良いのであれば圧倒的にCS1237モジュールを購入するのが良いと分かった
入手が簡単なHX711、自作が簡単なTM7711、精度出すのが簡単なCS1237ということで