引言
在高温、高压、强放射性等恶劣环境下,由于测量者不能长期置身其中,使得测控非常困难。在nios ii软核cpu上移植μ c/os-ii实时操作系统和tcp/ip协议栈,容易实现网络通信,为远程测控提供了条件。以此为基础设计的嵌入式系统具有结构小巧、实时性强、稳定性高等特点,在工业测控领域中应用前景广泛。
1 远程测控系统的硬件架构
远程测控系统的硬件架构如图1所示。从图中可以看出,nios ii软核cpu及各种所需的外设ip均通过sopcbui lder集成在一片fpga中,构成本系统所需硬件的可重构部分,实现真正的可编程片上系统(sopc)。
1.1 i p核设计
为了在低成本情况下完成预定功能,选择了cyclone fpga系列器件中的ep1c6。ep1c6无论从逻辑资源还是存储器均能满足设计要求。在本系统中,我们设计或选用了如下主要的ip核。
1.1.1 uart带avalon接口的通用异步接收器/发送器。uart内核执行rs-232协议,它为fpga上的嵌入式系统和外部设备提供了串行字符流的通信方式。带avalon接口的jtag-uart内核还提供nios cpu系统到pc机的连接通路,通过jtag-uart在pc机上调试nioscpu所需要的程序,并通过监控程序对整个系统的运行进行控制。
1.1.2 gpio。并行输入/输出内核。它提供avalon从控制器端口到通用i/o口间的映射接口。该ip核是常规的外设控制接口。通过gpio,对内控制sopc系统中的其他部分,对外充当并行i/o接口,读取开关量,对led、lcd等外设进行控制。
1.1.3 sdram 该ip核是外部存储器sdram的控制接口。通过它完成sdram的时序控制。软件设计中, sdram的时序控制对用户是完全透明的。
1.1.4 epcs。带avalon接口的epcs设备控制器内核。该ip核允许nios ii系统访问epcs串行配置芯片,该芯片主要用于存储程序代码或一些非易失性数据。
1.1.5三态总线桥。该ip核是avalon和avalon-tribus总线以及avalon和wishbone总线的桥接控制器,用于连接两种不同总线。考虑有些外设需要自行开发i2cip核,这些外设不能直接连到avalon总线上,需要通过桥接控制器。
1.2 检测和执行模块
由于远程测控系统设计的目的不同,该模块选用的ip核也不完全相同。sopc builder自带的ip库中并不包含i2c配置接口模块,该模块需要根据配制芯片的寄存器特点和功能进行专门设计,并以i2c核的形式通过sopcbuilder连接到系统的avalon总线上。
1.3 传输接口模块
本系统有三种数据传输方式:串口、usb接口和以太网接口。串口、usb接口通过uart接avalon总线。以太网接口芯片选用了smsc公司的lan91c11 1芯片,该芯片内部集成了以太网介质访问(mac)及物理层收发器(phy),支持10/1oom全双工传输模式、自动协商等功能。lan91c111芯片通过fpga内的适配器模块连接到ep1c6内部的avalon总线上,从而实现系统接入internet。
2 远程测控系统的软件体系
本系统有两大功能:数据的远程采集及传送。考虑到使用互联网进行远程数据传输的复杂性,在设计中使用嵌入式操作系统和tcp/ip协议栈是必然选择。
软件系统体系结构如图2所示。主要包括嵌入式操作系统的移植;网络协议栈的实现;应用级代码编写等部分。为了方便用户编程,nios ii ide提供了设备驱动程序,即硬件抽象层(hal)系统库。hal应用程序接口(api)与ansi c标准库综合在一起,可以使用类似c语言的库函数来访问硬件设备或文件,如printf()、fopen()等,而无须关心底层硬件的实现细节。
2.1 移植μc/os-ii和lwip
μc/os-ii是一种可移植、可固化、占先式多任务实时操作系统内核。其规模较小、实时性和可靠性较高,nios ii集成开发环境(ide)对μ c/os-ii具有良好的支持,故μc/os-ii是嵌入式操作系统的首选。它通过为每个任务分配单独的任务堆栈来保存任务工作环境,提供任务管理和调度服务。
轻量级网络协议(lightweight ip,lwip)是tcp/ip协议栈的一种实现,它是一种专门针对嵌入式系统应用而设计的网络通信协议,由于lwip实现的关键在于削减代码大小和内存消耗,但可以完成传统的tcp/ip协议的大部分功能,通常只需要大约40k的rom和几十k的ram即可运行,在网络协议栈初始化后,使用标准套接字api创建新任务访问网络协议栈。
2.2 通信服务器
本任务通过sys_thread_new()函数创建,作为服务器监听约定的端口,等待远程主机的连接,提取远程主机的命令,通过消息队列将所获得的命令发送到测控任务。lwip提供了标准的berkeley套接字编程界面,这个界面提供了三种类型,这里使用了流式套接字,这是一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,按发送顺序接收。通常服务器接收到并发服务请求后,要激活一个新进程来处理这个客户请求。
3 远程测控系统的实现
3.1 系统初始化
系统初始化是指系统上电复位后到运行main()函数前,初始化硬件,构建应用程序运行环境的过程。如图3所示,nios ii的hal程序库为用户提供了这段代码,代码的入口标号是"reset"。
程序先对cpu进行初始化,其功能包括初始化指令和数据cache,设置堆栈指针(stack pointer)等,然后调用"alt main()"函数。
alt main()函数对cpu及外设初始化,其功能包括调用alt os int()函数初始化os,默认情况下完成对μc/os-ii初始化,调用alt_sys_int()函数初始化系统设备及软件模块等,然后调用"main()"函数。
3.2 主函数main()
主函数"main()"负责进行网络监听,响应终端的tcp连接请求。若同时要求能与多个终端建立tcp连接和传输数据,需要为每个终端的网络数据处理都开辟一个新的线程,主函数的流程如图4所示。
服务器为每个客户端都开一个线程专门与之进行socket通信。socket数据处理线程主要包括三个方面工作:从套接字上接收数据包;解析并存储数据包;打包并发送数据包等。
3.3 远程测控实验
为验证设计方案,选用瑞士sensirion公司生产的传感器sht75,测控温、湿度,该一体化数字式传感器将敏感元件、信号放大器、模数转换器、数字接口电路集成在同一芯片上,使用i2c ip核可以方便地和处理器连接。实验结果表明,该设计切实可行。
4 结束语
本设计基于sopc和嵌入式系统技术,实现了远程测控的要求。此设计可应用于各种恶劣环境,稍加改进,也可适用于网络信息家电、家庭安全等方面。随着芯片技术和总线技术的发展,嵌入式远程网络化测控在工业中的应用定会更加广泛。











