文档库 最新最全的文档下载
当前位置:文档库 › DSP 2812 的串行通讯

DSP 2812 的串行通讯

DSP 2812 的串行通讯
DSP 2812 的串行通讯

DSP 2812 的串行通讯

摘要:本文首先介绍了TMS320F2812DSP与PC机进行串行通信是的硬件连接,对F2812串行通信接口SCI进行概述。然后简单介绍数字信号处理器串行通信接口SCI 构成RS232和RS485 串口通信,最后,详细阐述了从机通信程序和主机通信模块的软件设计。其通信程序协议采用了一种通用工业标准Modbus 协议。

关键词:串行通信RS232 RS485 软件设计

第1章TMS320F2812芯片SCI介绍

1.1 TMS320F2812串行通信接口SCI概述

串行通信接口SCI是一个采用发送、接收双线的异步串行通信接口,即通常所说的UART口,它支持16级的接收发送FIFO,从而降低了串口通信时CPU 的开销。SCI模块支持CPU和其他使用非归零制的外围设备之间的数字通信。在不使用FIFO的情况下,SCI接收器和发送器采用双级缓冲模式,此时SCI接收器和发送器都有独立的使能和中断位,也都可以设置成独立操作或同时进行的全双工通信模式。

为了保证数据的完整,SCI模块对接收到得数据进行间断检测、奇偶校验、超限检测以及帧的错误检测。通过对16位的波特率控制寄存器进行编程,可以配置不同的SCI通信速率。

SCI 的串行通信接口包括SCIRXD(串行通信数据接收)和SCITXD(串行通信数据发送),在不使用SCI 时,这两个引脚也可作通用I/O 口。发送和接收的操作可以利用状态标志位通过中断驱动或查询算法来完成。与之相关的主要寄存器:发送缓冲寄存器SCITXBUF、接收缓冲寄存器SCIRCBUF、接收仿真缓冲寄存器SCIRXEMU;通信控制寄存器SCICCR、中断使能和内部时钟使能SCICTL1 和SCICTL2 、波特率选择高字节寄存器SCIHBAUD、波特率选择低字节寄存器SCILBAUD、优先级控制寄存器SCIPRI、引脚控制功能SCIPC2 以及反映通信状态SCIXST 等。

根据信息的传送方向,串行通信可以分为单工、半双工和全双工三种,其各自定义如下图所示。

1.2 SCI模块发送和接收数据的工作原理

SCI发送数据的过程:在FIFO功能使能的情况下,首先发送数据缓冲寄存器SCITXBU从TX FIFO中获取有CPU加载的需要发送的数据,然后SCITXBUF 将数据传输给发送移位寄存器TXSHF,如果SCI的发送功能使能,TXSHF则将接收到的数据逐位的移到SCITXD引脚上。

SCI接收数据的过程:首先接收移位寄存器RXSHF逐位接收来自SCIRXD 引脚的数据,如果SCI的接收功能使能,RXSHF将这些数据传输给接收缓冲寄存器SCIRXBUF,CPU就能从SCIRXBUF读取外部发送来的数据。如果FIFO 功能使能的话,SCIRXBUF会将数据加载到RX FIFO的队列中,CPU再从FIFO 的队列读取数据。

第2章硬件设计

2.1 DSP与PC机的硬件连接

系统下位机采用TI公司的TMS320 F2812DSP。它是德州公司专为电机数字控制而推出的高性能的数字信号处理器。F2812支持异步外设之间的串行通信,内部有两路专用的串行通信模块(SCIA与SCIB),其中用于通信的两个I/O引脚分别为发送端SCIA/BTXD和接收端SCIA/BRXD。SCI接收器和发送器是双缓冲,每个都有自己单独的使能和中断标志,两者可以独立工作或在全双工的方式下同时工作。SCI内部有多个串行通信接口控制寄存器,可以设置通信的格式,如波特率,奇偶效验,起始位,停止位和数据位中断模式。

PC机的串行通信口一般采用的是RS232协议,发送和接收都是单端的,传输速率较低,传输的最大距离只有15—20m。而且RS232为共模传输,抗干扰

性差。因此,本文采用了平衡差分接收的RS232协议,其抗共模干扰能力强,接收灵敏度高。

2.2 SCI转换成RS232

硬件图如下:

本设计以PC机为主机,TMS320F2812为从机,主从机之间进行串口通信。TMS320F2812与PC机之间采用RS232标准进行全双工通信的接口。

MAX232原理:

MAX232芯片是专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。

内部结构基本可分三个部分:

第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT

送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

第三部分是供电。15脚DNG、16脚VCC(+5v)。

