2 Phase different signals rotational encoder library 2相位相差型ロータリーエンコーダ用ライブラリ。 絶対値パルス関数。相対値(前回読み出しからの差)パルス出力関数。秋月電子のEC12PLRGBSDVBF-D-25K-24-24C-61で動作確認した。http://akizukidenshi.com/catalog/g/gP-05773/
Dependents: RotationalEncoder_Hello
example program
Import programRotationalEncoder_Hello
RotationalEncoder library's example program
Diff: RotationalEncoder.h
- Revision:
- 1:57c43aac7007
- Child:
- 2:0102de0ec7a7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RotationalEncoder.h Sun Oct 23 02:18:28 2016 +0000 @@ -0,0 +1,113 @@ +/** + * Rotational encoder Library + * + * 2 Phase-differnt signals (Signal A,B) + * + * <example part> + * parts no : EC12PLGRBSDVBF + * ec site : http://akizukidenshi.com/catalog/g/gP-05773/ + * data sheet : http://akizukidenshi.com/download/ds/topup/EC12PLRGBSDVBF-D-25K-24-24C-61%EF%BC%8F08-6H(SPEC).pdf + * + * <scematic> + * + * rotational +Vcc +Vcc + * encoder | | + * +--------+ R(*1) R(*1) + * | | | | + * | A +---+-----+----- mbed (pXX) + * | | | + * | B +---------+----- mbed (pXX) + * | C | + * +---+----+ *1: mbed inernal pullup (The outside resistance is unnecessary) + * | + * - GND + * + * <timing chart> + * + * interrupt down(*1) up(*2) down + * ! ! ! + * stop point stop ! ! stop ! + * ! ! ! ! ! + * ----------+ +----------+ + * ! | | ! | + * Signal A ! +----------+ ! +----------+ + * ! ! ! ! ! + * +----------+ ! +----------+ + * | ! | ! | ! | + * Signal B -------+ ! +----------+ ! +--------- + * ! ! ! + * detect ! ! ! + * cw → 01 → 10 → 01 + * + * ccw ← 11 ← 00 ← 11 + * + * *1:interuupt down side is Provisionally process + * *2:interrupt up side is dicition process + * + * <example program> + * + */ + + +#ifndef ROTATIONALENCODER_H +#define ROTATIONALENCODER_H + +#include "mbed.h" + +/** + * rotational encoder interface. + */ + + +/** + * @class RotationalEncoder + * @brief nothine + */ +class RotationalEncoder +{ + +public: + + /** Create a RotationalEncoder port, connected to the specified A and B pins + * @param channelA encoder A pin + * @param channelB encoder B pin + * @note nothing + */ + RotationalEncoder(PinName channelA, PinName channelB); + + /** + * Reset the number for absolute and relative. + */ + void reset(void); + + /** + * Get the number of absolute pulses recorded by the encoder. + * + * @return Number of absolute pulses. + */ + int16_t getAbsolutePulses(void); + + /** + * Get the number of relative pulses recorded by the encoder. + * + * @return Number of relative pulses. + */ + int16_t getRelativePulses(void); + + +private: + + void encoderAUp(void); + void encoderADwon(void); + + InterruptIn _channelA; + InterruptIn _channelB; + + int16_t _channelBLevelOfchannelALow; + #define INITAL 0xff + + volatile int16_t _absolutePulse; + volatile int16_t _relativePulse; +}; + +#endif /* ROTATIONALENCODER_H */