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

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?

UserRevisionLine numberNew 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 }