下图为MAX232引脚图和接线图,带有转串口的电路。

2.3 RS232与RS485的优缺点

RS-232 虽然被广泛接受,但其数据传送的速度慢、在现代网络通信中已暴露出的接口处各信号间容易产生干扰等明显的缺点。RS-232 只能传输15 米,不能满足远距离传输要求,而RS-485 最大传输距离为1200 米,最大传送速率可达10Mb/s而且抗干扰能力突出。因此,RS-485 在远程通信和多机总线系统中具有很大吸引力。

2.4 SCI转换成RS485

硬件图如下:

其中,接收器和驱动器的选择由TMS320F2812的XF/IOPC2引脚控制。由于一般PC机上提供的是标准的RS232串行接口,因此,需要RS232C/RS485转换器进行接口转换。

本设计以PC机为主机,TMS320F2812为从机,主从机之间进行串口通信。TMS320F2812与PC机之间采用RS-485标准进行半双工通信的接口。其中,接收器和驱动器的选择由TMS320F2812的XF/IOPC2引脚控制。由于一般PC机上提供的是标准的RS-232C串行接口,因此,需要RS-232C/RS-485转换器进行接口转换。

MAX487原理:

MAX487的数据传输速率为0.25Mbps,静态工作电流为120μA,5V单电源工作,在本系统中,MAX487采用半双工通信方式,各节点间的通信通过一对双绞线作为传输介质,因双绞线的特性阻抗为120Ω,因此系统在MAX487的始端和末端各接一个120Ω电阻以减少线路上传输信号的反射。由于主机与分机相隔较远,而分机系统上电或复位又常常不在同一时刻完成,如在此时某个MAX487处于发送状态,将占用通信总线而使其它分机无法与主机进行通信,本系统在89C52的P1.6与MAX487的DE端之间加接光耦TIL117,保证了系统上电复位时MAX487的DE端为“0”,有效解决了这个问题。

MAX487主要管脚功能:

RO:接收器输出端;

/RE:接收器输出使能端,为“0”时RO被使能;

DE:驱动器输出使能端;

DI:驱动器输入端;

A:接收器同相输入端和驱动器同相输出端;

B:接收器反相输入端和驱动器反相输出端。

第3章软件设计

3.1 Modbus通信协议简介

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构。它描述了控制器请求访问其它设备的过程。

控制器通信使用主—从技术,即仅主设备能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一个消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。

控制器能设置为ASCII传输模式或RTU传输模式中的任何一种进行通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。

3.2 从机通信程序设计

根据MODBUS协议。主、从机间通信时发送的每一帧数据包含以下信息,其格式为:

从机地址(1 字节):表示从机设备号,主机利用从机地址来识别从机设备。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应并回复。命令字(1 字节):主机发送的功能代码,告诉从机当前执行什么操作。本文中,主机向从机读数据的命令字为04H,用于读取从机的实时数据和故障数据。主机写命令字为10H,用于向从机写清除命令和整定参数。信息字(N 字节):包括进行两机通讯中各种数据地址、数据长度、数据信息。校验码(2 字节):用于检测数据通讯错误,采用循环冗余码CRC16。由于从机只能被动的接收上位机命令后,才进行数据传输。故从机上电初始化后,就会打开串行通信的接收中断,接收上位机传过来的命令与数据。其中,接收与发送缓冲区设置为16Bit的数组形式,长度分别为100与800。SCI模块的初始化程序如下:

void main(void)

{ DINT;

EALLOW;

SciaRegs.SCIFFTX.bit.SCIFFENA = 0; //Disable FiFo

SciaRegs.SCIFFRX.all = 0x0000;

SciaRegs.SCICCR.all = 0x0027; //1bit stop, odd parity,8bit Data width

SciaRegs.SCICTL1.all = 0x0003;//接收

SciaRegs.SCIHBAUD = 0x05;//波特率为9600bit/s

SciaRegs.SCILBAUD = 0x15;

SciaRegs.SCICTL1.bit.SWRESET = 1; //SCI软件复位

GpioDataRegs.GPECLEAR.bit.GPIOE1=0; //Ge.1=0 ,Set SCI_A To Receive;

Enable_SciA_RxInt();

Disable_SciA_TxInt();

PieCtrlRegs.PIEIER9.bit.INTx1=1; // SciA RX,PIE Group 9, INT1

PieCtrlRegs.PIEIER9.bit.INTx2=0; // SciA TX,PIE Group 9, INT2

SciA_RxBuf.Ptr=0;

IER|= 0x100; // Enable CPU INT

PieCtrlRegs.PIEACK.bit.ACK9 =1 ;

EDIS;

}

