基於UIP協議棧的磁熵變測量資料的傳輸設計
在此設計實現STM32採集軟磁材料金屬在不同溫度,變化磁場下的H,M以及Sm值,並透過基於UIP協議的網路方式將資料傳輸到計算機上。硬體主要由磁熵變探測器、微控制器、乙太網晶片、點陣屏、訊號處理電路等組成。將UIP協議移植到STM32系列微控制器上實現了上位機與STM32微控制器的通訊,並對測量資料通訊進行分析。實驗結果與預期的結果相吻合。
磁熵變是衡量磁製冷材料效能的重要指標,它是指改變磁場後磁熵的變化值[1?3]。磁測量的具體方法是測量來自儀器的關於磁場強度H和磁化強度M的兩個微分電壓和一個探頭所處的溫度值。現將磁場強度H和磁化強度M的電壓微分值傳到上位機,上位機透過演算法對其進行積分計算。本設計採用的傳輸方式基於UIP協議棧,具有程式碼少,佔用記憶體少,方便閱讀和移植,支援多個主動連結和被動連線併發等優點,並且其硬體處理層、協議棧層和應用層共用一個全域性快取區,極大地節省了空間和時間。
1 系統總體設計
整個系統由探測源和磁化裝置,訊號放大電路,微控制器系統,顯示部分和上位機軟體組成。系統總構成如圖1所示。磁化裝置磁化探測源,探測源將訊號發出,訊號經過處理後由微控制器系統採集,微控制器一方面透過SPI通訊將採集的電壓和當前金屬的溫度以數字的方式顯示在LCD上,直觀地顯示磁感應強度的強弱,另一方面透過透過UIP協議棧與上位機進行通訊。
圖1 系統構成
2 磁熵變的訊號採集
2.1 磁熵變的測量原理與訊號採集
本實驗測量的金屬選用釓。磁化金屬釓的儀器,內部繞有大量線圈,上電後,透過掃描電源在適當的時間控制電壓的變化,變化範圍為0~5 V ,每隔約5 s電壓值上升100 mV,如圖2所示,這樣產生的磁場就會發生躍變。另一個裝置有兩個凹槽,一個裝有金屬釓,另一個不裝。線圈磁化金屬釓,釓就會在電壓上升的一瞬間磁感應強度增大,磁通量升高,產生感應電動勢,兩個圓孔凹槽的電壓經過訊號處理電路,經放大後電壓瞬時值可達到2 mV左右,此時ADC就可以採集實驗資料。
圖2 磁化儀器電壓控制
2.2 基於UIP協議棧的資料的傳遞
UIP透過一系列的函式實現與底層硬體和高層應用程式的通訊,對於整個系統來說它內部的協議組是透明的,從而增加了協議的通用性[4]。本文乙太網晶片為ENC28J60。該晶片支援全雙工和半雙工模式,帶有最高速度可達10 Mb/s的SPI介面,採用可程式設計8 KB雙埠SRAM緩衝器,支援單播、組播和廣播資料包,可以實現佔位小、成本低、更加精簡的網路應用系統[5]。
2.3 乙太網晶片與微控制器介面電路設計
ENC28J60與微控制器的硬體電路連線如圖3所示,其連線可以實現半雙工通訊。微控制器使用的是ST公司的STM32C8T6,其執行速度快,效能高。本系統選擇選用STM32微處理器可以在-40~85 ℃的溫度範圍內工作,而且體積小,穩定性強[6]。ENC28J60與STM32連線,二者透過SPI通訊。
圖3 乙太網晶片與微控制器的介面電路
3 系統軟體設計
3.1 微控制器系統總流程
系統上電後,首先進行系統初始化,包括I/O初始化、時鐘初始化、SPI初始化、UIP初始化以及開中斷、定時器,微控制器採集電壓資料後進行濾波,然後透過移植的UIP協議將資料傳送到上位機,流程如圖4所示。
3.2 上位機系統流程
系統上電後首先進行系統的初始化,然後開始接收資料包,分析接收到的資料包,與下位機一起進行校驗位計算,當錯誤出現時上位機就會有相應的提示,若有資料而且資料正確,則提取測量資料,用示波器實時顯示測量資料,並且實時儲存測量資料。部分程式碼如下:
服務端:
IPAddress ip = new IPAddress(new byte[] { 127, 1, 1, 1 });
TcpListener server = new TcpListener(ip, 8005);
server.Start(); //服務端啟動偵聽
TcpClient client = server.AcceptTcpClient();
//接受發起連線物件的同步方法
Console.WriteLine("收到客戶端連線請求")
客戶端:
IPAddress ip=IPAddress.Parse("127.1.1.1");
TcpClient client=new TcpClient();
client.Connect(ip,8005);
//8005埠號,必須與服務端給定的埠號一致
連線後,客戶端要傳送資料給服務端:
NetworkStream dataStream=client.GetStream();
string msg="服務端親啟!";
byte[] buffer=Encoding.default.getBytes(msg);
stream.write(buffer,0,buffer.length);
服務端拆包:
NetworkStream dataStream=client.GetStream();
byte[] buffer=new byte[8192];
int dataSize=dataStream.Read(buffer,0,8192);
Console.write(Encoding.default.GetString(buffer,0,dataSize));
圖4 微控制器系統流程
4 測試結果及分析
給儀器一個變化的電流,大約經過3 s磁場變化結束,把這3 s內的電壓做積分也就是求與時間軸交匯的'面積就是對應的H值,如圖5所示,依次累加就對應著各自狀態下的H值。
該區域的面積S就是該時刻的金屬釓的H值,在此把它設為S1,設下一個階梯到時面積為S2,此時的H2=S2+S1,依次類推,Hn=S1+S2+…+Sn。這是金屬釓的H值,另一個沒有金屬釓凹槽測量出來的是M值,同樣,Mn=S1+S2+…+Sn。然後再透過水冷盒改變金屬釓的溫度就可以測出在不同溫度下金屬釓的磁熵,計算公式如下:
[ΔS=H2H1?M?THdH;ΔS=i=1n?M?THΔH]
圖6是透過以上的測量給出的H,M曲線,圖7為磁熵變的曲線。
圖5 H值
圖6 不同溫度下H?M曲線
5 結 語
本文利用STM32的UIP協議棧採集並傳輸了金屬釓在變化磁場下的H,M以及磁熵變Sm的值。得出了金屬釓在變化的磁場中自身熵變的變化也會使得釓的溫度發生變化,與預期的結果相吻合。