李玉澤,劉鵬
(1.長春理工大學(xué) 電子信息工程學(xué)院,長春 130022;2.長春理工大學(xué) 空間光電技術(shù)研究所,長春 130022)
?
一種基于STM32的CAN_Ethernet網(wǎng)關(guān)設(shè)計
李玉澤1,劉鵬2
(1.長春理工大學(xué)電子信息工程學(xué)院,長春130022;2.長春理工大學(xué)空間光電技術(shù)研究所,長春130022)
摘要:隨著工業(yè)自動化程度的提高,對實現(xiàn)工業(yè)現(xiàn)場設(shè)備的實時監(jiān)控,完成工業(yè)現(xiàn)場信息與遠程網(wǎng)絡(luò)信息管理、共享的需求更加迫切。針對工業(yè)現(xiàn)場信息與以太網(wǎng)互聯(lián)互通的問題,在研究TCP/IP協(xié)議基本原理基礎(chǔ)上,將CAN總線數(shù)據(jù)轉(zhuǎn)換為以太網(wǎng)數(shù)據(jù)傳輸,實現(xiàn)一種以STM32作為控制核心的CAN_Ethernet網(wǎng)關(guān)。該網(wǎng)關(guān)采用10/100M以太網(wǎng)控制器DM9000A作為物理層接口設(shè)備,利用RT-Thread實時操作系統(tǒng)的LwIP協(xié)議棧(Light weight Internet Protocol)將CAN數(shù)據(jù)轉(zhuǎn)換為適合以太網(wǎng)傳輸數(shù)據(jù)幀,并傳送至TCP服務(wù)器,可以實現(xiàn)對工業(yè)現(xiàn)場遠程監(jiān)測、管理。經(jīng)實驗驗證,該網(wǎng)關(guān)工作正常,能夠為工業(yè)設(shè)備接入互聯(lián)網(wǎng)提供參考。
關(guān)鍵詞:CAN總線;以太網(wǎng);STM32F103ZET6;網(wǎng)關(guān);RT-Thread
工業(yè)4.0的時代已經(jīng)來臨,智能化生產(chǎn)系統(tǒng)及過程是大勢所趨,這就要求對工業(yè)生產(chǎn)過程進行實時監(jiān)控,信息能夠遠程分析反饋。CAN總線具有較好的通訊實時性、可靠性、網(wǎng)絡(luò)安全性并且結(jié)構(gòu)簡單[1-3],被廣泛應(yīng)用在工業(yè)生產(chǎn)中,但其傳輸距離有限,不能滿足智能化生產(chǎn)的要求?,F(xiàn)有工業(yè)設(shè)備有接入互聯(lián)網(wǎng)的需求,然而更換新設(shè)備代價較高,因此本文設(shè)計一種可以方便工業(yè)設(shè)備擴展的CAN_Ethernet網(wǎng)關(guān),來實現(xiàn)設(shè)備聯(lián)網(wǎng)交互功能。
網(wǎng)關(guān)由系統(tǒng)控制核心、CAN收發(fā)器單元、以太網(wǎng)控制器DM9000A單元,PC終端單元組成,如圖1所示。系統(tǒng)以CAN子節(jié)點數(shù)據(jù)為數(shù)據(jù)源,遵循CAN總線協(xié)議經(jīng)由CAN控制器控制的CAN收發(fā)器進入STM32芯片進行數(shù)據(jù)緩沖。STM32利用RT-Thread的可選組件LwIP協(xié)議棧將接收到的緩沖數(shù)據(jù)解析,并將其轉(zhuǎn)換為DM9000A網(wǎng)卡格式數(shù)據(jù)包,然后驅(qū)動內(nèi)部FSMC外設(shè)以并行數(shù)據(jù)傳輸方式與以太網(wǎng)控制器DM9000A通信。DM9000A數(shù)據(jù)流經(jīng)過RJ45端口進入以太網(wǎng)鏈路,通過以太網(wǎng)網(wǎng)線傳送數(shù)據(jù)至PC服務(wù)器。
圖1 系統(tǒng)總體框圖
2.1系統(tǒng)控制核心
系統(tǒng)控制核心采用ST公司的STM32F103 ZET6。它是基于Cortex?-M3內(nèi)核的32位單片機,最高72MHz工作頻率,能夠?qū)崿F(xiàn)存儲器0等待周期訪問,帶有4個片選的靜態(tài)存儲器控制器即FSMC(Flexible Static Memory Controller),CAN控制器、SDIO控制器、USB設(shè)備控制器、11個定時器、3個ADC、13個通信接口(USART、II2C、SPI)以及大量可用I/O[2]。其豐富的外設(shè)及I/O接口為以后設(shè)備功能進一步升級擴展預(yù)留了空間。
2.2CAN收發(fā)器單元
本文選用飛利浦公司的TJA1050T型CAN收發(fā)器,實現(xiàn)CAN控制器與CAN總線數(shù)據(jù)交互功能。該收發(fā)器最高支持1Mbps總線速率,能夠接入不少于110個CAN數(shù)據(jù)節(jié)點,最重要的是掉電節(jié)點不會對CAN總線造成影響。CAN子節(jié)點的數(shù)據(jù)經(jīng)收發(fā)器變換電平送入CAN控制器,之后交由STM32對數(shù)據(jù)進行后期處理,接口電路如圖2所示。
圖2 CAN收發(fā)器單元
2.3以太網(wǎng)控制器DM9000A單元
STM32F103內(nèi)部沒有集成以太網(wǎng)控制器,因此必須外接網(wǎng)卡才能實現(xiàn)TCP/IP功能。本系統(tǒng)采用DAVICOM公司的DM9000A以太網(wǎng)控制器,它是一款高度集成的低功耗芯片,自身帶有10/100M PHY和4K大小SRAM,允許微處理器以8位或16位模式訪問內(nèi)部存儲器[4]。由于工業(yè)設(shè)備對實時性有一定要求,故DM9000A采用16位模式加快數(shù)據(jù)傳輸速率。STM32F103自身集成FSMC驅(qū)動器,可以方便的驅(qū)動各種SRAM、NorFlash、Nandflash等存儲外設(shè)。FSMC以并行方式訪問外部存儲設(shè)備,配置正確的FSMC能夠?qū)崿F(xiàn)對存儲外設(shè)訪問過程的時序自動化,滿足驅(qū)動16位模式DM9000A的同時,簡化了程序設(shè)計復(fù)雜度,提高了數(shù)據(jù)傳輸速率。
RJ45為內(nèi)部集成網(wǎng)絡(luò)變壓器網(wǎng)線接口,一端與DM9000A直連,另一端為網(wǎng)線接口。由于隔離網(wǎng)線連接的不同設(shè)備間電平不盡相同,考慮到保護DM9000A網(wǎng)卡不受隔離網(wǎng)線影響,內(nèi)部集成網(wǎng)絡(luò)變壓器進行網(wǎng)絡(luò)隔離,防止不同電壓通過網(wǎng)線傳輸損壞設(shè)備。以太網(wǎng)控制器DM9000A和RJ45接口如圖3所示。
本系統(tǒng)軟件設(shè)計主要包括線程調(diào)度模型設(shè)計、RT-Thread實時操作系統(tǒng)移植、應(yīng)用程序編寫。本網(wǎng)關(guān)使用輕量級LwIP協(xié)議棧組件完成網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換功能[6]。T-Thread負責(zé)網(wǎng)關(guān)各單元協(xié)同工作,包括前端CAN總線數(shù)據(jù)交互、多線程任務(wù)調(diào)度、LwIP協(xié)議棧線程數(shù)據(jù)解析、PC服務(wù)器端應(yīng)用交互。以RT-Thread為核心,將程序模塊化處理,有利后期修改調(diào)試。
圖3 DM9000A以太網(wǎng)控制器和RJ45接口
3.1線程調(diào)度模型
系統(tǒng)以RT-Thread為核心,將CAN總線數(shù)據(jù)交互、LwIP協(xié)議棧、應(yīng)用層程序模塊化,每個單元分別建立獨立線程,線程之間采取信號量、郵箱方式通信,簡化程序復(fù)雜度,線程調(diào)度模型如圖4所示。RT-Thread主要工作線程包括APP應(yīng)用線程、CAN數(shù)據(jù)線程、LwIP協(xié)議棧線程、空閑線程。
系統(tǒng)初始化后,CAN數(shù)據(jù)線程掛起無限等待獲取CAN_RX、CAN_TX信號量,CAN收發(fā)器接收到CAN總線數(shù)據(jù)釋放CAN_RX信號量,發(fā)送系統(tǒng)緩沖數(shù)據(jù)則釋放CAN_TX信號量,CAN數(shù)據(jù)線程獲取信號量后喚醒進入就緒狀態(tài)。LwIP線程掛起等待DM9000A_RX、DM9000A_TX信號量,當(dāng)DM9000A網(wǎng)卡發(fā)送、接收數(shù)據(jù)時釋放DM9000A_TX、DM9000A_RX信號量。LwIP線程獲取信號量后喚醒進入就緒態(tài),等待下一次內(nèi)核線程調(diào)度,若LwIP線程為當(dāng)前優(yōu)先級最高線程,則獲得MCU的使用權(quán)執(zhí)行LwIP線程。若CAN線程、LwIP線程都處于掛起狀態(tài),則APP線程獲取MCU使用權(quán),執(zhí)行APP線程。為了提高數(shù)據(jù)接收發(fā)送實時性,需設(shè)置CAN線程、LwIP線程優(yōu)先級高于APP線程,即APP線程能夠被CAN線程、LwIP線程搶占。CAN線程、LwIP線程、APP線程均處于掛起狀態(tài)時,內(nèi)核執(zhí)行空閑線程,當(dāng)其他任意一個線程喚醒時,該喚醒線程則搶占空閑線程執(zhí)行。APP線程為用戶應(yīng)用程序線程,提供與CAN數(shù)據(jù)線程、LwIP協(xié)議棧線程間通信的API函數(shù),用戶可根據(jù)自身需求使用對應(yīng)API函數(shù)。本文建立的網(wǎng)關(guān)系統(tǒng)為TCP客戶端,使用部分套接字API函數(shù)如下:
int socket(int domain,int type,int protocol)
int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen)
int send(int sockfd,const void *msg,size_t len,int flags)
int recv(int socket,void *buf,size_t len,int flags)
圖4 線程調(diào)度模型圖
3.2RT-Thread與LwIP組件移植
RT-Thread是由中國開源社區(qū)開發(fā)的遵循GPLv2+許可證的一款實時操作系統(tǒng),內(nèi)核穩(wěn)定高效,支持線程優(yōu)先級搶占與時間片輪轉(zhuǎn)混合模式,包括LwIP、RTGUI、Finsh、文件系統(tǒng)等眾多組件[5]。RT-Thread使用scons構(gòu)建工具組織工程文件,支持組件裁剪和可選擇板級驅(qū)動包,修改板級驅(qū)動包中的rtconfig.h配置文件,即可實現(xiàn)不同組件、驅(qū)動包的選擇。本文采用這種方式構(gòu)建工程,修改STM32f10x板級驅(qū)動包中的rtconfig.h配置文件,添加宏定義:
#define RT_USING_LWIP
#define RT_USING_LWIP141
#define RT_USING_CONSOLE
使用安裝好的scons工具,命令行下進入STM32f10x板級驅(qū)動包目錄,輸入命令即可構(gòu)建工程。
Scons --target=mdk4 -s
構(gòu)建完成工程中包含針對STM32F103ZET6移植完畢的RT-Thread內(nèi)核、LwIP協(xié)議棧、串口調(diào)試終端。
板級驅(qū)動移植需添加DM9000a.h、DM9000a.c文件。主要工作對STM32的FSMC外設(shè)驅(qū)動初始化進行配置,完成網(wǎng)卡結(jié)構(gòu)體回調(diào)函數(shù)功能,向系統(tǒng)注冊當(dāng)前網(wǎng)卡設(shè)備?;卣{(diào)函數(shù)包括網(wǎng)卡初始化、打開、關(guān)閉、讀取數(shù)據(jù)、發(fā)送數(shù)據(jù)、控制傳輸、接收線程入口函數(shù)、發(fā)送線程入口函數(shù),部分代碼如下所示:
3.3應(yīng)用程序編寫
系統(tǒng)上電復(fù)位后,進行板級初始化、操作系統(tǒng)初始化,系統(tǒng)操作控制權(quán)交予RT-Thread內(nèi)核。內(nèi)核無限等待接收命令,若接收到命令,則判斷命令類型。命令分為三種,分別為發(fā)送請求、接收請求、和其他用戶指令。
發(fā)送請求命令,判定為發(fā)送請求后,喚醒CAN線程等待接收CAN總線數(shù)據(jù),正確接收數(shù)據(jù)后將其存入緩沖區(qū),向LwIP線程發(fā)送數(shù)據(jù)郵箱。LwIP協(xié)議棧負責(zé)解析緩沖數(shù)據(jù)、轉(zhuǎn)換以太網(wǎng)幀格式,通過DM9000A以太網(wǎng)控制器發(fā)送至PC端TCP服務(wù)器。
接收請求命令,判定為接收請求后,喚醒LwIP線程等待接收以太網(wǎng)數(shù)據(jù)。LwIP線程接收數(shù)據(jù)郵箱后,經(jīng)LwIP協(xié)議棧解析數(shù)據(jù),存入數(shù)據(jù)緩沖區(qū)。CAN線程將已緩沖數(shù)據(jù)轉(zhuǎn)換為CAN總線數(shù)據(jù),通過CAN收發(fā)器發(fā)送至CAN節(jié)點。
圖5 程序流程圖
其他用戶命令,若判斷非發(fā)送請求、接收請求命令,則繼續(xù)判斷是否為其他用戶命令。其他用戶命令包括系統(tǒng)調(diào)試、串口通信等用戶附加擴展功能。若非其他用戶命令,則認為系統(tǒng)命令錯誤,進入錯誤處理程序,程序流程圖如圖5所示。
本文在PC端建立了一個簡單的TCP服務(wù)器來驗證網(wǎng)關(guān)工作性能。測試系統(tǒng)使用3個CAN子節(jié)點組成小型CAN局域網(wǎng)絡(luò),每個CAN子節(jié)點分別連接一個STM32控制器,并使用其片上12位ADC采集固定電壓值作為被測數(shù)據(jù)源。電壓基準為3.3V,預(yù)設(shè)節(jié)點電壓值分別為CAN1節(jié)點3.0V,CAN2節(jié)點2.0V,CAN3節(jié)點1.0V。
網(wǎng)關(guān)工作于TCP客戶端模式,PC機作為TCP服務(wù)器接收CAN子節(jié)點傳輸電壓值[7]。設(shè)置TCP服務(wù)器端口號為80,IP地址為192.168.0.3,網(wǎng)關(guān)192.168.0.1,并開啟監(jiān)聽模式。LwIP協(xié)議棧初試化配置中,將TCP客戶端IP地址設(shè)置為192.168.0.2,子網(wǎng)掩碼255.255.255.0,網(wǎng)關(guān)192.168.0.1。網(wǎng)關(guān)初始化完成后,TCP客戶端向TCP服務(wù)器端發(fā)送連接請求,TCP服務(wù)器端與客戶端經(jīng)過三次握手,建立穩(wěn)定的TCP連接。
圖6 TCP服務(wù)器接收數(shù)據(jù)圖
表1 服務(wù)器接收統(tǒng)計表
本文應(yīng)對工業(yè)設(shè)備遠程實時監(jiān)控需求,實現(xiàn)了一種基于STM32的CAN_Ethernet網(wǎng)關(guān)。經(jīng)測試該網(wǎng)關(guān)系統(tǒng)可以穩(wěn)定運行,能夠解決工業(yè)總線傳輸距離不足的問題。
參考文獻
[1]韓成浩,高曉紅.CAN總線技術(shù)及其應(yīng)用[J].制造業(yè)自動化,2010,32(2):146-149.
[2]孫書鷹,陳志佳,寇超.新一代嵌入式微處理器STM32F103開發(fā)與應(yīng)用[J].微計算機應(yīng)用,2010,31 (12):59-63.
[3]張榮,安志勇,孫敏,等.基于CAN總線的足球機器人通訊系統(tǒng)設(shè)計[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2011,34(2):87-89.
[4]于春雪.基于STM32F107的高速以太網(wǎng)接口設(shè)計與應(yīng)用[J].電聲技術(shù),2011,35(9):63-67.
[5]RT-Thread開發(fā)組.RT-Thread編程指南[EB/OL]. (2010-03-18).[2015-03-31].http://www.rt-thread. org/.
[6]趙研,谷弘毅.基于ARM的以太網(wǎng)通信控制器[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2010,33(2):147-150.
[7]楊林楠,李紅剛,張素萍,等.基于ARM9的嵌入式Web服務(wù)器研究[J].計算機測量與控制,2008,16(12):1939-1942.
The Design of CAN_Ethernet Converter Based on STM32
LI Yuze1,LIU Peng2
(1.School of Electronics and Information Engineering,Changchun University of Science and Technology,Changchun 130022;2.Institute of Space Optoelectronics Technology,Changchun University of Science and Technology,Changchun 130022)
Abstract:With the improvement of industrial automation,the real-time monitoring of industrial field equipment is realized,and the demand of information and remote network information management and sharing is more urgent. For the problem of industrial field information exchange with Internet,in the study of TCP/IP protocol based on the basic principle,CAN data can be converted for the Ethernet data,and CAN bus and Ethernet interface gateway are implemented with STM32 as the core of the control circuit. The gateway uses 10/100M Ethernet controller DM9000A as a physical layer interface device,realizes remote monitoring and management of industrial field with RT-Thread and LwIP(Light weight Internet Protocol)protocol stack to complete the CAN data conversion,transmission to the TCP server. Through the experiment,the gateway is normal and can provide a reference for the industrial equipment access to the internet.
Key words:CAN;ethernet;STM32F103ZET6;gateway;RT-Thread
中圖分類號:TN98
文獻標識碼:A
文章編號:1672-9870(2016)02-0120-05
收稿日期:2015-09-09
作者簡介:李玉澤(1990-),男,碩士研究生,E-mail:147193813@qq.com
通訊作者:劉鵬(1982-),男,講師,E-mail:louis585760@126.com