基于CAN总线的远动测控终端的设计与实现_第1页
基于CAN总线的远动测控终端的设计与实现_第2页
基于CAN总线的远动测控终端的设计与实现_第3页
基于CAN总线的远动测控终端的设计与实现_第4页
基于CAN总线的远动测控终端的设计与实现_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于CAN总线的远动测控终端的设计与实现                        摘要:本文首先分析了一种电力测控系统终端的整体设计方案,然后结合系统中遥测模块和主控板之间的CAN总线通信方式,重点介绍系统中CAN模块的硬件构成及工作原理,最后阐述了为uClinux添加CAN设备驱动的方法。关键词:CAN总线、SJA1000、Linux设备驱动Abst

2、ract: This paper first analyzed one kind of Remote Terminal Unit system's overall design plan, then combined the CAN-bus communication means between the Main board and Measureing board Mainly introduced the CAN module's hardware constitution and the operation principle, finally elaborated on

3、 the steps to add the CAN driver in the uCLinux system。.Keywords: CAN bus SJA1000 Linux Device Drivers1、 引言随着电力需求的增加,电网结构越来越复杂,为了保证电力系统可靠稳定的运行,就需要实时监控电网的运行状况,以在故障发生前有预警,同时在故障发生后又能够及时的处理。这就对测控单元整体性能提出了更高的要求,不仅要求数据准确可靠、而且要求实时性要好。在测控终端内部的各个模块中以遥测板和主控板的通信数据量最大、最复杂。传统的采用RS-232或RS-485的通信方式通信效率较低,而且不易于扩展。而

4、CAN是多主的工作方式,通信方式灵活,无需站地址等节点信息,采用非破坏性总线仲裁技术,能充分满足实时要求。另外CAN采用短帧结构传输信号,传输时间短,具有较强的抗干扰能力。强化了数据的安全性。基于CAN总线的以上优点,本系统选用CAN总线做为主控板和遥测板的通信媒介。2、 CAN-bus通信在信号电源测控系统中的应用2.1、系统组成系统的硬件组成主要包括四部分:主控板、遥测板、遥信板、遥控板。采用直插结构,上述各模块都通过母板上的总线进行通信。遥测板用于采集现场的交流信号,通过电压/电流互感器(PT/CT)和信号调理电路,然后经过ADC转换,将模拟的电信号转换成数字信号。数字信号处理器DSP控

5、制ADC的采样并读取转换结果,并对结果进行实时处理得到各种电参数(电压、电流的有效值、有功功率、无功功率、功率因素、频率、相序等),然后将这些参数进行处理并按规定组桢后通过CAN-bus与主控板通讯。遥信板主要采集现场的各种开关位置信号,储能信号、故障信号等,然后通过母板上的总线结构直接与主控板进行数据通信。遥控板主要对现场的断路器、电容器、继电器进行控制。而主控板则主要完成整个系统的控制功能、数据的收集与处理、人机界面、网络通信等功能。其中每块遥测板可采集3路电压信号和3路电流信号,本系统中配置了两块遥测板。系统硬件结构图如图1所示:系统的软件设计以主控板为核心,主控板移植了uClinux操

6、作系统。uClinux是从Linux 2.0/2.4内核派生而来,主要面向没有MMU(Memory Management Unit)的硬件平台。在经过了裁剪和优化后,形成了一个高度优化,代码紧凑的嵌入式Linux。它沿袭了Linux的绝大部分特性,具有体积小、稳定、良好的移植性、优秀的网络功能、能支持多种文件系统。采用uClinux系统可优化利用系统资源、简化程序的设计与调试、方便程序的维护和二次开发、增强系统的可靠性。图1:系统结构图遥信板和遥控板通过母板上的数据总线直接与主控板交换数据,遥测板和主板选用CAN总线的通信方式。 主控板软件设计分为以下几个重要步骤:1、 uClinux操作系统

7、的移植。2、 uClinux设备驱动程序的编写。3、 应用程序的编写。对于第一步网上已经有针对S3C4510B的uClinux内核的源代码,只要根据系统需要进行适当的裁剪就可以直接使用了,对与像串口、网口、FLASH、SDRAM等都有完整的驱动程序代码可供参考,在此不再敷述。以下将重点介绍与CAN相关部分的设计包括硬件和软件的设计方案。图2为主板CAN模块的硬件结构图:                    

8、;         CAN模块的设计以SJA1000为核心,SJA1000内部集成了CAN协议的物理层与数据链路层,它可工作在Basic CAN 、PeliCAN 两种模式下,其中PeliCAN 模式能够处理所有的CAN2.0B 定义的帧类型,本系统中我们选用了Basic CAN 模式。通信数据经过高速光耦6N137隔离,经A82C250收发器后从外部端子连接到母板总线最后连接到外部CAN总线。S0作为片选信号,S3C4510B的外部中断INT3做为中断源。通信报文的设计采用了一个简单的协议。2.2、Li

