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.

[参考译文] RM46L852:eQEP -设置

Guru**** 2393725 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/759337/rm46l852-eqep---setting-up

器件型号:RM46L852

大家好、我也是。


我还有一个问题、但这次是关于 eQEP 外围设备、我希望您能帮我解决这个问题。


我有一个编码器、并将其连接到 TI Hercules 控制器。 具体而言、我采用了5V、GND EQEP1A 和 EQEP1B 并将其接通。 我完全忽略了编码器的索引通道。

我对 eQEP 有问题、我不理解如何使用它、因此我希望您能帮我。


我已启用 eQEP 驱动程序。
在 PINMUX 中、我已启用 EQEP1A 和 EQEP1B。

在 EQEP1中、我已经根据提供的示例设置了全部:正交计数、分辨率2X、启用软件初始化、将 INIT 设置为0、将 MAX 设置为0xFFF_FFFF。

捕获时间 POS MOD -发生单元超时事件(也启用了单元超时中断)。

这是我拥有的 Code Composer Studio 代码:

int main (空)

/*用户代码开始(3)*/
uint16 deltaT = 0U;
浮点速度= 0U;
/*基于 GUI 配置的 eQEP 初始化。 *
QEPInit();
/*启用位置计数器*/
eqepEnableCounter (eqepREG1);
/*启用单位定时器。 *
eqepEnableUnitTimer (eqepREG1);
/*启用捕获定时器和捕获周期锁存。 *
eqepEnableCapture (eqepREG1);

while (1)

/*状态标志被置位表示一个新值被锁存在 QCPRD 寄存器中。 *
if ((eqepREG1->QEPSTS & 0x80U)!=0U)

/*单位位置事件之间经过的时间*/
deltaT = eqepREG1->QCPRD;
/*从 deltaT 计算速度以及单位位置的值。 *
/*单元位置的值是一个样本值,应由更改
*根据上述 unit_position_X 宏中的实际值使用。 *
速度=(float)(unit_position_X/deltaT);
/*清除状态标志。 *
eqepREG1->QEPSTS |= 0x80U;

printf ("velocity >>%f \n"、velocity);
printf ("counter >>%u \n"、eqepREG1->QPOSLAT");

我添加了一个用于打印速度和位置计数器的内容。

当我尝试移动编码器时、我得到的结果如下:

移动1:

速度>> 0.000000
计数器>> 1.
速度>> 0.000000
计数器>> 1.  

移动2:

速度>> 0.000000
计数器>> 0
速度>> 0.000000
计数器>> 0

移动3:

速度>> 0.000000
计数器>> 0
速度>> 0.000000  
计数器>> 0

移动4:

速度>> 0.000000  
计数器>> 1.
速度>> 0.000000
计数器>> 2.

移动5:

速度>> 0.000000
计数器>> 2.
速度>> 0.000000
计数器>> 2.
速度>> 0.000000
计数器>> 3.

如果我移动编码器一次、它将进入 IF (如果不是)一次、但通常是两次(最后一种情况、它将进入 IF (如果是三次)。

如果我将其旋转5度、就像我将其旋转100度一样。  QPOSLAT 寄存器中的值几乎没有变化。 它会以1或非增量变化。 我无法理解为什么...

此外、速度始终为0.000000。 这种情况永不改变。 为什么?
我尝试将单位初始化周期从0x0000_0001递增到0xFFF_FFFF、但没有成功。

我想使用300 rpm 的编码器。
因此、我需要从他们那里获得两组信息:

(1)上一次和当前 位置变化之间的时间->用于确定速度
(2)值递增、因此我了解位置。

可以帮帮我吗?

谢谢、
马克:)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Marc、为编码器使用3.3V 是否更安全?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用的编码器使用:5 - 30V 输入。

    我无法理解为什么它不能正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好!

    只需检查这里是否有人可以帮助我。 )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Marc、

    正如 Jan 所说、Hercules MCU 不支持5V 信号输入。 如果编码器的输出(QA、QB、Index)为5V 信号、请使用电平位移或分压器(电阻器)来降低信号电平。

    应用此技术的速度范围有限制。 如果速度低于最小限值、则速度估计值在大部分时间都将错误地为零。