总线通信基本原理

来自:网名就不换
3年前
已收藏
收藏
阅读数
96
回复数
0

(1)模拟信号与数字信号。 在前面的学习中我们已经知道了水温传感器是通过电压信号的变化来模拟温度的变化,这种传感器输出的信号称为模拟信号。模拟信号就是利用频率/占空比/电压等来模拟物理量的一个变化。 那么什么是数字信号呢?前面的学习中我们讲过把高电平理解为数字1,低电平理解为数字0,以1ms时间内的一个电平为有效值,这样,一个高、低电平的变化就可以得出一组数字编码,把这个数字编码称为二进制数。利用这种数字编码来传递的信号就是数字信号了。 如图16-1所示,红色波形代表一个数字信号,如果以ms为单位,那么就可以得出一个编码0110 1000 1101 1001。


如果以0.5ms为单位去看,则编码为0011 1100 1100 0000 1111 0011 1100 0011。 不难发现,时间单位越小,那么得出的数字编码就会越多,能传递的信息也就越多,也就是我们所说的网速越快。 (2)通信协议与通信方式。 首先大家要清楚一件事,就是通信一定是两个模块或者多个模块之间的事情。如果你看到一个开关具备通信能力,那么这个开关已经不是普通的开关了,它里面已经是模块结构了。如果想使两个模块之间传递信息,就要先制定一些规则。那么,制定什么样的规矩呢? 第一,两个模块之间要传递哪些信息?例如,温度、转速、压力等。 第二,每一种信息如何编码?例如,水温32℃时编码为0011,这是两个模块之间预先约定好的。 第三,到底多长时间识别一个数字?例如0.1ms识别一个数字,那么发送信息的模块要遵循这个规则,按0.1ms时间间隔发送数字,这样第二个模块才能正确识别出来。 第四,每一个模块在发送信息时自己叫什么名字?这就类似于发送信息的模块是写信者,接收信息的模块是收信者,它们在信息交换时,都有自己的名字,这就是我们所说的网络ID。 第五,几个模块都要发信息,到底谁先发?几个模块同时发消息到底谁先发,这个在开始时就约定好了等级,大家根据自己的等级发送信息,好比每一个模块发送信息时都会先自我介绍一下(ID),如果遇到另外一个ID等级比自己高的要发送信息,那么等级低的就自动退出。 前面我们讨论这么多,实际上就是我们常说的通信协议。当然,协议的内容肯定不止这些,这里只是简单地让大家知道协议是什么。这些协议规定好后,当然要给它们命名了,这就出现了我们常见的CAN总线、VAN总线、LIN总线等。
那么规定好了协议后,数据该怎么传递呢?有两种方式可以把数据传递过去,一种是并行数据通信,另一种是串行数据通信。所有的数据都是8位8位地进行传递的。 图16-2所示为并行数据通信。A模块需要把00101100传递到B模块去,那么可以在它们之间连接8条数据线,每条数据线传递一个数字,这样可以快速地传递一个8位数据。这种通信方式的优点是通信速度快,缺点是需要的数据线太多。所以这种通信方式现在基本不用了,仅在硬件内部使用,如电脑的CPU与内存之间,这就是我们常说的8位、16位、32位、64位、128位。
图16-3所示为串行数据通信,在两个模块之间连接一条数据线,数字排好队,逐个传递过去。这种通信方式是目前数据通信中应用最广泛的,不仅汽车的各种总线使用串行通信方式,我们熟悉的USB接口也使用串行通信方式。
有人可能会问,按你这么说,串行数据通信一根线就够了啊,那为什么汽车的CAN总线还用两根线呢?这是因为通信速度太快了,用两根线来相互验证,防止数据丢失。

上一篇下一篇
参与回答(0条评论)
用户头像
上传
用户头像
{{item.nickname}}{{item.pubtime}}回复
回复图片
用户头像
上传
用户头像
{{item1.nickname}}回复 {{item1.othername}} {{item1.pubtime}} 回复
回复图片
用户头像
上传
查看全部回复{{item.replylist_count}}条 查看全部
收起回复 收起全部
{{isLoadList==1?'加载中...':(isLoadList==2&&(list.length <=3||(list.length>3&&!is_hidden))?'没有更多内容了':'查看更多回答')}}
返回顶部

返回顶部