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.

[参考译文] 编译器/TM4C123AE6PM:CAN 总线2路通信

Guru**** 2457560 points
Other Parts Discussed in Thread: TM4C123AE6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/641884/compiler-tm4c123ae6pm-can-bus-2-way-communication

器件型号:TM4C123AE6PM

工具/软件:TI C/C++编译器

大家好、  

我 对 CAN 通信有疑问。 我有两个具有 TM4C123AE6PM 的电路板、其中 PA0和 PA1用于 CAN 并连接到 CAN 收发器、我 已在一个方向上设置通信。 现在、我希望板2也将信息发送回板1。 我是否能够通过创建另一个消息对象(tCANMsgObject)(类型为 MSG_OBJ_TYPE_TX)并让电路板将其发回来实现此目的? 和电路板1中的中断、按 ID 检查消息对象? 这是正确的、还是我遇到了问题?

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

    [引用 user="Djedjica">我 对 CAN 通信有疑问。 我有两个具有 TM4C123AE6PM 的电路板 、其中 PA0和 PA1用于 CAN 并连接到 CAN 收发器、我 已在一个方向上设置通信。 现在、我希望板2也将信息发送回板1。 我是否能够通过创建另一个消息对象(tCANMsgObject)(类型 为 MSG_OBJ_TYPE_TX)并让电路板将其发回来实现此目的?[/引用]

    是的。 不过、请确保仲裁值(通常称为 ID)不同。

    虽然我有一种感觉、但你可能会抓住斗杆的错误端。 尽管您可以将 CAN 设置为回复/响应、但在这样做时、您会错过它的大部分实用程序。

    从根本上说、CAN 是一个控制网络。 尽管有几个 HLP (高级协议)会将其插入 ISO 网络堆栈模型、但它并不能完全适合 ISO 网络堆栈模型。

    与 CAN 基本性质的相似之处是发布/订阅或反射性存储器。 其理念是每个节点发送信息/命令、而其他节点仅"监听"它们所关注的那些节点。 例如、您可以使用电机控制设置、其中有两个通过单独的 HMI 和互锁控制器的速度控制来控制的机械连接电机。

    • 速度控制发送速度命令
      • 如果接收到故障、它将速度输出设置为零。
    • 主电机/控制器控制速度
      • 它报告电机和控制器温度
        • 在过热情况下、它将降低速度
        • 如果温度达到限制点、它将声明故障、关断并发送故障消息
      • 它报告其当前的工作扭矩
        • 它将声明故障、关闭并在扭矩过大时发送故障消息
      • 它报告其电压和电流
        • 过流将导致控制器声明故障、关断并发送故障消息
      • 如果接收到故障、它将关断
    • 次级电机/控制器将其扭矩调节到初级电机的一部分
    • 它报告电机和控制器温度
      •  在过热情况下、它将减小扭矩
      • 如果温度达到限制点、它将声明故障、关断并发送故障消息
    • 它报告其当前的工作扭矩
      • 它将声明故障、关闭并在扭矩过大时发送故障消息
    • 它报告其电压和电流
      • 过流将导致控制器声明故障、关断并发送故障消息
    • 如果接收到故障、它将关断
    • HMI 显示状态和故障信息
      • 将从总线上的数据收集状态和故障信息
    • 互锁控制器监控互锁开关(模式现在应该很明显)
    • 如果互锁不满足要求、控制器将声明故障并发送故障消息

    很明显、这是一个简化的演示、但认为它可以为您提供想法。 请注意、这些都不涉及查询/响应设置。 您可以通过 RMA (Rate Monotonic Analysis、不要让名称吓到您、它真的很简单)来设置这些消息的时间表、并确保您不会使网络过载。 完成设置工作后、您最终会得到一个相当容易扩展和性能良好的东西。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Adsett 先生的 Yor 广泛报告、我将寻找一些安排消息的方法。 响应具有很高的背面、希望永远不会。 我只想在一个芯片出现故障时对其进行设置、而这个监听系统可以发送到控制器来复位一些外设。 但在一个新项目中、您的建议可能会超出框架、而我们正在考虑这一点、但我们需要在多个节点之间进行查询/响应通信、因此我认为应该使用其他内容。
    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Djedjica"]我想设置它,就像一个芯片出现故障一样,而这个监听系统可以发送给控制器以重置某些外设。

    这是一种答复/答复不是最好的形式的情况。 这是一种非常适合的方法。

    您真正需要的是一组看门狗信号。 每个板发送一条持续的看门狗消息。 如果不是定期收到该消息、则接收方会知道出现了错误、并可能尝试恢复或关闭消息。 请注意、这还捕获查询响应不会发生的网络故障。

    您可以按类似的格式设置每封邮件

    • 字节0:一个正在进行的计数器。 每次发送消息时更新
    • 字节1:指示电路板状态的状态标志、其中可能包括故障标志或状态信息

    如果接收到的消息的计数在30mS 内没有变化、您可能会每10ms 发送一次这些消息并声明故障。 您的时间会因系统而异。

    [引用 user="Djedjica">但我们需要在多个节点之间进行查询/响应通信,因此我认为应该使用其他通信。 [/报价]

    您不理解。 问题不是查询/响应不能与 CAN 一起使用、而 是不应将查询/响应用于控制协议。 您的故障响应是控制消息的一个示例。 您确实需要对检索故障历史记录或详细信息等项目进行查询/响应、您可以在 CAN 上执行此操作。 只是不要构建查询/响应协议、然后使用它进行常规控制、基本 CAN 协议更适合这种情况。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另外两个"高于/超过"职位-非常值得"类似"-但此类奖励被拒绝-没有正当理由!

    您的书架是否包含(假设)此处许多(包括 Moi)的建议、这些建议进一步详细说明了"主要且目的正确地使用 CAN "? 这两份海报--以及这份(感激/(喜欢)读者--都将受益于"加拿大存在的理由"的进一步详细说明 être。

    再次感谢您分享您的时间和专业知识-请注意、这两个方面(非常)值得赞赏。 (甚至喜欢-很多人会说...)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将把我知道的一两个项目的链接放在一起。 事实是、没有太多。 许多人陷入了假设 ISO 模型是所有用途的唯一(或最佳)模型的陷阱。

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

    正如承诺的那样、书架有几个参考

    首先 、请访问 https://www.kvaser.com/can-protocol-tutorial/ 、了解 CAN 的一般性介绍。

    [引用 user="CAN-protocol-tutorial"]注1:值得注意的是、总线上存在确认位并不意味着任何目标地址都已收到消息。 我们知道的唯一一点是总线上的一个或多个节点已正确接收到它。

    注2:仲裁字段中的标识符尽管具有名称、但不一定标识消息的内容[/引述]


    http://www.kvaser.com/wp-content/uploads/2014/02/ck301p.pdf 这是对特定 CAN HLP (更高级别的协议)的介绍。 不过、值得一读、尤其是当您最熟悉 TCP/IP 等数据网络协议时。 所描述的 HLP 与 TCP/IP 有很大不同、尽管其他 HLP 占主导地位、但值得回顾一下这一个 HLP、它可以真正向您展示控制协议与数据协议有何不同。  关于第12页第2段的特别说明如下

    [引用 user="CAN Kingdom Standard">例如,您将不会发现与 ISO 开放系统互连(OSI)参考模型有任何相似之处。 其主要原因是 OSI 模型不支持实时网络! OSI 七层模型的一个基本概念是,设计人员只需考虑两个级别:工作级别和接口到下面的级别。 但是、在设计实时系统时、您始终需要注意从 一个节点到另一个节点的所有层传输一段信息所需的时间。 CAN 协议已经给出了这种传输方式、这种方式与 OSI 层不符。 可以主要处理较低的 OSI 层、但仲裁方案会产生报文优先级、这属于 应用层(参考文献[3])! OSI 中使用的"客户端/服务器"模型也往往会将思想导向信息流的一个点对点、这与具有广播和多播功能的 CAN 协议的信息导向概念相矛盾。 这些可能性是 CAN 的一大优势、因为它们可以减少系统中所需的通信量。 更多的是、所有节点将与 CAN 协议同时获得相同的信息、而此功能在控制器局域网中非常有用、因为在控制器局域网中、节点必须以同步方式工作。 在 OSI 模型中,您没有发现这方面的任何内容。 因此、它不能为有效利用 CAN 协议或使 CAN 网络易于理解提供任何真正的帮助。 这就是为什么这里不使用 OSI 模型的原因。[/引述]

    请注意、此注释同样适用于其他控制网络、例如 TTP (时间触发协议)、Flexray 和 TT/E (时间触发以太网)

    Kvaser 还发表了许多文章、介绍了各种 HLP 的基础知识以及与实时网络通信相关的其他项目。

    https://www.kvaser.com/about-can/higher-layer-protocols/

    Robert