历史上的今天
今天是:2025年04月25日(星期五)
2019年04月25日 | CAN基础—电平、逻辑、报文是怎么来的
2019-04-25 来源:EEWORLD
CAN总线通讯是我们每天都会使用的工业通讯总线,工程师更多的是关注报文是否能够正常接收,解析结果是否正确。却忽略了CAN总线的报文是怎么产生以及收发的,所以遇到通讯异常的问题时就会无从下手。那么这篇文章将会带您快速了解报文的传输原理。
一、 节点通讯的原理


图1 CAN节点示意图
如图1所示是一个CAN节点的示意图,整体包括了CAN收发器、CAN控制器和MCU。我们以节点发送报文为例,当我们使用上位机软件发送一段报文时,报文会通过MCU发送给CAN控制器。CAN控制器将这段报文解析成逻辑信号后,再发送给CAN收发器。CAN收发器根据CAN-bus标准将接收到的逻辑信号转换成电信号,再通过CAN_H和CAN_L两根总线将电信号传到总线上的其他节点上。
简单说就是MCU将报文发送给控制器,控制器将报文转换成符合规范的CAN报文后,通过CAN收发器以电信号的形式在总线上进行传输。
二、 电平是如何转换成逻辑?

图2 CAN-bus信号电平
如图2所示,CAN总线使用的是双线差分信号,所以分为CAN_H和CAN_L两根总线,根据两根总线之间电压的差值大小来判断其显隐性。而线缆上传输的电平信号只有两种可能,分别为显性电平和隐性电平,其中显性电平代表逻辑 0,隐性电平代表逻辑 1。
当接受到报文时,首先就要通过CAN收发器将电信号转换成逻辑信号。根据图3所示的ISO11898高速CAN电平标准进行判断,但是线路上经常会受到各种干扰,为了保证传输的稳定性。所以差分电平小于0.5V就是隐性电平代表逻辑1,差分电平大于0.9V就是显性电平代表逻辑0。
![说明: C:UsersAdministratorAppDataRoamingTencentUsers317308997TIMWinTempRichOleTM]KMNO@B~]NNZ7U@{CYE)B.png?imageView2/2/w/550](https://8.eewimg.cn/news/uploadfile/2019/0425/20190425112804146.png?imageView2/2/w/550)
图3 ISO11898高速CAN电平
三、 逻辑信号如何转换成报文?
CAN控制器是CAN-bus设备的核心元件,集成了CAN规范中数据链路层的全部功能,能够自动完成CAN-bus协议的解析。
当CAN收发器将逻辑信号传送给CAN控制器后,CAN控制器会将逻辑信号转换成符合CAN规范的CAN帧。而CAN帧的类型包括了数据帧、远程帧、帧间空间、错误帧和超载帧。

图 4 标准帧格式
以最常见的数据帧为例,图4就是标准帧的格式,包括了帧起始、仲裁场、控制场、数据场等。

图5 报文解析实例
图5就是报文解析的实例,当接受到对应的逻辑信号后,CAN控制器就会根据规定的CAN帧格式进行解析,并将报文发给MCU。
四、 上位机报文显示
![说明: C:UsersAdministratorAppDataRoamingTencentUsers317308997TIMWinTempRichOle496F]32H[V)_9`$KEHWG%LJ.png?imageView2/2/w/550](https://8.eewimg.cn/news/uploadfile/2019/0425/20190425112809740.png?imageView2/2/w/550)
图 6 上位机报文显示
如图6所示,当CAN控制器完成了CAN-bus协议的解析后,就会将报文传输到MCU中在上位机软件中进行显示。像帧起始、CRC场、ACK场这样的数据不读取,所以我们上位机软件只显示数据帧类型、帧ID和帧数据等信息。
总结:
对于CAN总线报文错误来说,百分之九十的错误都来自于物理层,而CANScope总线分析仪可以对CAN 波形与报文同步发送和接收,快速对CAN总线进行各项测试,帮助工程师们快速完成故障定位和问题排查。
史海拾趣
|
这两个都是DSP/BIOS中的,先大概介绍一下 tsk: task,任务.在Scheduling中,其优先级高于IDL(背景程序),低于SWI(软中断)和HWI(硬中断).可以被软硬中断打断,也可以被其它事件阻塞(blocked),顺便说一下,SWI和HWI是不能阻塞的.(阻塞和中 ...… 查看全部问答> |
|
要设计一个频率计,其他的部分都差不多搞定了,可是频率控制这块总弄不懂。要求:可测量0——999999的频率,闸门电路时钟信号为 2HZ ,产生计数周期1s,清零周期 0.5s,4s为一个周期测量一次信号。。。。 帮帮忙了,急需。… 查看全部问答> |
|
为什么在超级终端内无法输入AT指令啊? 敲入AT一点反应都没有?根本无法输入字母阿?? 我用的是西门子 GPRS 模块(MC35i) 急求!!!!希望指导一下啊!!!!!… 查看全部问答> |
|
module crc16(EN,crc_in,data_in,crc_out,valid);input[15:0] crc_in;input[7:0] data_in;input EN;output[15:0] crc_out;output valid;reg[15:0] crc_out;reg valid;always@(crc_in or data_in or EN)beginif(EN==1)beginvalid=1\\\'b0;crc_out[0] ...… 查看全部问答> |
|
仿真错误提醒如下: # ** Error: (vsim-SDF-3894) floating_led_v_fast.sdo: Compiled SDF file was not found.# Loading work.CYCLONEII_PRIM_DFFE# ** Fatal: SDF files require Altera primitive library# Time: 0 ps ...… 查看全部问答> |
|
lm3s811配合ch451控制数码管的显示示例,昨天刚调出来的 // 定义全局的系统时钟变量unsigned long TheSysClock = 12000000UL;// 定义引脚#define CH451_PERIPH SYSCTL_PERIPH_GPIOD#define CH451_PORT GPIO ...… 查看全部问答> |
|
本帖最后由 damiaa 于 2014-10-19 17:22 编辑 R7F0C802X 程序试用和心得先把上篇文章的例子重上一次: 程序主要是由几部分构成,可以参照上篇文章里的r01uh0400cj0200_r7f0c801_5.pdf硬件手册对照看: Startup.s 启动文件(C编程一般都要) ...… 查看全部问答> |
|
楼主刚刚要开始学习DSP,之前完全没有接触过这方面的内容。求各路大神指点一下。 1.有哪些DSP的书籍比较容易上手学习,求推荐。 2.具体一点的问题是,把用C语言写的程序移植到DSP中是怎么样的过程,一般都是用CCS编译器嘛?具体的操作过程是怎么 ...… 查看全部问答> |