9、nux设备驱动简介:设备驱动程序是Linux系统内核同外围设备交互的媒介,设备驱动程序做为系统内核的一部分,它把外围的设备完整的封装了起来,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。这样在应用程序开发者看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,设备驱动程序主要完成以下的功能: 对设备初始化和释放、把数据从内核传送到硬件和从硬件读取数据、读取应用程序传送给设备文件的数据和回送应用程序请求的数据。在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备,字符设备是个能够像字节流一样被访问的设备,块

10、设备一般主要指磁盘等大容量设备。linux的设备驱动可以通过动态和静态两种方式进行加载,动态加载利用了Linux的MODULE特性,可以在系统启动后通过insmod命令把驱动程序加载上去,不用的时候用rmmod命令来卸载。一般情况下我们用动态加载的方式调试驱动程序,而调试正确后再通过静态编译的方式编译进内核。图2:模块的硬件结构2.3、CAN设备驱动程序设计:在本系统中,基于设备安全访问的需要,把CAN设备实现了更为完整的封装,既把实际上可以在应用程序中完成的部分功能也封装到设备驱动程序中来完成,这主要包括对已接收报文的解析和待发送报文的组帧等。设备驱动程序所提供出的抽象的入口点主要是通过一个

11、数据结构向系统进行说明的,即 flie_operation数据结构,这个数据结构的内容非常庞大,基于满足CAN的驱动设计设计的要求,简化后的flie_operation结构如下:struct file_operations can_fops=read: canread,write: canwrite,open: canopen,release: canclose,;以上各个函数分别对应为:从接收缓冲区中读取数据,向发送缓冲区中写数据,CAN控制器的打开使用,CAN控制器的关闭。驱动程序的添加包括以下几个部分:一、向内核注册字符设备通过调用register_chrdev函数向系统注册字符型设备,

12、Register_chrdev定义为: int register_chrdev(unsigned int major,const char *name,struct file_operations *fops);在系统程序中这个函数的声明如下:int can_init(void)int ret;int data;ret = register_chrdev(254, "CAN", &can_fops);if(ret = 0) printk("can register succeed!n");else printk("can registe

13、r failed!n");return 0;其中,254是为设备驱动程序向系统申请的主设备号;“CAN”是设备名;“&can_fops”是对系统调用的入口点的说明。二、注册中断static void canopent(struct inode *inode,struct file *filp)  。int retval;cli(); /中断挂起CSR_WRITE(IOPCON,0x16<<15); /设置CAN中断占用INT3,下降沿触发模式CLEAR_PEND_INT(INT_CANBUS);/清除CAN中断标志位retval=request_irq(

14、INT_CANBUS,Canbus_Isr,SA_INTERRUPT,"CANBUS",0);/注册中断INT_ENABLE(INT_CANBUS);/使能CAN中断SetupCanbus();/完成CAN的硬件初始化工作中断处理程序调用驱动程序中的接口函数完成对CAN的读写控制,报文的接收解析,组织发送报文等功能。以下为CAN的中断处理程序:static void Canbus_Isr(int irq,void *dev_id,struct pt_regs * regs)         &#

15、160;                    Uint8 flag; canmsg rmsg; flag=CanRd(CAN_CREG_IFR_ADR); CLEAR_PEND_INT(irq);/清中断 if(flag&CAN_IFR_RI) while(CanRcvMsg(&rmsg)=TRUE)     

16、 DoCanService(&rmsg); /解析并回复报文CanShowMsg(&rmsg);    else  if( flag & 0x02)/TIF /CAN非正常情况下的错误处理   printk("CANtranintn");  if(flag&0x04)/EIF   printk("CBerrn");   SetupCanbus();  。 同时我们还需要修改一些文件,以使驱动静态

17、编译进内核。方法如下:首先将驱动程序代码candrv.c复制到/uclinux/linux-2.4/drivers/char目录下。在/uclinux/linux/drivers/char目录下mem.c中,int chr_dev_init( )函数中增加如下代码:can_init()。在/uclinux/linux/drivers/char目录下Makefile中增加如下代码:L_OBJS+=candrv.o。最后还需要在vendor/Samsung/4510b/Makefile中添加 xzy,c,254,0建立设备节点。这样在uClinux运行后我们就可以在/dev目录下看到CAN设备的设备名”CAN”了。同时可以在/proc/interrupts文件中看到CAN的中断标号,“CANBUS”。4、结论与展望本文介绍了一种测控终端的设计方案,并对其中的CAN通信模块的软件和硬件设计进行了详细的介绍,采用本方案所设计的CAN通信模块在本电力测控系统中运行稳定,主控板和遥测板的通信状况良好,较好的满足了现场的要求。本文作者创

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论