關(guān)明江 嚴(yán)厚偉
(中國(guó)船舶重工集團(tuán)公司第七二三研究所 江蘇省揚(yáng)州市 225001)
通常來(lái)講,矩陣開(kāi)關(guān)就是以矩陣形式排列的開(kāi)關(guān),可以通過(guò)開(kāi)關(guān)控制靈活實(shí)現(xiàn)信號(hào)之間的互聯(lián)。開(kāi)關(guān)網(wǎng)絡(luò)是矩陣開(kāi)關(guān)的重要組成部分,擔(dān)負(fù)著控制信號(hào)流向的任務(wù),是實(shí)現(xiàn)自動(dòng)測(cè)試接口設(shè)計(jì)的關(guān)鍵[1]。在自動(dòng)測(cè)試設(shè)備中,矩陣開(kāi)關(guān)主要用來(lái)做信號(hào)切換,靈活分配系統(tǒng)的測(cè)試資源。自動(dòng)測(cè)試設(shè)備中的信號(hào)開(kāi)關(guān)系統(tǒng)通常由兩個(gè)或多個(gè)矩陣開(kāi)關(guān)組成,按照各種接口標(biāo)準(zhǔn)相互連接。在大型電子裝備中也常用到了開(kāi)關(guān)矩陣。
本文基于STM32F103 為控制核心設(shè)計(jì)了一種控制電路,主要通過(guò)與高性能的以太網(wǎng) 控制芯片W5100 組合來(lái)實(shí)現(xiàn)對(duì)矩陣開(kāi)關(guān)的控制,同時(shí)把需要保存的參數(shù)存儲(chǔ)在AT24C32 的E2PROM 中,并且進(jìn)行了STM32F103 的軟件編寫(xiě),在某開(kāi)關(guān)矩陣電路進(jìn)行了實(shí)際應(yīng)用。
該控制電路的設(shè)計(jì),主要功能包含:一組25 個(gè)TTL 電平的輸出接口,作為矩陣開(kāi)關(guān)的開(kāi)關(guān)控制信號(hào);網(wǎng)絡(luò)接口,通過(guò)UDP 協(xié)議與計(jì)算機(jī)通信,實(shí)現(xiàn)計(jì)算機(jī)對(duì)矩陣開(kāi)關(guān)的控制;記錄當(dāng)前矩陣開(kāi)關(guān)的開(kāi)關(guān)狀態(tài),作為斷電開(kāi)機(jī)后的矩陣狀態(tài)與斷電前一致;剩余接口可預(yù)留液晶顯示屏接口或者其余控制接口,為以后擴(kuò)展使用。
STM32 作為意法半導(dǎo)體推出的一種高性能的ARM 芯片,具有以下特點(diǎn)[2]:STM32F103 采用ARM 公司的高性能32 位Cortex-M3內(nèi)核,消耗功率低,具有睡眠,停止和待機(jī)三種省功率模式,最高工作頻率72MНz,可實(shí)現(xiàn)單周期乘法和硬件除法,片上集成最大512KB 的Flash 存儲(chǔ)器,最大64KB 的SRAM 存儲(chǔ)器,采用2.0-3.6V的電源供電,兼容5V 的I/O 管腳,最高可達(dá)80 個(gè)IO 口,STM32集成有上電復(fù)位、掉電復(fù)位和可編程的電壓探測(cè)器,使用4-16MНz的晶振,內(nèi)嵌8MНz 和40 kНz 兩個(gè)RC 振蕩電路,供CPU 時(shí)鐘使用的PLL,用于校準(zhǔn)RTC 的32kНz 的晶振。
STM32F103 具有最多可達(dá)80 個(gè)IO 口,足以滿足該矩陣開(kāi)關(guān)的控制設(shè)計(jì)需要。
網(wǎng)絡(luò)通信核心控制器為W5100,W5100 是一款多功能的單片網(wǎng)絡(luò)接口芯片,它內(nèi)部集成了全硬件的TCP/IP 協(xié)議棧,W5100 提供3 種接口訪問(wèn)方式:直接并行總線、間接并行總線和SPI 總線。W5100 與MCU 接口非常簡(jiǎn)單,就像訪問(wèn)外部存儲(chǔ)器一樣,我們無(wú)需深入了解TCP/IP 協(xié)議,也無(wú)需考慮以太網(wǎng)的控制,只需訪問(wèn)網(wǎng)絡(luò)控制器的寄存器,并靈活創(chuàng)建和選擇TCP 及UDP 套接字(Socket)函數(shù)就可以簡(jiǎn)單地實(shí)現(xiàn)網(wǎng)絡(luò)通信[3],且不需要操作系統(tǒng)的支持,其具有硬件電路簡(jiǎn)單、編程方便等特點(diǎn),解決了一般嵌入式設(shè)計(jì)的軟件設(shè)計(jì)復(fù)雜、網(wǎng)絡(luò)編程工作量大等問(wèn)題。
基于STM32 的矩陣開(kāi)關(guān)控制電路系統(tǒng)框圖如圖1 所示。
該電路主要包括:STM32F103 作為主控制器,是該控制電路的核心。主要功能包含通過(guò)SPI 口與網(wǎng)絡(luò)接口芯片W5100 連接,完成計(jì)算機(jī)顯控界面與該控制電路的通信;通過(guò)IO 口連接電平驅(qū)動(dòng)芯片對(duì)矩陣開(kāi)關(guān)中的開(kāi)關(guān)進(jìn)行控制;通過(guò)I2C 總線對(duì)E2PROM進(jìn)行讀寫(xiě),E2PROM 主要記錄保存最終的開(kāi)關(guān)狀態(tài)作為下次開(kāi)機(jī)時(shí)候的開(kāi)關(guān)初始狀態(tài)使用;電源驅(qū)動(dòng)芯片為整個(gè)電路提供供電需求,JTAG 口作為STM32 的程序下載和在線調(diào)試的接口;晶振為STM32 提供時(shí)鐘;復(fù)位電路完成STM32 的上電復(fù)位和加電時(shí)候的手動(dòng)開(kāi)關(guān)復(fù)位。
圖1:STM32 控制電路系統(tǒng)框圖
圖2:STM32 與W5100 連接圖
圖3:STM32 與AT24C32 的連接圖
網(wǎng)絡(luò)通信為該控制電路的核心之一,結(jié)合高性能ARM 處理器STM32 實(shí)現(xiàn)以太網(wǎng)的高速實(shí)時(shí)傳輸,STM32 完成對(duì)應(yīng)用程序的處理,W5100 實(shí)現(xiàn)數(shù)據(jù)傳輸和通信網(wǎng)絡(luò)協(xié)議的處理。STM32 與W5100 的通信采用SPI 模式,串行接口模式只需要4 個(gè)引腳進(jìn)行數(shù)據(jù)通信。這4 個(gè)引腳的定義分別為:從設(shè)備選擇(/SS)、串行時(shí)鐘(SCLK)、MOSI(主出從入)和MISO(主入從出),主控制器(SPI 的主設(shè)備)發(fā)出一系列指令與W5100 通信。
W5100 的SPI_EN引腳選擇SPI操作,SPI_EN 引腳必須通過(guò)一個(gè)10K 的電阻接到高電平,選擇W5100 的SPI 接口方式。STM32 與W5100 的連接圖如圖2 所示,其中STM32 為主模式,W5100 為從模式。
存儲(chǔ)芯片E2PROM 采用ATMEL 的AT24C32。AT24C32 是采用兩線串行工作方式的EEPROM,容量為32Kbits。利用I2C 總線對(duì)該芯片進(jìn)行讀寫(xiě),A0-A2:地址線,用來(lái)選擇存儲(chǔ)器的地址。WP:寫(xiě)保護(hù),高電平拒絕寫(xiě)入,低電平可以寫(xiě)入,即低電平有效,如果該引腳懸空,內(nèi)部自動(dòng)下拉到地。SCL:串行時(shí)鐘,用來(lái)指示什么時(shí)候數(shù)據(jù)線上是有效數(shù)據(jù)。SDA:串行數(shù)據(jù),用于數(shù)據(jù)傳送。我們可以采用STM32 自帶的I2C 總線,也可以通過(guò)IO 口模擬實(shí)現(xiàn)I2C 總線,然后與AT24C32 連接,通過(guò)IO 口控制AT24C32 的地址,實(shí)現(xiàn)對(duì)AT24C32 的讀寫(xiě)。STM32 與AT24C32 的連接圖如圖3。
基于STM32 的矩陣開(kāi)關(guān)控制電路,既可以實(shí)現(xiàn)與W5100 通過(guò)SPI 連接進(jìn)行網(wǎng)絡(luò)通信,也可以與AT24C32 通過(guò)I2C 總線讀寫(xiě)數(shù)據(jù),它還包含其它部分,比如:時(shí)鐘電路,復(fù)位電路,電源和地的供電電路、JTAG 下載接口電路、以及備用的擴(kuò)展電路等,該控制電路的主控部分即STM32F103 的原理圖如圖4 所示。
本設(shè)計(jì)中,軟件編寫(xiě)需要實(shí)現(xiàn)對(duì)W5100 的控制,從而實(shí)現(xiàn)計(jì)算機(jī)和控制電路的網(wǎng)絡(luò)通信,達(dá)到計(jì)算機(jī)對(duì)開(kāi)關(guān)矩陣的控制;同時(shí)需要把接收到的網(wǎng)絡(luò)報(bào)文轉(zhuǎn)化為控制高低電平作為矩陣開(kāi)關(guān)的開(kāi)關(guān)控制碼,同時(shí)把開(kāi)關(guān)狀態(tài)存儲(chǔ)在E2PROM。
流程如圖5 所示。
軟件編寫(xiě)按照?qǐng)D5 的操作流程,上電后首先對(duì)STM32 進(jìn)行初始化,包含配置系統(tǒng)時(shí)鐘,中斷,外設(shè)設(shè)置,SPI 口配置等,然后通過(guò)SPI 口對(duì)W5100 進(jìn)行初始化配置,設(shè)置好W5100 的工作模式、IP 地址、端口號(hào)等,然后讀出E2PROM 的矩陣開(kāi)關(guān)的開(kāi)關(guān)狀態(tài),并通過(guò)驅(qū)動(dòng)芯片下發(fā)給矩陣開(kāi)關(guān)。然后網(wǎng)口等待端口中斷接收計(jì)算機(jī)下發(fā)的UDP 報(bào)文,UDP 協(xié)議為使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP 數(shù)據(jù)包通過(guò)源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過(guò)目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP 報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0 到65535。一般來(lái)說(shuō),大于49151 的端口號(hào)都代表動(dòng)態(tài)端口。當(dāng)STM32 收到W5100 的端口中斷后,把收到的報(bào)文解析后通過(guò)驅(qū)動(dòng)芯片給矩陣開(kāi)關(guān)提供控制碼,同時(shí)把控制碼存儲(chǔ)到AT24C32 中供下次斷電后開(kāi)機(jī)使用。
軟件編寫(xiě)操作環(huán)境為Keil V4.10,采用C 語(yǔ)言編寫(xiě)程序。該程序編寫(xiě)盡量使用模塊化編程,模塊化編程是指將一個(gè)龐大的程序劃分為若干個(gè)功能獨(dú)立的模塊,對(duì)各個(gè)模塊進(jìn)行獨(dú)立開(kāi)發(fā),然后再將這些模塊統(tǒng)一合并為一個(gè)完整的程序。主程序就是模塊合并的過(guò)程,主體程序調(diào)用模塊的函數(shù)是通過(guò)包含模塊的頭文件來(lái)實(shí)現(xiàn),模塊的頭文件和源文件是模塊密不可分的兩個(gè)部分,缺一不可。軟件調(diào)試界面如圖6 所示。
經(jīng)過(guò)調(diào)試驗(yàn)證,該電路能達(dá)到矩陣開(kāi)關(guān)的設(shè)計(jì)要求,且該電路穩(wěn)定可靠、功耗低,能夠穩(wěn)定的實(shí)現(xiàn)對(duì)該矩陣開(kāi)關(guān)的控制。
本文以STM32 作為核心控制器設(shè)計(jì)了一種矩陣開(kāi)關(guān)的控制電路,并進(jìn)行了軟硬件設(shè)計(jì)。該電路通過(guò)網(wǎng)絡(luò)接口與計(jì)算機(jī)顯控軟件進(jìn)行通信,接收計(jì)算機(jī)顯控軟件發(fā)送的命令,在STM32 中對(duì)命令進(jìn)行解析,然后通過(guò)電平驅(qū)動(dòng)芯片發(fā)送給開(kāi)關(guān)矩陣作為其控制碼,同時(shí)把控制碼存儲(chǔ)在E2PROM 中,給下次開(kāi)機(jī)初始化使用。該設(shè)計(jì)經(jīng)過(guò)驗(yàn)證,是一種有效的矩陣開(kāi)關(guān)控制電路,同時(shí)改電路也可應(yīng)用在軍用和民用等眾多領(lǐng)域,具有應(yīng)用價(jià)值。
圖4:STM32F103 原理圖
圖5:軟件流程圖
圖6:Keil 軟件調(diào)試界面