微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > SSPA电源工作状态远程监测系统设计

SSPA电源工作状态远程监测系统设计

时间:12-09 来源:互联网 点击:

固态功率放大器SSPA(Solid State Power Amplifier)具有体积小、重量轻、工作电压低、稳定性高等优点,被广泛用于各个领域中,在通信系统中也占据着越来越重要的地位。固态功率放大器需要将多路功率器件进行合成,这就需要多路电源进行稳定供电,在工作中需要对每一路电源的工作状态进行监测,主要监测电源的工作电流。对固态功率放大器工作时的电源工作状态进行监测,并通过网络发送至远程主机进行分析和处理,以确保系统能够正常工作。
1 系统硬件结构
SSPA远程监测系统由电源模块、模拟开关、嵌入式处理器AT91SAM7X256和DM9161网卡等构成。多路电源的工作电流经过电路转换为电压,输入到系统中,系统通过模拟开关的切换实现分时采样,得到137路电源的工作电流数据,并将数据打包,然后DM9161通过网络将数据发送至远程主机,实现了远程采集和监测功能,当采集的工作参数超过设定值时实现报警,确保系统工作正常。监测系统构成如图1所示。

2 系统软件设计
2.1
μC/OS-II系统移植
μC/OS-II是一个优秀的嵌入式实时操作系统,应用中首先应完成系统的移植。所谓移植,就是使一个实时内核运行在某个微控制器或微处理器上,并对与处理器相关的代码进行修改。系统移植主要包括以下几个内容:
(1)在OS_CPU.H头文件中完成配置和定义。其中主要包括与编译无关的数据类型的定义;OS_ENTER_CRI-TICAL、OS_EXIT_CRITICAL、OS_TASK_SW 3个宏的定义,这3个宏定义分别表示进入中断、退出中断和任务切换;还需要完成堆栈生长方向的定义[1]。
(2)编写OS_CPU_C.C,其中主要的工作是编写6个C语言的函数。其中OSTaskStkInit()是任务堆栈初始化函数,这是进行移植时必须重视的函数,其他5个函数都是Hook函数,供系统内核扩展。
(3)编写OS_CPU_A.ASM,主要需要编写3个汇编语言函数,分别是高优先级就绪任务启动函数OSStartHighRdy()、任务级的切换函数OSCtxSw()和中断下的任务切换函数OSIntCtxSw()[2]。
2.2 uIP网络协议移植
uIP由瑞典计算机科学学院(网络嵌入式系统小组)的Adam Dunkels开发,是一种免费的、可实现的、极小的TCP/IP协议栈。它可以看作是一个代码库,通过一系列函数为系统底层和应用程序之间提供通信,对于系统本身,它内部的协议是透明的,提高了协议的适用性[3]。
uIP使用前需要进行移植,移植的主要内容就是修改网络驱动部分的内容,包括以下几个步骤:
(1)编写EMAC网络接口库,该库文件中主要提供了一系列对ARM控制器中EMAC接口进行操作的函数,控制器对网卡的操作都是通过该接口进行,包括了EMAC模块的初始化工作以及与网卡芯片的通信函数等。
EMAC_Init(AT91C_ID_EMAC,MacAddress.addr,EMAC_CAF_ENABLE, EMAC_NBC_DISABLE);//初始化EMAC接口
……
(2)编写网卡芯片DM9161的驱动程序,包括了DM9161的芯片初始化以及数据发送和数据接收操作等。
MACB_Init(pMacb, BOARD_EMAC_PHY_ADDR);
//初始化DM9161
……
(3)完成本系统uIP的配置选项,包括数据存储方式、缓存区大小、IP地址、MAC地址、默认路由、子网掩码、uIP 1 s时间所需要的中断数和一些基本数据类型的定义,以及最大连接数、数据包长度以及应用层协议的支持等[4]。
(4)编写应用层函数UIP_APPCALL,uIP协议在接收到底层数据之后,需要上层函数处理时,会调用函数UIP_APPCALL。本系统中通过使用宏定义#define UIP_
APPCALL sample_appcall将该函数定向到sample_appcall。该函数通过查询当前状态来实现各种处理机制。当远程主机建立一个连接后,初始化缓存区给当前连接使用;有新数据到达时读取数据包,分析数据包的信息后,返回给远程主机所需要的信息。当连接轮询次数达到设定值时,中止当前连接,当远程主机发出断开连接命令或连接超时后,断开当前连接[5]。uIP协议栈通过调用该函数实现网络数据的收发。
2.3 系统任务设计
系统的实际任务有启动任务AppStartTask()、AD采集任务AD_sampleTask()、网络主任务Network_MainTask()、网络周期任务Network_PerioTask()及网络数据包接收任务Network_PollTask(),其优先级从高到低。
AppStartTask()是在开始时启动其他任务以及在系统运行时通过LED" style="color:; text-decoration: none; FONT-weight: bold; ">LED灯指示系统是否正常工作。AD_sample-
Task()是采样任务,负责各监测点数据的获取和处理工作。Network_PollTask()、Network_MainTask()和Network_PerioTask() 3个任务是网络部分的内容,并且使用一个信号量pNetwork_newdata来实现任务之间的通信。
数据包接收任务Network_PollTask()是3个网络任务中优先级最低的一个,负责监听在指定的端口上是否有连接请求或数据请求,当一个新的请求到达该监听端口后,该任务将收到的数据包缓存到uip_buf中,设置数据长度变量uip_len,然后该任务会发送一个信号量pNetwork_newdata给网络主任务Network_MainTask()。
网络主任务Network_MainTask()是网络任务中优先级最高的,完成网络数据处理并向应用层分发。平时一直处于挂起的状态,当收到数据包发送任务发送的信号量之后,该任务调用函数uip_process()处理数据包信息,根据不同信息完成数据包的发送,然后继续被挂起。
Network_PerioTask()则是周期性运行的任务,其优先级处于另两个任务之间,用于对连接的管理,处理连接超时数据包重发。这3个任务互相协作,实现了网络的通信[6]。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top