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:MCAN 位时序

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1583094/tms320f280039c-mcan-bit-timings

器件型号: TMS320F280039C

在配置 MCAN 位时序时、我提供了 MCAN clk = 40MHz、并且 iAM 将波特率从 500k 更改为 8Mbps(最高 5Mbps)、其工作原理如下: 标称值= 1Mbps、数据= 5Mbps、标称值= 8Mbps。我需要选择合适的时钟和位时间参数来为 CAN FD 配置这些波特率。

switch(位)
  {
    用例 0:/* 125 kbps */
      bitTimes_myMCAN0.nomRatePrescalar = 15;
      休息;
    案例 1:/* 250kbps */
      bitTimes_myMCAN0.nomRatePrescalar = 7;
      休息;
    案例 2:/* 500kbps */
      bitTimes_myMCAN0.nomRatePrescalar = 3;
      休息;
    案例 3:/* 1Mbps */
      bitTimes_myMCAN0.nomRatePrescalar = 1;
      休息;
    用例 4:
      bitTimes_myMCAN0.nomRatePrescalar = 3;

      bitTimes_myMCAN0.dataRatePrescale = 3;
      休息;
    用例 5:
      bitTimes_myMCAN0.nomRatePrescalar = 3;

      bitTimes_myMCAN0.dataRatePrescale = 1;
      休息;
    情形 6:
      bitTimes_myMCAN0.nomRatePrescalar = 1;

      bitTimes_myMCAN0.dataRatePrescale = 1;
      bitTimes_myMCAN0.dataTimeSeg1   = 4;
      bitTimes_myMCAN0.dataTimeSeg2   = 3;
      bitTimes_myMCAN0.dataSynchJumpWidth= 3;
      休息;
    情形 7:
      //SysCtl_setMCANClk (SysCtl_MCANCLK_DIV_2);

      bitTimes_myMCAN0.nomRatePrescalar = 0x1U;
      bitTimes_myMCAN0.nomTimeSeg1    = 0x9U;
      bitTimes_myMCAN0.nomTimeSeg2    = 0x8U;
      bitTimes_myMCAN0.nomSynchJumpWidth = 0x8U;

      bitTimes_myMCAN0.dataRatePrescale = 0x0U;
      bitTimes_myMCAN0.dataTimeSeg1   = 0x5U;
      bitTimes_myMCAN0.dataTimeSeg2   = 0x0U;
      bitTimes_myMCAN0.dataSynchJumpWidth= 0x1U;

      休息;

    情形 8:
      // SysCtl_setMCANClk (SysCtl_MCANCLK_DIV_1);
      bitTimes_myMCAN0.nomRatePrescalar = 0x4U;
      bitTimes_myMCAN0.nomTimeSeg1    = 0x4U;
      bitTimes_myMCAN0.nomTimeSeg2    = 0x1U;
      bitTimes_myMCAN0.nomSynchJumpWidth = 0x1U;

      bitTimes_myMCAN0.dataRatePrescale = 0x0U;
      bitTimes_myMCAN0.dataTimeSeg1   = 0x1U;
      bitTimes_myMCAN0.dataTimeSeg2   = 0x1U;
      bitTimes_myMCAN0.dataSynchJumpWidth= 0x1U;

      休息;

    默认值:
      休息;
  }

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

    尊敬的 Sheervalya:

    MCAN 时钟将由器件 SYSCLK 除以 MCAN 时钟分频器。  F28003x SYSCLK 为 120MHz、因此要实现 40MHz MCAN 时钟、MCAN 时钟分频器应为 3。  这将是 API 调用 SysCtl_setMCANClk (SysCtl_MCANCLK_DIV_3)。

    标称阶段和数据阶段的位时序大致计算如下:

       位时间=(MCAN 时钟/ MCAN 时钟分频器)/[(位时间预分频器+ 1)/(tseg1 + tseg2 + 3)]

    对于 1MHz 标称和 5MHz 数据速率、假设 MCAN 时钟为 40MHz、您可以使用以下位时序参数:

      nom 位时间预分频器= 1

      nom tseg1 = 9  

      nom tseg2 = 8

      数据位时间预分频器= 0

      数据 tseg1 = 3

      数据 tseg2 =2

    对于 1MHz 标称和 8MHz 数据速率、假设 MCAN 时钟为 40MHz、您可以使用以下位时序参数:

      nom 位时间预分频器= 1

      nom tseg1 = 9  

      nom tseg2 = 8

      数据位时间预分频器= 0

      数据 tseg1 = 1

      数据 tseg2 =1

    此致、

    Joseph