基于STM32F103的pA级电流检测系统设计

2020-07-27 06:54
关键词:寄存器串口电容

向 前

(铜陵学院 电气工程学院,安徽 铜陵 244000)

微弱电流信号检测广泛应用在于会生活的各个方面。以光电传感器为例,输出电流数量级在nA甚至pA。微弱信号极易受到环境干扰影响,为实现pA级别微弱电流信号的检测,以STM32F103为核心,应用低偏置高灵敏度的运算放大器AD,辅以H2数据库、LabVIEW,设计了电流检测系统[1-3]。带数字隔离的通信电路提高了硬件可靠性,基于labsql的数据库存储和java云端上传提高了软件可靠性。上述技术均具备较好的跨平台特性,进一步完善了微弱电流检测的设计方法。

1 系统结构

检测系统设计包括电流检测硬件与功能软件两部分,如图1所示。硬件包括电流转换模块、数据处理和通信模块。电流转换模块包括运算放大器(ADA4530、ADA4522)组成的IV转换和电压缓冲电路,IV转换+缓冲电路把微弱的电流信号转换成适合AD输入采样的电压信号。数据处理和通信模块包括核心微处理器(STM32F103)、数字隔离器(ADUM5211、ADUM1281)、ADC(AD7172)、RS232驱动器/接收器 (ADM3232E)、USB(MCP2200)和无线WIFI(预留,用于未来的拓展应用)等。用户可根据应用场所和应用需求选择不同的通信方式。软件包括上位机与下位机两部分,如图2所示。下位机运行在电流检测硬件上,移植RTOS系统,执行采样和传输功能。上位机运行在客户端(普通PC,运行WINXP 32位系统),包括存储、上传和显示3种功能,客户端运行H2数据库,存储功能通过labsql插件完成。考虑到检测硬件提供了多种通信接口,基于LabVIEW+VISA实现了串口+USB的上位机显示界面。H2数据库采用java编写了云端上传程序实现上传功能。应用暂时没有用到无线网络,本文暂不讨论。

图1 系统硬件结构图 图2 系统软件结构图

2 硬件设计

2.1 电流转换模块

电流转换模块包括IV转换电路和电压跟随电路。为了实现pA级别的电流检测,需要选用超低输入偏置电流的运算放大器,本文选择ADA4530,这是一款fA级别输入偏置电流的运算放大器,失调电压和失调漂移很低,适合作为pA级微弱电流的跨阻放大器(TIA)。同时集成了保护环缓冲器,实现了隔离输入引脚避免受到PCB漏电流影响的效果,也减少了设计时电路元件的使用。以光电二极管为例,如图3所示,产生的输出电流IPD与光照水平成正比,IV转换电路将信号电流IPD根据公式VOUT=IPD×RF转换成输出电压。CSHUNT是分流电容,RSHUNT是分流电阻,RF是反馈电阻,RF与CSHUNT的作用会在反馈环路中产生一个低频极点,考虑到环路稳定,TIA电路还需要外部补偿,添加一个反馈电容CF在反馈系数中产生一个零点,使得电路在达到交越频率前还原该低频极点引起的相移。

增大反馈电阻RF可以实现信噪比(SNR)最大化和直流误差最小化的TIA电路设计目标。随着RF的增大,信号增益增大,噪声以平方根式增大,输出信号相对于输出电压误差更大。但RF也不能一味地增大,需要考虑如下因素:① 运放的输出摆幅,IPD_MAX×RF应当小于摆幅限制;② 光电二极管的热噪声,当RF≫RSHUNT,总的噪声以光电二极管为主,SNR不随着RF的提高而提高;③RSHUNT的低频噪声增益,当RF>RSHUNT,信号误差比不再提高。反馈电容CF会影响信号带宽,CF的选择要考虑如下因素:①CF的最小值限制在50 fF~100 fF;② 为了在环路交越前还原足够的相移实现稳定运行,CF取值需要足够大。如果RF采用大于1 GΩ的大阻值电阻,可以通过寄生反馈电容实现自我补偿。本文采用正负5 V电源供电,RF取值10 GΩ,CF取值300 fF。

图3 IV转换电路 图4 AD采样电路

2.2 数据处理和通信模块

2.2.1 ADC

