0 引言
螺旋装药过程中,经常会因为内部药品温度分布不均匀导致在装药过程中药品内出现气泡的现象,这严重影响了弹体内的药品质量和弹药参数。因此,本文希望通过设计一种温度监测系统来实现对腔体内药品温度检测,寻找装药过程中温度与药品质量之间的关系。由于装药机结构的特殊性,我们无法通过传统的接触测温法获取药品的温度。因此本文设计了一种基于红外测温方法的系统来实现对药品温度的实时检测。
1 时分复用原理
复用方法的设计主要依据TN9红外传感器的信号特征及接口特点,TN9红外温度传感器具有5个接口,其中电源和地不需要接到CPLD上,其余三个接口分别为低电平有效的TN9工作使能接口,工作在主模式的SPI时钟接口和数据接口。采用复用模式是只需通过设置合适的时序和门电路控制就可以将这些具有相同功能的接口连接到同一个模块上。
实际应用中当EA有效时TN9传感器通过SPI总线在大约180ms和560ms时发送两次温度数据,第一次为环境温度数据,第二次为目标温度数据。当EA无效时传感器仍会发送数据,只不过发送的数据没有意义,这时就需要通过合适的门电路控制将无用信号屏蔽掉。当采用多路采集通道时,随着传感器数量的增加所需引脚及控制门电路会极大增加,处于精确时间控制及多门选电路的需要,数据采集模块使用CPLD来实现相对单片机加门电路简单灵活。
如图1所示,以双通道TN9数据接收模块举例来说明SPI总线复用方式。EA信号通过分时模块来控制,由于VHDL语言可以被认为是为CPLD内部逻辑单元建立了连接关系,在系统运行时语句本身并不消耗系统时间,因此通过寄存器设可以是CPLD的时间设置极为精确。这里设置TN9工作周期为1s,400ms时间为高电平(EA禁止),第一个传感器启动后约200 ms下一个传感器以同样方式开始工作,这样保证不同传感器回来的信号不重叠在一起。由于TN9在EA无效期间仍会发送无效数据,且SPI总线上的DATA线与CLK线空闲时为高电平,这里设计了如图1所示的门控电路来实现对无效信息的屏蔽。
2 系统设计
系统以C8051F340单片机为核心,它通过UART总线和USB总线分别与CPLD和电脑相连接。
2.1 数据采集模块设计
数据采集模块的核心模块由CPLD实现,CPLD接收到单片机控制命令后进行复位并开始工作,分时模块和门电路配合实现传感器的分时启动以及屏蔽掉SPI总线发回的环境温度数据及使能信号无效(高电平)时的乱码。SPI模块实现CPLD的从器件接受功能,每次工作将TN9发回的16位温度数据存入寄存器。寄存器控制模块在接受完16位温度数据后,启动串口发送,将高低8位数据分别发送给单片机,单片机在其中断函数中进行相应处理。
2.2 单片机模块设计
USB数据发送功能的实现是这一部分的难点,这里使用Silicon Laboratories公司提供的USBXpress和Configuration Wizard开发包并结合Keil uVision3开发环境可以很方便的实现C80S1F340单片机的配置工作,这样单片机程序编写和USB通信开发难度,我们只需要关注自己要实现的功能部分并不需要很了解复杂的USB通信协议。
如图3所示,单片机上电后完成系统初始化配置,初始化配置语句可以使用Configuration Wizard来进行配置,C8051F340的UART0接口(第二功能)固定在P0^4,P0^5,USB也只能使用特定端口,这里不需要对端口进行特别配置,将其端口模式设置为推拉即可,系统时钟设置为使用内部时钟模式,通过选择多路开关和倍频使USB时钟工作在48MHz。作为USB系统中的从设备,系统初始化设置完成后,执行等待命令DisplayLED(),然后在中断函数中根据USB中对要执行的操作进行判断。
UART0使用定时器2作为波特率发生器,并使能定时器0中断允许。USB初始化首先要调用USBXpress提供的API函数USB_Clock_Start(),然后对其端口初始化,这里使用USBXpress提供的默认设置即可。
由于温度数据为16位数据,串口每次接收其中8位,这里定义个数组In_Packet[3]后两位用来存放MSB,LSP的值,第一位存放传感器标志位。当In_Packet[3]数组数据更新后,调用USBXpress的API函数Block_Write(In_Packet,3)将温度数据发送给上位机。
2.3 上位机软件设计
USBXpress提供VC6.0进行USB通信的动态链接库,这里采取了静态方法加载动态链接库的形式,这样需要在编译选项中把USBXpress提供的SiUSBXp.lib路径添加进去,并在需要调用时添加头文件siusbxp.h。
程序依照USBXpress提供的API函数编写,在程序界面初始化时调用SI_GetNumDevices()和SI_GetProductString()函数获取USB器件信息,由于传感器工作间隔200ms左右,这里设定50ms的定时器,在其响应函数中执行SI_Read(),当Buffer中有数据时就会将数据读取到定义好结构体当中去,并使用Format命令将其转换为字符串类型且按16进制方式将数据更新到编辑框中。
3 总结
系统基本实现了温度的采集和传输功能,并能通过VC6.0将数据保存,提供给matlab等数学分析软件进行数据分析,实验证明了利用CPLD可以很精确地实现对传感器的分时控制,C8051F340利用USBXpress提供的API进行USB开发极大地简化了开发流程。
实验只进行了简单的框架搭建,这里只是对基于CPLD进行时分复用方法采集传感器数据并且使用C8051F340利用USB总线与计算机进行通信的可行性进行了验证,完善稳定的系统仍需要大量的后期工作去完成。