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.

[参考译文] TMS320F280039C:以1Mbps 标称数据位速率和5Mbps 数据位速率运行 MCAN 模块

Guru**** 2943350 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1398309/tms320f280039c-operating-mcan-module-at-1-mbps-nominal-and-5-mbps-data-bit-rates

器件型号:TMS320F280039C
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我正在尝试 以1Mbps 标称速率和5Mbps 数据位速率在 F280039C MCU 上操作 MCAN 模块。 我无法找到正确的设置来执行此操作。  

MCAN 模块时钟预分频器设置为3。

使用以下设置、我能够获得1Mbps 的标称波特率

使用以下设置、我能够以2.5 Mbps 的速率正确运行。  

我将尝试通过将上面的数据速率预分频器设置为0来获得5Mbps 的数据波特率。 但是、如果进行此更改、我在总线上看不到任何消息传输尝试(使用示波器观察 CANH/CANL 引脚)。 我还尝试更改 MCAN 时钟预分频器来做到这一点、但没有效果。  

是否有人可以验证我是否正在使用有效的设置?  

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

    关于选择 TSeg1和 TSeg2的几条注释:

    1、位时间段(TSeg1、TSeg2)应配置、以使采样点在位中尽可能晚。 采样点=(1 + TSeg1)/(1 + TSeg1 + TSeg2)

    2. TSeg2不能短于任何 CAN 控制器的信息处理时间、该时间取决于器件并且在[0…范围内 2] tq

    3. SJW 定义了同步机制可以将采样点移动到极限范围内的距离。 它不应为0

    您是否可以尝试以下设置:

    MCAN 模块时钟预分频器:/2  

    额定电压:

    预分频器: 2.

    TSEG1:14

    TSEG2:3

    SJW:3

    数据:

    预分频器:0

    TSEG1:7

    TSEG2:2.

    SJW:2

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

    感谢您指出 SJW 的问题。 我已尝试使用推荐的设置、但仍然看到相同的问题-无法进行传输尝试。  

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

    尊敬的 Rishab:

    您是否启用了 TDC (变速器延迟补偿)? 默认情况下、TDC 处于禁用状态。 启用后、请对 TDCO 和 TDCF 进行编程。

    我建议 TDCO=TDCF=DATA TSEG1

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

    尊敬的 Rishab:

    我在 F28x 器件上测试了5Mbps 数据波特率、它像预期的那样工作。

    下面的中列出了 CPU SPEED = 150MHz 时的配置(对于 F280039、CPU 速度为120MHz):

    / /

    SYSCTL_setMCANClk (SYSCTL_MCANANA、SYSCTL_MCANCLK_DIV_3);50MHz

    /*波特率= 50MHz /(0x4+0xe+3)(0x4+1)= 500kbps*/
    bitTimes.nomRatePrescalar = 0x4U;//标称波特率预分频器
    bitTimes.nomTimeSeg1 = 0x0EU;// SP 之前的标称时间段
    bitTimes.nomTimeSeg2 = 0x3U;// SP 之后的标称时间段
    bitTimes.nomSynchJumpWidth = 0x3U;//标称 SJW


    /*波特率= 50MHz /(0x6+1+3)(0x0+1)= 5000kbps*/
    bitTimes.dataRatePrescalar = 0x0U;//数据波特率预分频器
    bitTimes.dataTimeSeg1 = 0x6U;// SP 之前的数据时间段
    bitTimes.dataTimeSeg2 = 0x1U;// SP 之后的数据时间段
    bitTimes.dataSynchJumpWidth = 0x1U;// Data SJW

    initParams.emulationEnable = 0x1;//由 Qj 添加
    initParams.tdcEnable = 0x1U;      //发送器延迟补偿已启用

    PCAN 接收 F28x MCAN 节点发送的所有消息:

    PCAN CAN-FD 设置:

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

    您无法使用您第一条消息中的参数来获得2.5Mbps 波特率。 实际波特率为:信噪比(40MHz)/3/(3+1+3)= 40mbps 至21Mbps

    请使用以下时序参数进行测试。  

    SYSCTL_setMCANClk (SYSCTL_MCANCLK_DIV_2);//MCAN 时钟= 60MHz

    bitTimes.nomRatePrescalar = 0x5U;  //标称波特率预分频器
    bitTimes.nomTimeSeg1 = 14u;       // SP 之前的标称时间段
    bitTimes.nomTimeSeg2 =  3U;       // SP 之后的标称时间段
    bitTimes.nomSynchJumpWidth = 0x3U;//标称 SJW

    /*波特率= 60/1/(8+1+3)= 5Mbps*/
    bitTimes.dataRatePrescalar = 0x0U;//数据波特率预分频器
    bitTimes.dataTimeSeg1 = 0x8U;// SP 之前的数据时间段
    bitTimes.dataTimeSeg2 = 0x1U;// SP 之后的数据时间段
    bitTimes.dataSynchJumpWidth = 0x1U;// Data SJW

     和  

    initParams.emulationEnable = 0x1;  
    initParams.tdcEnable = 0x1U;      //发送器延迟补偿已启用

    //
    //发送器延迟补偿参数。
    //
    initParams.tdcConfig.tdcf = 0xAU;
    initParams.tdcConfig.tdco = 0x9U;

    很抱歉、我为您提供的参数是不同的 CPU 时钟。

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

    您好、QJ:

    我能够使用您的参数集解决此问题。 我认为这个问题 很可能是由于未启用传输延迟补偿。 C2000ware 5.02 (mcan_ex13_transmit_TxEventFIFO)上的 MCAN 示例13设置 补偿参数、而无需实际启用延迟补偿本身。  

    我复制了相同的示例、并认为补偿已启用。  

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

    再次感谢您提供所有这些输入。 少量添加-上面设置的参数使 MCAN 能够在500kbps 标称值和5Mbps 数据速率下工作。 我将标称波特率预分频器从上面建议的5个更改为2、以使 MCAN 能够在1Mbps 标称速率和5Mbps 数据速率下工作。  

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

    很好、谢谢!