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.

[参考译文] MSPM0G3507:LIN 通信在中间断开。

Guru**** 2390735 points
Other Parts Discussed in Thread: MSPM0G3507, DRV8329
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1469385/mspm0g3507-lin-communication-is-disconnected-midway

器件型号:MSPM0G3507
主题中讨论的其他器件: DRV8329

工具与软件:

尊敬的专家:

电机旋转时、LIN 通信被切断。 正常操作下的结果如上面的波形所示。

然而、在电机运行期间 LIN 通信突然中断。 异常波形如上所示。

使用的代码为"C:\ti\mspm0_sdk_2_02_00_05\examples\nortos\LP_MSPM0G3507\lin\lin_responser"
我将其放在 C:\ti\mspm0 sdk_2_03_00_07\examples\nortos\LP MSPM0G3507\motor_control_PMSM_sensorless_foc\sensorless-Foc DRV8329中
(此时、Lin 通信已断开、因此代码的定时器中断中的函数 applicationLowPrimorityRun (g_PMC_App)被替换为标志并移动到 main.c 中的 while (1)

请告诉我为什么通信会在中途中断。

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

    大家好、Donguk、

    您可以检查 UART 外设的 RX 缓冲区中是否有数据吗? (假设您在此处发送)

    考虑到您的确使用了35h 得到了完整的数据包、我 认为您不需要填写下一个数据。 我相信您在 代码中处于其他一些位置。 我还建议在发送数据的位置放置一个断点、看看您激活电机后是否调用了函数。

    此致、
    Luke

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

    查看 PLIN 通信中的日志、似乎出现了校验和错误。 您能告诉我原因是什么以及如何解决吗? 当我更改通信线路时、RX/TX 数据没有任何问题。

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

    大家好、Donguk、

    您能否进一步展开"当我更改通信线路时、RX/TX 数据没有任何问题"您只更改引脚了吗? 或者、您是否在该流程中改变了其他方面?

    对于校验和错误、这是一种验证整个数据包是否已正确接收/传输的方法。 校验和可以是发送的总位数或数据集中的某种算法。 这是为了验证您的数据是否已正确发送、如果您在此 PLIN 器件上遇到校验和错误、我会检查其如何计算校验和、如果您在 LIN 通信中发送校验和。

    此致、
    Luke

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

    尊敬的 Luke:

    这意味着通信电缆已更改。 之前使用的通信电缆在发生通信错误后未接收数据、但这次更改的 Lin 通信电缆即使发生通信错误、也不会断开通信。
    感谢这一点、我能够记录错误。 我将向您展示错误内容。

    ->这是正常结果

    ->这是异常结果(错误代码"CK"=校验和错误)

    查看校验和错误的 LIN 结果、TX 结果似乎是9个字节(包括末尾的 FF)、应该是一个8字节的字符。 您能告诉我、解决方案是什么吗?

    此致、

    Donguk

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

    大家好、Donguk、

    底部数据是从 MCU 传输的数据、顶部数据是从 PC 发送的数据吗?  

    我认为 FF 应为校验和值。 如果您查看好数据集、D2、14、32等器件处于相同的位置、所有 D2具有相同的数据、所有14个都具有相同的数据等  

    检查从 MCU 发送的内容、并可以验证校验和是否不正确(并非所有校验和都应该是 FF)。

    我觉得 PID 与我们的可用 PID 不匹配。

    响应来自 sendLINResponderTXMessage ()函数, 您可以放置一个断点并检查正在使用的变量的值。  

    此致、
    Luke

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

    尊敬的 Luke:

    是的、就是这样。 上面的数据从 PC 发送到 MCU、下面的数据从 MCU 发送到 PC。
    我附上了一个视频帮助您理解。

    e2e.ti.com/.../_15C8C1C0D9B391C7_.mp4

    ->这是正常操作期间。

    e2e.ti.com/.../_44BE15C8C1C0D9B391C7_1.mp4

    ->这是在异常操作期间。

    您可以通过将 applicationLowPriorityRun (g_PMC_App)函数保留在 C:\ti\mspm0 sdk_2_03_00_07\examples\nortos\LP MSPM0G3507\motor_control_PMSM_sensorless_foc\sensorless-DRV8329的100ms 计时器中断内部来人为创建不稳定行为、而不是在每100ms 内部执行一次100ms 的示例代码(100ms)

    出于某种原因、如果您在计时器中断内运行 applicationLowPrimorityRun (g_PMC_App)、它将与 LIN 中断发生冲突。 但是、即使将 applicationLowPrimorityRun (g_PMC_App)移动到 while (1)语句、您仍应解决电机旋转时间歇性发生的校验和错误。


    正如您在视频中看到的、当电机进入 AGLIN 时、LIN 中断的状态不会改变。
    您能否查看"C:\ti\mspm0_sdk_2_02_00_05\examples\nortos\LP_MSPM0G3507\lin\lin_responser"的内容?
    如果您检查示例代码的 LIN 中断功能、

    尽管视频中未显示该参数、

    当您单独检查 DL_UART_EXTEND_getPendingInterrupt (LIN_0_INST)时、

    它卡在 DL_UART_EXTEND_IIDX_RXD_POS_EDGE 状态、

    gStateMachine 卡在 LIN_STATE_SYNC_FIELD_NEG_EDGE 状态下。

    请检查代码并告诉我为什么 DL_UART_EXTEND_getPendingInterrupt (LIN_0_INST)的结果保持不变

    我认为这个问题是由与示例代码的中断(ADC、定时器、LIN)内部的函数相冲突引起的。 是否有使用 DMA 执行 LIN 的示例? 我想了解这种方法是否可以解决问题。

    此致、

    Donguk

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

    大家好、Donguk、

    感谢您在此提供的信息、我需要一些时间来调查 LIN 代码并尝试复制上面列出的情形。 你是否将 UART 设置为最高优先级? 都处于同一优先级。

    此致、
    Luke

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

    尊敬的 Luke:

    计时器中断具有最高优先级、而 LIN、ADC 使用默认值

    我将计时器中断设置为高于 Lin 的优先级、因为计时器中断由 Lin 中断。

    平地机、

    Donguk

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

    大家好、Donguk、

    我们拥有 UART DMA 示例 uart_rx_multibyte_fifo_dma_interrupts 和  uart_tx_multibyte_fifo_dma_interrupts、您可使用它们来查看 DMA 连接的实现方式。

    此致、
    Luke