void _EncoderInit(){ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0); SysCtlDelay(1); HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80; //Set Pins to be PHA0 and PHB0 GPIOPinConfigure(GPIO_PD6_PHA0); GPIOPinConfigure(GPIO_PD7_PHB0); GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7); QEIDisable(QEI0_BASE); QEIIntDisable(QEI0_BASE,QEI_INTERROR | QEI_INTDIR | QEI_INTTIMER | QEI_INTINDEX); QEIConfigure(QEI0_BASE, (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 1000); QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1,80000000/12); QEIEnable(QEI0_BASE); QEIVelocityEnable(QEI0_BASE); //Set position to a middle value so we can see if things are working QEIPositionSet(QEI0_BASE, 500); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI1); SysCtlDelay(1); //Set Pins to be PHA0 and PHB0 GPIOPinConfigure(GPIO_PC5_PHA1); GPIOPinConfigure(GPIO_PC6_PHB1); GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_5 | GPIO_PIN_6); QEIDisable(QEI1_BASE); QEIIntDisable(QEI1_BASE,QEI_INTERROR | QEI_INTDIR | QEI_INTTIMER | QEI_INTINDEX); QEIConfigure(QEI1_BASE, (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_SWAP), 1000); QEIVelocityConfigure(QEI1_BASE, QEI_VELDIV_1,80000000/12); QEIEnable(QEI1_BASE); QEIVelocityEnable(QEI1_BASE); //Set position to a middle value so we can see if things are working QEIPositionSet(QEI1_BASE, 500); }
void initQEI(void){ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); //PhA sur C4 et PhB sur C6 SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); //PhA sur E3 et PhB sur E2 SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI1); //init QEI0 du micro pour moteur 0 GPIOPinConfigure(GPIO_PC4_PHA0); GPIOPinConfigure(GPIO_PC6_PHB0); GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_4); //Ph A GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_6); //Ph B QEIDisable(QEI0_BASE); QEIConfigure(QEI0_BASE, (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET| QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 1000000); //64 counts par révolution de moteur avec un ratio 100:1 QEIEnable(QEI0_BASE); QEIPositionSet(QEI0_BASE,0); QEIVelocityDisable(QEI0_BASE); QEIVelocityConfigure (QEI0_BASE, QEI_VELDIV_1, ROM_SysCtlClockGet()*dt); QEIVelocityEnable(QEI0_BASE); //init QEI1 du micro pour moteur 1 GPIOPinConfigure(GPIO_PE3_PHA1); GPIOPinConfigure(GPIO_PE2_PHB1); GPIOPinTypeQEI(GPIO_PORTE_BASE, GPIO_PIN_3); //Ph A GPIOPinTypeQEI(GPIO_PORTE_BASE, GPIO_PIN_2); //Ph B QEIDisable(QEI1_BASE); QEIConfigure(QEI1_BASE, (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET| QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 1000000); //64 counts par révolution de moteur avec un ratio 100:1 QEIEnable(QEI1_BASE); QEIPositionSet(QEI1_BASE,0); QEIVelocityDisable(QEI1_BASE); QEIVelocityConfigure (QEI1_BASE, QEI_VELDIV_1, ROM_SysCtlClockGet()*dt); QEIVelocityEnable(QEI1_BASE); //init decodeur fait a la mitaine pour moteur 2 et 3 (pins J4 et J5 pour moteur 2, J6 et J7 pour moteur 3) GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPD); GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7); GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_BOTH_EDGES); GPIOPinIntEnable(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7); IntEnable(INT_GPIOE); position_m0 = 0; position_m1 = 0; position_m2 = 0; position_m3 = 0; }