MSP432E401Y电机编码器QEI模块

本文介绍了一种基于MSp432E4微控制器的正交编码器(QEI)初始化配置及中断处理程序的实现方法。通过配置PL1和PL2引脚作为PhA1和PhB1输入,并设置QEI参数,实现了位置和方向的精确测量。同时,文章还展示了如何获取速度值并进行简单的速度显示。

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

/* DriverLib Includes */
#include <ti/devices/msp432e4/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>

unsigned long  COUNT = 0;
unsigned long  POS = 0;
int  s;
int d;



//********************************************************************
//QEI0初始化

int
QEIInit (void)
{
    QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A_B |QEI_CONFIG_NO_RESET|
    QEI_CONFIG_QUADRATURE|QEI_CONFIG_NO_SWAP),10000000);//使用A,B通道共4个边沿计算位置

   /* GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_1,
    GPIO_STRENGTH_4MA,
    GPIO_PIN_TYPE_STD);

    GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_2,
    GPIO_STRENGTH_4MA,
    GPIO_PIN_TYPE_STD);

    GPIOPadConfigSet(GPIO_PORTL_BASE, GPIO_PIN_3,
    GPIO_STRENGTH_4MA,
    GPIO_PIN_TYPE_STD);
  */
    GPIOPinTypeQEI(GPIO_PORTL_BASE,GPIO_PIN_1|GPIO_PIN_2);//配置PL1,PL2为PhA1,PhB1
    QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, 120000000/100);//10ms

    //使能速度计算,使能QEI
    QEIVelocityEnable(QEI0_BASE);
    QEIEnable(QEI0_BASE);

    //速度计时器计时完成时触发中断
    QEIIntEnable(QEI0_BASE,QEI_INTTIMER);
    IntEnable(INT_QEI0);


    return(0); 
}

void QEI0_IRQHandler(void)
{


  QEIIntClear(QEI0_BASE, QEI_INTTIMER);
  POS = QEIPositionGet(QEI0_BASE);
  d = QEIDirectionGet(QEI0_BASE);

    COUNT = QEIVelocityGet(QEI0_BASE);
    s = (COUNT*6000)/2024;
    printf("The Speed is %d .Velocity is %d.Direction is %d.\n",s,COUNT /4,d);
    COUNT = 0;




}

 int main(void)
{

    /* Configure the system clock for 120 MHz */
    MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN |
                                          SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480),
                                          120000000);

    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0);//使能QEI0外设
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);/*enable L port*/
    MAP_IntEnable(INT_GPIOL);

    GPIOPinConfigure(GPIO_PL1_PHA0);
    GPIOPinConfigure(GPIO_PL2_PHB0);



    QEIEnable(QEI0_BASE);//使能正交编码器QEI0

    QEIInit();
    while(1)
    {

    }
}

### MSP微控制器中四相编码器QEI的工作原理 四相编码器接口(Quadrature Encoder Interface, QEI)用于处理来自增量式旋转编码器的信号。该接口能够解析正交编码脉冲并将其转换成位置数据,从而实现精确的位置测量。 在MSP微控制器上,当配置为四相模式时,QEI模块会监控两个通道A和B上的输入波形。这两个通道提供相互之间有90度相位差的方波信号。通过监测这些信号的变化情况,可以确定电机轴或其他机械部件转动的方向以及移动的距离[^1]。 如果发生任何异常事件,比如丢失步进或非法状态转移,则触发QEIERR中断来报告这些问题,在这种情况下,计数器不会更新其数值以保持当前记录的状态不变。 ### 应用实例:基于MSP432P401R控制直流电机的速度反馈系统 为了展示如何利用QEI功能构建实际项目,下面给出一个简单的例子——使用TI公司的MSP432P401R开发板连接到带有内置霍尔效应传感器阵列的直流无刷马达上来创建速度控制系统: #### 硬件设置 - 连接编码器输出线至MCU相应引脚(P7.6/P7.7),确保电源供电正常; #### 软件编程要点 初始化QEIModule函数设定工作参数如下: ```c void QEIModule_init(void){ // 配置GPIO端口作为QEI输入 GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7, GPIO_PIN6 | GPIO_PIN7); // 设置QEI模块分频系数及时钟源 QEIVelocityConfigure(QEIA_BASE, QEIClockSource_SystemClock, 8); // 启用错误检测机制 QEIEnableInterrupts(QEIA_BASE,QEI_INT_ERROR); } ``` 编写定时器ISR读取当前位置信息并与目标值比较调整PWM占空比达到闭环调节目的: ```c // 定义全局变量存储期望角度 volatile uint32_t desired_position; // 定时器周期性调用此回调函数 void Timer_A_periodic_callback(){ int current_pos=QEIPositionGet(QEIA_BASE); if(current_pos<desired_position){ PWM_duty_cycle_increase(); }else{ PWM_duty_cycle_decrease(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值