この記事はIoTLTのアドベントカレンダーの2022の2日目の記事です。 qiita.com
IoTをしていてパワみのあるHigh Voltage系につなぎたくなって絶縁ICのADuM1250を使いたくなることもあると思いますので、ご参考までに。
TL;DR (Too Long Don't Read)
結論から書くと、絶縁ICのADuM1250はside1をControllerに、side2をPeripheralにつないだ方が良いと思う
回路と回路図、ファームウェア
秋月のADuM1250のモジュールやストロベリーリナックスのINA238(電圧測定)モジュール、DCDC電源をつないだだけの30~80VのHigh Voltage系の電圧測定するための簡単な回路です。J7の先でI2C接続して通信するマイコンはTeensy 4.1を使用しました。
- ADuM1250使用I2Cアイソレーターキット: 組立キット(モジュール) 秋月電子通商-電子部品・ネット通販
- 回路図:GitHub - tetra-aero/Voltage-sensor-mother-board: voltage sensor INA238 module mother board
- ファームウェア:GitHub - tetra-aero/Teensy41-Voltage-Measure-INA238: By Teensy 4.1 it measure Voltage by INA238, Texas instruments
side1とside2を逆にする。と、side2側のGNDが浮いて、データが化ける
失敗した回路図です。side1側にPeripheralのINA238をside2側にControllerのマイコンをつないでいます。
マイコンの処理は動いたがデータが化けている。
なぜかGNDが浮いている。 いろいろ試したり調べたりした結果、下記の記事にside1をcontroller、side2をperipheralをつないだほうが良いように読めます。
I2Cに準拠したデバイスの例としては「ADuM1250」が挙げられます。同ICは、ホット・スワップ対応のデジタル・アイソレータです。そのデータシートには、サイド1、サイド2について、5Vの動作条件におけるプルアップ抵抗の推奨値が記載されています。それらを使用して計算すると、許容可能な最大ケーブル容量はサイド1では88pF、サイド2では780pFとなります。これらは理論上の最大容量値です。同ICのデータシートを見ると、負荷容量としてサイド1では40pF、サイド2では400pFという値が推奨されていることがわかります。データシートに記載された値は、設計上のマージン、ESD(Electro Static Discharge)に対する保護、400pFがI2Cバスの標準値であることを考慮した結果です。同ICの各サイドで負荷容量の値が異なるのは、それぞれの駆動能力に差があるからです。駆動能力はサイド1が3mA、サイド2が30mAで、サイド2の方が高くなっています。したがって、サイド2では、プルアップ抵抗の値をサイド1で許容できる値よりも低く設定することが可能です。 I2Cバスは、4芯のリボン・ケーブルを使用することで延長することができます。通常、このタイプのリボン・ケーブルを使用すると、1mあたり約50pFの容量が加わります。ADuM1250の場合、サイド1にはトータルのバス容量が40pFであるI2Cバスの1つのセクションを接続することができます。一方、サイド2には、4芯のリボン・ケーブル(最長8m)を接続することが可能です。それにより、絶縁されたデータを、バスに接続された別のI2Cデバイスに転送することができます。8m以上の距離に対応したい場合や、サイド1に接続されるトータルの容量が40pFを超える場合には、最高動作周波数を低く設定し、立上がり時間を長く確保できるようにします。そのようにすれば、より大きなバス容量を許容することが可能になります。
(データシートにはそんなことは書いていないので、配線の静電容量の問題なんだろうか)
- その他I2Cのエラーの参考例
- I2Cのトラブルのはなし: SUDOTECK
- べーた(無職) on Twitter: "そういや,ADUM1250はI2Cの引っ張る方向によってちょっと波形が汚かったなぁ.普通のI2Cのレベル変換とかってどうなんだろう" / Twitter
以下は過程
1. DCDCのノイズを調べる
起動時のノイズの確認。
通常時の場合とかも。
2. 動いたり動かなかったりしていたので、ADALM2000で波形を見る
3. キャパシタの盛ると動いたのでマシマシにしてみた
最終的にこれは良くなかった。
4. side1とside2の波形を同時に見る
ここまで来てやっと気付いた。GNDが浮いていることに。入出力の両方を波形を見てみたほうが良いと思います。
5. side1とside2を逆転して直してみたあとの波形とデータ
動いたー!!!
これを今、teTra Mk-5 SN4(4号機)に組み込んで動作試験してみています
こういうのに組み込んで、福島の南相馬のロボットテストフィールドで実験してます。写真はイメージでteTra Mk-5 SN3(3号機)です。 もっといろいろパワみ基板を作ったり、IoT的にLTEやネットワークにつないでデータ収集・解析を便利にして行く予定です。ご興味・ご関心がある方がいましたらご連絡ください。
最後に
明日は@tatuya1970さんの予定です!お楽しみに!