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.

[参考译文] LAUNCHXL-F28069M:可旋转电机的 SPI 协议

Guru**** 2460850 points
Other Parts Discussed in Thread: DRV8301, DRV8305, MOTORWARE, LAUNCHXL-F28069M

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1504683/launchxl-f28069m-spi-protocol-with-spinning-a-motor

器件型号:LAUNCHXL-F28069M
Thread 中讨论的其他器件:MOTORWARE、DRV8305、DRV8301

工具/软件:

我目前正在运行 proj10d 以旋转2个电机。  我更改了代码、因此设置了 SPIB 以接收来自 CC2640R2板的数据。  当我第一次启动程序时,数据完全通过与操纵杆移动相关的变化。  但是、当我设置 gSystemVars.Flag_enableRun = true 时、以及需要为 true 才能使电机旋转的其他所有内容、电机开始旋转、但来自(halHandle->spiBHandle->SPIRXBUF)的数据只会变为-1并保持不变。  我尝试注释掉代码并调试它、但没有成功。  我想这可能是一个中断优先级或其他问题、但我没有将中断用于 spib。  也许我需要断开 MTR2的中断连接?   

下面是项目10d 的 for (;;)循环中的操纵杆代码。  我正在尝试从操纵杆位置操纵电机。  

更改了 SPIB 功能



当 gSystemVars.Flag_enableRun = 0时
您可以在下面看到数据很好地传输  

然后当我将其设置为 true 时  

它会变为-1并保持。  

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

    您好 Charlie、

    这一个相对简单。 我假设您正在使用 MotorWare  。  BOOSTXL-DRV8305 和 LAUNCHXL-F28069M。 如果您使用的是 DRV8301、只需在以下所有注释中将 DRV8305替换为 DRV8301。  让我们来看看几个与您要查找的内容相关的函数:

    • HAL_setupSPIB ()
      • 您已经调整了这个、这很好
    • HAL_setParamsMtr ()
      • 在 HAL_setupParams 之后立即在 proj_lab10d.c 中调用
      • 位于与 HAL_seutpSPIB ()相同的文件中
      • 调用 DRV8305_setSpiHandle()  它只存储用作输入的 SPI 句柄、对于 MTR 2、即 SPI B 句柄。
    • HAL_readDrvData()和 HAL_writeDrvData()
      • 这些函数在主循环中调用  如果启用了 DRV8305_SPI 预定义符号。 即之前的 SPI 句柄。 存储用于读取和写入 DRV8305。

     最有可能 发生的情况是、您已启用预定义符号"D.RV8305_SPI"、当您进入 main for (;;)循环时、 您现在正在将垃圾数据写入 SPI 通信、我相信更重要的是、 每次循环的 mtr2部分运行时清除 SPI Rx 缓冲区。

    如果您仅使用一个电机、最简单的解决方法可能是更改 For (motorNum...) 不迭代到 HAL_MTR2的循环。

    此致、
    Jason Osborn

    注意:  加粗  说明要点和要点。