你(们)好
我使用 TMS320F28034通过编码器控制无刷电机。
在这种情况下、我希望能够复位 eQEP 模块、然后再启动。但是、除非通过看门狗复位整个芯片、否则我无法单独复位 eQEP 模块。如何在没有看门狗复位?的情况下复位 eQEP 模块
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你(们)好
我使用 TMS320F28034通过编码器控制无刷电机。
void POSSPEED_Init(void) { EQep1Regs.QUPRD=300000; // Unit Timer for 200Hz at 60 MHz SYSCLKOUT 每5ms生成一个时间事件 EQep1Regs.QDECCTL.bit.QSRC=00; // QEP quadrature count mode //正交计数方式 EQep1Regs.QEPCTL.bit.FREE_SOFT=2; //仿真中断等不影响位置计数 EQep1Regs.QEPCTL.bit.PCRM=00; // PCRM=00 mode - QPOSCNT reset on index event 位置计数器中归零信号来时复位 EQep1Regs.QEPCTL.bit.UTE=1; // Unit Timeout Enable 单位时间事件使能 EQep1Regs.QEPCTL.bit.QCLM=1; // Latch on unit time out 单位时间事件时把位置计数器、捕获时间、捕获周期的值锁存到QPOSLAT, QCTMRLAT,QCPRDLAT中 EQep1Regs.QPOSMAX=0xffffffff; //EQep1Regs.QEPCTL.bit.IEI = 0; //for test EQep1Regs.QEPCTL.bit.QPEN=1; // QEP enable EQep1Regs.QCAPCTL.bit.UPPS=6; // 1/64 for unit position 低速时的捕获(转速计算):每64个位置脉冲(QCLK)计算一次转速 (1秒一转时16ms也会计算一次转速了) EQep1Regs.QCAPCTL.bit.CCPS=6; // 1/64 for CAP clock 高速时的捕获(转速计算):每64个系统周期(1.07s)计算一次转速 EQep1Regs.QCAPCTL.bit.CEN=1; // QEP Capture Enable }
尊敬的 Peter:
遗憾的是、我尝试复位 QPEN、然后重新使能 QPEN=1、但是、当返回零脉冲时、仍然无法自动复位位置计数器。
void ResetEQEPMoudle(void) { /**EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; EDIS; GpioDataRegs.GPADAT.bit.GPIO19 = 1; tMotorStatus.machineState = ERR_HALT_STATE; if(tMotorStatus.EncoderPinErrFlag == FALSE) for(;;); else if(qep_posspeed.theta_raw&0x03!=0) for(;;);*/ EQep1Regs.QEPCTL.bit.QPEN=0; EQep1Regs.QUPRD=0; EQep1Regs.QDECCTL.all = 0; EQep1Regs.QEPCTL.all = 0; EQep1Regs.QPOSMAX=0; EQep1Regs.QCAPCTL.all = 0; EQep1Regs.QCPRD = 0; EQep1Regs.QPOSCNT = 0; POSSPEED_Init(); //reenable QEP }
尊敬的 Peter:
在我的应用场景中、当器件上电时、它将在驱动电机旋转一周后校准编码器相对于定子绕组的位置(在正常情况下、 如果电机旋转一圈)、零引脚将生成一个脉冲来重置计数。然而、我们发现、尽管存在复位脉冲 eQEP、位置计数器偶尔也没有复位。因此、我希望复位 eQEP 模块(不仅仅是复位位置计数器) 在这种情况下、重新开始位置校准过程。
我们使用 Infineon 编码器芯片 TLE5012BE1000XUMA1。
感谢您的回复和帮助!
您好、Bingo、
感谢我进一步澄清这一点。 查看您的代码、您似乎已经为 eQEP 模块正确配置了软件复位和 QPOSCNT 复位。 您提到索引脉冲的长度为5us。 您的特定编码器的哪个信号 A 或 B 是否与索引脉冲对齐? 我建议以较慢的速度运行初始旋转、看看这是否可以解决您错过的复位脉冲。 5我们似乎有足够的时间、但我很好奇、看看减速革命是否会帮助您解决问题
此致、
Peter
尊敬的 Peter:
感谢您的想法和建议。
这个问题" 无法 偶尔识别第一个索引标记 "已通过软件引脚滤波解决。我想 eQEP 模块识别错误是由电机启动时归零引脚 Z 信号线上的干扰信号引起的、看起来是这样的 无法重置 eQEP 模块的第一个索引标记识别错误。
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 2; // Qualification using 6 samples (EQEP1A) for test GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 2; // Qualification using 6 samples (EQEP1B) GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 2; // Qualification using 6 samples (EQEP1S) GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 2; // Qualification using 6 samples (EQEP1I)