Other Parts Discussed in Thread: CONTROLSUITE
Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
我正在尝试 通过 eQEP 控制编码器安装电机的方向和位置。 位置控制工作正常、方向读数在0到1之间波动、反之亦然、但它会一直移动到相同 的方向。 代码如下所示:
/*为本示例定义*/
#define ENCODER_REV 200 //脉冲/旋转*/
空 InitEQep1 (uint32 PositionMax);
中断空 eqep1_ISR (空);
uint16 BackTicker;
uint32 PositionCounter;
uint32 旋转方向;
浮动32 旋转角度单元;
浮点32 RotateAngleDegree;
{
步骤1.
禁用全局中断和中断标志清除
-------------------------------------------------- *
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();
EALLOW; //这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EQEP1_INT=&eqep1_ISR;
EDIS; //这是禁止写入 EALLOW 受保护寄存器所必需的
对于 QEP *//
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; //启用 GPIO50 (EQEP1A)上的上拉电阻器*/
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; //启用 GPIO51 (EQEP1B)上的上拉电阻器*/
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; //启用 GPIO52 (EQEP1S)上的上拉电阻器*/
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; //启用 GPIO53 (EQEP1I)上的上拉电阻器*/
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 2; //使用6个样本进行限定
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 2; //使用6个样本进行限定
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 2; //使用6个样本进行限定
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 2; //使用6个样本进行限定*
GpioCtrlRegs.GPAMUX2.bit.GPIO21=1; //将 GPIO51配置为 EQEP1B */
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; //将 GPIO52配置为 EQEP1S *
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; //将 GPIO53配置为 EQEP1I *
EDIS;
PositionCounter = 0;
RotateDirection = 0;
RotateAngleUnit = 0;
RotateAngleDegree = 0;
PieCtrlRegs.PIEIER5.bit.INTx1 = 1;
InitEQep1 (PositionMax);
EINT; //启用全局中断 INTM */
ERTM; //启用全局实时中断 DBGM */
for (;;)
{
}
中断空 eqep1_ISR (空)
{
BackTicker++;
PositionCounter = EQep1Regs.QPOSCNT;
RotateDirection = EQep1Regs.QEPSTS.bit.QDF;
RotateAngleUnit =(float32) PositionCounter / PositionMax;
RotateAngleDegree = RotateAngleUnit * 360;
步骤10.
10.1本地中断服务例程和函数
-------------------------------------------------- *
空 InitEQep1 (uint32 PositionMax)
{
EQep1Regs.QEPCTL.bit.PCRM=1; // PCRM=00模式-索引事件发生时 QPOSCNT 复位
EQep1Regs.QEPCTL.bit.QCLM=1; //锁存单元超时
EQep1Regs.QPOSMAX = PositionMax - 1; // 24 x 4 QCLK @ 1转*
EQep1Regs.QEPCTL.bit.QPEN=1; // QEP 使能
EQep1Regs.QCAPCTL.bit.CCPs=6; //针对 CAP 时钟、1/64
EQep1Regs.QCAPCTL.bit.CEN = 1; // QEP 捕捉启用
EQep1Regs.QPOSCTL.bit.PCE = 1;//启用位置比较单元