実際に使えるエンコーダの周波数の測定
はじめに
mbedでエンコーダ(Quadrature Encoder)のパルス数をカウントする方法は少なくとも2つ。
1つはソフトウェア上でパルスを取得する方法で、ライブラリが公開されている。
パルスの取得には割り込みを用いており、その割り込みは1回につき2[us]かかる。
そのため、どんなにmbedががんばっても500[kHz]までのパルスに対してしか処理を行う事が出来ない。
QEI:http://mbed.org/cookbook/QEI
もう1つはmbedに搭載されているARM(Cortex-M3)内にあるハードウェアを用いる方法で、こちらもライブラリが公開されている。
このライブラリを使用するにmbedに改造を施す必要がある。
QEI_hw:http://mbed.org/users/hexley/notebook/qei_hw-interface-implementation-notes/
実際にエンコーダを使う場面(エンコーダのパルス取得、データの送信)を想定し、どの程度の周波数でパルスを正常に取得できなくなるか測定を行った。
実験
エンコーダ付きDCモータを用い、必要最小限の機能(エンコーダ取得、差分計算、時間割り込み、シリアル通信)でどの程度の周波数まで取得できるかを測定した。


使用したモータとエンコーダ
エンコーダにmbedとSH7125マイコンを接続し、mbedのQEI及びQEI_hw、SH7125の位相計数モードでそれぞれデータを取得。
モータを安定化電源に接続し、手回しで電圧のダイアルを調整する。
50[ms]のループで前回との差を計算し、シリアル通信でPCに送信し、PC側で比較する。
QEIを用いエンコーダ1つ、エンコーダ2つ、QEI_hwを用いエンコーダ1つの場合のデータを取得する。
結果

QEIを用いたエンコーダ1つの時の取得データ

QEIを用いたエンコーダ2つの時の取得データ

QEI_hwを用いたエンコーダ1つの時の取得データ
SH7125が取りこぼしを起こさないと仮定し、周波数-取得データのグラフにした。

QEIを用いたエンコーダ1つの時の周波数-取得データ

QEIを用いたエンコーダ2つの時の周波数-取得データ

QEI_hwを用いたエンコーダ1つの時の周波数-取得データ
考察?
エンコーダ2つの時は同じエンコーダの線を違うポートに引っ張ってきただけ。2つめのエンコーダの設定をしただけで実際にデータ送信等は行っていない。
という風にしただけだが、エンコーダが1つの時も2つの時も取得できる周波数の最大値がわずかに下がっただけであった。
恐らく他の処理(シリアル通信等)の影響の方が大きいと考えられる。
QEI_hwを使用すると遙かに高い周波数でも取りこぼしを起こさず、順調にデータを取得できた。
2 comments on 実際に使えるエンコーダの周波数の測定:
Please log in to post comments.

その割り込みは1回につき2[ms]かかる。
とあるのですが、その後に
がんばっても500[kHz]までのパルスに対して
とあるのと、その後に続くグラフを見ても、500KHz超えでおかしくなっていることから、 2usの間違いではないでしょうか?cortex-M3が割り込みに2msもかかるほど遅い とは思えないのですが・・・・ 手持ちのエンコーダー(16?pulse/round)では、2msでも間に合ってしまうので、 試しようがありませんでした。