OpenMoCo
/
QEIx4_Example
QEIx4 Example
main.cpp@2:7c787d83331e, 2014-09-30 (annotated)
- Committer:
- jocis
- Date:
- Tue Sep 30 12:35:07 2014 +0000
- Revision:
- 2:7c787d83331e
- Parent:
- 0:bbf48777e304
- Child:
- 3:922c100de8cd
Added speed measurement; adapted to changed lib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jocis | 0:bbf48777e304 | 1 | #include "mbed.h" |
jocis | 0:bbf48777e304 | 2 | #include "QEIx4.h" |
jocis | 0:bbf48777e304 | 3 | |
jocis | 2:7c787d83331e | 4 | DigitalOut LEDalive(LED1); |
jocis | 2:7c787d83331e | 5 | DigitalOut LEDup(LED4); |
jocis | 2:7c787d83331e | 6 | DigitalOut LEDdown(LED3); |
jocis | 2:7c787d83331e | 7 | |
jocis | 0:bbf48777e304 | 8 | Timer t; |
jocis | 0:bbf48777e304 | 9 | |
jocis | 0:bbf48777e304 | 10 | // ports for nxp LPC 1768 |
jocis | 2:7c787d83331e | 11 | QEIx4 qei1(p30, p29, p28, (QEIx4::EMODE)(QEIx4::IRQ | QEIx4::SPEED)); // QEI with index signal for zeroing |
jocis | 2:7c787d83331e | 12 | QEIx4 qei2(p21, p22, NC, QEIx4::IRQ_NO_JAMMING); // QEI with AB signals only |
jocis | 2:7c787d83331e | 13 | QEIx4 qei3(p25, p24, NC, QEIx4::POLLING); // QEI without interrups in polling mode |
jocis | 2:7c787d83331e | 14 | |
jocis | 2:7c787d83331e | 15 | // The callback function. |
jocis | 2:7c787d83331e | 16 | void myCallback(int value) |
jocis | 2:7c787d83331e | 17 | { |
jocis | 2:7c787d83331e | 18 | static int valueLast=-1; |
jocis | 0:bbf48777e304 | 19 | |
jocis | 2:7c787d83331e | 20 | if ( value > valueLast ) { |
jocis | 2:7c787d83331e | 21 | LEDup = !LEDup; |
jocis | 2:7c787d83331e | 22 | LEDdown = 0; |
jocis | 2:7c787d83331e | 23 | } else { |
jocis | 2:7c787d83331e | 24 | LEDdown = !LEDdown; |
jocis | 2:7c787d83331e | 25 | LEDup = 0; |
jocis | 2:7c787d83331e | 26 | } |
jocis | 2:7c787d83331e | 27 | valueLast=value; |
jocis | 2:7c787d83331e | 28 | } |
jocis | 2:7c787d83331e | 29 | |
jocis | 2:7c787d83331e | 30 | int main() |
jocis | 2:7c787d83331e | 31 | { |
jocis | 0:bbf48777e304 | 32 | t.start(); |
jocis | 0:bbf48777e304 | 33 | |
jocis | 2:7c787d83331e | 34 | qei1.setZeroOnIndex(true); // set the flag to zero counter on next index signal rises |
jocis | 2:7c787d83331e | 35 | qei1.setSpeedFactor(1.0f); // factor to scale from Hz (edges pe second = 4 * CPS) to user units (1.0=Hz, 1/(4*CPR)=rps, 1/(60*4*CPR)=rpm, 360/(4*CPR)=°/s, ...) |
jocis | 2:7c787d83331e | 36 | |
jocis | 2:7c787d83331e | 37 | qei3.attachCounterChange(myCallback); |
jocis | 0:bbf48777e304 | 38 | |
jocis | 2:7c787d83331e | 39 | while(1) { |
jocis | 0:bbf48777e304 | 40 | qei3.poll(); // poll manually without interrupt - sampling in this loop with about 2kHz |
jocis | 2:7c787d83331e | 41 | |
jocis | 2:7c787d83331e | 42 | if ( t.read_ms() > 250 ) { // every quater second (4 Hz) |
jocis | 0:bbf48777e304 | 43 | t.reset(); |
jocis | 0:bbf48777e304 | 44 | t.start(); |
jocis | 2:7c787d83331e | 45 | LEDalive = !LEDalive; |
jocis | 2:7c787d83331e | 46 | |
jocis | 2:7c787d83331e | 47 | printf ( "\r\n%6d %6d %6d %10.3f", (int)qei1, (int)qei2, (int)qei3, (float)qei1.getSpeed() ); // print counter values |
jocis | 0:bbf48777e304 | 48 | } |
jocis | 0:bbf48777e304 | 49 | |
jocis | 2:7c787d83331e | 50 | wait_us(20); // for about 50kHz polling |
jocis | 0:bbf48777e304 | 51 | } |
jocis | 0:bbf48777e304 | 52 | } |