Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: QEI.h
- Revision:
- 0:26f0e94f01e0
- Child:
- 2:0f8684aeeef3
diff -r 000000000000 -r 26f0e94f01e0 QEI.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.h Fri Feb 15 12:22:33 2019 +0000
@@ -0,0 +1,127 @@
+#ifndef QEI_h
+#define QEI_h
+
+#ifdef TARGET_LPC1549
+
+#include "qei_api.h"
+#include "mbed.h"
+
+class QEI
+{
+public:
+ enum Dirction
+ {
+ forward,
+ reverse
+ };
+
+ enum Encoding
+ {
+ X2_ENCODING,
+ X4_ENCODING
+ };
+
+ enum SignalMode
+ {
+ QUADRATURE_ENCODER,
+ DIRECTION_CLOCK_ENCODER
+ };
+
+ enum IrqType
+ {
+ INT_INT = 0, // pulse was detected
+ TIM_INT, // velocity timer overflow
+ VELC_INT, // velocity is less than compare velocity
+ DIR_INT, // change dirction
+ ERR_INT, // encoder phase error
+ ENCLK_INT, // encoder clock pulse detected
+ POS0_INT, // position is equal to the compare value (Ch 0)
+ POS1_INT, // (Ch 1)
+ POS2_INT, // (Ch 2)
+ REV0_INT, // index is equal to the compare value (Ch 0)
+ POS0REV_INT, // POS0_INT && REV0_INT
+ POS1REV_INT, // (Ch 1)
+ POS2REV_INT, // (Ch 2)
+ REV1_INT, // (Ch 1)
+ REV2_INT, // (Ch 2)
+ MAXPOS_INT, // position value is more than MAXPOS or less than 0
+
+ IrqCnt
+ };
+
+public:
+ QEI(PinName phaseA,
+ PinName phaseB,
+ PinName index,
+ uint32_t pulsePerRotation,
+ Encoding encoding = X4_ENCODING,
+ SignalMode signalMode = QUADRATURE_ENCODER);
+ ~QEI();
+
+ void reset();
+
+ // set parameter
+
+ void setMaxPos(uint32_t num);
+ void setInvertDirection(bool isInvert);
+ void setInvertIndex(bool isInvert);
+ void setSignalMode(SignalMode signalMode);
+ void setEncoding(Encoding encoding);
+
+ void setVelocityTimerPeriod_us(uint32_t us);
+
+
+ // get value
+ //int getPhase(Channel channel);
+ int getDirection();
+ uint32_t getIndex();
+ double getRotation();
+ double getRPM();
+ double getRPS();
+
+ bool getInvertDirection();
+ bool getInvertIndex();
+
+ // Interrupts
+ /*
+ uint32_t getInterrupts();
+ uint32_t getInterruptStatus();
+ void setInterrupts(uint32_t symbol);
+ void clearInterrupts(uint32_t symbol);
+ void setInterruptStatus(uint32_t symbol);
+ void clearInterruptStatus(uint32_t symbol);
+ */
+
+ void attach(Callback<void()> func, IrqType type = INT_INT);
+
+ template<typename T>
+ void attach(T *obj, void (T::*method)(), IrqType type = INT_INT) {
+ attach(callback(obj, method), type);
+ }
+
+ template<typename T>
+ void attach(T *obj, void (*method)(T*), IrqType type = INT_INT)
+ {
+ attach(callback(obj, method), type);
+ }
+
+protected:
+ uint32_t getPosition();
+ uint32_t getVelocity();
+ uint32_t getPCLK() { return _qei.PCLK; }
+
+protected:
+ PinName _phaseA, _phaseB, _index;
+ Encoding _encoding;
+ SignalMode _signalMode;
+
+ qei_t _qei;
+ Callback<void()> _irq[IrqCnt];
+
+ //int PPR;
+ //int PCLK;
+};
+
+#endif //TARGET_LPC1549
+
+#endif //QEI_h