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.

[参考译文] TM4C123GH6PM:CAN 位时间计算。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608209/tm4c123gh6pm-can-bit-time-calculation

器件型号:TM4C123GH6PM
主题中讨论的其他器件: TM4C123

大家好、TM4C 论坛、

目前、我正在为 CAN 应用开发 TM4C123GH6PM 微控制器。 我正在从 PCAN 发送/接收数据。

我已经使用 CANBitRateSet()驱动程序函数来设置50MHz 时钟的波特率。 据观察、当波特率配置为100k、125k、250k 和500kbps 时、它可以平稳工作。 但是、当波特率增加到800k 或1Mbps 时、PCAN 显示50MHz SYSCLK 的 BUSHEAVY/BUSOFF 条件。

然后,我尝试使用 CANBitTimingSet()来设置位速率,而不是 CANBitRateSet()函数,该位速率转而使用 tCANBitClkParms 结构,如下所示。 CAN 时钟设置为50MHz。 在此配置中、还观察到、当位速率高于500kbps 时、PCAN 显示 BUSHEAVY/BUSOFF 条件。

tCANBitClkParms CANBitClkSettings[]=

{16、8、4、20}、    // CANBAUD_100K 在50MHz 时钟下正常。
{13、2、4、25}、    // CANBAUD_125K 在50MHz 时钟下正常。
{6、1、2、25}、       // CANBAUD_250K 在50MHz 时钟下正常。
{16、3、2、5}、        // CANBAUD_500K 在50MHz 时钟下正常。
{8、1、1、5}         // CANBAUD_1M 在50MHz 时钟正常。
};
tCANBitClkParms 数据结构包含用于计算比特率的 SyncPropPhase1、Phase2、SJW、BRP 的值。  

typedef 结构

uint32_t ui32SyncPropPhase1Seg;

uint32_t ui32Phase2Seg;

uint32_t ui32SJW;

uint32_t ui32QuantumPrescaler;


tCANBitClkParms;

我使用的是 SN65HVD1040D CAN 收发器和 8MHz XTAL。

