QEI:
https://developer.mbed.org/cookbook/QEI
Rotary Encoderと書いてあるが手で回すロータリーエンコーダーではなく、タイヤとかの回転角度・回転数を計測する用みたいだ。
手回しのロータリーエンコーダでも一応使える。
配線図
#include "QEI.h" Serial pc(USBTX, USBRX); //Use X4 encoding. //QEI wheel(p29, p30, NC, 624, QEI::X4_ENCODING); //Use X2 encoding by default. //QEI wheel (p29, p30, NC, 624); QEI wheel (PB_4, PB_5, NC, 624, QEI::X2_ENCODING); int main() { while(1){ wait(0.1); pc.printf("Pulses is: %i\r\n", wheel.getPulses()); } }
QEIクラスはピンの変化の検知に外部割り込み(InterruputIn)を使っていて、これがprivateなのでInterruptIn::mode()で内部プルアップの設定ができない。仕方がないので、ロータリーエンコーダーのA/Bピンをブレッドボード上でプルアップしている。
秋月で売っているAlpsのロータリーエンコーダーは1デテント(クリック感のあるところ)で数値が2個進む感じなので、QEI::X2_ENCODINGを指定するとデテント1個でPulsesが2つずつ増減する。(QEI::X4_ENCODINGだと4つずつ増減する)
624という指定は1回転数当たりのパルス数で、Exampleのデフォルトのままで特に意味は無い。
NucleoF401REの外部割り込み
mbed公式のInterrutptInのページを見るとmbed NXP LPC1768の外部割り込みで使えるピンの注意書きがあるが、NucleoF401REは16本の割り込みをPinに割り当てて使うようになっているようだ。
Port はバラバラでもいいが、Pin番号がかぶるとダメ。
参考:
http://letanphuc.net/2015/03/stm32f0-tutorial-3-external-interrupts/
STMicroelectronics RM0368 Reference manual
なので、紛れがないように今回はPB_4、PB_5に割り当てた。
ちなみにArduino Uno/ATMega328Pの外部割り込みは固定でINT0、INT1の2本しかない。
メモ:
QEIライブラリは手回しのロータリーエンコーダでも使えるが、使いにくいかな。
0 件のコメント:
コメントを投稿