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.
工具/软件:
您好:
我正在开发基于 TMS320F28379D 芯片的定制电路板、并尝试使用 EnDat 库实现与编码器的 SPI 通信。
但是、我目前面临一个问题。 为了使 SPI 通信正常工作、必须从 GPIO 引脚6生成 PWM 时钟信号并将其发送到编码器。 目前、此 PWM 信号未被输出。 因此、不会触发 spiRxFifoIsr 中断、并且永远不会满足条件 endat22Data.dataReady = 1;。 因此、程序仍停留在 while (endat22Data.dataReady!= 1){}循环中。
请帮助我启用 GPIO6上的 PWM 时钟输出。
您好:
C2000Ware 中有一些软件示例可帮助您完成代码和 PWM 配置: C:\ti\c2000\C2000Ware_5_04_00_00\driverlib\f2837xd\examples\cpu1\epwm
如果您有任何问题、敬请告知。
此致、
您好:
首先、我想澄清一下、我不熟悉如何在 TMS320F28379D 上配置和运行 PWM。 我当前的目标是使用 EnDat 库驱动编码器、并且我正在使用EnDat_Init();
函数对其进行初始化。
在此初始化期间、调用以下函数:
PM_endat22_generateCRCTable (NBITS_POLY1、POLY1、endat22CRCtable);
pm_endat22_setupPeriph();
PM_endat22_setFreq (ENDAT_INIT_FREQ_DIVIDER);
retval1 = PM_endat22_setupCommand (ENCODER_RECEIVE_RESET、0xAA、0x2222、0);
pm_endat22_startOperation ();
但是、这些函数是在预编译PM_endat22_lib.lib
文件中定义的、因此无法直接检查或调试内部实现。
我怀疑其中一个功能(很可能PM_endat22_startOperation()
)应该在 GPIO6上配置和输出 PWM 时钟信号。 遗憾的是、GPIO6上当前未生成 PWM 信号。 因此、endat22Data.dataReady == 1
绝不会触发 SPI 接收中断、并且永远不会满足该条件。 这会导致程序卡在相应的循环中。
e2e.ti.com/.../endat_5F00_init.zip
请查看代码
您好:
感谢您的进一步澄清。 让我与 EnDat 库中的相关专家交流、更好地帮助您完成调查。
再次大家好:
现在我已经解决了上一个问题、它似乎是根本原因与.cmd 文件配置有关。
我想提出一个跟进问题。
我计划使用 GPIO0、GPIO2和 GPIO4作为由 CPU2控制的 PWM 输出。
但是、在 Enn Dat_Init ()函数中、我看到 ePWM1、ePWM2、ePWM3和 ePWM4的时钟都被启用:
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;
CpuSysRegs.PCLKCR2.bit.EPWM4 = 1;
这表明 EnDat 库利用 ePWM1至 ePWM4。
考虑到这一点、如果我也尝试从 CPU2使用任何这些 PWM 模块(特别是 ePWM1-ePWM3)、可能会发生冲突。
我的问题是:
使用 EnDat 时、是否全部四个 ePWM 模块(1–4)都专门保留供其使用?
在该器件上、CLBx 时钟由 EPWMx 时钟驱动。 我记得、使用了4个 CLB 逻辑块中的3个。 作者必须已初始化所有4个时钟。
此致
Lori