你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H7体验】+CAN基础及CAN接收电路设计

[复制链接]
305765986@qq.co 发布时间:2022-5-28 08:37
----------------------CAN总线的基本知识----------------------
1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在已经是汽车网络的标准协议。
CAN是串行异步通讯,只有CAN_HIGH和CAN_LOW两条差分信号线,数据通过差分信号的方式进行通讯,其优点就是可以增加信号的抗干扰能力,抑制共模信号的干扰;信号在变成一个个字节的数字信号之前,就是按照这种差分形式的模拟信号来传输的。CAN控制器根据两根线上的电位差来判断总线电平,当CAN_HIGH减去CAN_LOW大于某个阈值的时候,可以把它当做逻辑高,反之,当小于某一个阈值时,就变成逻辑低。总线电平分为显性电平和隐形电平,二者必居其一。发送方通过使总线电平变化,将消息发送给传送方。
CAN协议中关于ISO/OSI基本参照模型中的传输层、数据链路层及物理层,具体定义如下图所示。
                              

( }1 A- B8 y2 ^2 D1 L3 r; {5 I: q
数据链路层分为MAC子层和LLC子层,MAC子层是CAN协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息地帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在CAN控制器的硬件中执行。
      下面介绍CAN通信的基本流程,CAN节点通常分为三个部分:
MCU/CPU;
CAN控制器,
CAN收发器
通常一些单片机内部就集成了相应的CAN控制器外设,比如我们比较常用的单片机—STM32,所以我们常见的结构一般是这样子的。
       所以整体通信的流程是这样的,如下:
        CAN总线上通过差分信号进行数据传输;
        CAN收发器将差分信号转换为TTL电平信号,或者将TTL电平信号转换为差分信号;
        CAN控制器将TTL电平信号接收,并传输给MCU;

, O, A  R8 d4 Q
那么,对于单片机开发者而言,需要关注的就是最终CAN控制器传输给MCU的数据,如何去配置CAN控制器,以及使用CAN控制器进行数据的读取和发送。
那么大家可能会有疑问,节点是否需要设置地址,如果不需要设置地址,又是怎么实现数据传输的呢?CAN总线上的每个节点不需要设置节点的地址,而是通过消息的标识符(Identifier)来区别信息。因为CAN总线的消息是广播的(就是大家都可以收到消息),比如总线上有节点A,节点B,节点C,那么节点A发消息,节点B和节点C都会收到消息;节点B 和 节点C 会根据消息中的标识符,以及B和C中的消息过滤规则进行比较,如果不满足规则,就不接受这条信息。
这里需要注意的是:
发送消息的时候,总线必须处于空闲状态;
标识符越小,则消息获取总线的优先级越高;

7 u( I' V9 @3 K8 n" o
在这里我们已经了解如何寻址,下面就看一下消息帧了。
                              
- ^* {' R' F- X* C
CAN控制器进行数据的读取和发送是通过以下5中类型的消息帧进行的,分别是数据帧、遥控帧、错误帧、过载帧、帧间隔。另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11位的标识符(Identifier:以下称ID),扩展格式有29个位的ID。各种帧的用途如下表所示。
数据帧的应用最为广泛,下面介绍一下数据帧的结构。
数据帧由7个段构成。数据帧的构成如下图所示
                              
(1)     帧起始
表示数据帧开始的段。1个位的显性位
(2)     仲裁段
表示该帧优先级的段。
标准格式和扩展格式在此的构成有所不同。
(3)     控制段
表示数据的字节数及保留位的段
控制段由6个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。
(4)     数据段
数据的内容,可发送0~8个字节的数据。从MSB(最高位)开始输出。
(5)     CRC段
检查帧的传输错误的段。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)构成。
(6)     ACK段
表示确认正常接收的段。由ACK槽(ACK Slot)和ACK界定符2个位构成。
(7)     帧结束
表示数据帧结束的段。由7个位的隐形位构成
----------------------CAN总线的硬件连接----------------------
STM32H7A3集成了标准的CAN总线控制器,对应的端口为PD0、DPD1
此外,还需要设计CAN总线收发器,才可以进行CAN总线通信。使用的是SN65HVD230DR芯片,原理图和3D模型如下所示。
                              
从机使用的STM32F103C8T6,用TJA1050芯片作为CAN总线收发器,能够将CAN控制器上的数据转换到CANH、CANL
上述两个CAN接收器电路,都设计了终端电阻,它能够起到稳定总线的作用。
. s0 `4 h* ^7 Y, V6 m1 ]' H$ s/ Q" v
收藏 评论0 发布时间:2022-5-28 08:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版