智能仪器仪表基于单片机的电压表的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能仪器原理与应用
题目基于单片机的电压表设计班级
姓名
指导教师
年月日
目录
第1章设计背景 (1)
第2章系统总体方案设计 (2)
第3章系统硬件电路设计 (3)
3.1 系统控制器的设计 (3)
3.2 电压数据采集模块 (4)
3.3 LCD1602显示电路 (5)
3.4 按键设置模块 (6)
3.5 报警电路模块 (7)
3.6 上位机通信模块 (7)
3.7 温度采集模块 (8)
第4章软件电路设计 (9)
4.1 主程序流程图 (9)
4.2 量程自动切换子程序流程图 (9)
4.3 A/D转换子程序流程图 (10)
4.4 温度测量子程序流程图 (11)
心得体会 (12)
参考文献 (13)
附录 (14)
基于单片机的电压表设计
第1章设计背景
随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多的微弱信号需要被检测,例如:弱磁、弱光、微震动、小位移、心电、脑电等。

测控技术发展到现在,微弱信号检测技术已经相对成熟,基本上采用以下两种方法来实现:一种是先将信号放大滤波,再用低或中分辨率的ADC进行采样,转化为数字信号后,再做信号处理,另一种是使用高分辨率ADC,对微弱信号直接采样,再进行数字信号处理。

两种方法各有千秋,也都有自己的缺点。

前一种方法,ADC要求不高,特别是现在大部分微处理器都集成有低或中分辨率的ADC,大大节省了开支,但是增加了繁琐的模拟电路。

后一种方法省去了模拟电路,但是对ADC性能要求高,虽然∑-△ADC发展很快,已经可以做到24位分辨率,价格也相对低廉,但是它是用速度和芯片面积换取的高精度,导致采样率做不高,特别是用于多通道采样时,由于建立时间长,采样率还会显著降低,因此,它一般用于低频信号的单通道测量,满足大多数的应用场合。

在对采样精度要求不断提升的情况下,科技工作者也在其他方面对智能仪表的发展提出了新的要求,如:良好的人机界面、数据存储和通讯、阈值报警和较低的功耗等,同时还要求仪表具有较高的性价比。

本文主要设计的是基于单片机的量程自动选择的电压表的设计。

用来精确地采集不同等级的电压表。

数字电压表是采用数字化测量技术,把连续的量输入电压转换成不连续离散的数字化形式并加以显示的仪表作为现代电子测量中最基础与核心的一种测量仪器,对其测量精度和功能要求也越来越高,由于电压测量范围广特别是在微电压高电压及待测信号强弱相差极大情况下,既要保证弱信号测量精度又要兼顾强信号的测量范围,传统的手动转换量程的电压表在测量技术上有一定难度同时若量程选择不当不但会造成测量精度下降甚至损坏仪表。

第2章系统总体方案设计
本文设计的数字电压表测量直流电压范围为0~200V。

共分为4个档位,0~0.2V档,0.2V~2V档,2V~20V档,20V~200V档。

并且在测量的时候可以进行自动量程切换。

系统设计框图如图2-1所示。

其主要由单片机作为主控芯片,将要实现的各个功能分为若干个模块来实现,有电压数据采集模块,按键设置模块,温度采集模块,LCD1602显示模块,数据报警模块,以及与上位机通信模块。

为了以后的扩展,预留了其他输入通道。

其中,电压数据采集模块包括两个部分,信号调理电路和量程自动选择电路,它要实现的功能即是将采用并联法采集到的电压信号调理为合适的数字信号和实现自动选择量程,在自动选择量程上体现了此电压表的只能化。

按键设置模块,有四个按键,用于手动选择量程,当自动选择量程功能出现故障时,即可用手动来选择量程,以此来为设计的完善性做一定的补充。

温度采集模块,用温度传感器对测量现场进行温度检测,一般温度的会对要测的电压电路内部元件、材料电阻产生影响,从而对电压产生影响,故加入温度采集模块,保证能在正常工作状态的温度下,进行相对准确的电压测量。

LCD1602显示模块,用两行来显示所选档位、现场温度、所测电压值,使使用者可以一目了然。

数据报警模块,当测量电压值高于此电压表的最大量程时,报警电路报警。

当测量的温度高于设定的最高温度时,报警电路也发出报警信息。

在得到报警后,我们可以及时采取措施,消除警报,正确使用电压表。

上位机通信模块,通过串口可以将采集的电压值或者温度值上传给上位机进行数据存储或者处理。

预留的其它的输入通道,是便于以后对此电压表的扩展和二次开发。

图2-1 数字电压表的功能框图
第3章系统硬件电路的设计
3.1 系统控制器的设计
本系统控制核心采用增强型C51内核单片机,型号为STC12C5A60S2,该芯片为宏晶公司的主流型号,其片上资源丰富,包含八路精度为10位AD转换器,程序存储器为32KB,并集成有28KB的EEPROM,方便数据的存储,并能实现掉电不丢失。

数据存储器1280字节,其中1024字节使用片外寻址方式访问,256字节为直接访问,解决了51内核单片机数据存储器不足的问题,并且为ADC的过采样提供了充足的数据缓冲区。

此外,该芯片具有较高的性价比,能为整个系统的设计降低成本。

芯片的引脚图如图3-1所示。

图3-1 STC12C5A60S2引脚图
以此芯片设计了数字电压表的最小系统,包括晶振电路和复位电路。

最小系统电路图如图3-2所示。

图3-2 单片机最小系统设计
3.2 电压数据采集模块
电压数据采集模块包括两个部分,信号调理电路和量程自动选择电路。

量程自动选择电路分为四档,0~0.2V档,0.2V~2V档,2V~20V档,20V~200V档。

多路模拟开关选择CD4051。

CD4051相当于一个单刀八掷开关,开关接通哪一通道,由输入的3位地址码ABC来决定。

INH”是禁止端,当“INH”=1时,各通道均不接通。

此外,CD4051还设有另外一个电源端VEE,以作为电平位移时使用,从而使得通常在单组电源供电条件下工作的 CMOS电路所提供的数字信号能直接控制这种多路开关,并使这种多路开关可传输峰-峰值达15V的交流信号。

该芯片由单片机控制A,B端来选择被测电压的量程。

信号调理电路包括电压信号放大器和电压跟随器。

此电路由LM324构成。

LM324内部包括有两个独立的、高增益、内部频率补偿的运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。

它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。

输入电压信号经过精密电阻分压以及CD4501选择后,通过LM324其中一个运
放把输入信号调理到-5V~0V。

再经过另外一个运放,构成电压跟随器,将第一级负电压反向,转换到0~+5V。

输出电压信号通入单片机的一路AD端。

电路如图3-3所示。

图3-3 电压数据采集电路
3.3 LCD1602显示电路
该数据采集器具有液晶显示器的接口,16×2的字符型液晶显示器,液晶显示器的背光为可控式,在不需要时自动关闭,降低系统能耗。

以1602显示采集到的电压值或者温度值。

显示电路如下图3-4所示。

图3-4 LCD1602显示电路
3.4 按键设置模块
本电路采用四路独立按键输入设定值,基本满足日常设置需要。

按键输入电路如图3-5所示。

图3-5 按键设置电路
3.5 报警电路模块
当测量电压值高于此电压表的最大量程时,报警电路报警。

当测量的温度高于设定的最高温度时,报警电路也发出报警信息。

报警电路如图3-6所示。

图3-6 报警电路
3.6 上位机通信模块
本数字电压表设计了与上位机通信模块,通过串口可以将采集的电压值或者温度值上传给上位机进行数据存储或者处理。

通信模块电路如图3-7所示。

图3-7 上位机通信电路
3.7 温度采集模块
环境温度对于某些场合的数据测量具有非常大的影响,并且能判断测量仪表所处的环境是否适合测量,从而实现自我保护功能。

本系统中采用DS18B20作为温度传感器,用于对环境温度的采集。

独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55℃至+125℃。

温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒。

其电路如图3-8所示:
图3-8 温度采集电路
第4章软件电路设计
4.1 主程序流程图
系统上电后,初始化LCD1602液晶显示器,DS18B20温度传感器,A/D转换模块。

扫描按键,调用A/D转换模块测量电压,根据预测量电压选择量程,调用量程自动转换子程序,最后显示测量电压值。

主程序流程图如图4-1所示。

图4-1 主程序流程图
4.2 量程自动切换子程序流程图
单片机先以最大量程预测量电压的估计值,选择合适的量程再精确测量电压。

当所测电压高于最大量程时,报警电路报警。

量程自动切换子程序流程图如图4-2所示。

图4-2 量程自动切换子程序流程图
4.3 A/D转换子程序流程图
本设计采用软件滤波的方法。

通过连续采集40个电压值,去掉最大值和最小值,再求取平均值来确定最终电压值。

A/D转换子程序流程图如图4-3所示。

A/D 转换
入口
采样40次?
出口是否
图4-3 A/D 转换子程序流程图
4.4 温度测量子程序流程图
图4-4 温度测量子程序流程图
心得体会
当今社会在飞速发展,科学技术发展的速度更是迅猛无比,尤其是单片机技术在未来社会发展中一定会起着十分重要的作用,而通过本次设计无论是从硬件实现还是到整个程序的完成,无不是对我个人专业能力的一次提高和体现。

而本次设计主要是完成两方面工作,软件程序设计和硬件电路板设计。

软件设计包括用单片机设计语言设计控制系统并仿真、实现。

硬件设计包括绘制电路原理图,生成图后制作电路板、插件焊件、再做硬件测试。

通过这些都使我对采用单片机设计方法有了更深的理解和掌握,同时也让我把所学的知识广泛的应用到了实践中,充分的做到了理论与实践相结合。

无论从专业知识、动手能力,还是毅志品质,都使我受益非浅。

在电路调试中也遇到较多问题,但大部分问题都源自于单片机引脚的功能未配置正确,如在调试DS18B20时,发现单片机始终读不到数据,经过检查,发现硬件电路连接正确,最后发现连接DS18B20的IO引脚工作模式配置为高阻输入,而不是普通IO,从而导致DS18B20的数据无法读取;在调试液晶显示器时,由于LCD1602的响应速度较慢,在初始化时延时较短,导致初始化失败,进而在后续调试中无法正常工作;等等,这对于以后的学习都是一种经验。

通过本次课程设计,我了解到了过采样技术在现代测试领域和智能仪表中的重要地位,同时通过对数据采集器的整体设计,包括电路原理图设计、PCB设计、电路仿真及实际调试,我进一步加深了对单片机,数字电路,模拟电路及相关器件的使用体会,提高了调试电路的能力,对于以后的学习具有很大帮助。

总之,通过本次课程设计,我学习到了很多新知识,特别是过采样部分,虽然其原理较简单,但实际调试中会有很多问题,同时发现了自身还有很大的进步空间,为以后的生活和学习奠定了基础。

参考文献
[1]杨增汪.一种量程自动转换高精度数字电压表的设计[J].仪器仪表装置,2011,11:
12-15.
[2]濮霞.数字直流电压表的设计制作[J].电子设计工程,2013,21(4):113-115.
[3]任艳玲.基于单片机的量程自动转换电压表设计[J].电子科技,2006,11:56-59.
[4]高淑艳.基于TLC7135的数字电压表设计[J].交通科技与经济,2013,15(2):117-119.
[5]翟永前.基于MSP430单片机的智能数字电压表设计[J].化工自动化及仪器,2011,38:
297-300.
[6]王若男.基于MSP430F448单片机的交流数字电压表设计[J].电子设计工程,2012,
20(2):144-147.
附录
部分子程序:
void DataAcquisition(void)//电压数据采集子函数
{
unsigned char i = 0;
for (i=0;i<40;i++)//40次高速采样
{
ADCBuffer[i] = ADCResult(ADC);
MeanValue = MeanValue+ADCBuffer[i];
}
MeanValue = (MeanValue/1024*5.06)/64;//低通滤波Temp = (unsigned int)(MeanValue*10000);
buffer[0] = Temp/10000+0x30;
buffer[1] = '.';
buffer[2] = (Temp%10000)/1000 + 0x30;
buffer[3] = (Temp%1000)/100 + 0x30;
buffer[4] = (Temp%100)/10+0x30;
buffer[5] = Temp%10+0x30;
buffer[6] = 'V';
buffer[7] = ' ';
LCD1602_XYDisplay(2,4,6,buffer);//数据显示
}
void EnvironmentTemperature(void)//温度采集子函数
{
EnvironmentMonitor();
buffer[0] = ' ';
if (System.Data.Environment.Temperature >=0x8000)
{
buffer[1] = '-';
System.Data.Environment.Temperature-=0x8000;
}
else buffer[1] = ' ';
if (System.Data.Environment.Temperature/100 == 0) buffer[2] = ' ';
else buffer[2] = System.Data.Environment.Temperature/100+0x30;
buffer[3] = (System.Data.Environment.Temperature/10)%10+0x30;
buffer[4] = '.';
buffer[5] = System.Data.Environment.Temperature%10+0x30;
buffer[6] = 'C';
buffer[7] = ' ';
LCD1602_XYDisplay(2,2,8,buffer);
}。

相关文档
最新文档