パルスカウント
エンコーダのパルスカウントを外部のマイコンでやってみる話です。
組み込み系マイコンでモータの制御をやる場合エンコーダの読み取りが必要となります。しかし、内部の別の処理などに阻まれて読み取りが間に合わない時があります。Raspberry Pi。なお、Maxonのエンコーダの場合最大100khzぐらいになります。
また、小型なマイコンの場合パルス読み取り用のタイマーやI/Oが不足することもありあます。なので、PICで外部読み取りを目指します。仕様は以下のように決定しました。
- 8pin PIC
- SPIペリフェラル付き
- アセンブラ
- 16bitカウンタ
- 4逓倍
- できるだけ高速化
小さくなるように、8pinで、SPIで読み取ります。また、4逓倍で読み取り、速度を優先して16bitカウンタとしました。PICは12F1822を選択しました。1個110円です。
普段はC言語で書くことが多いですが、PICの場合速度を考慮してASMで書きました。以下は回路図です。
PICの状態変化割込みを利用して、4逓倍としています。また、できるだけ高速化を狙ってマクロによる展開を行っています。SPIの読み取り手順としては2byte交換して、内部の16bitが読みだせます。オーバーフローの処理は行っていないので、読み出し側で処理する必要があります。
以下からダウンロードできます。
こんな感じで適当に今後書いていこうかなぁと思います。