基于CAN总线的RS-232串口设备远程通信
在微处理控制下,RS-232和CAN进行数据交换时,采用串口接收和CAN中断方式可提高工作效率。其主程序流程图如图2所示。SJA1000的初始化在复位模式下才可以进行,主要包括工作方式的设置、时钟分频和验收滤波寄存器的设置、波特率参数的设置以及中断允许寄存器的设置等。
数据能否准确传递还取决于波特率和流量控制,这也是软件设计时不可忽略的地方。因此接下来主要介绍CAN波特率的设置、串口波特率的自动检测、串口数据流量控制。
3.1 CAN滤波率的设置
CAN协议中的要素之一是波特率。用户可以设置位周期中的位采样点位置和采样次数,以使用户可以自由地优化应用网络性能,但在优化过程中,要注意位定时参数基准参考振荡器的容差和系统中不同信号传播延迟之间的关系。
系统的位速率fBil表示每单位时间传输数据位的量,即波特率fBit=1/tBit。额定的位定时由3个互不重叠的段SYNC_SEG、TSEG1和TSEG2组成,这3个时间段分别是TSYNC_SEG、TSEG1和TSEG2组成,这3个时间段分别是tSYNC_SEG、tTSEG1和tTSEG2。所以,额定位周期tBit是3个时间段的和。
tBit=tSYNC_SEG+tTSEG1+tTSEG2
位周期中这些段都用整数个基本时间单位来表示。该时间单位叫时间份额TQ,时间份额的持续时间是CAN系统时钟的一个周期tSCL,可从振荡器时钟周期tCLK取得。通过编程预分频因数(波特率预设值BRP)可以调整CAN系统时钟。具体如下:
tSCL=BRP×2tCLK=2BPR/fCLK
对CAN位定时计算的另一个很重要的时间段是同步跳转宽度(SJW),持续时间是tSJW。SJW段并不是位周期的一段,只是定义了在重同步事件中被增长或缩短的位周期的最大TQ数量。此外,CAN协议还允许用户指定位采样模式(SAM),分别是单次采样和三次采样模式(在3个采样结果中选出1个)。在单次采样模式中,采样点在TESG1段的末端。而三次采样模式比单次采样多取两个采样点,它们在TSEG1段末端的前面,之间相差一个TQ。
上面所提到的BPR、SJW、SAM、TESG1、TESG2都可由用户通过CAN控制器的内装中寄存器BTR0和BTR1来定义。具体如图3所示。设置好BTR0和BTR1后,实际传输的波特率范围为:
最大=1/(tBit-tSJW),最小=1/(tBit+tSJW)
3.2 串口波特率检测
当串口设备是主机时,如需检测此时转换装置的串口波特率,首先可对主机的接收波特率(以9600波特为例)进行设定,并在终端发送一个特定的字符(以回车符为例),这样,主机根据接收到的字符信息就可以确定转换装置的通信波特率。回车符的ASCII值是0DH,在不同波特率下接收到的值如表2所列。
表2 不同波特率下接收的字节
波特率(bit/s) | 接收字节(十六进制) | 波特率(bit/s) | 接收字节(十六进制) |
1200 | 80 | 4800 | E6 |
1800 | F0 | 9600 | 0D |
2400 | 78 | 19200 | F* |
3.3 串口流控制
此处讲到的"流"指的是数据流。数据在两个串口之间的传输时,常常会出现丢失数据的现象。由于单片机缓冲区有限,如接收数据时缓冲区已满,那么此时继续发送来的数据就会丢失。而流控制能有效地解决该问题,当接收端数据处理不过来时,流控制系统就会发出"不再接收"的信号,而使发送端停止发送,直到收到"可以继续发送"的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据丢失。常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面仅就硬件流控制RTS/CTS加以说明。
采用硬件进行流控制时,串口终端RTS、CTS接到单片机的I/O口,通过置I/O口为1或0来接收和发出起停信号。数据终端设备(如计算机)使用RTS来起始单片机发出的数据流,而单片机则用CTS来起动和暂停来自计算机的数据流。实现这种硬件握手方式时,在编程时根据接收端缓冲区的大小设置一个高位标志和一个低位标志,当缓冲区内数据量达到高位时,就在接收端将CTS线置低(送逻辑0),而当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高为止。RTS则用来标明接收设备有没有准确好接收数据。
PeliCAN格式既可以发送标准帧也可以送扩展帧,利用时钟分频寄存器中的CDR.7可以调协CAN模式(0-BasicCAN,1-PeliCAN),接收CAN数据时,可根据帧信息中的FF位来判断是标准帧还是扩展帧,并且RTR位来判断是远程帧还是数据郑以下是CAN接收
- 现场总线CANbus与RS-485之间透明转换的实现(01-26)
- 支持CAN总线的电动车辅助逆变电源的设计(02-23)
- 单片机和MCP2510的CAN息线通信模块设计(05-03)
- CAN总线/RS232接口的设计(10-12)
- 机车空调逆变电源控制系统及其实现(06-21)
- 现场总线在并联逆变电源系统中的应用(06-23)