工具/软件:
我目前正在为一个 PMSM 控制器工程设计 F2800156-Q1 (32引脚)微控制器。 我们正在使用 bitfield 格式开发代码。 我已将引脚27 (GPIO1)配置为 MCAN_TX、将引脚28 (GPIO0)配置为 MCAN_RX。 但是、我无法找到任何位字段格式的 MCAN 示例代码。 请共享 C2000控制器的任何 MCAN 示例代码。
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.
工具/软件:
我目前正在为一个 PMSM 控制器工程设计 F2800156-Q1 (32引脚)微控制器。 我们正在使用 bitfield 格式开发代码。 我已将引脚27 (GPIO1)配置为 MCAN_TX、将引脚28 (GPIO0)配置为 MCAN_RX。 但是、我无法找到任何位字段格式的 MCAN 示例代码。 请共享 C2000控制器的任何 MCAN 示例代码。
您好、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 工具设置也已正确完成。
您好、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:
我对 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:
感谢您的耐心和帮助
我已经 在 Launchpad 上试用了 F28P55x 的示例、它们工作正常、我在 PCAN 工具上获得了输出、我已经解决了这个问题、并在设置上相应地应用了更改、如下所示。
PCAN 工具输出
但当我在 F2800156Q1上尝试相同的示例时(因为我没有 F2800156Q1的 LaunchPad)、我直接应用了我的工程、但此时代码(mcan_ex4_receive.c)被触发
恢复后2-3次代码再次运行但没有输出、当我暂停它时显示此消息。 另外、我想提一个要点、到目前为止我没有为我的工程开启外部晶体振荡器。
此致、
Shivani
尊敬的 Shivani:
为了检查功能、只要波特率和 CAN 总线长度保持在最低水平、就应该使用内部振荡器。 然而、在实际应用中、CAN 总线只要几英尺长而且环境嘈杂、就 需要精密时钟源来满足严格的 CAN 时序要求。 使用内部振荡器、您需要确保 SYSCLK 仍在120MHz 处配置、以便示例正常工作。
但是、您遇到的错误陷阱可能是由多个问题引起的。 在 Code Composer 中、您可以在调试器/仿真模式下单步执行代码、以便可以准确跟踪错误发生的位置。
此致、
Joseph