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:如何在没有看门狗复位的情况下复位 eQEP 模块?

Guru**** 2393725 points
Other Parts Discussed in Thread: TMS320F28034

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168181/tms320f28034-how-to-reset-the-eqep-module-without-watchdog-reset

器件型号:TMS320F28034

你(们)好

我使用 TMS320F28034通过编码器控制无刷电机。

我发现 、当电机刚启动时、eQEP 模块偶尔无法识别第一个索引标记。因此、当索引脉冲边沿接近时、QPOSCNT 无法正常复位。
在这种情况下、我希望能够复位 eQEP 模块、然后再启动。但是、除非通过看门狗复位整个芯片、否则我无法单独复位 eQEP 模块。如何在没有看门狗复位?的情况下复位 eQEP 模块
感谢您的回复和帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    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
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bingo、

    您使用的编码器是什么、使用的是什么? 您是否尝试换用其他编码器以避免丢失第一个索引信号? 这不是 eQEP 模块的预期行为。  

    关于复位 eQEP 模块的问题、您应该能够在不复位整个器件的情况下复位模块本身。 请允许我参阅我们的文档、我将就此向您提供帮助

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    我使用的增量编码器的零引脚 eQepI 将每转一圈生成5us 的脉冲信号。 从示波器中、脉冲信号不会丢失。。引脚 A 的信号似乎 B 和 I 是正常的、我仍然不知道为什么"有时 无法识别第一个索引标记"

    考虑到项目进度、我认为复位 eQEP 模块是一个可接受的选项、因此我请求您的帮助。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bingo、

    您应该能够通过写入 QEPCTL 寄存器的软件复位位位来复位 eQEP 模块、其说明如下所示:

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 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
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bingo、

    为了便于说明、您是否意味着您仍然遇到位置计数器在第一个索引脉冲上不复位的问题、或者存在其他计数器不复位的情况。 我假设您在 POSSPEED_Init()函数中重新启用 eQEP 模块?  

    您专门使用哪种编码器? 这将有助于了解您为什么会遇到这种不稳定的行为。

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 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)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bingo、

    很高兴您能够解决您在索引脉冲中看到的问题。 您是否获得 了类似 QFL[PCE]位置计数器错误标志的信息? 您可以在软件中重置此标志、因为它会生成一个您必须在软件中手动清除的标志。 尽管如此、您似乎已经找到了一个良好的解决方案

    此致、

    Peter