自学单片机第十四篇话外:总线的作用
细细数来,我们已经学习了十四篇了,从如何打开软件,到如今的总线输出,可以说在不断地向复杂的控制迈进,当然对于急于求成的同学来说,讲得多少有些细了,但技术就是这样,走的越快,反而学得越皮毛,即便你明白了更高深的一些技巧,可是基础总要打牢的,总之,慢慢来。我们又没有期中或者期末考试,也没有老师去逼着进行毕业设计,我们就是为了兴趣,自己学自己用,所以毋须太过急躁。当然,也不要把激情消耗得太厉害,还是要保持对单片机的热情的。不然,很难坚持下去。如今我们才仅仅是在单片机的路上,走了一俩个台阶,还有很长的路要走呢。
言归正转,我们一直在学总线,总线都可以来开什么,为什么要用总线的方法来控制。前边学了单点的操作,多点的操作,总线的操作,为什么说总线的操作就比较重要?
这要从单片机的控制上来说了,并不说总线控制或者总线方法就是比较重要的,只是说,我们应该熟练使用总线的方法进行操作,因为,接下来的很多功能都会用到总线,我们在操作时,会不断地去更改某一个端口的数据,或者对数据进行变换,如果每个端口都去重新定义一遍,不仅复杂,而且编程中还要不断地去查找自己对该端口的定义名称,写错后也十分难以查找错误。
而通过总线方法的调用或转换,就没有这个顾虑了,最多就是在注释中详细说明本步骤操作的原因和对象就好。我们在上一篇也介绍了很多的运算方法,这些方法,更加使得数据的变化方便快捷。
在以后我们涉及扩展芯片或功能时,总线就会成为数据传输的重中之重,尽管我们也会采用两线的串口,但是扩展芯片的数据更多还是用并口传输的。读取数据后需要进行相应的提取数据,这些操作,都需要有一定的基础。
当然,说了这么多,并不是说总线方式就是好的,不用它就不行,我们只是说它的用途很广,但是在某些场合,总线方式反而很累赘,这就要求我们依据需求来进行选择输出操作方法。比如我们就需要一个端口的改变,那么用定义端口的方法,就可以了,这样改变和操作就简单明了,或者后边讲到的,对多个不同区域的端口单独操作,使用定义的方法会比总线更加方便。当然这也是需要看操作的目的和方法的。
总之就是说,我们要熟练掌握总线的操作方法,对总线的认识要更加深刻,不能给你一个数据0x78,自己半天也写不出端口的状态,或者还不知道十六进制的计算方法,那就有些不好了,还是要慢慢提高的,如果自己对这些不熟悉,可以回去看看前面的文章,再自己写一写,给自己找些例子,练习一下,通过仿真,对自己的练习进行检验。注意实践才是正道。
你会还是不会,靠的是实践来说明的。不要以为单片机编程就是纸上谈兵,如果没有扎实的实践,一切就是无根之萍,总要飘走的。我这两篇没有进行演示和仿真,是因为前期需要准备的内容还是比较多的,就这还没有把单片机的基本知识搬出来细说呢。我们通过学习一点点的了解吧。
总之,多练。尤其是下载到硬件,这才是单片机学习的正确方式,仿真只是学习的手段,下载到硬件中才是真正的目的。仿真无法实现现实中的一些状况,例如接触不良,线束接错,电压不够,设备故障等等。只有通过现实的检查排除故障,才会真正地学会单片机。到后期会尽量多发关于硬件的测试。由于家里添了一个宝宝,所以时间就要交给她了。写的会比较不稳定。见谅了。
有什么问题或建议可以私信或留言,我会第一时间回复的。
更多多内容,欢迎关注百家号:小亮谈电气。微信公众号:电气学苑。
单片机外围模块漫谈之三,CAN总线
1980年,Bosch的工程师开始研究汽车上高速串行通信的问题,并在1986年发布了CAN(Controller Area Network)总线。CAN以其多主,高速(最高1Mbps),抗干扰的特性被广泛应用汽车及各种工业环境。在此我们主要介绍一下CAN总线的特点,帧类型,以及应用中的注意事项。
1. CAN总线特点
1.1 多主控制
跟我们常用的RS485只有一个主机,从机只能等待主机的轮询不同,在CAN总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这马上会引起我们的担心。如同一个家庭每个人都当家做主,那还不乱了套吗?不急,我们来看一下。这个问题是如何被巧妙地解决的。
物理层 ,CAN采用差分总线。单片机引脚的逻辑电平0,被CAN收发器(PHY)转换为显性电平(Dominant),逻辑电平1被转换为隐性电平(Reccesive)。总线上执行的是"线与"逻辑,只要有一个节点输出显性电平,那么总线上就是显性电平。
仲裁(Arbitration) ,CAN的发送总是以SOF(Start Of Frame)起始,紧跟器后是ID。在发送ID的同时,节点监听总线上的显隐状态,当监听到的状态与自己发送的不一致时,此节点将停止发送,进入只收模式。如下图所示,每一帧消息所具有的ID决定了此消息的优先级,发送最高优先级消息的节点获得总线最后的控制权,得以最终完整的发送自己的消息。
接收滤波(Filter) 。一个挂在总线上的节点可以监听到所有的消息(Message),但通常我们只对其中某些消息感兴趣,这时怎么办呢?CAN模块一般会提供接收滤波功能(Filter)。通过设置滤波寄存器,我们可以达到接收消息时,比对ID所有位,也可以只比对ID某些位,从而达到只接收ID与自己完全相同的消息,或接收ID与自己部分相同的消息的目的。利用这种机制可以给节点编组,给组成员群发消息。
1.2 速度快,距离远
CAN总线可以达到1Mbps的速率。总线速度随着传输距离增加而下降,下面是一些典型速率。在一个数据帧内可以传送8个字节的数据。
1000kbps 40m
500kbps 130m
100kbps 620m
50kbps 1300m
5kbps 10000m
2012年,Bosch又发布了CANFD(CAN with Flexible Data-rate),最高速率可以达到10Mbps,在一个数据帧内可以传送64字节的数据。2015 年 ,国际标准化组织(ISO)正式发布支持CAN FD的11898-1协议。
2. 帧类型
CAN协议很简洁,只包含4种帧类型。
数据帧(Data Frame) ,用来把数据从发送节点传送至接收节点。
远程帧(Remote Frame) ,一个节点用来请求其它节点发送数据。一个节点发送远程帧时会把Arbitration Filed最后一位RTR(置1),具有相同ID的节点会把数据发送到总线上。
错误帧(Error Frame) ,当一个节点检测到错误时会向总线发出错误帧,以通知其它节点。
过载帧(Overload Frame) ,用来在数据帧或远程帧之间插入延时。
帧间隔(Interframe Space), 不是一种帧类型。它是帧之间的间隙,由多个连续的隐性电平构成。
在编程时我们直接用到的就是数据帧和远程帧。软件编程比较简单,需要注意的是一般需要设置寄存器中的初始化请求位(Initialization request),使模块进入初始化状态,才能开始进行CAN模块的各种配置,初始化完成后退出初始化状态,进入运行状态。
3. CAN总线应用注意事项
3.1 终端匹配电阻
在CAN总线的两端要用120欧的电阻端接进行阻抗匹配,因为CAN总线长度一般会比较长,传输的信号速度快,特别是信号的边沿跳变部分频率很高。
传输线效应 平常我们总是认为电信号从一个引脚发出,通过导线,瞬间就会到达接收引脚,导线上的电压处处是相等的。但是当信号的频率很高,或者导线特别长,总之导线的长度接近传导信号波长的1/10后,我们就需要转变一下我们的观念,此时信号的传输主要受电缆特性阻抗的影响。
电缆特性阻抗 = 信号电场强度(伏特/米) / 磁场强度(安培/米)
电缆的特性阻抗与电缆的材质,粗细,线缆之间的距离有关,而与电缆的长度无关。电缆的特性阻抗还和信号的频率有关,但是当频率增加到一定数值时,特性阻抗不再变化。常用的带屏蔽双绞线的特性阻抗是120欧。
信号在阻抗不连续处会产生反射,所以要保持电缆阻抗的连续性,而且线缆终点需要用等于电缆特性阻抗的电阻进行端接,以消耗掉传输至端点的信号,否则信号会反射回去和后续发出的信号产生叠加,引起错误。
频率与波长对应关系
150K 2000m
500K 600m
1M 300m
10M 30m
端接电阻的另一个作用是可以使CAN总线从显性状态快速回到隐性状态。因为在显性状态下,两条线缆CAN_H, CAN_L之间的寄生电容会被充电,如果没有一个放电回路,总线不能快速回到隐性状态。
3.2 EMC防护
CAN常常工作在强干扰的工业环境中,采用屏蔽双绞线会极大的提升EMC防护性能。同时如果数字电路部分和CAN收发器之间用高速光耦隔离开,并且对两部分采用完全隔离的电源供电,那么可以把总线上的干扰最大限度地隔离在外部。
需要注意的是屏蔽层只能在一点接入大地。如果在多个点接地,那么通过大地会形成电流环路,反而会引入噪声。
3.3 时钟容差( Oscillator Tolerance)
总线的速度越高,需要的时钟精度越高。一般在低于125kpbs时可以用低成本的陶瓷震荡器(ceramic resonators),更高的速度下建议使用晶体振荡器(Quartz,or Crystal Oscilators)。
3.4 CAN模块死机现象
CAN模块内部有监控电路,总线上的异常,如短路等,会引起错误计数器增长。TEC(Transmit Error Counter), REC(Receive Error Counter)。当发送错误TEC计数超过255后,CAN模块进入BUS-OFF模式,此节点不能发送也不能接收。这样做的好处是可以避免由个别模块的问题引起整个总线不能工作。
芯片一般会提供两种恢复机制:自动和手动模式。比如在STM32单片机中,如果ABOM位设置为1,CAN模块将不断尝试自动恢复。如果ABOM=0,则需要程序进入CAN初始化模式,重新配置后,再退出初始化进入正常工作模式。
由于CAN总线非常可靠,不易出错,所以在测试阶段建议人为制造一些总线错误,比如短路,断路,强干扰之类,看程序是否能从异常状态下恢复。
相关问答
单片机 外部扩展RAM和ROM时,po口和p2口各起什么 作用 - 懂得单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、...
什么是 单片机 的扩展 总线 ?总线就是通常所说的地址总线,数据总线,控制总线。在51单片机中,为了与并行接口的外设及扩展存储器传输数据就需要扩展总线总线就是通常所说的地址总线,数据...
什么是8051 单片机 的三 总线 结构?单片机控制系统的三总线是指数据总线、地址总线、控制总线。1、数据总线51单片机的数据总线为P0口,CPU从P0口送出和读回数据。2、地址总线51系列单片...
【51 单片机 的主要 作用 是什么?】作业帮[最佳回答]51单片机的作用很多很大,可以说上至航天飞机,下至家用电器都有51单片机的身影.在8位机这个价廉物美的单片机家族中,只有51单片机是有数据总线和地址...
pic18 单片机 的 总线 结构?1,与PIC16相比,PIC18晶振频率更高,换句话说是速度更快,外设资源也更丰富了,基本架构是一样的。2,与51系列相比,pic单片机综合性能优于51单片机。具体优...具...
51 单片机 地址 总线 是单向的吗?51单片机16位地址总线中的高8位是单向的,由单片机P2口输出给外部的数据存储器,而低8位的P0口是地址和数据复用总线,所以当P0口输出地址时是单向的,地址被ale...
51 单片机 有多少根I/O线?他们和 单片机 外部 总线 有什么关系?共4*8=32条IOP0,P1,P2,P3。P0作为外部地址线|数据线(在PSEN的控制线分时复用),P2作为高位地址线,P1,P3与外部总线无关,只作为标准IO和复用功能使用,...共4*.....
IO线和 单片机 外部 总线 有什么关系?共4*8=32条IOP0,P1,P2,P3。P0作为外部地址线|数据线(在PSEN的控制线分时复用),P2作为高位地址线,P1,P3与外部总线无关,只作为标准IO和复用功能使用,...共4*.....
单片机 的ALE引脚在系统扩展是起什么 作用 ?楼上的根本是个初学者,对51单片机还不了解ale是用于总线外扩存储器、片外外设、arm、等芯片用的时钟脚,它与rd和wr和p0、p2口配合可以扩展65535个外部地址空...
at89s51 总线 结构哪三种?AT89S51单片机的总线结构主要包括三种类型,它们分别是地址总线、数据总线和控制总线。地址总线负责传送单片机发出的地址信号,用于选择存储单元和接口芯片中...