基于CAN2.0标准的CAN-串转换通信技术研究于素梅蔡祥宝(南京邮电大学电子科学与工程学院,南京210003)摘要:现场总线是自动化领域的计算机网络,已成为当今自动化领域技术发展的热点。CAN总线是现场总线的一种,它与串口之间的通信,是通过硬件电路的电平转换,和软件设计的数据处理实现的。此方法实现了双CAN功能,提高了通信的可靠性。关键词:CAN总线;CAN设置;双CAN;串口RS232;看门狗1引言CAN(ControllerAreaNetwork)总线又称控制器局域网,是Bosch公司在现代汽车技术中领先推出的一种多主机局部网。它是一种串行通信网络,支持分布式实时控制,最大传输速度可达1Mbit/s,最大传输距离为10km。CAN规范已被ISO国际标准组织制订为国际标准,即CAN标准,现在最常用的是2.0标准,分为2.0A和2.0B。其区别仅在通信数据位数,前者是11位的标准帧,后者是29位的扩展帧。CAN协议建立在国际标准组织的开放系统互连参考模型基础上的,主要工作在数据链路层和物理层,用户可在其基础上开发适合系统实际需要的应用层通信协议。而串口RS232作为标准计算机串行接口,与CAN网的结构、传输特性、通信协议等都不相同,所以导致不同设备间无法进行直接通信。因此实现二者之间的直接信息流交互成为问题的关键。2原理这里采用嵌入式芯片STM32F103作为主控,CAN网和串口数据的转换是通过芯片相应管脚收发数据,然后把转换后的数据发送出去的过程。此方法实现了双CAN的功能,即通过继电器切换实现两个CAN切换使用,相当于单刀双掷开关,这样增强了CAN的可靠性。2.1CAN网切换通过芯片连接继电器的管脚拉高和拉低实现CAN网的切换,默认为低,是一路,当软件程序中写高时就会拉高,则继电器切换到另外一路,实现双CAN的功能。2.2CAN-串通信协议转换CAN网设置是通串口发送的数据来实现的,即芯片STM32F103根据上位机串口发来的数据,把CAN属性设置成相应的值。这样就与上位机串口设置一致,便于观察与记录。不仅美观还节省测试者的大量时间。串口RS232互连总线接口主要功能是接口模块与PC机通信。通信方式:信息以串行异步通信方式传送。传输速率:11.52kbit/s。字节发送帧结构:按发送顺序依次为1个起始位,8个信息位,1个停止位。串口发送数据步骤:先设置CAN,设置完把设置值回发给串口,串口接收到数据后表示CAN已设置完成,可以进行数据通信,然后再发送数据。当帧头为FE时表示设置CAN,为FF时表示进行数据通信。如串口发FEF0F1EFFEFEEF,则设置CAN,同时会把这组数据发给串口,串口接收到这组数之后,才可以进行CAN-串转换通信。设置CAN时串口发送数据为下表一所示:此处CAN波特率可有十个选择(如表A),因为要实现CAN的正常通讯,通讯节点之间设置的波特率必须相同。所以用户可以根据自己的需要,设置自己的波特率。表1设置CAN的数据帧头DATA0DATA1DATA2DATA3DATA40xFE波特率设置(见表A)0xF1:CAN-1路0xF0:CAN-2路0xFE:单滤波0xEF:双滤波0xFE:只听模式0xEF:正常模式A)波特率DATA1设置:0xF0:5k0xF5:125k0xF1:10k0xF6:250k0xF2:20k0xF7:500k0xF3:50k0xF8:800k0xF4:100k0xF9:1M3软硬件设计3.1硬件设计电原理图如下图1:图1电原理图内部晶振:32KHZ;外部晶振:8MHZ;管脚配置:PA12为CAN_TX,PA11为CAN_RX,PA10为USART_RX,PA11为USART_TX;复位电路模块:D54部分,MAX809R作为复位电路芯片;双CAN模块:D51部分,XS509和XS510是两路CAN,XS510是CAN-1路,为高时通,XS509是CAN-2路,为s低时通。默认为低,是XS509通,当PD1管脚控制切换;外部串口收发模块:D52部分;电机模块:K2;为了保证CAN网的可靠性,并在错误出现时尽快定位错误设备,找出错误原因,规范规定了看门狗稳定性保证措施,两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断或产生系统复位,以防止程序意外跑飞。这样为系统提供了更高的安全性、时间的精确性和使用的灵活性。DATA5DATA6DATA70xFE:标准帧0xEF:扩展帧0xFE:远程帧0xEF:数据帧用户自定义G525MHZC520pFC5020pF+C5310uF/16VC54104C55104C56104+3.3V123XS5CON3+3.3VD5_BOOT0V51LEDR5031KD5_PB6123XS50CON3VCC1GND2TXD3RXD4CANH6CANL7CANG8D51CTM8251A+3.3VD5_BOOT1D5_CANTXD5_CANRX+5V+C5810uF/16VC5910nR10CANHCANLC5210n+3.3V+C5110uF/16VV5LEDR511KD5_STM32F_TXD5_STM32F_RX+3.3V+3.3V123XS508CON3+C5230.1u/16V+C5250.1u/16V+C5260.1u/16V+C5240.1u/16V+C5270.1U/16VD5_TXD232D5_RXD232C52810nC1+2C1-4C2+5C2-6T1IN11R1OUT9EN1FON12FOFF16INVALID10R1IN8T1OUT13V-7V+3VCC15GND14D52MAX3221EAE+3.3VD5_RSTGND1RESET2VCC3D54MAX809RG5132KHZC53012pFC52912pFD5_OSC32_IND5_OSC32_OUT12354ANDD55SN74AHC1G08DBVR59410K+3.3VD5_RST_CPUD5_RSTD5_RST_J+3.3V+3.3V+3.3V+3.3V+3.3VGNDGNDGNDGNDD5_CANTXD5_CANRXD5_RST_CPUD5_STM32F_TXD5_STM32F_RXD5_JTDID5_JTDOD5_JTCKD5_JTMSD5_BOOT1D5_BOOT0D5_OSC32_IND5_OSC32_OUTPE2/TRCECK1PE3/TRACED02PE4/TRACED13PE5/TRACED24PE6/TRACED35VBAT6PC13-ANTI_TAMP7PC14-OSC32_IN8PC15-OSC32_OUT9VSS_510VDD_511OSC_IN12OSC_OUT13NRST14PC0/ADC_IN1015PC1/ADC_IN1116PC2/ADC_IN1217PC3/ADC_IN1318VSSA19VREF-20VREF+21VDDA22PA0-WKUP23PA124PA225PA326VSS_427VDD_428PA429PA530PA631PA732PC433PC534PB035PB136PB2/BOOT137PE738PE839PE940PE1041PE1142PE1243PE1344PE1445PE1546PB10/USART3_TX47PB11/USART3_RX48VSS_149VDD_150PB1251PB1352PB1453PB1554PD855PD956PD1057PD1158PD1259PD1360PD1461PD1562PC663PC764PC865PC966PA867PA9/USART1_TX68PA10/USART1_RX69PA11/CANRX70PA12/CANTX71PA13/JTMS/SWDIO72NC73VSS_274VDD_275PA14/JTCK/SWCLK76PA15/JTDI77PC1078PC1179PC1280PD081PD182PD283PD384PD485PD586PD687PD788PB3/JTDO89PB4/JNTRST90PB591PB692PB793BOOT094PB895PB996PE097PE198VSS_399VDD_3100D5STM32F103VBT6+3.3vGNDD5_JNTRSTPA0PA1PA2PA3PA4PA5PA6PA7PD0PD1PD2PD3PD4PD5PD6PD7readD5_JTMSD5_JTCKD5_JTDOD5_RST_JD5_JNTRSTD5_JTDID5_GND_JR50020RR500110KR500010KR59910KR59810KR59710KGND+3.3V12345678XS53CON8R50030RD5_GND_JD5_PB6123XS509CON3CAN-GNDC52210nFC5211uFVREF+VREF+VREF-VREF-INIT1INIT2+3.3VGNDwrite12XS1CON2R54120Rtp1X1TPtp1X2TPtp1X3TPtp1X4TPtp1X6TPtp1X7TPtp1X8TPL181K2AG6K-2F-5VV71N4148SMDV11MMBT9013LT1C4247nR115.1K+5V324K2BG6K-2F-5V675K2CG6K-2F-5V123XS510CON3PD1+3.3V3.2软件设计软件设计主要包括上位机和下位机的编写,上位机用的VC++平台,下位机用嵌入式IAREWARM平台。(1)上位机由于串口调试助手不具备通用性、局限性太大,很多时候不能满足设备的要求,因而此处上位机采取新的方法,重新编写界面,不仅更加美观,同时对下位机CAN的设置也更加清晰明了,让用户一目了然,使用起来十分方便。(2)下位机下位机中CAN节点通信主要包括:串口初始化、CAN初始化、CAN报文转换为串数据和串数据转换为CAN报文四部分。下面就各部分作简要描述,以便大家在实际应用中参考。在进行通信时,主控芯片STM32F103接收到CAN网的数据时,先转换成串口数据,然后再发出去给上位机串口,串口的数据在界面中显示出来。同理接收到串口发送的数据时,先转换成CAN数据,再发出去给CAN网,可以用周立功的CAN卡进行监视。CAN的转换可以为原样显示,也可以转换其他进制,如八、十进制等,此处CAN设置为原样转换。即CAN来的数据,在串口上是原样显示,串过来的数据在CAN上原样显示。这里帧ID也是原样传输的。串初始化程序:USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;CAN初始化设置:#defineUSART_FRAME_HEAD0xFE#defineUSART_FRAME_HEAD10xFFif((UsartRxBuffer[i].Data[0])==USART_FRAME_HEAD)//设置CAN{//此处举例帧格式if(UsartRxBuffer[i].Data[5]==0xFE){TxMessage.IDE=CAN_ID_STD;}//扩展帧elseif(UsartRxBuffer[i].Data[5]==0xFE){TxMessage.IDE=CAN_ID_EXT;}//标准帧}CAN转换成串:if(RxMessage.IDE==