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

Committer:
suupen
Date:
Sun Oct 23 02:18:28 2016 +0000
Revision:
1:57c43aac7007
Child:
2:0102de0ec7a7
add comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 1:57c43aac7007 1 /**
suupen 1:57c43aac7007 2 * Rotational encoder Library
suupen 1:57c43aac7007 3 *
suupen 1:57c43aac7007 4 * 2 Phase-differnt signals (Signal A,B)
suupen 1:57c43aac7007 5 *
suupen 1:57c43aac7007 6 * <example part>
suupen 1:57c43aac7007 7 * parts no : EC12PLGRBSDVBF
suupen 1:57c43aac7007 8 * ec site : http://akizukidenshi.com/catalog/g/gP-05773/
suupen 1:57c43aac7007 9 * data sheet : http://akizukidenshi.com/download/ds/topup/EC12PLRGBSDVBF-D-25K-24-24C-61%EF%BC%8F08-6H(SPEC).pdf
suupen 1:57c43aac7007 10 *
suupen 1:57c43aac7007 11 * <scematic>
suupen 1:57c43aac7007 12 *
suupen 1:57c43aac7007 13 * rotational +Vcc +Vcc
suupen 1:57c43aac7007 14 * encoder | |
suupen 1:57c43aac7007 15 * +--------+ R(*1) R(*1)
suupen 1:57c43aac7007 16 * | | | |
suupen 1:57c43aac7007 17 * | A +---+-----+----- mbed (pXX)
suupen 1:57c43aac7007 18 * | | |
suupen 1:57c43aac7007 19 * | B +---------+----- mbed (pXX)
suupen 1:57c43aac7007 20 * | C |
suupen 1:57c43aac7007 21 * +---+----+ *1: mbed inernal pullup (The outside resistance is unnecessary)
suupen 1:57c43aac7007 22 * |
suupen 1:57c43aac7007 23 * - GND
suupen 1:57c43aac7007 24 *
suupen 1:57c43aac7007 25 * <timing chart>
suupen 1:57c43aac7007 26 *
suupen 1:57c43aac7007 27 * interrupt down(*1) up(*2) down
suupen 1:57c43aac7007 28 * ! ! !
suupen 1:57c43aac7007 29 * stop point stop ! ! stop !
suupen 1:57c43aac7007 30 * ! ! ! ! !
suupen 1:57c43aac7007 31 * ----------+ +----------+
suupen 1:57c43aac7007 32 * ! | | ! |
suupen 1:57c43aac7007 33 * Signal A ! +----------+ ! +----------+
suupen 1:57c43aac7007 34 * ! ! ! ! !
suupen 1:57c43aac7007 35 * +----------+ ! +----------+
suupen 1:57c43aac7007 36 * | ! | ! | ! |
suupen 1:57c43aac7007 37 * Signal B -------+ ! +----------+ ! +---------
suupen 1:57c43aac7007 38 * ! ! !
suupen 1:57c43aac7007 39 * detect ! ! !
suupen 1:57c43aac7007 40 * cw → 01 → 10 → 01
suupen 1:57c43aac7007 41 *
suupen 1:57c43aac7007 42 * ccw ← 11 ← 00 ← 11
suupen 1:57c43aac7007 43 *
suupen 1:57c43aac7007 44 * *1:interuupt down side is Provisionally process
suupen 1:57c43aac7007 45 * *2:interrupt up side is dicition process
suupen 1:57c43aac7007 46 *
suupen 1:57c43aac7007 47 * <example program>
suupen 1:57c43aac7007 48 *
suupen 1:57c43aac7007 49 */
suupen 1:57c43aac7007 50
suupen 1:57c43aac7007 51
suupen 1:57c43aac7007 52 #ifndef ROTATIONALENCODER_H
suupen 1:57c43aac7007 53 #define ROTATIONALENCODER_H
suupen 1:57c43aac7007 54
suupen 1:57c43aac7007 55 #include "mbed.h"
suupen 1:57c43aac7007 56
suupen 1:57c43aac7007 57 /**
suupen 1:57c43aac7007 58 * rotational encoder interface.
suupen 1:57c43aac7007 59 */
suupen 1:57c43aac7007 60
suupen 1:57c43aac7007 61
suupen 1:57c43aac7007 62 /**
suupen 1:57c43aac7007 63 * @class RotationalEncoder
suupen 1:57c43aac7007 64 * @brief nothine
suupen 1:57c43aac7007 65 */
suupen 1:57c43aac7007 66 class RotationalEncoder
suupen 1:57c43aac7007 67 {
suupen 1:57c43aac7007 68
suupen 1:57c43aac7007 69 public:
suupen 1:57c43aac7007 70
suupen 1:57c43aac7007 71 /** Create a RotationalEncoder port, connected to the specified A and B pins
suupen 1:57c43aac7007 72 * @param channelA encoder A pin
suupen 1:57c43aac7007 73 * @param channelB encoder B pin
suupen 1:57c43aac7007 74 * @note nothing
suupen 1:57c43aac7007 75 */
suupen 1:57c43aac7007 76 RotationalEncoder(PinName channelA, PinName channelB);
suupen 1:57c43aac7007 77
suupen 1:57c43aac7007 78 /**
suupen 1:57c43aac7007 79 * Reset the number for absolute and relative.
suupen 1:57c43aac7007 80 */
suupen 1:57c43aac7007 81 void reset(void);
suupen 1:57c43aac7007 82
suupen 1:57c43aac7007 83 /**
suupen 1:57c43aac7007 84 * Get the number of absolute pulses recorded by the encoder.
suupen 1:57c43aac7007 85 *
suupen 1:57c43aac7007 86 * @return Number of absolute pulses.
suupen 1:57c43aac7007 87 */
suupen 1:57c43aac7007 88 int16_t getAbsolutePulses(void);
suupen 1:57c43aac7007 89
suupen 1:57c43aac7007 90 /**
suupen 1:57c43aac7007 91 * Get the number of relative pulses recorded by the encoder.
suupen 1:57c43aac7007 92 *
suupen 1:57c43aac7007 93 * @return Number of relative pulses.
suupen 1:57c43aac7007 94 */
suupen 1:57c43aac7007 95 int16_t getRelativePulses(void);
suupen 1:57c43aac7007 96
suupen 1:57c43aac7007 97
suupen 1:57c43aac7007 98 private:
suupen 1:57c43aac7007 99
suupen 1:57c43aac7007 100 void encoderAUp(void);
suupen 1:57c43aac7007 101 void encoderADwon(void);
suupen 1:57c43aac7007 102
suupen 1:57c43aac7007 103 InterruptIn _channelA;
suupen 1:57c43aac7007 104 InterruptIn _channelB;
suupen 1:57c43aac7007 105
suupen 1:57c43aac7007 106 int16_t _channelBLevelOfchannelALow;
suupen 1:57c43aac7007 107 #define INITAL 0xff
suupen 1:57c43aac7007 108
suupen 1:57c43aac7007 109 volatile int16_t _absolutePulse;
suupen 1:57c43aac7007 110 volatile int16_t _relativePulse;
suupen 1:57c43aac7007 111 };
suupen 1:57c43aac7007 112
suupen 1:57c43aac7007 113 #endif /* ROTATIONALENCODER_H */