• Function check

    jlbrian707/23/2016 at 02:08 0 comments

    The code for this was written in code composer studio, but as far as the encoder goes, it is the same.


  • Hookup

    jlbrian707/18/2016 at 13:11 0 comments

    AMT312-D PinsFunctionEK-TM4C123GXL PinsFunctionStatus
    1TX_ENC+J1-3 (PB_0)RX(1)Not Yet Tested
    2RX_ENC+J1-4 (PB_1)TX(1)Not Yet Tested
    4GNDJ2-20 (GND)GNDGood
    65 VJ3-21 (VBUS)VBUSGood
    8B+J4-32 (PD_7)B+Good
    10A+J4-33 (PD_6)A+Good
    12Z+J3-26 (PD_3)IndexGood

  • Code

    jlbrian707/18/2016 at 13:02 1 comment

    The code taken from http://forum.43oh.com/topic/8875-problems-using-qei-with-ek-tm4c123gxl/ is good, and makes testing simple. The post was created because the person was actually using hall effect sensors for feedback, not an encoder.

    #include <stdint.h>
    #include <stdbool.h>
    
    #include "inc/hw_gpio.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    
    #include "driverlib/gpio.h"
    #define PART_TM4C123GH6PM
    #include "driverlib/pin_map.h"
    #include "driverlib/qei.h"
    #include "driverlib/sysctl.h"
    
    
    void config_QEI()
    {
             
      
            SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
            
            //Unlock GPIOD7
            HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
            HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80;
            HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= ~0x80;   
            HWREG(GPIO_PORTD_BASE + GPIO_O_DEN) |= 0x80;
            HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0;
    
            
            // Enable QEI Peripherals
            SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0);
            
            //Set Pins to be PHA0 and PHB0
    	GPIOPinConfigure(GPIO_PD6_PHA0); //GPIOPinConfigure(0x00031806);  //0x00031806 =>GPIO_PD6_PHA0
    	GPIOPinConfigure(GPIO_PD7_PHB0); //GPIOPinConfigure(0x00031C06);  // 0x00031C06 => GPIO_PD7_PHB0
            
            //Set GPIO pins for QEI
    	GPIOPinTypeQEI(GPIO_PORTD_BASE, (GPIO_PIN_6 | GPIO_PIN_7));
            
            //HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_M; 
             
            // Configure quadrature encoder, use an arbitrary top limit of 2000 and enable QEI 
    	QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 2000);
            QEIEnable(QEI0_BASE);
            
            //Set position to a middle value
    	QEIPositionSet(QEI0_BASE, 1000);
    
            //Configure and enable velocity
    	QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, SysCtlClockGet()); // Divide by clock speed to get counts/sec
    	QEIVelocityEnable(QEI0_BASE);
    
    }
    void setup()
    {
      config_QEI();
      Serial.begin(9600);
      Serial.println("Start:");
      Serial.println("--------");
    }
    
    void loop()
    {
      uint32_t velocity, position;
      int32_t rotatingdirection;
      
      position = QEIPositionGet(QEI0_BASE); 
      velocity = QEIVelocityGet(QEI0_BASE);
      rotatingdirection = QEIDirectionGet(QEI0_BASE);
      
      Serial.println(position);
      Serial.println(velocity);
      Serial.println(rotatingdirection);
      Serial.println("--------");
      delay(1000);
      
    }

    Output: