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.

[参考译文] CCS/AM4379:eQEP 方向问题

Guru**** 2529560 points
Other Parts Discussed in Thread: AM4379

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/836680/ccs-am4379-eqep-direction-issue

器件型号:AM4379

工具/软件:Code Composer Studio

嗨、我正在尝试使用 AM4379 QEP 功能。

以下是我的初始化步骤:

void POSSPEED_Init (void)

uint16_t regval = 0;
uint16_t readval =0;


//在1000MHz SYSCLKOUT 上针对100Hz 的单位定时器
HW_WR_REG32 (PWMSS_eQEP_QUPRD、10000000);

readval = HW_RD_REG32 (PWMSS_eQEP_QUPRD);
UART_printf ("\n PWMSS_eQEP_QUPRD 为%x \n"、readval);
//------------------------------------------------


//正交计数模式选择14 15位置00正交编码模式 QSRC
regval = HW_RD_REG16 (PWMS_eQEP_QDECCTL);
regval = regval & 0x3fff;
HW_WR_REG16 (PWMSS_eQEP_QDECCTL、regval);

readval = HW_RD_REG32 (PWMS_eQEP_QDECCTL);
UART_printf ("\n PWMSS_eQEP_QDECCTL 为%x \n"、readval);
///-----------------------------------------------------


位置计数器不受仿真挂起的影响 μ s 位 写10 15 μ s
regval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
regval =((regval & 0x3fff)|0x8000);
HW_WR_REG16 (PWMSS_eQEP_QEPCTL、regval);


//位置计数器在索引位置上复位 PCRM=00在索引事件发生时 QPOSCNT 复位// 12 13位清零00
regval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
regval = regval & 0xcfff;
HW_WR_REG16 (PWMSS_eQEP_QEPCTL、regval);


使能单元定时器 μ s 启用单元计时器
regval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
regval = regval | 0x0002;
HW_WR_REG16 (PWMSS_eQEP_QEPCTL、regval);

第2位置1 QEP捕捉锁存模式 单元超时时候锁存,单元超时的时候位置计数器等被锁存/
regval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
regval = regval | 0x0004;
HW_WR_REG16 (PWMSS_eQEP_QEPCTL、regval);

位置计数器使能 eQEP 位置计数器
regval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
regval = regval | 0x0008;
HW_WR_REG16 (PWMSS_eQEP_QEPCTL、regval);


readval = HW_RD_REG16 (PWMSS_eQEP_QEPCTL);
UART_printf ("\n PWMSS_eQEP_QEPCTL 为%x \n"、readval);

///----------------------------------
最大位置计数器 μ s
HW_WR_REG32 (PWMSS_eQEP_QPOSMAX、0xffffffff);
UART_printf ("\n PWMSS_eQEP_QPOSMAX 为%x \n"、HW_RD_REG32 (PWMSS_eQEP_QPOSMAX));

///----------------------------------
单元位置事件预分频器32分频/μ s 5.
regval = HW_RD_REG16 (PWMSS_eQEP_QCAPCTL);
regval =((regval & 0xFF0)|0x0005);
HW_WR_REG16 (PWMSS_eQEP_QCAPCTL、regval);

qep捕获时 时钟预分配64 μ s
regval = HW_RD_REG16 (PWMSS_eQEP_QCAPCTL);
regval =((regval & 0x78f)|0x0060);
HW_WR_REG16 (PWMSS_eQEP_QCAPCTL、regval);


使能qep捕获 eQEP 捕捉单元
regval = HW_RD_REG16 (PWMSS_eQEP_QCAPCTL);
regval = regval |0x8000;
HW_WR_REG16 (PWMSS_eQEP_QCAPCTL、regval);


readval = HW_RD_REG32 (PWMSS_eQEP_QCAPCTL);
UART_printf ("\n PWMSS_eQEP_QCAPCTL 为%x \n"、readval);
///------------------------------

空 InitEQep1Gpio (空)

uint32_t regVal;

// 16位置0 0 3位写1 enable上拉+引脚复用 模式7更改为模式1 QEP模式
regVal = HW_RD_REG32 (my_CTRL_CONF_McASP0_ACLKR);//eQEP0A_IN
regVal =((regVal & 0xffff)|0x00000001);
HW_WR_REG32 (my_CTRL_CONF_McASP0_ACLKR、regVal);
UART_printf ("\n my_CTRL_CONF_McASP0_ACLKR 为%x \n"regVal);

regVal = HW_RD_REG32 (my_CTRL_CONF_McASP0_FSX);
regVal =((regVal & 0xffff)|0x00000001);
HW_WR_REG32 (my_CTRL_CONF_McASP0_FSX、regVal);
UART_printf ("\n my_CTRL_CONF_McASP0_FSX 为%x \n"regVal);

regVal = HW_RD_REG32 (my_CTRL_CONF_McASP0_AXR1);
regVal =((regVal & 0xffff)|0x00000001);
HW_WR_REG32 (my_CTRL_CONF_McASP0_AXR1、regVal);
UART_printf ("\n my_CTRL_CONF_McASP0_AXR1为%x \n"regVal);

regVal = HW_RD_REG32 (my_CTRL_CONF_McASP0_AHCLKX);
regVal =((regVal & 0xffff)|0x00000001);
HW_WR_REG32 (my_CTRL_CONF_McASP0_AHCLKX、regVal);
UART_printf ("\n my_CTRL_CONF_McASP0_AHCLKX 为%x \n"regVal);

时钟开启 μ s
/*启用 PWMSS0模块的 QEP 时钟*/
regVal= HW_RD_REG32 (QEP_BAS_ADDRESS_PWMSS0_CLKCONFIG);
regVal = regVal |0x100;
HW_WR_REG32 (QEP_BASE_ADDRESS_PWMSS0_CLKCONFIG、regVal);
UART_printf ("\n CLKCONFIG 为%x \n"regVal);

/*为 PWMMSS0模块启用时基时钟*/
regVal= HW_RD_REG32 (CONTRAL_MODULE_CTRL_PWMSS0);
regVal = regVal |0x1;
HW_WR_REG32 (CONTRAL_MODULE_CTRL_PWMSS0、regVal);
UART_printf ("\n PWMSS0为%x \n"regVal);

------------------------------------------------------------------

//位置速度计算
void POSSPEED_CALC (空)

长温度;
int pos16bval;

 
uint32_t tempval = hw_RD_REG16 (PWMSS_eQEP_QEPSTS);
UART_printf ("\n PWMSS_eQEP_QEPSTS 为%x \n"tempval);
int DirectionQep =(tempval & 0x0020)>>5;

--------------------------------------------------

问题:

 为什么方向不改变。

我是否错过了什么?

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

    您好!

    请提供有关您的硬件和软件的更多信息吗?

    • PRSDK/PDK 的版本?
    • 硬件板?
    • 增量编码器模型?
    • 硬件信号从编码器连接到 AM437x?
    • 您想使用的 eQEP 模式的简要说明?

    谢谢、此致、
    弗兰克