快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

凯发k8网址1111:嵌入式MultiBusCPU模块设计可满足工业现场的测控需要



引 言

MultiBus-CPU模块是基于AT91RM9200微节制器的智能化多总线测控模块。该CPU模块主要实现对下位机的节制,并建立基于Modbus-RTU总线协议的总线通凯发k8网址1111信体系布局,让系统设备可以无缝接入基于Modbus-RTU模式的总线系统,靠得住、实时、准确地实现工业现场数据采集、旌旗灯号输出等功能;同时,供给标准视频接口用于显示16位色图像,供给标准音频输入输出接口用于实现录放音功能。该模块作为嵌入式开拓情况的核心,可实现人机界面的交互操作和显示、海量数据的存储、多串口、多USB口、音频旌旗灯号输入输出、以太网口等接口;运行Linux操作系统,可以快速搭建面向利用的嵌入式利用系统。

1 MulTIBus-CPU模块软件设计规划

为了满意实际利用对实时性的要求,MulTIBus-CPU模块软件采纳了Linux 2.6.21操作系统。此中,Linux 2.6的内核义务可以被抢占,这一特点使得Linux 2.6内核适用于实时系统和嵌入式系统中。驱动法度榜样在Linux情况下进行开拓,利用层采纳标准的通信协议——Modbus协凯发k8网址1111议,节制设备可以连成工业收集进行集中监控。经由过程同等的Modbus接口,Mul凯发k8网址1111TIBus-CPU模块与扩展下位机均可作为对等设备在工业收集中进行对话,使得各个设备无缝接人到工业节制收集中。MNTIBus-CPU模块支持现阶段工业测控系统中最常用的以太网(UDP)通信及RS485通信协议。是以,本模块在与其他功能模块进行通信时,采纳Modbus-RTU数据通信要领,使用以太网(UDP)/RS485总线进行数据的发送与接管,实现对各功能模块的集中监控。软件总体布局如图1所示。

2 MultiBus-CPU模块硬件设计规划

硬件设计道理图如图2所示。MultiBus-CPU模块选用Atmel公司的AT91RM9200为主处置惩罚器,交融了ARM920T ARM Thumb处置惩罚器。其事情于180 MHz时机能高达200 MIPS;具备存储器治理单元,可以运行Linux等实时操作系统;具备10/100 Base-T型以太网卡接口,只需外扩一个PHY即可实现以太网通信;具备USB 2.0全速(12 Mb/s)主机双端口,可以扩展键盘、鼠标、U盘等标准外设。

主处置惩罚器AT91RM9200具备5个串口:1个DEBUG串口,设计为RS232接口,可以直接连接PC的串口进行调试;1个RS485接口,可以与其他功能模块的RS485接口组成收集;另外3个串口均设计为RS232接口。

经由过程CPU模块的外部总线和Epson公司的S1D13506显示芯片扩展了一个VGA接口,分辨率为640480,256色。IS41LVl6100为其供给自力显存,容量为1M16位,支持EDO PAGE模式。

GL850A芯片是一个低功耗的USB 2.0 HUB节制器,AT91RM9200本身的USB HOST接口经由过程GL850A芯片扩展为4个USB HOST接口。

DS3231是精度异常高的I2C集成及不时钟。其精度在0~40℃内高达2 ppm,在-40~85℃内精度可达3.5ppm;板载电池,掉落电后可以维持光阴;可为系统供给秒、分、小时、日、日期、月、年等信息,具有自动闰年调剂功能。

WM8731是一个低功耗收集音频编解码器(CODEC),具有输出功率放大年夜器和可编程采样速度设定功能。WM8731芯片经由过程I2S接口与CPU连接,为CPU模块扩展了音频旌旗灯号的输入输出接口,使系统具备音频采样功能,音频旌旗灯号数字化后可以经由过程以太网传送。

DM9161为10/100M快速以太网物理层单芯片收发器,H1102为收集隔离变压器,用于实现10/100M自适应的靠得住收集传输功能。

MultiBus-CPU模块经由过程增添显示节制芯片及其驱动实现了显示接口,系统运行信息可以直接经由过程VGA显示器显示出来,大年夜大年夜前进了人机交互的可操作性。

3 显示模块硬件设计规划

3.1 接口芯片选择