请任何人帮助我、如何计算上述数据结构中显示的这些值、或如何考虑参数以获取这些值以实现相应的比特率。

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我记得、CAN 位时序是在手册中解释的。 更有用的是、网上有许多解释性教程。

    话虽如此、我预计您的问题可能是布线、终端或收发器、而不是比特率设置。

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

    您好 Robert Adsett、

    我已经尝试过100k、125k、250k 和500k 波特率。 它正在顺利工作。 我已经检查了 CAN 收发器端、我正在正确获取数据。 但是,如果波特率是1Mbps,使用 CANBitRateSet()库函数,则在 PCAN 中使总线关闭/繁忙。

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

    这基本上只是您原始帖子的重复。 不确定它是如何回答你的问题的,但如果你满意....

    Robert

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

    ***已更正***

    使用以下器件、我可以在50MHz 系统时钟下以1M 波特进行可靠的 CAN 通信:

    // 16MHz 晶振提供50MHz
    SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);
    

    CANBitRateSet (CAN0_BASE、SysCtlClockGet ()、1000000);
    

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

    CAN0寄存器的设置如图所示:***已更正***

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

    [引用 user="Bob Crosby"]//50MHz 频率的16MHz 晶体

    SysCtlClockSet (SYSCTL_SYSDIV_8 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);[/引用]

     "SYSCTL_SYSDIV_4" 可能会导致(而不是)"16MHz 晶体的50MHz"

    TM4C123 运行 PLL @ 200MHz (iirc)-因此分频值为4。

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

    CB1、一如既往地感谢您对我的双重检查。 我从数据表的第1374页中提取了该表、其中显示了400MHz 下的 PLL。 CAN 在1MBaud 下工作正常(连接到 NI USB CAN 模块)、这意味着我实际上使用 SYSCTL_SYSDIV_8以50MHz 的频率工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1、我不应质疑您的更正。 你是对的。 它应该是 SYSCTL_SYSDIV_4、因为 PLL 在进入系统时钟分频器之前被2分频。 我以25MHz 运行、软件根据25MHz 系统时钟正确计算了 CAN 1MBaud 波特率的设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Bob Crosby"]CB1、我绝不应质疑您的更正。

    Bob -我们都意识到-有时甚至是一只失明的松鼠在核桃上喷出。    为了"公平"-我多次"喜欢"你的帖子(不只是"更正")-因此有一个平衡。    (虽然"类似"的优惠似乎没有被退回...)

    这支 crüe——毫不鲁地航行——和“快击”的工作人员 (所有)是否会采纳这一说法 ,“不愿意提出质疑”。    (并非偶然...)

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

    尊敬的 Bob Crosby:

    我使用的是8MHz 晶体中的50MHz。

    ROM_SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);

    并将 CANBitTimingSet()库函数用于波特率。

    #define CANBAUD_100K 0
    #define CANBAUD_125K 1.
    #define CANBAUD_250K 2.
    #define CANBAUD_500K 3.
    #define CANBAUD_1M  4.

    CANBitTimingSet (CAN1_base、CANBitClkSettings[CANBAUD_500K]);

    tCANBitClkParms CANBitClkSettings[]=

    {16、8、4、20}、  // CANBAUD_100K 在50MHz 时钟下正常。
    {13、2、4、25}、  // CANBAUD_125K 在50MHz 时钟下正常。
    {6、1、2、25}、  // CANBAUD_250K 在50MHz 时钟下正常。
    {16、3、2、5}、   // CANBAUD_500K 在50MHz 时钟下正常。
    {8、1、1、5}     // CANBAUD_1M 在50MHz 时钟下正常。
    };

    您能不能帮助我、什么是 CAN 位时序参数值来从8MHz 晶体为80MHz 系统时钟实现100k、125k、250k、500k、800k 和1mbps 波特率。  

    谢谢、此致

    Suman  

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

    在我的应用中、我使用的是8MHz 晶体的80MHz。
    和 CANBitRateSet (CAN1_base、SysCtlClockGet ()、波特率);
    在这里、对于波特率100k、125k、250k、500k、从 CAN 收发器(SN65HVD1040D)获取数据、并且我也可以在具有这些波特率的 PCAN 中看到数据。
    但是、如果波特率为800k 或1Mbps、则无法从 CAN 收发器获取数据、并且 PCAN 显示 BUSHEAVY。

    因此,我决定使用 CANBitTimingSet()库函数,而不是使用 CANBitRateSet()库函数。
    请帮我解决问题,CAN 位时序参数值需要通过 CANBitTimingSet()传递哪些值,以便从8MHz 晶体获得100k、125k、250k、500k、800k 和1Mbps 的80MHz 系统时钟波特率。 在 CAN 收发器(SN65HVD1040D)的数据表中、它支持高达1Mbps 的波特率。

    您能否针对上述波特率计算80MHz 系统时钟上的 CAN 位时序参数。

    正如先前的帖子中所讨论的、
    在 stellarware 微控制器中,我尝试使用8MHz 晶振的50MHz,并使用 CANBitTimingSet()库中提到的 CAN 位时钟参数值,它可以在100k、125k、250k、500k 和1Mbps 波特率下顺利工作。 我还可以在 PCAN 中看到数据。

    tCANBitClkParms CANBitClkSettings[]=

    {16、8、4、20}、 // CANBAUD_100K 在50MHz 时钟下正常。
    {13、2、4、25}、 // CANBAUD_125K 在50MHz 时钟下正常。
    {6,1,2,25}, // CANBAUD_250K 在50MHz 时钟下正常。
    {16、3、2、5}、 // CANBAUD_500K 在50MHz 时钟下正常。
    {8、1、1、5} // CANBAUD_1M 在50MHz 时钟下正常。
    };
    在这里、
    比特率= CAN 时钟/((ui32SyncPropPhase1Seg + ui32Phase2Seg + 1)*(ui32QuantumPrescaler));
    根据上述 CAN 位时钟设置参数值和8MHz 晶体的50MHz、我想知道传播段、阶段1段、阶段2段值和量子总数(n)值是多少。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Suman Soora">在我的应用中,我使用的是8MHz 晶体的80MHz。
    和 CANBitRateSet (CAN1_base、SysCtlClockGet ()、波特率);
    在这里、对于波特率100k、125k、250k、500k、从 CAN 收发器(SN65HVD1040D)获取数据、并且我也可以在具有这些波特率的 PCAN 中看到数据。
    但是、如果波特率为800k 或1Mbps、则无法从 CAN 收发器获取数据、并且 PCAN 显示 BUSHEAVY。[/报价]

    我原来的建议/问题仍然存在。 我将在这些基础上增加电缆的长度。

    您没有提供任何理由认为原始参数应该被修改。

    Robert

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

    [引用用户="Robert Adsett"]

    Suman Soora
    在我的应用中、我使用的是8MHz 晶体的80MHz。
    和 CANBitRateSet (CAN1_base、SysCtlClockGet ()、波特率);
    在这里、对于波特率100k、125k、250k、500k、从 CAN 收发器(SN65HVD1040D)获取数据、并且我也可以在具有这些波特率的 PCAN 中看到数据。
    但是、如果波特率为800k 或1Mbps、则无法从 CAN 收发器获取数据、并且 PCAN 显示 BUSHEAVY。

    我原来的建议/问题仍然存在。 我将在这些基础上增加电缆的长度。

    [/报价]

    让我更加明确一点

    1. 您的收发器是什么?
    2. 您使用什么电缆?
    3. 您的电缆有多长?
    4. 如何终止总线?

    Robert

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

    列出了他的收发器"CAN 收发器(SN65HVD1040D)"。

    你(和我)还有其他所有问题。

    此外-任何频率 (其他)端的误差-如果 MCU 的误差方向相反-证明是累加的-因此(其他)端也需要注意!

    海报的持续"剪切/粘贴"证明不是那么有成效-而是真实的测量-以及对证明的直接反应-最佳的决心...

    与往常一样-在多个电路板上进行测试(从不单个电路板)可避免在诊断可怕的"单板异常"时出现"助手滥用"(肯定是一个高海报问题)。

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

    实现这些时序的方法有多种。 要使它们与50MHz 时钟相同、只需将预分频值更改为8/5即可。

    tCANBitClkParms CANBitClkSettings[]=
    {
    16、8、4、32}、// CANBAUD_100K 在80MHz 时钟下正常。
    {13、2、4、40}、// CANBAUD_125K 在80MHz 时钟下正常。
    {6,1,2,40},// CANBAUD_250K 在80MHz 时钟下正常。
    {16、3、2、8}、 在80MHz 时钟下、// CANBAUD_500K 正常。
    {8、1、1、8} // CANBAUD_1M 在80MHz 时钟下正常。
    };
    

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

    您好!

    在我的应用中、我使用的是8MHz 晶体的80MHz。
    和 CANBitRateSet (CAN1_base、SysCtlClockGet ()、波特率);
    在这里、对于波特率100k、125k、250k、500k、从 CAN 收发器(SN65HVD1040D)获取数据、并且我也可以在具有这些波特率的 PCAN 中看到数据。
    但是、如果波特率为800k 或1Mbps、则无法从 CAN 收发器获取数据、并且 PCAN 显示 BUSHEAVY。

    因此,我决定使用 CANBitTimingSet()库函数,而不是使用 CANBitRateSet()库函数。
    请帮我解决问题,CAN 位时序参数值需要通过 CANBitTimingSet()传递哪些值,以便从8MHz 晶体获得100k、125k、250k、500k、800k 和1Mbps 的80MHz 系统时钟波特率。 在 CAN 收发器(SN65HVD1040D)的数据表中、它支持高达1Mbps 的波特率。

    您能否针对上述波特率计算80MHz 系统时钟上的 CAN 位时序参数。

    正如先前的帖子中所讨论的、
    在 stellarware 微控制器中,我尝试使用8MHz 晶振的50MHz,并使用 CANBitTimingSet()库中提到的 CAN 位时钟参数值,它可以在100k、125k、250k、500k 和1Mbps 波特率下顺利工作。 我还可以在 PCAN 中看到数据。

    tCANBitClkParms CANBitClkSettings[]=

    {16、8、4、20}、// CANBAUD_100K 在50MHz 时钟下正常。
    {13、2、4、25}、// CANBAUD_125K 在50MHz 时钟下正常。
    {6、1、2、25}、// CANBAUD_250K 在50MHz 时钟下正常。
    {16、3、2、5}、// CANBAUD_500K 在50MHz 时钟下正常。
    {8、1、1、5}// CANBAUD_1M 在50MHz 时钟正常。
    };
    在这里、
    比特率= CAN 时钟/((ui32SyncPropPhase1Seg + ui32Phase2Seg + 1)*(ui32QuantumPrescaler));
    根据上述 CAN 位时钟设置参数值和8MHz 晶体的50MHz、我想知道传播段、阶段1段、阶段2段值和量子总数(n)值是多少。

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

    感谢您重放。 我将尝试使用该值。

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

    我正在使用网格连接 USB/CAN 适配器,其长度约为1米,连接在硬件和 PC 之间。
    我将尝试使用另一个板。

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

    尊敬的 Robert:

    硬件接口的方式如下:

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

    [引用 user="Manuraj Nambayil"]硬件接口是这样的:

    这一点之后没有任何内容。

    Robert

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

    [引用用户="Suman Soora"]
    我正在使用网格连接 USB/CAN 适配器,其长度约为1米,连接在硬件和 PC 之间。 [/报价]

    一米长的距离是好的、但这仍然存在有关端接和电缆的问题。

    Robert

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

    硬件接口的方式如下:

    看起来(非常)快!

    (发布时需要"一些"工作(审核)...)    请注意、"空"硬件接口(如"类似")已不再使用 AWOL!    (已(两次)保留...)

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

    感谢您更新硬件接口

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

    好马努拉伊

    看上去一切正常。 另一端怎么样?电缆怎么样?

    Robert

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

    您好、Robert、

    我们使用的是网格连接 USB/CAN 适配器器件、电缆长度约为1米。 过去5年来、我们一直在使用相同的设置。

    请参阅以下设备和电缆快照。

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

    您的 CAN 接口原理图非常好-但 CAN 收发器由5V 而非3V3供电。 您注意到 CAN 数据速率最高(即要求最高)时、单凭这一数据可能会造成"下降"? (您的 MCU 输出3V3 -对于5V 供电的 IC 而言、这可能证明是"勉强可用"的-尤其是在极端数据速率下!)

    3V3 CAN Xcvrs 可用-并且可能"适合"您现有的 PCB 封装...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1发现收发器上的电源问题。 这张照片显示了另外两张。 首先、没有端接器的证据、这在 Mbps 总线上更重要。 第二种情况看起来仅是部分接线、然后在连接到电路板之前以某种未知的方式拆分。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一件事。 我无法从照片中确定、但电缆看起来也很可疑。 双绞线的阻抗是多少? 它甚至有双绞线吗?

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否有 CAN 总线的示波器截图? 与来自 GRIDCONNECT 的单个位时间相比、测量 TM4C 的单个位时间很有趣。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../CAN-pics.zip

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

    我已连接 CAN 消息的示波器卡扣