基于STC15的一种自动量程及带存储功能数字电压表的研究与设计
2018-12-20车沛强江华丽
车沛强,江华丽
(福建师范大学闽南科技学院,福建泉州 362332)
数字万用表是采用数字化测量技术,把连续的量(输入电压)转换成不连续、离散的数字化形式并加以显示的仪表[1]。在测量时先把被测量通过不同的转换器转换成直流电压,然后再利用数字电压表进行电压测量,从而得到被测量的数值[2-7]。作为现代电子测量中最基础与核心的一种测量仪器,人们对其测量精度和功能的要求也越来越高。数字电压表的量程自动切换[8]功能,既能省去频繁的操作,又能兼顾强弱信号的测量,避免量程选择不当而造成测量精度的下降甚至损坏仪表。在需要记录随时间变化的测量值,比如测量RC电路电容充放电的电压时,使用具备存储数据功能的电压表,更能得心应手。基于以上功能要求,本文提出了以集成多路输入通道ADC、EEPROM[9-13]的STC15F2K60S2单片机作为主控器,结合运放LMV358的设计。
1 原理分析
以可以测量220 V市电经整流滤波后的电压值约311 V作为测量范围的上限,设计数字电压表的电压测量范围为0~400 V,分为以下四档:0~400 mV、0.4~4 V、4~40 V、40~400 V。STC15单片机内部集成一个8路10位高速的ADC(A/D转换器),8个输入通道(输入通道0至输入通道7)通过程序对其ADC控制寄存器ADC_CONTR进行控制,选择其中一个输入通道将转换后的测量电压送入ADC进行测量,并读取测量后的数据,经相应的倍率换算,在屏幕上显示出最终的测量电压值。
设计接入单片机ADC2引脚的4.1 V稳压电路作为ADC的输入参考电压,则可测量的电压范围为0~4 V(4.0~4.1 V用作超量程判断的条件)。为确保ADC的输入电压范围在0.4~4 V之间,对于0~400 mV的测量电压,先经10倍电压放大后,接入ADC的输入通道7进行测量,0.4~4 V的输入电压,直接接入ADC的输入通道6进行测量,4~40 V的输入电压,经10倍衰减后,接入ADC的输入通道5进行测量,40~400 V的输入电压,经100倍衰减后,接入ADC的输入通道4进行测量。至此,实现了电压表的四个量程档。单片机通过控制其内部的ADC控制寄存器,循环选择及读取这四个输入通道的电压值进行判断,确保选择的当前输入通道ADC的输入电压值在0.4~4 V之间,从而实现电压表的量程自动转换。
利用单片机内置的EEPROM,实现掉电存储测量数据的功能,并通过程序,提供用户定义测量数据存储的数量、存储的时间间隔等参数的功能。
2 硬件设计
2.1 主控芯片的选择
本设计采用增强型STC15F2K60S2作为主控芯片,其主要特点是单时钟/机器周期(1T)的单片机,内部集成高精度时钟及复位电位,并带有8路高速10位A/D转换器及可擦写10万次以上1K字节容量的EEPROM[14]。选用此芯片,无需外接ADC、时钟、复位等电路,将极大简化设计。10位A/D转换的数据,需要2个字节的存储空间,1 K字节容量的EEPROM,可同时存储500个测量数据。
2.2 电压表的分辨率
图1 总体结构框图
分辨率也称灵敏度,指数字万用表测量结果的最小量化单位,即可以看到被测信号的微小变化[15]。
单片机自带的ADC是10位的,ADC的参考电压使用的是4.1 V,如此可得最小的分辨率为4.1 V/210,约为4.0 mV。若电压表的量程档是0~400 mV,4.0 mV这个灵敏度数值太大,灵敏度低,无法准确测出小电压。因此,在使用量程档0~400 mV时,先将输入电压放大10倍后,再送入ADC进行测量。此举可将此电压档的分辨率提高至0.4 mV。系统总体结构如图1所示。
输入电压,经外围的放大、跟随或衰减电路后,一一对应接入ADC的输入通道7至输入通道4。以上四个输入通道分别对应电压表的量程关系如表1所示。
表1 电压表量程与输入通道对应关系表
在图1中,ADC输入通道7前的10倍电压放大电路及输入通道6前的跟随器,均由运放LMV358实现。衰减10倍与100倍的电路,由电阻分压来实现。
LMV358实现10倍电压放大功能的电路,如图2所示,跟随器电路如图3所示。10倍与100倍的衰减电路,如图4所示。4.1 V的稳压电路,可用4.1 V的稳压二极管HZ4C1实现,如图5所示。
图2 LMV358同相10倍放大电路
图3 跟随器电路
图4 电阻构成的衰减电路
图5 4.1 V稳压电路
3 系统软件设计
3.1 自动量程转换程序设计
量程转换的判断条件为:单片机在当前选中的输入通道读取的数值是否在0.4~4之间。因此,转换过程如下所述。系统上电后,单片机先选择输入通道4,即电压表的最高量程档(40~400 V)进行测量判断,分以下几种情况说明。
(1)读取的数据超过4.0,则说明输入电压超过400 V,系统发出报警声音,显示屏显示溢出标识。
(2)读取的数据在0.4~4之间,则将读取的数据乘以100后,显示在屏幕上,即当前测得的电压值(电压单位为伏特)。
(3)读取的数据小于0.4,说明当前的输入通道对应的量程过高,输入的电压小于40 V,则单片机降低一档量程,选择输入通道6。
(4)降低一档量程后,若读取的数值还是小于0.4,则继续降低量程档直至最小量程档。若读取的数值大于4,则升级一档量程直至最高量程档。
如上所述,单片机循环切换不同的输入通道,即切换不同的量程档,确保读取的数值在0.4~4之间。在400 mV档,若读取的数值仍小于0.4,则继续保持此量程档。在400 V档时,若读取的数据仍大于4,亦继续保持在此量程档,同时发出警告标识。量程转换流程如图6所示。
图6 自动量程转换程序流程图
图6中的f1至f4为电压表的四个量程档标识符,对应的关系如表2所示。
表2 f1至f4对应量程关系表
3.2 存储数据程序设计
功能要求:设置两个按键K1、K2,用户通过这两个按键,可实现数据存储时间间隔的设置。有两种选择:以1 s为最小时间单位,或是以0.1 s为最小时间单位,然后设置要存储的数据个数。用户设置完成后,将用户的设置值及数据测量值,按用户设置的要求,存储到单片机的EEPROM里。在测量完成后,通过此两按键,可将存储在EEPROM里的测量数据,包括用户的设置,显示在屏幕上。
程序设计思路:单片机上电复位后,循环扫描K1与K2是否被按下。K1用于先清空EEPROM内的数据,及结合K2完成用户对存储要求的设置。在启动存储功能后,将用户设置的数据及测量数据存储到EEPROM里。K2用于读取EEPROM里的数据,并显示在屏幕上。实现此功能的流程图如图7所示。
图7 数据存储及读取程序流程图
图8 主程序流程图
3.3 主程序流程
主程序先完成相关变量、定时器参数等的定义设置后,再循环调用子程序,具体流程如图8所示。
4 结语
本文以增加型单片机STC15F2K60S2为核心,配合运放LMV358及外围电路,由单片机控制,实现数字电压表的量程自动转换功能。单片机自带多路输入ADC等模块,简化了电路设计,并通过程序设计,能依据用户的设定,将测量数据存储到单片机自带的EEPROM内,实现数据掉电不丢失且查阅的功能。若外围加上其它的相关转换电路,此数字电压表还可进一步扩展,使其具有更多的功能。