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 03:44:28 2016 +0000
Revision:
2:0102de0ec7a7
Parent:
1:57c43aac7007
include comment to example program code

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 2:0102de0ec7a7 48 * @code
suupen 2:0102de0ec7a7 49 * #include "mbed.h"
suupen 2:0102de0ec7a7 50 * #include "RotationalEncoder.h"
suupen 1:57c43aac7007 51 *
suupen 2:0102de0ec7a7 52 * RotationalEncoder encoder(p21, p23);
suupen 2:0102de0ec7a7 53 *
suupen 2:0102de0ec7a7 54 * BusOut led(LED1, LED2, LED3, LED4);
suupen 2:0102de0ec7a7 55 *
suupen 2:0102de0ec7a7 56 * int main() {
suupen 2:0102de0ec7a7 57 * while(1) {
suupen 2:0102de0ec7a7 58 *
suupen 2:0102de0ec7a7 59 * led = encoder.getAbsolutePulses();
suupen 2:0102de0ec7a7 60 * printf("abs = %4i rel = %4i\r\n",encoder.getAbsolutePulses(), encoder.getRelativePulses());
suupen 2:0102de0ec7a7 61 *
suupen 2:0102de0ec7a7 62 * }
suupen 2:0102de0ec7a7 63 * }
suupen 2:0102de0ec7a7 64 * @endcode
suupen 1:57c43aac7007 65 */
suupen 1:57c43aac7007 66
suupen 1:57c43aac7007 67
suupen 1:57c43aac7007 68 #ifndef ROTATIONALENCODER_H
suupen 1:57c43aac7007 69 #define ROTATIONALENCODER_H
suupen 1:57c43aac7007 70
suupen 1:57c43aac7007 71 #include "mbed.h"
suupen 1:57c43aac7007 72
suupen 1:57c43aac7007 73 /**
suupen 1:57c43aac7007 74 * rotational encoder interface.
suupen 1:57c43aac7007 75 */
suupen 1:57c43aac7007 76
suupen 1:57c43aac7007 77
suupen 1:57c43aac7007 78 /**
suupen 1:57c43aac7007 79 * @class RotationalEncoder
suupen 1:57c43aac7007 80 * @brief nothine
suupen 1:57c43aac7007 81 */
suupen 1:57c43aac7007 82 class RotationalEncoder
suupen 1:57c43aac7007 83 {
suupen 1:57c43aac7007 84
suupen 1:57c43aac7007 85 public:
suupen 1:57c43aac7007 86
suupen 1:57c43aac7007 87 /** Create a RotationalEncoder port, connected to the specified A and B pins
suupen 1:57c43aac7007 88 * @param channelA encoder A pin
suupen 1:57c43aac7007 89 * @param channelB encoder B pin
suupen 1:57c43aac7007 90 * @note nothing
suupen 1:57c43aac7007 91 */
suupen 1:57c43aac7007 92 RotationalEncoder(PinName channelA, PinName channelB);
suupen 1:57c43aac7007 93
suupen 1:57c43aac7007 94 /**
suupen 1:57c43aac7007 95 * Reset the number for absolute and relative.
suupen 1:57c43aac7007 96 */
suupen 1:57c43aac7007 97 void reset(void);
suupen 1:57c43aac7007 98
suupen 1:57c43aac7007 99 /**
suupen 1:57c43aac7007 100 * Get the number of absolute pulses recorded by the encoder.
suupen 1:57c43aac7007 101 *
suupen 1:57c43aac7007 102 * @return Number of absolute pulses.
suupen 1:57c43aac7007 103 */
suupen 1:57c43aac7007 104 int16_t getAbsolutePulses(void);
suupen 1:57c43aac7007 105
suupen 1:57c43aac7007 106 /**
suupen 1:57c43aac7007 107 * Get the number of relative pulses recorded by the encoder.
suupen 1:57c43aac7007 108 *
suupen 1:57c43aac7007 109 * @return Number of relative pulses.
suupen 1:57c43aac7007 110 */
suupen 1:57c43aac7007 111 int16_t getRelativePulses(void);
suupen 1:57c43aac7007 112
suupen 1:57c43aac7007 113
suupen 1:57c43aac7007 114 private:
suupen 1:57c43aac7007 115
suupen 1:57c43aac7007 116 void encoderAUp(void);
suupen 1:57c43aac7007 117 void encoderADwon(void);
suupen 1:57c43aac7007 118
suupen 1:57c43aac7007 119 InterruptIn _channelA;
suupen 1:57c43aac7007 120 InterruptIn _channelB;
suupen 1:57c43aac7007 121
suupen 1:57c43aac7007 122 int16_t _channelBLevelOfchannelALow;
suupen 1:57c43aac7007 123 #define INITAL 0xff
suupen 1:57c43aac7007 124
suupen 1:57c43aac7007 125 volatile int16_t _absolutePulse;
suupen 1:57c43aac7007 126 volatile int16_t _relativePulse;
suupen 1:57c43aac7007 127 };
suupen 1:57c43aac7007 128
suupen 1:57c43aac7007 129 #endif /* ROTATIONALENCODER_H */