TM4C123 QEI 初始化

本文详细介绍了在TIVAC平台上如何正确初始化Quadrature Encoder Interface (QEI)。通过启用GPIOC和QEI1外设,配置PCA5和PHB1引脚为QEI功能,并设置相关参数,实现QEI的速度测量功能。QEIConfigure和QEIVelocityConfigure函数确保了无复位、四象限编码器模式及速度测量的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TIVA C

正确QEI初始化:
void Init_QEI(void)
[
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI1);
GPIOPinConfigure(GPIO_PC5_PHA1); //好多例程无这个函数
GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_5);
GPIOPinConfigure(GPIO_PC6_PHB1);
GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_6);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_5,
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_6,
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);
QEIConfigure(QEI1_BASE,(QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET |
QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 0);
QEIVelocityConfigure(QEI1_BASE, QEI_VELDIV_1, SysCtlClockGet()/100);
QEIVelocityEnable(QEI1_BASE);
QEIEnable(QEI1_BASE);

03-12
### TI TM4C QEI (Quadrature Encoder Interface) 使用方法 QEI(正交编码接口)用于测量电机轴的位置和速度。对于TI的TM4C系列微控制器,QEI模块可以接收来自旋转编码器的信号并将其转换为位置数据。 #### 初始化与配置 为了使用QEI功能,需要先初始化相应的外设以及设置GPIO引脚的功能。具体来说,在上述示例中,选择了PB4和PB5两个引脚来实现这一目的,并调用了`quadratureEncoderInit()`函数完成必要的硬件设定[^1]。 ```c void quadratureEncoderInit(void){ // Enable clock to the peripherals we will use. SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOB; // Wait until PB is ready. while((SYSCTL_PRGPIO_R & SYSCTL_PRGPIO_R0) == 0); // Configure PB4 and PB5 as QEI pins. GPIO_PORTB_AFSEL_R |= 0x30; // Select alternate function on PB4, PB5 GPIO_PORTB_PCTL_R &= ~0xFFFF0000; // Clear bits for PB4, PB5 GPIO_PORTB_PCTL_R |= 0x77000000; // Set PB4, PB5 to QEI mode // Disable digital functionality of these two pins since they are analog now. GPIO_PORTB_DEN_R &= ~(0x30); // Digital disable PB4, PB5 // Initialize Quadrature Encoder Module 0 with default parameters. QEIVectorTableBaseSet(QEI0_BASE, qeiIntHandler); } ``` 此段代码展示了如何启用所需的外围设备时钟、等待其准备就绪、选择备用功能并将指定引脚分配给QEI模式。最后一步则是初始化QEIModule0中断向量表基地址指向自定义处理程序`qeiIntHandler`。 #### 主循环中的应用 在主函数里可以通过读取当前计数寄存器值来进行进一步的操作: ```c int main(){ ... uint32_t positionCount; // Read current encoder count value from register. positionCount = HWREG(QEI0_BASE + QEI_O_POSITION); // Perform other operations based on this information... ... // Adjust delay time according to requirement. SysCtlDelay(SysCtlClockGet()/3); } // Custom interrupt handler defined earlier when initializing QEI module. void qeiIntHandler(void *callbackData){ // Handle interrupts here if needed. } ``` 这里展示了一个简单的例子,其中包含了获取当前位置计数值的方法,并且可以根据实际需求调整延迟时间以控制采样频率。 关于功耗管理方面,当不需要持续监控编码器状态或者进入低能耗模式时,可以让未使用的GPIO端口处于休眠状态,以此降低整体系统的电能消耗[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值