- 相关推荐
基于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的值。得出了金属钆在变化的磁场中自身熵变的变化也会使得钆的温度发生变化,与预期的结果相吻合。
【基于UIP协议栈的磁熵变测量数据的传输设计】相关文章:
常用红外数据传输电路的设计及其注意事项07-02
数据传输岗位职责范文07-02
《有趣的磁现象》教学设计11-17
小班游戏活动设计《变,变,变》07-02
课文《电和磁》教学设计07-05
初中物理《电生磁》教学设计07-03
数据库设计08-06
数据库设计08-13