接口芯片选用Epson公司临盆的大年夜规模显示节制器S1D13506。它因此SEDl354节制器为根基成长起来的具有更多功能的LCD显示节制器,支持全类型、大年夜规模的LCD及CRT/TV显示器。S1D13506内置RAMDAC(Random Access Memory Digital-to-Analog Converter,随机数模转换影象体)硬件X-Y轴转置二维加速器,共有114个寄存器,可以机动地设置各类不合的显示要领。

3.2 接口硬件设计

S1D13506与处置惩罚器的接口采纳通用类型总线(包括数据总线、地址总线、节制总线)。接口定义如表1所列。芯片所用像素时钟CLK1、CLK2是由同步旌旗灯号发生器ICS1523来供给的,外接1M16位的EDO-DRAM IS41LV16100。

图3是显示电路总体连接图。S1D13506连接到AT9IRM9200的旌旗灯号有:M/R、AB1~AB20、DB1~DB15、WE0、WE1、RD、RD/WR、CS、RFSET、BUSCLK、WAIT。连接到ICSl523的旌旗灯号有:CLCKI、CLCK12(用于内部显示及外部媒体接口时钟)。连接到IS41LVl6100的旌旗灯号有:DRAM-WE、DRAM-RAS、LCAS、UCAS、MA0~MA9、MD0~MD15。此中,MD1、MD2、MD4、MD6、MD15必要外接上拉电阻用于S1D13506初始设置设置设备摆设摆设。其他节制旌旗灯号连接到LCD/CRT显示器。S1D13506芯片有个测试使能引脚TFSTEN在芯片正常事情时接地。假如不应用RAMDAC的数模转换功能,那么IREF引脚必须接地。ICS1523经由过程I2C串行总线(TWD、TWCK)吸收AT91RM9200对它的寄存器设置设置设备摆设摆设。本设计中,ICS1523的输入时钟是50 MHz,输出CLK1为25 MHz,CLK2为12.5 MHz。

4 显示模块软件设计规划

4.1 Linux下LCD驱动法度榜样开拓

在Linux内核中,设备驱动法度榜样是一个个自力的“黑盒子”,可以使某个特定的硬件相应一个定义优越的内部编程接口,同时完全暗藏了设备的事情细节,用户操作只必要经由过程一组标准化的调用即可完成。把这些调用映射到设备特定的操作上,则是设备驱动法度榜样的义务。而每一个设备都可以看作是一个文件,以是打开的设备在内核中都可以由一个File布局标识,内核应用File_operations布局造访驱动法度榜样的函数。每个文件(设备)都与它自己的函数集相关联。这些操作函数主要认真上面所提到的系统调用的实现,并是以被命名为open、read、fork、ioctl等。

LCD节制器的功能是显示驱动旌旗灯号,进而驱动LCD。用户只必要经由过程读写一系列的寄存器,就可以设置设置设备摆设摆设和显示驱动。设置设置设备摆设摆设LCD节制器时,最紧张的一步是帧缓冲区(FrameBuffer)的指定。帧缓冲区为图像硬件设备供给了一种抽象化处置惩罚,它代表了一些视频硬件设备,容许利用软件经由过程界说明确的界面来造访图像硬件设备。用户法度榜样只需与帧缓冲驱动法度榜样抽象出来的接口打交道,就可以把要显示的内容从缓冲区中读出,从而显示到屏幕上。

在FrameBuffer驱动法度榜样中,最核心的布局体是帧缓冲区驱动法度榜样接口,即struct fb_info。它记录了当前FrameBuffer硬件设备的状态,平日在Linux的include/Linux/fb.h中定义。最主要的布局体有:Struct fb_fiX_sereeninfo,定义显示输出设备自身的属性,如屏幕缓冲区的物理地址和长度;Struct fb_var_screeninfo,记录帧缓冲设备和指定显示模式的可改动信息,包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。

若要先设定帧缓冲区的物理地址和长度,就要在S1D13506.h里指定,然后在驱动法度榜样里经由过程对fb_fix_screeninfo赋值来实现:

定义当前显示输出状态,经由过程对fb_var_screeninfo布局赋值来实现:

Linux下驱动法度榜样老是先调用module_init(),是以LCD初始化经由过程调用module_init(sldl3xxxfb_init)来实现。sldl3xxxfb_init初始化函数部分代码如下:

首先对LCD的背光灯进行点亮。LCD显示是一种被动的显示模式,不能发光,只能寄托节制透射或反射周围情况的光来达到显示的目的。是以,必须经由过程写寄存器用高电平唆使对LCD加3.2 V电压来实现背光灯的点亮。其函数的部分代码如下:

系统采纳的彩色LCD最佳分辨率是800600,但经由过程前面对布局Struct fb_var_screeninfo的赋值并不能真正设定其分辨率。由于布局Struct fb_var_screeninfo的值只是作为一个显示记录来用,必须经由过程设定寄存器的值才能达到必要的分辨率。本系统在S1D13506.h头文件里用一个数组对寄存器的设置作了一个预定义,然后在初始化函数里使用sldReg和sldValue两个实参写入,从而设定了寄存器的值。

数组里每个元素的第1个值代表寄存器的名称,第2个值代表要设定的数值(1个十六进制的数)。32h寄存器用于设定LCD显示的水平像素数目,谋略措施是把第2个值转换成十进制,加1再乘以8就得出水平像素。例如,0x63换算成十进制为99,加1乘以8便是800。38h和39h寄存器分手设置成0x57和Ox02,就可以显示600的垂直分辨率。谋略措施因此39h寄存器的bitO和bitl位为高位,38h寄存器的bit0~bit7为低位,组成的一个十六进制的数,再转换成十进制。除了要改动这3个寄存器外,34h和3Ah这两个寄存器也会对显示的分辨率有影响。

帧缓冲设备也属于字符设备,要经由过程“文件层一驱动层”的接口要领来对LCD进行驱动,就必须对File_operationes数据布局的参数fh_ops进行添补,并实现其对应的成员函数。本系统在include/Limix/fb.h中定义了帧缓冲区的文件操作,部分代码如下:

这个布局中的每一个字段都必须指向驱动法度榜样中实现特定操作的函数。对付不支持的操作,对应的字段可以被置为NULL,或留到后续开拓时再添加。本模块中实现特定操作的成员函数的代码如下:

接下来把一些调用的函数写完备,编写好法度榜样后用arm-linux-gcc编译驱动模块;然后对其动态加载,或静态将其编译到Linux内核;加载完法度榜样后,就可以编写利用法度榜样进行读/写等操作了。

4.2 MiniGUI的移植

在嵌入式开拓情况中,自力的显示操作人机界面是异常需要的。它可以使嵌入式系统对PC系统的依附性降到最低,可以直接操作嵌入式系统并显示运行结果。MultiBus-CPU模块采纳标准的USB键盘、USB鼠标、VGA显示器作为人机交互界面,应用习气类同于PC机,简略单纯了开拓者的开拓历程,并且用户的应用历程也变得简单、快捷、易于操作。

MiniGUI是遵照GPL条目宣布的自由软件,其目标是为基于Linux的实时嵌入式系统供给一个轻量级的图形用户界面支持系统。与QT/Embedded、MicoroWindows等其他GUI比拟,MiniGUI的最显明特征便是轻型、占用资本少。据称MiniGUI能够在CPU主频为30MHz、仅有4 MB RAM的系统上正常运行,这是其他多种GUI所无法达到的。

MiniGUI在AT91RM9200上的移植包括4个步骤:

①构建Lin凯发k8网址1111ux交叉编译情况。平日应用的交叉编译对象是arm-Linux-gcc2.95.3版本。下载此交叉编译对象后在Linux内安装好,并且在PATH中添加/usr/local/arm-Linu凯发k8网址1111x/bin路径,交叉编译情况就构建好了。

②交叉编译MiniGUI,这是最关键的一步。首先从网高低载MiniGUI源法度榜样包(包括库文件和资本文件),以及其他支持图形界面的源法度榜样包;然后用上一步安装好的交叉编译对象对其进行编译,编译时可指定编译后库文件及资本文件的安装位置。

③拷贝MiniCUI资本到开拓板。将第2步编译好的库文件及资本文件拷贝到开拓板上。拷贝之前先用arm-Linux-strip敕令清除文件中的调试信息,这样就使文件体积大年夜大年夜缩小,可以满意嵌入式系统的必要。

④板载Linux的MiniGUI情况设置设置设备摆设摆设。将第2步安装好的MiniGUI设置设置设备摆设摆设文件MiniGUI.cfg下载到板子中,并将此中fbcon的defaultmode设置为相宜的显示模式。

结 语

本文基于嵌入式技巧设计了一种MultiBus-CPU模块,能够满意各类嵌入式开拓情况的设计要求。该模块软硬件均采纳模块化设计,采纳国外广泛利用的ModBus通信协议,可满意工业现场的测控必要。

您可能还会对下面的文章感兴趣: