2014年12月5日(金) 22:00
I2Cが信号2本なのに対し、SPIは4本となる。
自前SPIのように書き込みしか行わないなら、3本でも足りる。
I2Cに比べれば配線が増えるが、シリアル通信だからそう多い訳でもない。何より重要なのは、I2Cとは異なって空きI/Oどこでも好きな場所を使える点。というのも、I2Cは余りにも規格が複雑であるため、マイコンの内蔵機能に任せねばならないからだ。I2Cドライバーの自作は、余りに敷居が高い。そうなると、限られたピンを使うしかない。
これに対しSPIは規格が非常に単純なので、ドライバーが自作し易い。PICでも十分にプロウラムを作れる程度である。
SPIにはタイムアウトもへったくれもない。通信エラーがあったら、値が信用できなくなるだけだ。
速度もSPIが桁違いに速い。読み書きの信号線が異なるため、I2Cより圧倒的に有利だし読み書き同時に行うことも可能。
スレイブデバイスの数が増えるとCS信号線も増えるが、その代償としてオープンドレイン「ではない」というメリットがある。信号の変化が高速なので、通信速度も速くできる。
だったら最初からI2Cを使わずにSPIしてろと言いたくなるかもしれない。
しかし、PX4FLOWなどSPIに対応していないセンサーもある。特にPX4FLOWは重要センサーであり、外す訳にはいかない。すると、I2C対応は必須である。ずっとI2Cに苦しめられたが、どうせ回避できないのであれば今後のためにもI2Cのノウハウを溜めたのは意味がある。
LPS25Hや磁気センサーは、I2CとSPIの両方に対応している。
しかし、温度センサーはI2Cにしか対応していない。秋月のこの温度センサーは、I2C対応とSPI対応が別製品である。今回さっさとI2C対応版を買ったのは早まったが、1個しか買わなかったのは助かった。
LPS25Hだけを、SPIで配線し直す。
ところで、ジャイロセンサーについて勘違いしていたことに気付く。
ジャイロセンサーとは、言うまでもなく角速度を検出するセンサーである。ところが自分の場合、頭の中で構想を練っていると、角「加速」度を検出するセンサーだと勘違いしていることがある。それに気付かず思索を進めると、ロクでもないことになるので注意せねば。
角加速度ではなく角速度を検出できるから、角速度を取得するのに積分は不要であり誤差の累積はない。だから、それなりに信用できる値が角速度に関しては得られる。そうすると、加速度センサーからスピンの影響を除去する計算も実行し易い。
written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4