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.

[参考译文] TMS320F2800156-Q1:位字段格式的 MCAN 示例

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1506699/tms320f2800156-q1-mcan-example-in-bitfield-format

器件型号:TMS320F2800156-Q1

工具/软件:

我目前正在为一个 PMSM 控制器工程设计 F2800156-Q1 (32引脚)微控制器。 我们正在使用 bitfield 格式开发代码。 我已将引脚27 (GPIO1)配置为 MCAN_TX、将引脚28 (GPIO0)配置为 MCAN_RX。 但是、我无法找到任何位字段格式的 MCAN 示例代码。 请共享 C2000控制器的任何 MCAN 示例代码。

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

    尊敬的 Shivani:

    遗憾的是、此时 MCAN 上没有位域示例。  位域头可用、但通常情况下、所有软件示例都以 driverlib 格式在 C200Ware 中发布。

    此致、

    Joseph

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

    您好、Joseph  

    感谢您的答复。       

    我还尝试将 Driver-lib 示例 mcan_ex1_loopback  用于 TMS320F2800156。 但是、我无法使用 PCAN 工具或示波器检测到任何 CAN 输出。 我已 根据我的要求修改 GPIO 配置(引脚27 (GPIO1)作为 MCAN_TX、引脚28 (GPIO0)作为 MCAN_RX)和 CAN 时钟设置。 此外、我在 TMS320F28P550SJ9上测试了类似示例(mcan_ex1_loopback)、  此处仅修改 GPIO 引脚( GPIO4为 MCAN_TX、GPIO5 为 MCAN_RX)、但在那里也未观察到输出。  

    此致

    Shivani Gupta

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

    尊敬的 Shivani:

    如果您将 LaunchPad 用于 F2800156或 F28P550SJ9、则物理连接到收发器和 CAN 端子 CANL/CANH 的 GPIO 为 GPIO4和 GPIO5。  其他 GPIO 将不起作用、因为它们未连接到板载 CAN 收发器。

    此外、确认开关 s4设置到正确位置、以便 GPIO4/5连接到收发器。

    mcan_ex1_loopback 配置为比特率切换、标称速率为500kbps、数据速率为1Mbps。  确保在 PCAN 设置中启用比特率切换、它将与示例中配置的 NOM 和数据速率相匹配。

    此致、

    Joseph

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

    您好 Joseph、  

    我使用 F28P559SJ9-Q1微控制器的 LaunchPad、我已通过更改 device.h 文件将 GPIO4和 GPIO5设置为 MCANA_TX 和 MCANA_RX。

     //为 MCAN 配置 GPIO。
    GPIO_setPinConfig (DEVICE_GPIO_CFG_MCANRXA);
    GPIO_setPinConfig (DEVICE_GPIO_CFG_MCANTXA);  

    我没有对 c2000.syscfg 文件进行任何更改。 如果需要在  c2000.syscfg 中完成任何更改、请帮助我。

    此外、  开关 s4设置为正确位置、因此 GPIO4/5连接到收发器。 PCAN 工具设置也已正确完成。

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

    尊敬的 Shivani:

    是的、这是 MCAN 收发器的正确 GPIO 集。  我进行了一些位时序计算、您实际上应该在使用的测试用例中使用500kbps NOM 速率和2Mbps 数据速率。  您可以在 PCAN 设置中查看这一点吗?

    谢谢、

    Joseph

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

    您好、Joseph:  

    我正在与您分享 PCAN 的详细信息。 请进行查看。 我的问题仍然存在、即使我将配置从 CAN FD 更改为传统 CAN、但它仍然无法正常工作。  

    我还进行了位时序计算、请进行验证。

    SYSCLK = 150MHz、MCAN_BIT_CLOCK = SYSCLK/5 = 150MHz 30MHz。

    标称比特率-  

    NOM_BRP = 11、TQ=(BRP+1)/TQ= 400ns、NOM_BIT RATE = 1/(Tseg1+Tseg2+1)* TQ => 500kb/s = 1/400ns *(Tseg1+Tseg2+1)=>(Tseg1+Tseg2+1)= 5、根据代码30MHz = 1、且 Tseg1 = 1 + 1 + 1、则从 tsegq = 1中减去(Tseg1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)。

    我对数据比特率应用了相同的逻辑 Data_BRP =1、TQ for DATA =(BRP+1 )/= 66.66ns、Data_Bit Rate = 1/(Tseg1+Tseg2+1)* TQ => 2mb/s = 1/66.66ns *(Tseg1+Tseg2+1)=>(Tseg1+Tseg2+1)=已从30MHz 中减去、但已从 TsegQ = 1 + 1计算、则为1、且 TsegQ = 1 + 1、且 TsegQ = 1  

    我尝试了另一个位时序参数、但仍然无法正常工作。

    甚至我还尝试了另外两个 Driver-lib  示例 mcan_ex4_receive 和 mcan_ex9_mtransmit 、这两个示例也不起作用。

    您能否与我分享任何可用的 MCAN 示例?

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

    尊敬的 Shivani:

    我正在寻找一个 F28P55x 设置来自行试用这些示例。  希望我能在本周中旬之前解决这个问题。

    此致、

    Joseph  

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

    谢谢 Joseph、  

    我正在等待您的答复。

    此致、

    Shivani

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

    尊敬的 Shivani:

    最早我将在明天拿到 F28P55x LaunchPad、所以今天我不会为大家提供更新。

    此致、

    Joseph

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

    您好、Joseph:

    没问题、验证 P55示例设置完成后、请更新。

    此致、

    Shivani。

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

    尊敬的 Shivani:

    我对 mcan_ex9_transmit 进行了测试、因为它通过将 MCANTX/TX 引脚修改到 GPIO4/5来使其正常工作。  以下是用于位时序的设置:

        //
        // Initialize bit timings.
        //
        bitTimes.nomRatePrescalar   = 0xBU; // Nominal Baud Rate Pre-scaler
        bitTimes.nomTimeSeg1        = 0x2U; // Nominal Time segment before SP
        bitTimes.nomTimeSeg2        = 0x0U; // Nominal Time segment after SP
        bitTimes.nomSynchJumpWidth  = 0x0U; // Nominal SJW
        bitTimes.dataRatePrescalar  = 0x1U; // Data Baud Rate Pre-scaler
        bitTimes.dataTimeSeg1       = 0xAU; // Data Time segment before SP
        bitTimes.dataTimeSeg2       = 0x2U; // Data Time segment after SP
        bitTimes.dataSynchJumpWidth = 0x2U; // Data SJW
    
    MCAN Clock = 150MHz/5 = 30MHz
    
    Nom rate = (30MHz/(0xB + 0x1))/(Tseg1 + Tseg2 +3) = 2.5MHz/(2+0+3) = 500kbps
    Data rate = (30Mhz/(0x1 + 0x1)/(Tseg1 + Tseg2 +3) = 15MHz/(10+2+3) = 1Mbps
    
    

    此外、还使用 dataRatePrescale = 0进行了测试、即数据速率为2Mbps、我看到事务成功。  请参阅以下代码片段:

    您能否逐步检查您的代码以查看测试案例是否在测试结束时执行?  测试可能在其他地方失败。

    此致、

    Joseph

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

    你好 Joseph 非常感谢你的帮助。  

    我正在尝试、只是提供一些时间。  

    此致、  

    Shivani  

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

    尊敬的 Shivani:

    好的、明白。

    此致、

    Joseph

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

    您好、Joseph:

    感谢您的耐心和帮助

    我已经 在 Launchpad 上试用了 F28P55x 的示例、它们工作正常、我在 PCAN 工具上获得了输出、我已经解决了这个问题、并在设置上相应地应用了更改、如下所示。

    PCAN 工具输出  

    但当我在 F2800156Q1上尝试相同的示例时(因为我没有 F2800156Q1的 LaunchPad)、我直接应用了我的工程、但此时代码(mcan_ex4_receive.c)被触发  

    恢复后2-3次代码再次运行但没有输出、当我暂停它时显示此消息。 另外、我想提一个要点、到目前为止我没有为我的工程开启外部晶体振荡器。

    此致、  

    Shivani

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

    值得一提的是、我的晶体振荡器已损坏、我能否使用内部振荡器运行 MCAN?

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

    尊敬的 Shivani:

    为了检查功能、只要波特率和 CAN 总线长度保持在最低水平、就应该使用内部振荡器。  然而、在实际应用中、CAN 总线只要几英尺长而且环境嘈杂、就 需要精密时钟源来满足严格的 CAN 时序要求。  使用内部振荡器、您需要确保 SYSCLK 仍在120MHz 处配置、以便示例正常工作。

    但是、您遇到的错误陷阱可能是由多个问题引起的。  在 Code Composer 中、您可以在调试器/仿真模式下单步执行代码、以便可以准确跟踪错误发生的位置。

    此致、

    Joseph

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

    非常感谢您的帮助、Joseph、

    我获得了使用外部晶体振荡器后的输出、 仅使用内部振荡器时无法正常工作。 我认为 MCAN 需要两个时钟源。