Close

Code

A project log for TI ek-tm4c123gxl QEI & AMT312D

Setting up a a quadrature encoder with the tm4c123 qei

jlbrian7jlbrian7 07/18/2016 at 13:021 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:


Discussions

hafizwaqasqammar wrote 01/17/2017 at 20:16 point

'GPIO_PD6_PHA0' was not declared in this scope 
i got this error please help

  Are you sure? yes | no