最后更新:2022-07-18 02:05:49 手机定位技术交流文章
CAN指的是控制器局域网网络(Controller Area Network),由德国博世汽车电子厂商开发出来。
CAN采用差动信号,具有很强的抗干扰能力和传输稳定性
CAN属于多域通信,网络中的所有节点都可以作为主设备进行通信
CAN网络扩充非常方便,在CAN网络中扩充新的通信单元、旧单元和硬件,无需改变。
CAN有很强的错误纠正能力,它可以检测传输中的错误,并分离错误节点;所有单元可以检测错误;检测错误的单元将立即通知其他单元同时;一旦错误被检测,发送消息的单元,迫使当前发送结束。被迫终止的单元会再次发送消息,直到它被成功发送为止。
调制信号使用电平面的绝对值来表示逻辑上的差异。
差分信号使用两个电平的差值来表示逻辑值。CAN传输使用两根数据线 ------------- CANH和CANL
CAN巴士高速ISO11898标准:
如果CANH(3.5V)和CANL(1.5V = 2V的电压差,此时代表逻辑0,称为可视电场;
如果CANH(2.5V)和CANL(2.5V)的电压差=0V,此时代表逻辑1,称为隐电解
//如果多个节点同时控制总线电压,总线仲裁的最终显示是可视电压(0)
CAN使用了五个通信帧,下面以数据帧为例

数据帧的分析:
数据帧分为两个格式:标准数据帧和扩展数据帧。
D --表示明显的电解体水平
R --代表无形电平面

数据框架由七部分组成:

数据框架的七部分的实施
在标准格式中,标识符(ID)为11位,由ID28发送到ID18以顺序的方式,并且禁止隐藏7位(禁止设置:ID = 11 11X XX);
扩展格式ID为29位元,基本ID由ID28到ID18,扩展ID由ID17到ID0表示,高7位元被禁止隐藏(禁止设置:ID = 11 11X XX)。
RTR bit用于识别是否是一个远程帧(0:数据帧;1:远程帧);
識別子選擇IDE bit (0:使用標準識別子; 1:使用擴展識別子);
SRR位元替换了远程帧请求位元,而隐式位元替换了标准帧中的RTR位元。
(1)帧起始
显示1位显性电平
(2)仲裁段
实现帧优先级和帧过滤

1.标准帧
标准数据帧的仲裁部分由11位ID和1位RTR位组成,用于区分数据帧(例如光栅)和远程帧
2.扩展帧
扩展数据框架包括29位ID、1位RTR、1位SRR和1位IDE;
RTR用于区分数据帧(例如光栅)和远程控制帧
由于SRR是一个隐形电子平面,而同一ID的标准帧优先级高于扩展帧,所以SRR被用来代替标准帧的RTR位置
IDE用于区分标准帧(例如,清晰跨度)和扩展帧;清晰跨度代表标准帧;隐含跨度代表扩展帧
消息的优先次序由总线通过ID仲裁确定。当总线同时显示光学信号时,静态信号被显示为光学信号。当多个节点同时争夺总线的功率时,第一个显示光学信号的总线将失去总线的功率并成为接收器
(3)控制段

数据节的表数据框架中的字节数,r0,r1是保留的,默认是可见的电平面;
4位DLC显示数据段的长度(0~8)
(4)数据段

用户需要发送的数据内容,可一次性发送0–8个字节的数据(每个数据占用一个字节)
长度0~8字节,高级输出
(5)CRC段

CRC错误校验,由15位CRC校验码和1位CRC界定符组成, 校验出了错误信息,可利用错误帧请求重发,重发次数可设定;用于检查帧传输错误(检查范围:起始端,仲裁段,控制段,数据段)。
(6)ACK段

它由单个ACK槽和单个ACK标识符组成。发送者的ACK槽是一个隐式电板。接收者承认正确的数据,并以明确的电板响应。
(7)帧结束

7位隐形电平,由7个隐形位(逻辑1)组成,因此ID仲裁断禁止出现1111111****形式的格式

CAN传输1位由4个阶段组成:同步阶段、传输阶段、相缓冲阶段1、相缓冲阶段2;
在1位元后,补偿采用重新同步补偿宽度(SJW)进行,设计的目的是为了保持发送者和接收者的时间序列一致(排除错误)
(1)同步阶段(SS)
同步阶段用于实现实时训练的调整和完成可视/不可视继电器的转换,即在该点准备传输的继电器
(二)传输期(PTS)
为了吸收网络上的物理延迟,物理延迟包括发送、接收和传输信号的延迟。
(3)相缓冲器(PBS)
电镀转换的未包含部分的补偿,并同时对单位的时钟误差的SJW补偿,电镀的读取在本节中完成。
(4)重同步补偿宽度(SJW)
补偿前面同步的误差
接收器的采样必须在PBS1和PBS2之间,由于SS和PTS错误的变化,PBS补偿也会随着错误的变化而改变,达到固定传输时间,而SJW则为PBS补偿进行二次补偿。

1位时间 = 8 ~ 25Tq, SS = 1Tq ,PTS = 1 ~ 8Tq ,PBS = 2 ~ 8Tq ,SKW = 1 ~ 4Tq
stm32芯片与bxCAN控制器,支持CAN协议2.0A和2.0B,最高速1Mbps,可以自动发送CAN消息,支持标准和扩展数据框架,控制器装有三个邮箱存储发送消息,还有两个FIFO,支持ID过滤,可以配置自动重复等。
(1)工作模式
初始化模式:初始化CAN控制器
正常模式:正常接收和发送数据
睡眠模式:低功耗
(2)测试模式
沉默模式:停止发送外部消息
循环返回模式:消息不发送到主行,而是直接发送到你自己
环回和静默组合模式
测试模式
(3)传输速率
端口速率=42MHz/频率系数/(tbs1+tbs2+sjw)
(4)接收中断
FMPx表示收到消息
6.原理图

查看原理图可知
CAN的简要接口最终连接到CPU的PD0和PD1,并具有CAN的可重用功能。
7.CAN总线通信的图书馆功能实现
增加CAN通信到库函数源

(1)开启时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
(二)配置GPIO为CAN撤销函数
GPIO_Init(...); GPIO_PinAFConfig(...);
(3)初始化CAN
(4)初始化过滤器
(5)配置发送/接收结构
(六)CAN启动接收中断
NVIC_Init(...); CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
(7)发送和接收数据
接收:空缺CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);
发送:
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage); uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);
8.上位机的使用
打开软件

(1)串口设置

当前模块的配置将在打开后被读取

(二)将CAN模块设置为500Kbps回拨模式

(四)发送和接收测试模块

9.连接模块和开发板

下一个步骤是编写一个实现CAN总线通信的程序,如果罐头模块没有测试,您可以在启动罐头时将模式设置为循环返回模式,并发送数据给自己进行数据接收测试。
本文由 在线网速测试 整理编辑,转载请注明出处。