陈恒江,仲海东,彭佳丽
(无锡中微爱芯电子有限公司,江苏无锡 214072)
现如今MCU应用方案开发中对AD模块的应用越来越普遍,使用独立的A/D转换电路会增加开发成本,不利于方案的量产。MCU设计公司相继在产品中集成AD模块,帮助公司降低开发成本,更好地进行方案推广,从而提升自家MCU产品的市场竞争力,对MCU中AD模块的积分线性误差(INL)、微分线性误差(DNL)参数的评测也越来越重要。
对于MCU AD模块的INL、DNL[1]参数,使用专业的仪器进行评测,虽然能测得准确的参数,但是会大大增加MCU设计公司的成本。而使用传统的手工测试,测试效率低,精度差,无法测得精准的INL、DNL参数,且当AD模块的分辨率较高时,用此方法测试不切实际。MCU区别于单一功能的A/D转换电路,其自身集成很多通用的外设资源,且可以编写程序进行控制。结合这些特点,对于MCU AD模块的INL、DNL参数可以设计专用的测试台进行评测。
本文介绍了一种基于STM32F429的AD静态参数自动测试系统,实现了对MCU AD模块的INL、DNL参数的测试。经验证,测得的数据准确,且测试成本低廉。
INL指单值数据误差,对应该点模拟数据由于元器件及结构造成的不能精确测量产生的误差。
DNL指刻度间的差值,即对每个模拟数据按点量化产生的误差。
LSB指最低有效位,对于AD模块来说,量化后输出的数字信号值都是以1 LSB的电压步进的。
数字输出为i时,设使数字输出从(i-1)变为i时模拟值输入为V[i-1],使数字输出从i变为(i+1)时模拟值输入为Vi,则有定义数字输出i的码宽为:
这时应注意当i=0(即所有数字输出为0)和i为最大值(即所有数字输出为1)时,这两个数字输出i的码宽为1 LSB。LSB的定义如下:
VFST是使数字输出i从仅次于最大值的值变为最大值时的模拟值,VZST是使数字输出i从0变为1时的模拟值。
首先介绍一下代码中心(Coe Center),代码中心是指当数字输出为i时,其二分之一码宽对应的模拟输入值。其计算方法如下:
VFS是使数字输出i=0的代码中心,VZS是使数字输出i为最大值时的代码中心,VOFFSET是指失调电压。
实际上线性误差是微分线性误差的累积,它还有一种算法:
已知INL[i]
斜升测试法的电路如图1所示。
图1 斜升测试法硬件
在图1中,由基准电压D/A产生一个基准电压,使被测A/D输出一数码为i,然后由步进D/A产生微小步进电压,直至被测A/D输出的数码进一为(i+1),记下此时施加在被测A/D上的模拟电压为V[i],当i为最大值时,V[i]为V[i-1]+1 LSB。
步进D/A产生的微小步进电压应远远小于被测A/D的LSB。在图1中,一个微小步进电压与被测A/D的1 LSB的比例关系由步进D/A的位数及参考电压、被测A/D的位数及参考电压、R、Rf决定。当获得所有的V[i]后,根据DNL及INL的定义就可计算出DNL及INL的值。
本测试系统基于斜升测试法实现对MCU AD模块的INL、DNL参数测试。
当前MCU内部集成的AD模块精度以10位、12位为主,因此,基本参考D/A和步进D/A采用16位高精度D/A芯片DAC8562,实现对待测MCU的AD模块供电。待测MCU烧录程序,将AD模块转换的数码通过串口输出。
本测试系统分为硬件和软件系统两大部分,硬件系统以STM32F429为主控器,控制DAC8562输出待测MCU所需的基准参考D/A和步进D/A,并获取待测MCU的AD转换数码。
软件系统基于MFC编程,实现测试系统的人机交互。用户可以根据需求设置基准参考D/A和步进D/A等参数,并对AD转换数码等参数进行统计,最终计算出待测MCU AD模块的INL、DNL参数。
AD静态参数自动测试系统结构如图2所示,硬件模块包括主控模块、供电模块、DPS模块、数据传输模块和显示模块。
图2 AD静态参数自动测试系统结构
主控模块选用STM32F429单片机作为主控器。STM32F429器件基于高性能ARM Cortex-M4 32位RISC内核,工作频率可达180 MHz[2-3]。Cortex-M4内核带有支持所有ARM®单精度数据处理指令和数据类型的运算单元FPU。该主控芯片集成了2 MB的Flash存储器和256 kB的SRAM,还具备高达4 kB的后备SRAM,以及大量连至2条APB总线、2条AHB总线和1个32位多AHB总线矩阵的增强型I/O与外设。此外,STM32F429还带有标准与高级通信接口。
供电模块由三端稳压器组成,供电模块如图3所示。由精密电源提供+15 V电压供给测试系统各模块,主要包括经过78M09和79M09分别将电压调整至+9 V和-9 V给DPS模块中的运放供电,经过78M05和(AMS1117-3.3)V将电压调整至+3.3 V给主控模块供电。
图3 供电模块
DPS模块基于DAC8562,搭配OPA548、OP07、AD620对待测MCU的AD模块进行供电,DPS模块结构框图如图4所示。
图4 DPS模块
DAC8562为两路16位D/A芯片,STM32F429通过SPI协议控制DAC8562,经过OPA548和OP07放大器,分别给待测MCU的VDD和AD模块供电。AD620对整个供电电路的电流进行监控,防止出现大电流。
为了预先验证运放的可靠性,采用Multisim对OP07放大电路进行了仿真。
数据传输模块基于SN74LVC1T45DBV芯片,硬件框图如图5所示。鉴于每颗MCU的工作电压有所不同,而主控器的工作电压固定为3.3 V,为了保证主控器能够稳定获取待测MCU发出的AD转换数码,经过SN74LVC1T45DBV电平转换芯片将传输给主控模块的信号固定为3.3 V。
图5 数据传输模块
为了增加整个系统的可操作性和报错机制,测试系统搭配LCD显示屏、蜂鸣器。LCD显示屏用于提供用户操作步骤,并显示整个系统的工作状态。蜂鸣器当测试系统遇到故障时会进行报错,用户发现蜂鸣器报警时,应当立即关闭电源并查找原因。
为了增加系统的可操作性,设计专用的上位机软件实现人机交互。用户可以通过软件界面配置测试系统参数,控制测试系统工作,并生成待测MCU AD模块的INL、DNL参数excel文档。
整个上位机软件是基于MFC C++设计的,主要包括前端界面和后台处理。接下来从MFC C++、前端界面、后台工作流程、INL/DNL算法、excel文档说明5个方面做具体介绍。
上位机软件选用C++语言[4-5]开发,选择C++语言开发的主要原因在于它是一种广泛使用的面向对象的计算机编程语言,支持的程序设计风格包括过程化程序设计、面向对象程序设计、制作图表以及数据抽象[6-7]等。MFC[8]即微软基础类库(Microsoft Foundation Classes),以C++类的形式封装了Windows API,并包含一个应用程序框架,大大减少了程序开发人员的工作量。
整个上位机软件操作界面包括“参数设置”、“控制面板”、“数据显示”以及“状态显示”4个部分。“参数设置”包含待测电路供电电压、待测电路AD基准电压、AD输入通道起始电压、AD输入通道结束电压以及AD输入通道步进电压设置,参数配置完成后,点击“应用”或“取消”按钮,上位机会将对应的指令发送给下位机。“控制面板”包含“开始”、“暂停”以及“复位”按钮,通过点击这些按钮,用户可以控制测试系统的工作状态。“数据显示”实时显示步进D/A值、待测MCU的AD转换数码等,通过点击“保存”按钮,测试系统后台会对测试数据进行统计、计算,并生成excel文档。“状态显示”则显示测试系统的工作状态。
上下位机之间采用USB[9]进行通讯。上位机与下位机建立连接时调用windows API函数CreatFile(),若连接成功则返回一个有效句柄hDevice。上位机使用hDevice,通过DeviceIoControl()函数实现与驱动函数间的数据交换[10]。上位机与主控间的数据交换原理如图6、7所示。
图6 上位机程序
图7 主控程序
为了测试系统实现的方便,测试系统的计算公式与理论公式存在一定差异。
步进D/A数码(NDA[i])对应的步进D/A电压(VDA[i])见式(9):
VDAall指D/A满量程电压,VDAOFFSET指D/A输入失调电压,NDAall指D/A满量程对应数码。
A/D转换数码(NAD[i])对应的A/D转换电压(VAD[i])见式(10):
积分线性误差见式(11)、(12)(测试系统计算出的INL以1 LSB为单位):
VADref指A/D基准,bits指A/D分辨率。
微分线性误差见式(13)、(14)(测试系统计算出的DNL以1 LSB为单位):
点击“保存”按钮后,后台即会生成待测MCU AD模块的INL、DNL参数excel文档。整个文档包括固有属性数据、原始统计数据、INL、DNL数据。
5.5.1固有属性数据
测试系统固有属性数据如表1所示,D/A输入失调电压(VDAOFFSET)、D/A满量程电压(VDAall)、D/A满量程对应数码(NDAall)这3个参数是测试系统的固有属性,由系统内的DAC8562的特性决定。A/D基准(VADref)、A/D分辨率(bit)这2个参数由待测MCU AD模块的特性决定。
表1 测试系统固有属性数据
5.5.2原始统计数据
测试系统统计数据如表2所示,步进D/A数码(NDA[i])、A/D转换数码(NAD[i])是测试系统统计的原始转换数据。
表2 测试系统统计数据
5.5.3 INL、DNL数据
INL、DNL数据分为2个部分,包括数据列表以及参数图表。表3是测试系统基于公式计算得到的INL、DNL数据列表。
表3 INL、DNL数据列表
图8、9是基于计算得到的参数数据生成的INL、DNL参数图表。
图8 INL参数图表
图9 DNL参数图表
图10、11、12是使用本测试系统对3款MCU AD模块多次评测得到的INL、DNL数据图表。
图10 MCU1的INL、DNL参数图表
图11 MCU2的INL、DNL参数图表
图12 MCU3的INL、DNL参数图表
上述图表均是对各款MCU取多颗电路测得的数据,同款MCU个体间测得的数据差异较小。通过图表数据可以得到3款MCU的INL、DNL参数分别为-15~+15 LSB、-15~+15 LSB,-3~+6 LSB、-4~+5 LSB,-9~+2 LSB、-2~+2 LSB。从中可以进一步分析出第一款MCU的INL、DNL均较差,参数波动较为严重。第二款和第三款MCU的INL和DNL参数有类似特点:INL分布较差,在图表末尾位置均有较大幅度的波动,第二款参数分布优于第三款;DNL分布较稳定,第三款参数分布优于第二款。
本文设计的AD静态参数自动测试系统适用于MCU AD模块的INL、DNL参数测试,支持用户自定义待测电路的供电电压,AD基准电压,AD输入通道起始、结束、步进电压。测试结果稳定,测试精度高且成本低廉。