AD7172模拟输入上集成了单位增益缓冲器,提供了高输入阻抗,典型输入电流5 nA,采样输入可以直接连接,简化了模拟前端的电路要求。集成缓冲器的典型功耗仅0.87 mA,均完全斩波,能够使失调误差漂移和1/f噪声最小。具有3个独立电源:AVDD1、AVDD2和IOVDD,第1个是多路复用器和集成的模拟与基准输入缓冲器供电,第2个是ADC内核供电,基准都是AVSS,AVDD1-AVSS=3.3-5 V,AVDD2-AVSS=2-5.5 V,第3个是ADC的数字逻辑供电,以DGND为基准,IOVDD-DGND=2-5.5 V。AD7172通过SPI接口与STM32F103连接,输入峰值是5 V,电路如图4所示。ADC配置包含3个部分:① 通道配置:AD7172有4个独立通道,通过通道寄存器COMMS选择输入通道,对片内寄存器的所有访问必须以对COMMS的写操作开始,决定接下来要访问的寄存器,比如选择AIN0,则设置为0×10;② 设置配置:有4种配置设置0到设置3,每种设置均包括4个寄存器,以设置0为例包括设置配置寄存器0(SETUPCON0)、滤波器配置寄存器0(FILTCON0)、增益寄存器0(GAIN0)和失调寄存器0(OFFSET0),其中前两个寄存器是必须要设置的,增益和失调寄存器的设置则是可选的,SETUPCON(0-3)选择单极性或双极性模式,单极性下ADC支持正差分电压,输出标准二进制,双极性下支持负差分电压,输出偏移二进制;③ ADC模式和接口模式:前者用于设置ADC的转换模式,还包括内部基准电压源使能和时钟源选择,后者用于配置数字接口的工作模式,可以控制数据字长度、CRC使能等,配置流程如图5所示,提供了2个单端输入接口,选择AIN4为公共引脚,AIN2/AIN4传入CH1,AIN3/AIN4传入CH2,共享设置1,对SETUPCON1、FILTCON1、ADCMODE1和IFMODE1编程,并根据需要配置GAIN1和OFFSET1。AD7172的输入引脚均连接到交叉点多路复用器,多个通道时,各个导通能按编号最小到编号最大自动处理。因为输入通道用到了CH1和CH2,设置这些寄存器中每一个的MSB,CH_EN1至CH_EN2位通过交叉点多路复用器,使AD7172转换时,序列器能以升序从CH1转到CH2,再回到CH1,重复整个序列。

图5 配置流程

2.2.2 数字隔离

引入隔离是为了尽可能降低接地环路噪声的影响,传统的隔离多采用光耦合器,它的问题在于功耗高,因为光耦合器使用LED光把数据传输到隔离栅的另一端,要消耗电能。对于低功耗应用不是一个合适的选择,且速率一般低于1 Mbps,在对速率有要求的场合可以选择高速光耦合器,但会极大地增加设计成本。数字隔离器的基本原理是通过电容或变压器将数据以容性或磁性方式耦合到隔离栅的另一端[4-5]。以变压器结构为例,流过变压器线圈的电流脉冲会形成一个微小局部磁场,根据电磁感应原理在另一个线圈产生感应电流,实现信号隔离。变压器线圈的电流脉冲时间很短,因此平均电流很低。变压器采用差分的结构方式,共模瞬变抗扰度能够达到100 kV/μs,优于光耦合器的15 kV/μs,加厚变压器线圈间的绝缘层可以获得更大的隔离值。串口通信采用ADuM5211,USB通信采用ADuM1281,在通信模块与MCU间采用数字隔离,提高系统的可靠性。

2.2.3 串口和USB通信

ADuM5211集成了isoPower隔离DC/DC转换器,采用了iCouple技术,能够提供3.15 V和5.25 V之间调节的稳压隔离电源,无需使用单独的隔离DC/DC转换器,降低了功耗和设计成本。如图6所示。VDDP是isoPower供电电源,VDD1是器件第1侧隔逻辑电路的电源,独立于VDDP,需要单独提供。VDD2是器件第2侧逻辑电路的电源,VISO是副边的输出电压,具体数值可根据公式VISO=1.25×(R1+R2)/R1设定。VSEL用于输出电压VISO选择,在VISO和GNDISO间提供了热匹配电阻网络,对需要的输出电压进行分压。把VISO供给VDD2实现了电源隔离。ADuM5211的干扰主要来自噪声和纹波,前者需要低电感高频电容,后者需要数值较大的体电容,以VDD1为例,并联0.1μF +10 μF的电容对,前者可采用NPO或X5R陶瓷电容,后者推荐使用陶瓷电容。也可以采用0.1 μF+10 μF+10 nF的组合,可以进一步降低EMI。在绘制PCB时0.1 μF ESR电容到电源的走线长度不要超过2 mm。考虑到USB通信速率,采用ADuM1281+MCP2200搭建带隔离的USB通信电路,如图7所示。ADuM1281是独立双通道数字隔离器,提供了2种配置选择,3种不同数据速率,最高可到100 Mbps。输入和输出供电引脚VDD1和VDD2上并联旁路电容,数值在0.01 μF和0.1 μF之间,绘制PCB时电容两端到输入电源引脚的走线总长应该小于20 mm。

3 软件设计

3.1 下位机设计

