一种uart多主实时通信系统的制作方法
【专利摘要】本实用新型公开了一种UART多主实时通信系统,包括单片机U1,CAN收发器U2,总线仲裁单元,发送控制单元。本实用新型的UART多主实时通信系统通过利用单片机的异步串行通信口UART驱动CAN收发器来实现多主实时通信,解决了现有的单片机通过扩展外挂CAN控制器的方式或者通过采取模拟I2C通信程序,增设握手信号的方式来实现多主实时通信,其硬件电路的成本高,软件设计的实时性差的问题,本实用新型不仅节省了电路的生产成本,同时,由于还具有不限定小数据包、可插入紧急报警的特点,所以其实时性比CAN协议的实时通信系统更优越。
【专利说明】—种UART多主实时通信系统
【技术领域】
[0001]本实用新型涉及通信【技术领域】,特别涉及一种UART多主实时通信系统。
【背景技术】
[0002]I2C接口与CAN接口都具有多主仲裁功能,通过I2C总线或CAN总线可以实现多主实时通信。然而现有的单片机,许多都不具备I2C接口与CAN接口,如果要实现多主实时通信,要么选择通过扩展外挂一个CAN控制器的方式,要么选择采取模拟I2C通信程序,通过增设握手信号的方式来完成,但是这两种实现方式,其硬件电路的成本都较高,软件设计的实时性也较差,而且,CAN接口为了保证通信系统的实时性,它限定一帧有效数据包为O到8个字节,这在许多实际通信系统中带来不便。
实用新型内容
[0003]本实用新型的目的在于提供一种UART多主实时通信系统,旨在解决针对现有的单片机通过扩展外挂CAN控制器的方式或者通过采取模拟I2C通信程序,增设握手信号的方式来实现多主实时通信,其硬件电路的成本高,软件设计的实时性差的问题。
[0004]本实用新型是这样实现的,一种UART多主实时通信系统,包括单片机Ul,CAN收发器U2,总线仲裁单元,发送控制单元,所述单片机Ul的INT中断输入端连接所述总线仲裁单元,数据发送输出端TXD连接所述发送控制单元,P2.0输出端连接所述发送控制单元和所述CAN收发器U2的STB唤醒端,数据接收输入端RXD连接所述总线仲裁单元和所述CAN收发器U2的数据接收输出端RXD,所述CAN收发器U2的数据发送输入端TXD连接所述总线仲裁单元和所述发送控制单元,所述单片机Ul和CAN收发器U2的电源正端VCC分别连接电源端,负端GND分别接地。
[0005]进一步地,所述UART多主实时通信系统还包括去耦电容Cl、C2和电阻R6、R7,所述去耦电容Cl,C2分别连接在电源端和地之间,所述电阻R6连接在所述CAN收发器U2的CANH端和SPLIT端之间,所述电阻R7连接在所述CAN收发器U2的CANL端和SPLIT端之间。
[0006]进一步地,所述总线仲裁单元包括三极管Q1,电阻R4和Rl,所述发送控制单元包括三极管Q2、Q3,电阻R2、R3和R5,所述单片机Ul的数据接收输入端RXD连接所述电阻R4的一端和所述CAN收发器U2的数据接收输出端RXD,所述电阻R4的另一端连接所述三极管Ql的集电极和所述单片机Ul的INT端,所述三极管Ql的发射极连接电源端,所述三极管Ql的基极连接电阻Rl的一端,电阻Rl的另一端连接所述CAN收发器U2的数据发送输入端TXD,所述单片机Ul的数据发送输出端TXD连接所述三极管Q2的发射极,所述三极管Q2的集电极连接所述CAN收发器U2的数据发送输入端TXD和所述电阻R3的一端,所述电阻R3的另一端连接电源端,所述三极管Q2的基极连接所述电阻R2的一端和所述三极管Q3的集电极,所述电阻R2的另一端连接电源端,所述三极管Q3的发射极接地,所述三极管Q3的基极连接所述电阻R5的一端,所述电阻R5的另一端连接所述单片机Ul的P2.0端和所述CAN收发器U2的STB端。
[0007]本实用新型的有益效果是:与现有技术相比,本实用新型的UART多主实时通信系统通过利用单片机的异步串行通信口 UART驱动CAN收发器来实现多主实时通信,解决了现有的单片机通过扩展外挂CAN控制器的方式或者通过采取模拟I2C通信程序,增设握手信号的方式来实现多主实时通信,其硬件电路的成本高,软件设计的实时性差的问题,本实用新型不仅节省了电路的生产成本,同时,由于还具有不限定小数据包、可插入紧急报警的特点,所以其实时性比CAN协议的实时通信系统更优越。
【专利附图】
【附图说明】
[0008]图1为本实用新型提供的一种UART多主实时通信系统的模块框图;
[0009]图2为本实用新型提供的UART多主实时通信系统的一实施例的电路原理图;
[0010]图3为字节收发位的示意图;
[0011]图4为帧首字节位的示意图;
[0012]图5为轮巡式通行信息帧协议格式示意图;
[0013]图6为事件触发警报信息帧协议格式示意图;
[0014]图7为通信信道的仲裁与控制逻辑时序图;
[0015]图8为UART初始化程序的流程图;
[0016]图9为主程序启动UART发送函数的流程图;
[0017]图10为主程序处理UART接收解析函数的流程图;
[0018]图11为仲裁外部中断的中断服务程序的流程图;
[0019]图12为UART 口发送中断的中断服务程序的流程图;
[0020]图13为UART 口接收中断的中断服务程序的流程图。
【具体实施方式】
[0021]为了使本实用新型的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本实用新型进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本实用新型,并不用于限定本实用新型。
[0022]如图1所示为本实用新型提供的一种UART多主实时通信系统的模块框图,本实用新型提供的UART多主实时通信系统包括单片机U1,CAN收发器U2,总线仲裁单元,发送控制单元,单片机Ul的INT中断输入端连接总线仲裁单元,数据发送输出端TXD连接发送控制单元,P2.0输出端连接发送控制单元和CAN收发器U2的STB唤醒端,数据接收输入端RXD连接总线仲裁单元和CAN收发器U2的数据接收输出端RXD,CAN收发器U2的数据发送输入端TXD连接总线仲裁单元和发送控制单元,单片机Ul和CAN收发器U2的电源正端VCC分别连接电源端,负端GND分别接地。
[0023]UART多主实时通信系统还包括去耦电容C1、C2和电阻R6、R7,去耦电容Cl,C2分别连接在电源端和地之间,电阻R6连接在CAN收发器U2的CANH端和SPLIT端之间,电阻R7连接在CAN收发器U2的CANL端和SPLIT端之间。
[0024]如图2所示为本实用新型提供的一种UART多主实时通信系统的一实施例的电路原理图,总线仲裁单元包括三极管Q1,电阻R4和Rl,发送控制单元包括三极管Q2、Q3,电阻R2、R3和R5,单片机Ul的数据接收输入端RXD连接电阻R4的一端和CAN收发器U2的数据接收输出端RXD,电阻R4的另一端连接三极管Ql的集电极和单片机Ul的INT端,三极管Ql的发射极连接电源端,三极管Ql的基极连接电阻Rl的一端,电阻Rl的另一端连接CAN收发器U2的数据发送输入端TXD,单片机Ul的数据发送输出端TXD连接三极管Q2的发射极,三极管Q2的集电极连接CAN收发器U2的数据发送输入端TXD和电阻R3的一端,电阻R3的另一端连接电源端,三极管Q2的基极连接电阻R2的一端和三极管Q3的集电极,电阻R2的另一端连接电源端,三极管Q3的发射极接地,三极管Q3的基极连接电阻R5的一端,电阻R5的另一端连接单片机Ul的P2.0端和CAN收发器U2的STB端。
[0025]在单片机Ul的异步串行通信口 UART启动发送前,单片机Ul的P2.0端输出低电平,CAN收发器U2被唤醒,三极管Q3截止,三极管Q2把单片机Ul的TXD端电平信号同相地传送到CAN收发器U2的TXD端。当单片机Ul的异步串行通信口 UART的数据发送一旦启动,异步串行通信口 UART就发送一完整字节,在这一字节的发送过程当中,如果CAN收发器U2的TXD端与RXD端的电平不一致,TXD呈隐性,RXD呈显性,那么,仲裁信号Arbitrt1n就送出下降沿外部中断请求信号,意味着总线上的数据不再由本地方决定,而是由远端决定的,中断服务程序就会将P2.0端的输出电平改换为高电平,三极管Q3导通,三极管Q2截止,此时,UART多主实时通信系统处于仲裁失权状态,单片机Ul的TXD端与CAN收发器U2的TXD端隔离开,P2.0端输出的唤醒信号WAKE_UP,也即发送使能信号,将阻止仲裁失权后的一个字节中未发完的后续位继续传递给CAN收发器U2,进一步地,异步串行通信口 UART的发送中断的中断服务程序也会由于仲裁失权而放弃后续字节的发送。
[0026]当从节点的P2.0端输出高电平时,CAN收发器U2由远程来唤醒,CAN收发器U2的TXD端始终隐性,这样,CAN收发器U2的RXD端每收到一个显性位,就产生一次仲裁信号Arbitrt1n的下降沿中断请求信号。
[0027]采用UART接口的带校验位的9BIT模式,每个字节有I个起始位,8个数据位、I个校验位和I个停止位,这个校验位在这里不再是用来描述奇偶特性,而是用来区分所传输的一帧是轮巡式信息帧还是事件触发警报信息帧,校验位为隐性,则为轮巡式信息帧,校验位为显性则为事件触发警报信息帧。因为每个字节都传输校验位,如果在一帧轮巡式信息没传输完时,插入事件触发警报信息帧,那么,接收方只要知道所收的信息中前后两字节的校验位不同,就能找到事件触发警报信息帧的起始字节,如此,就可实现当紧急的事件触发警报信息帧插入进来时,使轮巡式信息帧发送节点失去仲裁权。
[0028]如图3所示为字节收发位的示意图,在本实用新型中,校验位也被称为轮巡帧位,帧起始字节为命令编码字节或事件编码高字节7位。一个字节的传输顺序与异步串行通信口 UART的传输顺序是不一样的,起始位先发送,轮巡帧位紧随其后,接着是八个数据位,最后为停止位,其中,八个数据位的发送顺序为高位先发送,低位后发送。一个字节的起始位始终为显性,停止位始终为隐性,数据位或显性或隐性,轮巡帧位为隐性时则为轮巡通信信息帧,为显性时则为事件触发警报信息帧。由此发送顺序可知,发送每一字节与接收每一字节,都要进行一次带轮巡帧位的倒序转换。
[0029]如图4所示为帧首字节位的示意图,访问位在命令或事件触发警报帧为隐性,在回复的应答帧为显性,应答帧的优先级别高于命令帧或事件触发警报帧。事件编码带优先级,编码小者优先级别高,在分配事件编码时,可根据其紧急状况给予分配。
[0030]因为CAN收发器U2的RXD端,跟本地TXD端与远方TXD端存在线与关系,数据流先流出的位先进行仲裁,根据这个原理,事件触发警报信息帧是带优先级别的,最高优先级的那个事件节点获得仲裁权,事件触发警报帧的优先级别高于轮巡式通信信息帧。
[0031]在本实用新型中,有一个收集各节点信息的装置,它的地位不同于其它节点,具有收集各节点信息的功能。它是默认的节点,在轮巡式通信信息帧中,它是源节点,在事件触发警报信息帧中,它是目的节点,在本实用新型中,只需设立被叫节点编码或事件节点编码就可以实现信息从源节点到目的节点的传递。当然,本实用新型并不排斥报文中带源节点地址编码和目的节点地址编码的各节点间自由发送那种方式,只是为了减少一个发送字节而省掉一个默认节点地址编码。
[0032]本实用新型具有两种通信协议,分别为轮巡式通信信息帧协议与事件触发警报信息帧协议,具体通信协议由具体的应用而定。如图5所示为轮巡式通信信息帧协议格式示意图,轮巡式通信信息帧协议的命令编码的范围:0到127,节点编码范围:0到255,数据标识范围:0到65535,数据包为O到249个字节,CRC校验一个字节。图6所示为事件触发警报信息帧协议格式示意图,报出事件编码以及事件节点的单一事件编码即可,事件编码只代表节点中的一个事件,事件编码越小,其优先级别越高,如果一个事件节点有多个事件警报,先报最高级别的事件编码,这就给程序提供了事件触发警报的方法,就是在处理事件触发主动警报时,在所有的警报标志区域中,以从小到大的顺序,先按字节做外循环,再按位,从数据位O到数据位7做内循环,一位一位地搜索,并作事件编码计数,如果搜索到一位有置位,则退出搜索,将事件编码计数的数值作为事件编码,并组织事件触发警报信息帧,并置有警报要发送位,准备发送,事件编码的范围O到32767。
[0033]假如有两个以上节点的事件编码相同,那么节点编码小的优先。
[0034]信息帧的仲裁有效期分两种情况,对于事件触发警报信息帧而言,为一个完整帧的收发期间,而对于轮巡式信息帧而言,则为一个字节。
[0035]如图7所示为通信信道的仲裁与控制逻辑时序图,假设在轮巡通信中,有两个事件触发警报节点试图提请仲裁,假设的主控节点、事件节点I和事件节点2都侦听总线为空闲,那么,三个节点都转为发送,在发起始位的时刻,都发显性,接收的也都显性,所以,三方的仲裁申请信号Arbitrt1n都为高电平,没有提出申请;到发轮巡帧位的时刻,主控节点发隐性位,而收到的是显性位,TXD与RXD不同,则主控节点的仲裁申请信号Arbitrt1n为低电平,就提出了是权申请,主控节点的WAKE_UP控制信号输出高电平,从轮巡帧位开始的后续位就屏蔽发送了,阴影位为UART已发送,被WAKE_UP仲裁而没有发送到总线上,事件节点I和事件节点2的轮巡帧位都是显性,TXD与RXD —致,他们的仲裁申请信号Arbitrt1n为高电平,没有提出申请;直到发送到事件位X时,事件节点I为隐性,它接收到的则显性,TXD与RXD不同,其仲裁申请信号Arbitrt1n为低电平,就提出了是权申请,事件节点I的WAKE_UP控制信号输出高电平,从事件位X开始的后续位就屏蔽发送了,阴影位为UART已发送,被WAKE_UP仲裁而没有发送到总线上。事件节点2直到发送完一帧后,在没有提出仲裁申请信号Arbitrt1n信号的情况下,其WAKE_UP控制输出信号才主动转为高电平。
[0036]协议新增设状态寄存器,这个新增设的状态寄存器中的各位为:仲裁失权位、接收一帧位、警报位和有警报要发送位。
[0037]如图8所示为UART初始化程序的流程图,在UART初始化程序中,设置UART 口通信的波特率、将UART 口设置为允许接收中断、允许发送中断、收发数据位的9BIT模式,UART口的接收指针清O,接收字节数置不包括数据包长度的最小字节数6,发送字节数清O。
[0038]如图9所示为主程序启动UART发送函数的流程图,在主程序启动UART发送函数中,根据轮巡式信息帧或事件触发警报信息帧,组织带轮巡帧位的数据帧,UART的发送指针清0,计算发送信息帧的CRC,置发送字节个数,判断仲裁失权位,如果没有失权,则WAKE_UP输出低电平,唤醒U2,允许发送,再判断有事件触发警报信息帧要发送否,如果有,那么,事件触发警报信息帧首字节的轮巡帧位清为显性,并将事件触发警报信息帧首字节倒序送变换后,送UART发送缓存,否则,轮巡信息帧缓存首字节的轮巡帧位置为隐性,并将轮巡信息帧缓存首字节倒序变换后,送UART 口的发送缓存,启动发送后就退出;如果仲裁失权位判断已失去仲裁权,则直接退出,等待下次调用函数时再试图启动UART发送。
[0039]主程序启动UART发送函数的调用,是在有应答帧或者有事件触发警报信息帧时才给予调用。
[0040]如图10所示为主程序处理UART接收解析函数的流程图,在主程序处理UART接收解析函数中,判断接收一帧位,如果没有接收一帧,直接退出函数,否则,清除接收一帧位,计算所收到一帧的CRC,判断所接收的CRC与计算的CRC是否相同,如果不相同,直接退出函数,否则,进行协议解析并做出相应的处理。
[0041]如图11所示为仲裁外部中断的中断服务程序的流程图,在仲裁外部中断的中断服务程序中,判断INT引脚是否为低电平,如果是高电平,意味着是误判,直接退出服务程序;否则,刷新波特率定时器计时单元,进行再同步,置仲裁失权位,WAKE_UP输出高电平,阻止正在发送的一字节中的后续位继续发送,退出服务程序。
[0042]如图12所示为UART 口发送中断的中断服务程序的流程图,在UART 口发送中断的中断服务程序中,判断发送字节数完否,如果发完,则将WAKE_UP输出高电平后,直接退出中断服务程序;否则,判帧失权位是否失权,如果是,则直接退出中断服务程序;否则,判断有警报要发送位是警报帧还是轮巡帧,如果是警报帧,则将要发送这一字节的轮巡帧位清为显性;否则,则是轮巡帧,将要发送的这一字节的轮巡帧位置位隐性,并将发送指针所指的发送帧缓存单元倒序变换后,送UART发送缓存,发送指针加1,发送字节数减1,退出中断服务程序。
[0043]如图13所示为UART 口接收中断的中断服务程序的流程图,在UART 口接收中断的中断服务程序中,判断接收计时是否超时,超时计数是在定时器的中断服务程序中实施的,如果计时已超,那么,正在接收的一字节应该是帧首,接收指针清0,接收字节数置6,代表上一字节是轮巡帧还是事件触发警报帧的属性的警报位清0,这里的警报位实为轮巡帧位的逻辑非,如果没有超时,那么,就不进行上述处理。接着,接收计时单元清0,然后,判断所接收的字节的轮巡帧位是否为假,如果为假,则代表所接收的是事件触发信息帧,再判断警报位是否为真,也即判断上一接收字节的轮巡帧位是否为警报帧,如果为假,则上一字节是轮巡帧,则事件触发警报信息帧的起始字节传过来了,接收指针清0,并且置警报位;否则,就不做上述处理。再接着,UART接收缓存倒序变换后,送接收指针所指的接收帧缓存单元,接收指针加1,接收字节数减1,然后,判断接收指针是否等于4,如果等于4,则再判断轮巡帧位是否为假,如果为假,则是事件触发警报信息帧,就收完一帧;如果接收指针不等于4,再判断所接收的轮巡帧位,如果轮巡帧位为真,则仲裁失权位有效期在收到一字节后到期,清除仲裁失权位,同样,如果接收指针等于4的轮巡帧位的状况,也是清除仲裁失权位,紧接着判断是否有事件触发警报信息帧要发送,如果有,则WAKE_UP输出低电平,将事件触发警报信息帧首字节带轮巡帧位为显性的倒序变换后,送UART发送缓存,启动事件警报信息帧的发送,也即发送指针清O,发送字节数置4,否则,就不进行上述操作;如果此时轮巡帧位为假,则置警报位,留给后续字节接收时判断。之后,判断接收指针是否等于5,如果等于5,则收到数据包长度字节单元,那么,接收字节数再加上数据包长度字节数;否则,就不做上述处理。再后,判断接收字节数是否为O,如果非O,则退出中断服务程序;否则,就是收完一帧。收完一帧之后的处理是转移所接收的一帧带警报位属性的数据给解析缓存帧区,以便腾空接收帧缓存,并置上接收一帧位,接收指针清O,接收字节数置6,仲裁失权位清O,WAKE_UP输出高电平,退出中断服务程序。
[0044]本实用新型的UART多主实时通信系统通过利用单片机的异步串行通信口 UART驱动CAN收发器来实现多主实时通信,解决了现有的单片机通过扩展外挂CAN控制器的方式或者通过采取模拟I2C通信程序,增设握手信号的方式来实现多主实时通信,其硬件电路的成本高,软件设计的实时性差的问题,本实用新型不仅节省了电路的生产成本,同时,由于还具有不限定小数据包、可插入紧急报警的特点,所以其实时性比CAN协议的实时通信系统更优越。
[0045]以上所述,仅是本实用新型的较佳实施例而已,并非对本实用新型作任何形式上的限制,虽然本实用新型已以较佳实施例揭露如上,然而并非用以限定本实用新型,任何熟悉本专业的技术人员,在不脱离本实用新型技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本实用新型技术方案内容,依据本实用新型的技术实质,在本实用新型的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本实用新型技术方案的保护范围之内。
【权利要求】
1.一种UART多主实时通信系统,其特征在于:包括单片机Ul,CAN收发器U2,总线仲裁单元,发送控制单元,所述单片机Ul的INT中断输入端连接所述总线仲裁单元,数据发送输出端TXD连接所述发送控制单元,P2.0输出端连接所述发送控制单元和所述CAN收发器U2的STB唤醒端,数据接收输入端RXD连接所述总线仲裁单元和所述CAN收发器U2的数据接收输出端RXD,所述CAN收发器U2的数据发送输入端TXD连接所述总线仲裁单元和所述发送控制单元,所述单片机Ul和CAN收发器U2的电源正端VCC分别连接电源端,负端GND分别接地。
2.根据权利要求1所述的UART多主实时通信系统,其特征在于:所述UART多主实时通信系统还包括去耦电容Cl、C2和电阻R6、R7,所述去耦电容Cl,C2分别连接在电源端和地之间,所述电阻R6连接在所述CAN收发器U2的CANH端和SPLIT端之间,所述电阻R7连接在所述CAN收发器U2的CANL端和SPLIT端之间。
3.根据权利要求1所述的UART多主实时通信系统,其特征在于:所述总线仲裁单元包括三极管Q1,电阻R4和Rl,所述发送控制单元包括三极管Q2、Q3,电阻R2、R3和R5,所述单片机Ul的数据接收输入端RXD连接所述电阻R4的一端和所述CAN收发器U2的数据接收输出端RXD,所述电阻R4的另一端连接所述三极管Ql的集电极和所述单片机Ul的INT端,所述三极管Ql的发射极连接电源端,所述三极管Ql的基极连接电阻Rl的一端,电阻Rl的另一端连接所述CAN收发器U2的数据发送输入端TXD,所述单片机Ul的数据发送输出端TXD连接所述三极管Q2的发射极,所述三极管Q2的集电极连接所述CAN收发器U2的数据发送输入端TXD和所述电阻R3的一端,所述电阻R3的另一端连接电源端,所述三极管Q2的基极连接所述电阻R2的一端和所述三极管Q3的集电极,所述电阻R2的另一端连接电源端,所述三极管Q3的发射极接地,所述三极管Q3的基极连接所述电阻R5的一端,所述电阻R5的另一端连接所述单片机Ul的P2.0端和所述CAN收发器U2的STB端。
【文档编号】H03K19/0175GK204145528SQ201420556060
【公开日】2015年2月4日 申请日期:2014年9月26日 优先权日:2014年9月26日
【发明者】袁绪平, 袁帅 申请人:深圳中德世纪新能源有限公司