关明江 严厚伟
(中国船舶重工集团公司第七二三研究所 江苏省扬州市 225001)
通常来讲,矩阵开关就是以矩阵形式排列的开关,可以通过开关控制灵活实现信号之间的互联。开关网络是矩阵开关的重要组成部分,担负着控制信号流向的任务,是实现自动测试接口设计的关键[1]。在自动测试设备中,矩阵开关主要用来做信号切换,灵活分配系统的测试资源。自动测试设备中的信号开关系统通常由两个或多个矩阵开关组成,按照各种接口标准相互连接。在大型电子装备中也常用到了开关矩阵。
本文基于STM32F103 为控制核心设计了一种控制电路,主要通过与高性能的以太网 控制芯片W5100 组合来实现对矩阵开关的控制,同时把需要保存的参数存储在AT24C32 的E2PROM 中,并且进行了STM32F103 的软件编写,在某开关矩阵电路进行了实际应用。
该控制电路的设计,主要功能包含:一组25 个TTL 电平的输出接口,作为矩阵开关的开关控制信号;网络接口,通过UDP 协议与计算机通信,实现计算机对矩阵开关的控制;记录当前矩阵开关的开关状态,作为断电开机后的矩阵状态与断电前一致;剩余接口可预留液晶显示屏接口或者其余控制接口,为以后扩展使用。
STM32 作为意法半导体推出的一种高性能的ARM 芯片,具有以下特点[2]:STM32F103 采用ARM 公司的高性能32 位Cortex-M3内核,消耗功率低,具有睡眠,停止和待机三种省功率模式,最高工作频率72MНz,可实现单周期乘法和硬件除法,片上集成最大512KB 的Flash 存储器,最大64KB 的SRAM 存储器,采用2.0-3.6V的电源供电,兼容5V 的I/O 管脚,最高可达80 个IO 口,STM32集成有上电复位、掉电复位和可编程的电压探测器,使用4-16MНz的晶振,内嵌8MНz 和40 kНz 两个RC 振荡电路,供CPU 时钟使用的PLL,用于校准RTC 的32kНz 的晶振。
STM32F103 具有最多可达80 个IO 口,足以满足该矩阵开关的控制设计需要。
网络通信核心控制器为W5100,W5100 是一款多功能的单片网络接口芯片,它内部集成了全硬件的TCP/IP 协议栈,W5100 提供3 种接口访问方式:直接并行总线、间接并行总线和SPI 总线。W5100 与MCU 接口非常简单,就像访问外部存储器一样,我们无需深入了解TCP/IP 协议,也无需考虑以太网的控制,只需访问网络控制器的寄存器,并灵活创建和选择TCP 及UDP 套接字(Socket)函数就可以简单地实现网络通信[3],且不需要操作系统的支持,其具有硬件电路简单、编程方便等特点,解决了一般嵌入式设计的软件设计复杂、网络编程工作量大等问题。
基于STM32 的矩阵开关控制电路系统框图如图1 所示。
该电路主要包括:STM32F103 作为主控制器,是该控制电路的核心。主要功能包含通过SPI 口与网络接口芯片W5100 连接,完成计算机显控界面与该控制电路的通信;通过IO 口连接电平驱动芯片对矩阵开关中的开关进行控制;通过I2C 总线对E2PROM进行读写,E2PROM 主要记录保存最终的开关状态作为下次开机时候的开关初始状态使用;电源驱动芯片为整个电路提供供电需求,JTAG 口作为STM32 的程序下载和在线调试的接口;晶振为STM32 提供时钟;复位电路完成STM32 的上电复位和加电时候的手动开关复位。
图1:STM32 控制电路系统框图
图2:STM32 与W5100 连接图
图3:STM32 与AT24C32 的连接图
网络通信为该控制电路的核心之一,结合高性能ARM 处理器STM32 实现以太网的高速实时传输,STM32 完成对应用程序的处理,W5100 实现数据传输和通信网络协议的处理。STM32 与W5100 的通信采用SPI 模式,串行接口模式只需要4 个引脚进行数据通信。这4 个引脚的定义分别为:从设备选择(/SS)、串行时钟(SCLK)、MOSI(主出从入)和MISO(主入从出),主控制器(SPI 的主设备)发出一系列指令与W5100 通信。
W5100 的SPI_EN引脚选择SPI操作,SPI_EN 引脚必须通过一个10K 的电阻接到高电平,选择W5100 的SPI 接口方式。STM32 与W5100 的连接图如图2 所示,其中STM32 为主模式,W5100 为从模式。
存储芯片E2PROM 采用ATMEL 的AT24C32。AT24C32 是采用两线串行工作方式的EEPROM,容量为32Kbits。利用I2C 总线对该芯片进行读写,A0-A2:地址线,用来选择存储器的地址。WP:写保护,高电平拒绝写入,低电平可以写入,即低电平有效,如果该引脚悬空,内部自动下拉到地。SCL:串行时钟,用来指示什么时候数据线上是有效数据。SDA:串行数据,用于数据传送。我们可以采用STM32 自带的I2C 总线,也可以通过IO 口模拟实现I2C 总线,然后与AT24C32 连接,通过IO 口控制AT24C32 的地址,实现对AT24C32 的读写。STM32 与AT24C32 的连接图如图3。
基于STM32 的矩阵开关控制电路,既可以实现与W5100 通过SPI 连接进行网络通信,也可以与AT24C32 通过I2C 总线读写数据,它还包含其它部分,比如:时钟电路,复位电路,电源和地的供电电路、JTAG 下载接口电路、以及备用的扩展电路等,该控制电路的主控部分即STM32F103 的原理图如图4 所示。
本设计中,软件编写需要实现对W5100 的控制,从而实现计算机和控制电路的网络通信,达到计算机对开关矩阵的控制;同时需要把接收到的网络报文转化为控制高低电平作为矩阵开关的开关控制码,同时把开关状态存储在E2PROM。
流程如图5 所示。
软件编写按照图5 的操作流程,上电后首先对STM32 进行初始化,包含配置系统时钟,中断,外设设置,SPI 口配置等,然后通过SPI 口对W5100 进行初始化配置,设置好W5100 的工作模式、IP 地址、端口号等,然后读出E2PROM 的矩阵开关的开关状态,并通过驱动芯片下发给矩阵开关。然后网口等待端口中断接收计算机下发的UDP 报文,UDP 协议为使用端口号为不同的应用保留其各自的数据传输通道。数据发送一方(可以是客户端或服务器端)将UDP 数据包通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP 报头使用两个字节存放端口号,所以端口号的有效范围是从0 到65535。一般来说,大于49151 的端口号都代表动态端口。当STM32 收到W5100 的端口中断后,把收到的报文解析后通过驱动芯片给矩阵开关提供控制码,同时把控制码存储到AT24C32 中供下次断电后开机使用。
软件编写操作环境为Keil V4.10,采用C 语言编写程序。该程序编写尽量使用模块化编程,模块化编程是指将一个庞大的程序划分为若干个功能独立的模块,对各个模块进行独立开发,然后再将这些模块统一合并为一个完整的程序。主程序就是模块合并的过程,主体程序调用模块的函数是通过包含模块的头文件来实现,模块的头文件和源文件是模块密不可分的两个部分,缺一不可。软件调试界面如图6 所示。
经过调试验证,该电路能达到矩阵开关的设计要求,且该电路稳定可靠、功耗低,能够稳定的实现对该矩阵开关的控制。
本文以STM32 作为核心控制器设计了一种矩阵开关的控制电路,并进行了软硬件设计。该电路通过网络接口与计算机显控软件进行通信,接收计算机显控软件发送的命令,在STM32 中对命令进行解析,然后通过电平驱动芯片发送给开关矩阵作为其控制码,同时把控制码存储在E2PROM 中,给下次开机初始化使用。该设计经过验证,是一种有效的矩阵开关控制电路,同时改电路也可应用在军用和民用等众多领域,具有应用价值。
图4:STM32F103 原理图
图5:软件流程图
图6:Keil 软件调试界面