(1)下载源码:在freertos官网下载安装程序,选择保存目录等待下载完成[6]。

(2)建立STM32工程并添加源码:新建freertos目录,把源码Source文件夹下的所有文件复制到freertos中;在Keil工程中添加freertos目录和头文件(freertosinclude和freertosportable vdsarm_cm3),把port.c、heap_4.c(内存管理方案)和freertos文件夹下的7个.c文件添加到freertos目录中;复制源码的freertosconfig.h(在源码freertosdemocortex_stm32f103_keil中,没有这个文件会导致编译错误)到Keil工程freertosinclude文件夹中,同时把该文件的INCLUDE_xTaskGetSchedulerState和INCLUDE_xTaskGetCurrentTaskHandle两个宏定义改成1,添加#define xPortPendSVHandler PendSV_Handler和#define vPortSVCHandler SVC_Handler。

图6 带隔离的串口通信电路 图7 带隔离的USB通信电路

(3)在main.c主程序添加#include AD7172_2_regs.h、#define AD7172_2_INIT:新建开始任务、采样任务和传输任务,定义任务优先级、堆栈大小、任务句柄和任务函数;实现3个任务函数,其中开始任务函数调用xTaskCreate创建采样和传输任务,之后在main函数初始化AD7172,调用xTaskCreate创建开始任务,开启任务调度。ADI提供了与AD7172有关的驱动,包括Generic Platform Driver和ADI Driver两部分,前者包括通信相关的函数,本文采用SPI通信,如spi_init、spi_write_and_read等,后者包括AD的寄存器设置、读写等函数,如AD7172_Init、AD7172_ReadData等,官网下载后导入工程,要根据硬件连接和软件功能对驱动做些许修改。

3.2 上位机设计

3.2.1 H2数据库

考虑到应用的数据存储需求较为简单,没有大数据集合、高并发高流量等操作,且PC机硬件配置一般,采用java编写的轻量级H2数据库。H2具备优秀的跨平台特性,本身是一个java的类库,只有一个jar文件,应用简单,可以直接嵌入项目。H2支持远程(服务器)、嵌入式和内存3种连接模式:嵌入式模式下可实现JDBC的本地连接,此时应用程序通过JDBC从同一个JVM中打开数据库,该模式的连接速度最快。远程模式下可以使用TCP/IP实现数据库连接,速度比嵌入式模式要慢,但是对数据库的并发连接数量没有限制。H2数据库因为支持内存模式又被成为内存数据库,该模式下的数据库和表都保存在内存中,一旦机器重启所有数据都会丢失,本文采用服务器模式。

H2安装配置流程如下:① 数据库安装:在h2database官网下载压缩包,解压后即完成安装。目录结构包括bin、docs、service、src、build.bat和build.sh。其中h2的jar包和驱动在bin下的h2-XXXX.jar中。h2.bat/sh分别是Windows和Linux下的启动脚本。service文件夹里是通过wrapper包装的服务,src里是h2的源代码。② 数据库启动:windows下可直接运行h2.bat或h2w.bat,其中后者是在后台运行的。如果是Linux环境,要先修改h2.bat的内容,添加允许远程机通过TCP(-tcpAllowOthers)、浏览器(-webAllowOthers)的访问,默认端口是8082,根据需要进行修改。之后chmod h2.bat文件的权限并运行./h2.sh。③ 数据库配置:执行h2.bat/sh后会自动进入H2的webconsole,也可以通过URL:localhost:端口号登录。webconsole提供了对H2数据库的各种操作,驱动类和JDBC URL是默认的,如果要创建一个新的数据库,直接修改jdbc:h2:[要创建数据库文件的路径]。④ 数据库操作,测试连接成功后,连接登录到某数据库的webConsole,执行SQL语句进行各种数据库操作。

3.2.2 上位机界面

应用LabVIEW开发串口和USB上位机界面, LabVIEW串口通信需要安装VISA驱动,NI官网提供下载。串口通信包括3个部分:① 设置串口参数,应用VISA配置串口.vi。② 读串口数据,应用VISA读取.vi,Read=T并且没有出错的条件下读取串口数据。VISA 读取最关键的参数是要读取的字节总数,如果缓冲区的数据没有达到要读取的个数,程序会停在这里直到发生超时错误。可以在编程时事先约定好,也可以采用串口属性节点bytes at port解决,它表示缓冲区有多少字节就读取多少字节,避免等待超时问题。③ 关闭串口,应用VISA关闭.vi,考虑到可能会出现的措施,在VISA关闭.vi后连接Simple Error Handler.vi用于显示错误信息。

3.2.3 数据存储

