我与 Mary West 合作、所以这个问题与同一个系统有关。 我们在正交模式下使用 QEP 来读取编码器输入。 在大多数情况下、这种方法是完美的、但在长时间的多小时运行期间、我们在一个轴上观察到、编码器指示的位置有许多计数关闭(>1000) -两次、误差的幅度几乎相同。 来自编码器的 A 和/或 B 输入是否有任何原因? 我们已经观察 到、断开 A 或 B 输入会导致编码器输出保持其最新值、但这不是我们在两个观察中看到的结果。 我们读取的值完全不同。
如果有任何见解,将不胜感激
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.
我与 Mary West 合作、所以这个问题与同一个系统有关。 我们在正交模式下使用 QEP 来读取编码器输入。 在大多数情况下、这种方法是完美的、但在长时间的多小时运行期间、我们在一个轴上观察到、编码器指示的位置有许多计数关闭(>1000) -两次、误差的幅度几乎相同。 来自编码器的 A 和/或 B 输入是否有任何原因? 我们已经观察 到、断开 A 或 B 输入会导致编码器输出保持其最新值、但这不是我们在两个观察中看到的结果。 我们读取的值完全不同。
如果有任何见解,将不胜感激
您好、Timothy、
您能否澄清几个问题、以便更好地理解问题?
1.您是否使用了 eQEP 的索引或选通输入(即 eQEPI 和 eQEPS)?
2.如何知道位置计数器已关闭、您是否在常规间隔读取 QPOSCNT?
3.您是否使用 QCTMR 作为参考时间? 如果是、您是否在每次读取 QPOSCNT 时锁存 QCTMRLAT? 您如何处理 UPEVENT?
如果您可以发送 eQEP 配置和观察到的结果、则有助于缩小问题范围。
此致、
Nirav
你好,Nirav
以下是您的问题的答案:
1) 1)我们不使用索引线或选通线进行编码器运动跟踪操作。 但是、我们在电机归零过程中使用选通信号线。 传感器连接到此线路、并进行设置、以便在传感器改变状态时锁存编码器读数。 这在每个仪器功率循环中在一个轴上完成一次。 我们看到的误差在轴归零几个小时后发生。
2) 2)µsec 以100 μ s 的间隔读取 QPOSCNT。 然后、我们将 QPOSCNT 转换为以 mm 为单位的参考位置(实际单位)。
我们知道位置计数器已关闭、因为我对 轴位置的观察和报告在一个实例中是一个特定的值(121 mm)、在下一个实例中 、它报告的是134 mm。 它的物理 尺寸仍然为121 mm。
3) 3) 我们不使用 QCTMR 寄存器。 我们没有使用 QEP 捕获控制。
4) 4)以下是初始化代码:
//---- eQEP 解码器控制寄存器的初始化状态- QDECCTL-- #define QDECCTL_INIT_STATE (XCR_X2/* B11:(0)外部时钟速率、2倍分辨率:计算上升/下降沿*/+\ QSRC_Quad_MODE)/* B15、B14:(00)正交计数模式(QCLK = iCLK、QDIR = Idir)*///--- eQEP 控制寄存器的初始化状态- QEPCTL --- #define QEPCTL_INIT_STATE (QEP_emulation_free// B15、B14:(10)仿真挂起不会影响位置计数器*/+\ PCRM_POSMAX/* B13、B12:(01)位置计数器在最大位置上复位*/+\ SEL_Rising//* B6:(0)位置编码器在上升沿锁存的选通事件锁存-使用 QSP */+\进行反相 IEL_Rising//* B5、b4:(01)索引事件锁存在索引信号的上升沿*/+\ QPEN_ENABLE/* B3:(1) eQEP 位置计数器启用*/+\ TOP_DISABLE)/* B1:(1)禁用 eQEP 单元计时器*// - eQEP 位置比较控制寄存器的初始化状态- QPOSCTL- #define QPOSCTL_INIT_STATE PCE_DISABLE/* B12:(0)位置比较禁用*/ //- eQEP 捕捉控制寄存器的初始化状态- QCAPCTL --- //用于使用编码 器#define QCAPCTL_INIT_STATE 执行慢速测量 CEN 禁用/* B15:(0)禁用 eQEP 捕捉*/ void ConfigureQEP (QEP* QEP) { QEP->qepReg ->QDECCTL.ALL= QDECCTL_INIT_STATE; QEP->qepReg ->QEPCTL.ALL= QEPCTL_INIT_STATE; QEP->qepReg ->QPOSCTL.ALL= QPOSCTL_INIT_STATE; QEP->qepReg->QCAPCTL.ALL= QCAPCTL_INIT_STATE; QEP->qepReg ->QPOSMAX= QEP->resData.posScaleCounts; QEP->countsPerElectRev= QEP->countsPerMotorRev /((float) QEP->numPolePairs); QEP->rawEncCount= 0; QEP->先前 的 RawEncCount= 0; QEP->electicalACCUM= 0; if (QEP->motor2EncoderSign == 1) { QEP->qepReg ->QDECCTL.bit.swap= 1; } QEP->encoderHalfPeriod= QEP->resData.posScaleCounts / 2; QEP->qepReg ->QCLR.bit.PHE= 1; QEP->qepPhaseErrCount= 0; QEP->countsPerElectRevInverse= 1.0/QEP->countsPerElectRev; QEP->resData.posScaleCountsInverse= 1.0/QEP->resData.posScaleCounts; }
为您提出的问题:
我不担心 QEP 初始化。 我们已在多个产品中的多个轴上成功使用了该编码器系统。 对于该特定轴、我们使用的电缆是可疑问题、并尝试了解什么情况会导致我们看到的结果。 我们断开了其中一条编码器线路 、但未看到该结果。 在本例中、 编码器计数在我们手动移动轴时保持其值。 这是预期行为。 哪些情况可能会导致 我们的间歇性读数不佳?
Nirav、您好!
感谢您的回答。 除了 Mary 的 GPIO 鉴定外、 A 和 B 信号在电缆上差分传输、然后在包含 F28377S 的电路板上转换回单端信号。 我同意噪声可能会导致问题、但 差动会降低可能性-此外、我在示波器上查看了信号、它们看起来不错。 如果是噪声、那么我们在两种情况下都得到几乎相同的误差幅度、我感到很惊讶。
除噪音之外还有其他可能的怀疑吗?
谢谢、
Tim