エンコーダー付きDCモーターの回転数を取得する

エンコーダー付きDCモーターから回転数を取得する。モーターは前に書いたpololuの12Vモーター。
https://www.pololu.com/product/2824

モーターの配線に関する情報は上記にある。

モーターは四個あり、回転数の分解能を大きくするためには、各モーターがgpioを2本使う。合計8本。これをRaspberrypi3の本体から全部取るというのは、できなくなはないが、他に使う余裕はなくなってしまう。
そこで、MCP23S17チップを使って、GPIOの拡張をすることにした。配線は、記載の通りやれば良い。
http://ww1.microchip.com/downloads/jp/DeviceDoc/20001952C_JP.pdf
結構配線間違いで、時間を使ってしまった。MCP23S17はSPIポートを使う。ラズパイの設定で、使えるようにしなければならないのは当然である。MCP23017という兄弟のようなチップもあるが、こちらはI2Cポートを使う。I2Cポートはサーボモーターのためにとっておきたいし、SPIの方が一つ一つのデバイスとの絡みで更新速度が早いなどのメリットもある。
これで16ピン増やせた。
ロボットのシステムはJAVAで動かすので、pi4jのライブラリと、MCP23S17のサンプルを取ってくれば、難なく動く。A0,A1,A2をLOWにしておかなければならないことと、RESETをHIGHにしておかないと正常稼働しないのには注意。
MCP23S17の拡張16GPIOポートのうち、8個はこのモーター回転数のために使うが、残りは、距離センサーのために使う予定だ。