LabVIEW不具备读写数据库功能,需要额外的辅助工具,常用的有NI官方的sqltoolkit(要付费),调用.dll库文件(如sqlite3提供的sqlite3.dll,工作量较大),SQL语句调用ActiveX功能与ADO控件(涉及到的技术较多)和第三方插件(直接调用vi)等方式,本文采用第三方插件labsql实现串口数据的存储功能。labsql支持windows下基于ODBC的数据库操作,安装简单,把解压后的文件夹放到LabVIEW安装目录下的user.lib目录下即可。操作流程如下:ADO Create Conn.vi创建connection对象,ADO Open Conn.vi实现与数据库的连接,ADO SQL Execute.vi执行insert语句,把从端口读取的数据插入到数据库中,ADO Connection Close.vi关闭连接。这里最关键的是ADO Open Conn.vi的参数DSN,在配置ODBC数据源时指定。H2没有提供ODBC的驱动,查阅官方资料H2支持PostgreSQL的ODBC驱动,推荐安装psqlodbc-08_02*或更新的版本。ODBC驱动安装完成后,执行java-cp h2*.jar org.h2.tools.Server启动H2服务器功能。之后打开数据源配置,添加PostgreSQL Unicode驱动,进入配置界面配置参数(DSN、服务器、端口号、用户名、密码、数据库等),测试通过后把DSN参数传递给ADO Open Conn.vi就可以打开数据库了。如果是64位系统,运行c:/windows/syswow64/odbcad32.exe打开数据源配置,之后的操作都是一样的。

3.2.4 自动云端存储

考虑到学校服务器的硬件性能较差且使用时间较久,基于java编写数据自动腾讯云端存储程序connectcloud.java,提高存储的可靠性。为了避免上传失败,事先要把存储桶的权限设置为读公有、写私有。IDE开发环境需要JDK1.7及以上版本,可以在maven的pom.xml添加依赖,也可以直接下载官方源码,再通过maven导入。

(1)导入COS Java SDK包(com.qcloud.cos.*),为了调用COS的 API 接口,要实例化COSClient,实例具备线程安全和可重复性的特点。定义connectcloud类,包括腾讯云的用户、密码、存储桶名称和所在区域等变量。构造方法初始化腾讯云客户端:首先初始化用户身份信息,其次设置bucket的区域,最后生成一个COSClient对象。

(2)本地文件上传到COS很适合小文件上传(20 M以下),最大不超过5 G。实现核心上传函数upload,包含要上传的文件(file)和COS上对象键(key)两个参数。根据官方提供的javaSdk API参考文档,采用try catch结构,捕捉CosServiceException serverException和CosClientException clientException异常,关键代码如下:

public PutObjectResult upload(String file, String key)

{try{

File localfile = new File(file);

PutObjectRequest putObjectRequest = new PutObjectRequest(存储桶名称, key, localfile);

PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);

连锁药店承接基层医疗卫生机构药房职能可行性的调查分析 ……………………………………………… 周梅梅等(19):2699

return putObjectResult;

}catch(CosServiceException serverException)

{ 异常处理 }

catch(CosClientException clientException)

{ 异常处理 }}

(3)实现确认文件上传成功的查询函数queryfilelist(),如果是自己的存储桶,可以直接登录查看,但考虑到普遍性,采用查询函数的方法更方便,关键代码如下:

public List queryfilelist()

{

List buckets = null;

try {

buckets = cosClient.listBuckets();

System.out.println(buckets);

} catch (CosServiceException serverException) {

serverException.printStackTrace();

} catch (CosClientException clientException) {

clientException.printStackTrace();

}

return buckets;

}

4 系统测试

采用S1226光电二极管 + 串口通信进行系统测试,频率响应范围从紫外光到可见光,分流电阻RSHUNT为5 G,分流电容CSHUNT是35 pF,输入共模电压0 V,能支持的最大光电流约500 pA。考虑到环境温度情况,最大值不超过60 ℃,如表1所示,总误差RTI不超过150 fA,是满量程的3,满足检测需求,检测上位机界面如图8所示。

表1 直流误差预算

图8 上位机界面

5 结 语

本文设计了pA级电流检测系统,详细介绍了IV转换电路关键参数选择、AD采样电路的配置流程、数字隔离电路的基本原理和应用注意事项。基于LabVIEW+ VISA+labsql+H2实现了不同的上位机程序和数据存储功能,应用java提供了数据库文件的云端上传。测试表明系统可以检测到pA级微弱电流信号,具有良好的稳定性和可靠性,满足应用需求。

猜你喜欢
寄存器串口电容
STM32和51单片机寄存器映射原理异同分析
低压电容器电容值衰减原因分析及改造
浅谈AB PLC串口跟RFID传感器的通讯应用
Lite寄存器模型的设计与实现
浅析投射式多点触控电容触摸屏
现代传感器中的微电容检测技术
移位寄存器及算术运算应用
宽电容测量仪的设计
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索