BAUMER GXMMW Absolute Multiturn encoder example code Steps per turn ≤8192 / 13 bit Number of turns ≤65536 / 16 bit Reading BAUMER GXMMW encoder data bypasing CANopen interface Reading 29bit (multiturn) position from Absolute encoder via SSI Displaying encoder positon on i2c OLED 32x128 display
Dependencies: Adafruit_GFX mbed
main.cpp@1:415c7e8097bd, 2016-12-22 (annotated)
- Committer:
- qubit
- Date:
- Thu Dec 22 08:03:37 2016 +0000
- Revision:
- 1:415c7e8097bd
- Parent:
- 0:86e09ad03619
first release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
qubit | 0:86e09ad03619 | 1 | //BAUMER GXMMW Absolute Multiturn encoder example code |
qubit | 0:86e09ad03619 | 2 | //Steps per turn ≤8192 / 13 bit |
qubit | 0:86e09ad03619 | 3 | //Number of turns ≤65536 / 16 bit |
qubit | 0:86e09ad03619 | 4 | |
qubit | 0:86e09ad03619 | 5 | //Reading BAUMER GXMMW encoder data bypasing CANopen interface |
qubit | 0:86e09ad03619 | 6 | //Reading 29bit (multiturn) position from Absolute encoder via SSI |
qubit | 0:86e09ad03619 | 7 | //Displaying encoder positon on i2c OLED 32x128 display |
qubit | 0:86e09ad03619 | 8 | |
qubit | 0:86e09ad03619 | 9 | #include "mbed.h" |
qubit | 0:86e09ad03619 | 10 | #include "Adafruit_SSD1306.h" |
qubit | 0:86e09ad03619 | 11 | |
qubit | 0:86e09ad03619 | 12 | DigitalOut myled(LED1); |
qubit | 0:86e09ad03619 | 13 | |
qubit | 0:86e09ad03619 | 14 | SPI spi(p5, p6, p7); //I'm using only pin p6 & p7 for encoder->mbed connection |
qubit | 0:86e09ad03619 | 15 | |
qubit | 0:86e09ad03619 | 16 | I2C myI2C(p9,p10); //OLED screen |
qubit | 0:86e09ad03619 | 17 | Adafruit_SSD1306_I2c oled(myI2C,p13,0x78,32,128); |
qubit | 0:86e09ad03619 | 18 | |
qubit | 0:86e09ad03619 | 19 | int main(){ |
qubit | 0:86e09ad03619 | 20 | spi.format(10,2); |
qubit | 0:86e09ad03619 | 21 | spi.frequency(500000); |
qubit | 0:86e09ad03619 | 22 | |
qubit | 0:86e09ad03619 | 23 | Serial pc(USBTX, USBRX); |
qubit | 0:86e09ad03619 | 24 | |
qubit | 0:86e09ad03619 | 25 | uint32_t data[3] = {0, 0, 0}; |
qubit | 0:86e09ad03619 | 26 | uint32_t encoder_value = 0; |
qubit | 0:86e09ad03619 | 27 | |
qubit | 0:86e09ad03619 | 28 | while(1) |
qubit | 0:86e09ad03619 | 29 | { |
qubit | 0:86e09ad03619 | 30 | //clocking out 30bit of data from encoder |
qubit | 0:86e09ad03619 | 31 | data[0] = spi.write(0xFF); |
qubit | 0:86e09ad03619 | 32 | data[1] = spi.write(0xFF); |
qubit | 0:86e09ad03619 | 33 | data[2] = spi.write(0xFF); |
qubit | 0:86e09ad03619 | 34 | |
qubit | 0:86e09ad03619 | 35 | data[0] <<= 20; |
qubit | 0:86e09ad03619 | 36 | data[1] <<= 10; |
qubit | 0:86e09ad03619 | 37 | |
qubit | 0:86e09ad03619 | 38 | encoder_value = data[2] | data[1] | data[0]; |
qubit | 0:86e09ad03619 | 39 | |
qubit | 0:86e09ad03619 | 40 | encoder_value &= 0x1FFFFFFF; // masking first bit (30bit->29bit) |
qubit | 0:86e09ad03619 | 41 | |
qubit | 0:86e09ad03619 | 42 | //displaying encoder data on serial monitor |
qubit | 0:86e09ad03619 | 43 | //pc.printf("%d\n",encoder_value); |
qubit | 0:86e09ad03619 | 44 | |
qubit | 0:86e09ad03619 | 45 | oled.printf("%09u\r",encoder_value); |
qubit | 0:86e09ad03619 | 46 | oled.display(); |
qubit | 0:86e09ad03619 | 47 | |
qubit | 0:86e09ad03619 | 48 | wait_us(50); |
qubit | 0:86e09ad03619 | 49 | } |
qubit | 0:86e09ad03619 | 50 | } |