从机不断地侦测Modbus网络,当第一个数据(地址码)到达,TMS320F2812 DSP就会进入接收中断,将该字符放到数据接收缓冲区。为了提高通信的可靠性,除了采用硬件抗干扰措施外,软件中也采用了CRC校验和超时报警等抗干扰措施。每收一个字节时启动超时检测,若超时,则说明通信有误。此时,计数器溢出,进入定时器中断,先将定时器清0,丢弃此错误帧,系统重新进入下一重复帧接收等待状态。

若没有超时,根据接收到的命令码和字节长度即可算出本帧数据的总长,由此判断一帧数据是否接收完毕。如接收完毕,则进行错误检测。若从机地址错误或CRC校验错误,从机不对此作应答回复,等待上位机处理。若校验正确,从机根据不同的Modbus命令调用相应的处理函数。例如,上位机需要实时数据或故障数据,则将该类数据按Modbus协议格式加上地址码、字节长度和CRC校验码后打包成一帧数据,然后引起发送中断,将该帧数据逐个字节发送,直到全部发送完毕退出中断。发送中断只有在接收正确后回复上位机或上位机读数据时启动,比较简单。接收中断服务程序的部分代码。

interrupt void sciaRxIsr(void)//接收中断服务程序

{ 启动定时器

Uint16 i;

DINT;

if(SciaRegs.SCIRXST.bit.RXERROR == 1)

{ 奇校验出错,SCI软件复位 }

else

{ 接收数据以2字节格式存入缓冲区}

if(SciA_RxBuf.Ptr==6)

{分写命令和读命令计算接收数据长度以便判别一帧数据是否接收完

毕} if((SciA_RxBuf.Ptr>6)&&(SciA_RxBuf.Ptr== SciA_RxBuf.Len)) //未完继续接收数据

{ 接收完毕,求CRC校验码 }

if(tmp.a == SciA_RxBuf.Data[SciA_RxBuf.Ptr/2-1].a) //CRC校验是否正

{switch(RxBuf->Data[0].b.wordlo) //正确接收,读命令字

case 0x10: 上位机写数据,先处理数据,后发送正常回复

break;

case 04: 上位机读数据,数据准备、打包后准备发送

break;

default:

SciA_Start_Tx();//SCI开始发送数据

}

else {CRC校验错误,关闭a口发送中断,定时到后准备重新接收 }

EINT;

PieCtrlRegs.PIEACK.bit.ACK9 =1 ;

关定时器

}

3.3 上位机通信模块设计

上位机通讯模块分为三层:物理层,数据链路层和应用层。物理层采用RS485 协议进行通信,通信速率为9600bit/s, 8个数据位,1个停止位,奇校验。

数据链路层将来自应用层的数据加上从机地址、命令字和校验位得到一帧数据,发送到串口,同时启动超时检测。若超时到,未收到回复信息或数据,则认为通信出错,进入定时器中断,先将定时器清0,再重发原数据帧。若收到从机传来的一帧数据,比如收到从机传来的60字节的实时数据(一个字节就引起接收事件对上位机效率太低),则引起接收事件,进入接收中断,对其进行CRC校验和进一步校验,若有误则重发命令帧,若正确将该帧数据放到数据交换区。数据链路层的通信流程图如图所示。

数据链路层通信流程图

应用层分为读取DSP的实时数据和故障数据,向DSP写入清除命令和整定参数。例如,当主机需要读取DSP的实时数据时,将启动定时器。定时器每500ms进入定时中断处理函数,发送一个读实时数据命令,将接收到的数据处理后显示到界面。

第4章结论

本文讨论了以TMS320F2812为核心与上位PC机间的串口通信设计。重点介绍了他们之间的硬件连接,也介绍了从机通信模块和主机通信模块的软件设计。本文主要通过将TMS320F2812的SCI接口拓展为RS232和RS485。了解到RS485抗干扰能力强,速度快的优点。同时还了解到MODBUS协议具有开发性、易实现、用户范围广、可靠性强、扩展性好等优点。

参考文献

[1]苏奎峰、吕强等. TMS320F2812原理与开发电子工业出版社. 2005

[2]王炼红,章兢. TMS320F2812DSP与PC机的串口通信设计,微机算机信息,2006

[3] 韩丰田.TMS320F281xDSP原理及应用技术.北京:清华大学出版社,2009.4

[4] 姜艳波等. 数字信号处理器DSP应用100例. 北京:化工工业出版社,2008.10

[5] 孙丽明. TMS320F2812原理及其C语言程序开发. 北京:清华大学出版社,2008.12

[6] 三恒星科技. TMS320F2812DSP原理与应用实例.北京:电工业出版社,2009.2

相关文档