单片机测电压.docx
《单片机测电压.docx》由会员分享,可在线阅读,更多相关《单片机测电压.docx(16页珍藏版)》请在冰豆网上搜索。
![单片机测电压.docx](https://file1.bdocx.com/fileroot1/2023-1/7/17ecc076-f98f-47a4-8852-c5bb62999e19/17ecc076-f98f-47a4-8852-c5bb62999e191.gif)
单片机测电压
仲恺农业工程学院
20010—2011学年
第二学期
课程设计
课题名称:
基于AT89c51单片机的数字电压表
设计时间:
2011.06.01—2011.06.9
系部:
机电工程系
班级:
姓名:
指导教师:
[摘要]本文介绍一种基于89c51单片机的一种电压测量电路,该电路采用ICL7135高精度、双积分A/D转换电路,测量范围直流0-±2000伏,使用LCD液晶模块显示,可以与PC机进行串行通信。
正文着重给出了软硬件系统的各部分电路,介绍了双积分电路的原理,89c51的特点,ICL7135的功能和应用,LCD1601的功能和应用。
该电路设计新颖、功能强大、可扩展性强。
[关键词]电压测量,ICL7135,双积分A/D转换器,1601液晶模块
第一章前言
1.1概述
目前,由各种单片机机A/D转换器构成的测量数字电压的结构,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
本章重点介绍单片A/D转换器以及由它们构成的基于单片机的数字电压表的工作原理。
1.2系统原理及基本框图
如图1.1所示,模拟电压经过档位切换到不同的分压电路衰减后,经隔离干扰送到A/D转换器进行A/D转换,然后送到单片机中进行数据处理。
处理后的数据送到LCD中显示,同时通过串行通讯与上位机通信。
图1.1系统基本方框图
第二章硬件设计
2.1输入电路
图2.1.1量程切换开关
图2.1.2衰减输入电路
输入电路的作用是把不同量程的被测的电压规范到A/D转换器所要求的电压值。
智能化数字电压表所采用的单片双积分型ADC芯片ICL7135,它要求输入电压0-±2V。
本仪表设计是0-1000V电压,灵敏度高所以可以不加前置放大器,只需衰减器,如图3.1.2所示9M、900K、90K、和10K电阻构成1/10、1/100、1/1000的衰减器。
衰减输入电路可由开关来选择不同的衰减率,从而切换档位。
为了能让CPU自动识别档位,还要有图3.1.1的硬件连接。
2.2A/D转换电路
A/D转换器的转换精度对测量电路极其重要,它的参数关系到测量电路性能。
本设计采用双积A/D转换器,它的性能比较稳定,转换精度高,具有很高的抗干扰能力,电路结构简单,其缺点是工作速度较低。
在对转换精度要求较高,而对转换速度要求不高的场合如电压测量有广泛的应用。
2.2.1双积A/D转换器的工作原理
图2.2.1.1双积A/D转换器
如图所示:
对输入模拟电压和基准电压进行两次积分,先对输入模拟电压进行积分,将其变换成与输入模拟电压成正比的时间间隔T1,再利用计数器测出此时间间隔,则计数器所计的数字量就正比于输入的模拟电压;接着对基准电压进行同样的处理。
在常用的A/D转换芯片中,ICL7135与其余几种有所不同,它是一种四位半的双积分A/D转换器,具有精度高(精度相当于14位二进制数)、价格低廉、抗干扰能力强等优点。
本文介绍用单片机并行方式采集ICL7135的数据以实现单片机测电压功能的设计方案。
图2.2.1.2双积A/D转换器的波形图
7135是采用CMOS工艺制作的单片4位半A/D转换器,其所转换的数字值以多工扫描的方式输出,只要附加译码器,数码显示器,驱动器及电阻电容等元件,就可组成一个满量程为2V的数字电压表。
(1)7135主要特点如下:
①双积型A/D转换器,转换速度慢。
②在每次A/D转换前,内部电
路都自动进行调零操作,可保证零点在常温下的长期稳定。
在20000字(2V
满量程)范围内,保证转换精度1字相当于14bitA/D转换器。
③具有自动极性转换功能。
能在但极性参考电压下对双极性模拟输入电压进行A/D转换,模拟电压的范围为0~±1.9999V。
④模拟出入可以是差动信号,输入电阻极高,输入电流典型值1PA。
⑤所有输出端和TTL电路相容。
⑥有过量程(OR)和欠量程(UR)标志信号输出,可用作自动量程转换的控制信号。
⑦输出为动态扫描BCD码。
⑧对外提供六个输入,输出控制信号(R/H,BUSH,ST,POL,OR,UR),因此除用于数字电压表外,还能与异步接收/发送器,微处理器或其它控制电路连接使用。
⑨采用28外引线双列直插式封装,外引线功能端排列如图所示。
(2)与单片机系统的串行连接
在ICL7135与单片机系统进行连接时,使用并行采集方式,要连接BCD码数据输出线,可以将ICL7135的/STB信号接至AT89C52的P3.2(INT0)。
ICL7135需要外部的时钟信号,本设计采用CD4060来对4M信号进行32分频得到125KHz的时钟信号。
CD4060计数为14级2进制计数器,在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,使用更为方便。
图2.2.2.3ICL7135与系统的连接图
图2.2.2.4CD4060时钟发生电路
2.3单片机部分
单片机选用的是ATMEL公司新推出的AT89S52,如图2.3.1所示。
该芯片具有低功耗、高性能的特点,是采用CMOS工艺的8位单片机,与AT89C51完全兼容。
AT89S52还有以下主要特点:
①采用了ATMEL公司的高密度、非易失性存储器(NV-SRAM)技术;
②其片内具有256字节RAM,8KB的可在线编程(ISP)FLASH存储器;
③有2种低功耗节电工作方式:
空闲模式和掉电模式
④片内含有一个看门狗定时器(WDT),WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST),只要对WDTRST按顺序先写入01EH,后写入0E1H,WDT便启动,当CPU由于扰动而使程序陷入死循环或“跑飞”状态时,WDT即可有效地使系统复位,提高了系统的抗干扰性能。
图2.3.189S52引脚图
2.4液晶显示部分
显示接口用来显示系统的状态,命令或采集的电压数据。
本系统显示部分用的是LCD液晶模块,采用一个16×1的字符型液晶显示模块,
点阵图形式液晶由M行×N列个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1个字节的8个位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元和显示RAM区1024个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。
一个字符由6×8或8×8点阵组成,即要找到和屏上某几个位置对应的显示RAM区的8个字节,并且要使每个字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组成某个字符。
但对于内带字符发生器的控制器来说,显示字符就比较简单了,可让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
2.4.11601使用说明
图2.4.1.11601引脚图
表2.4.1.1LCD1601液晶模块的引脚
引脚
符号
功能说明
1
GND
接地
2
Vcc
+5V
3
VL
驱动LCD,一般将此脚接地
4
RS
寄存器选择0:
指令寄存器(WRITE)Busyflag,位址计数器(READ)1:
数据寄存器(WRITE,READ)
5
R/W
READ/WRITE选择1:
READ0:
WTITE
6
E
读写使能(下降沿使能)
7
DB0
低4位三态、双向数据总线
续表2.4.1.1LCD1601液晶模块的引脚
8
DB1
9
DB2
10
DB3
11
DB4
高4位三态、双向数据总线
另外DB7也是一个Busyflag
12
DB5
13
DB6
14
DB7
寄存器选择,如表所示:
表2.4.1.2寄存器选择控制线操作
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏幕…等)
0
1
读Busyflag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
Busyflag(DB7):
在此位未被清除为“0”时,LCD将无法再处理其他指令要求。
(1)显示地址:
内部地址计数器的计数地址:
SB7=0(DB0~DB6)第一行00、01、02……等,第二行40、41、42……等,可配合检测DB7=1(RS=0,R/W=1)读取目前显示字的地址,判断是否需要换行。
表2.4.1.3LCD160116×1显示字的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
00
01
02
03
04
05
06
07
40
41
42
43
44
45
46
47
(2)外部地址:
DB7=1,亦即80H+内部计数地址,可以用此方式将字显示在某一位置。
LCD各地址列举如下表:
表2.4.1.4LCD160116×1显示字的外部地址
16×116字1行1601
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
80
81
82
83
84
85
86
87
C0
C1
C2
C3
C4
C5
C6
C7
表2.4.1.5LCD1601的指令组
指令
说明
设置码
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清除显示幕
0
0
0
0
0
0
0
0
0
*
光标回到原点
0
0
0
0
0
0
0
0
1
*
进入模式设定
0
0
0
0
0
0
0
1
I/D
S
显示幕ON/OFF
0
0
0
0
0
0
1
D
C
B
移位
0
0
0
0
0
1
S/C
R/L
*
*
功能设定
0
0
0
0
1
DL
N
F
*
*
字发生器地址设定
0
0
0
1
AGC
设置显示地址
0
0
0
1
ADD
忙碌标志位BF
0
0
1
BF
显示数据
1
0
写入数据
读取数据
1
1
读取数据
I/DI/D=1表示加1,I/D=0表示减1
SS=1表示显示幕ONS=0表示OFF
DD=1表示显示屏幕OND=0表示显示屏幕OFF
CC=1表示光标ONC=0表示光标OFF
BB=1表示闪烁ONB=0表示显示闪烁OFF
S/CS/C=1表示显示屏幕移位S/C=0光标移位
R/LR/L=1表示右移R/L=0表示左移
DLDL=1表示8位DL=0表示4位
FF=1表示5×10点矩阵F=0表示5×7点矩阵
NN=1表示2行显示行N=0表示1行显示行
BFBF=1:
内部正在动作BF=0:
可接收指令或数据码
2.4.2液晶显示部分与89c51的接口
如图所示:
用89S52的P2口作为数据线,用P0.1、P0.2、P0.3分别作为LCD的E、R/W、RS。
其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:
显示模块初始化:
首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。
向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
2.4.2.1液晶与89S52的接口
2.5通讯模块
89S52内部已集成通信接口URT,只需扩展一片MAX232芯片将输出信号转换成RS-232协议规定的电平标准, MAX232是一种双组驱动器/接收器,每个接收器将EIA/TIA-232-E电平输入转换为5V TTL/CMOS电平。
每个驱动器将TTL/CMOS输入电平转换为EIA/TIA-232-E电平。
即EIA接口,就是把5V转换为-8V到-15V电位0V转换为8V到15V再经RXD输出,接收时由RXD输入,把-8V到-15V电位转换为5V,8V到15V转换为0V。
MAX232的工作电压只需5V,内部有振荡电路产生正负9V电位。
图2.5.2MAX232元件图
图2.5.2MAX232引脚功能图
第三章系统的软件设计
3.1主程序设计
图3.1.1主程序流程图
ICL7135A/D与单片机连接电路的软件设计系统的程序流程图如图所示。
主程序一开始运行则设置堆栈起始地址为70H,设置中断寄存器,用来对ICL7135的中断进行计数,每5次后清零,完成一次数据采集工作,然后设置ICL7135的STB端的中断的优先级。
紧接着LCDM1601B进行一次清屏,使其各个指令、数据寄存器的值进行清空,屏幕不显示任何字符。
以前面对1601B的介绍,只要将01H送到数据总线,使RS=0,R/W=0,E有个下降沿的脉冲就可以完成清屏工作。
用以下指令实现MOVP2,#01H;送到数据DB7---DB0,调用子程序ENABLE,由于下降沿时,内部数据要送到RAM区,所以要有一个延时子程序,使这个下降沿持续2.5毫秒。
内部RAM有指令代码后就开始对RAM进行清零,所以屏幕原有的字符将被清除。
接着对1601进行功能的设定。
MOVP2,#01111000B,按表3.1.1来看是设定显示器按2行显示,每行8位,5×7点阵。
调用一次子程序ENABLE程序,写入CPU的指令寄存器中。
每次向LCDM中写入一个指令,就调用一次ENABLE,然后再对显示器进行闪烁、光标等功能进行设定。
显示器的RAM地址按加1方法进行读写。
再设定第一行字符,也就是‘Voltage’的显示地址80H。
字符‘Voltage’的TABLE表地址送到DPTR中,然后调用远程查表命令,依次把数据送到P2口,这时再调用子程序WRITE3,使LCD1601的RS=1,R/W=0使使能端E产生一个下降沿脉冲,将数据送入到数据寄存器中,接下来执行子程序DISPLAY1,它的主要功能是将TABLE表中的字符输出到LCD中去。
调定好显示字符数即远程查表的次数,就开始查表了。
采样数据存放的数据地址安排如下图所示,首先将60H中的数显示在正负号的位置上,按照ASCII码表,正号不显示(#20H),负号显示“-”(#2DH)。
图4.1.2数据地址
程序
3.2A/D中断程序设计
图3.2.1中断子程序流程图
ICL7135每一分钟完成3次据的采集工作,1/3秒完成后向CPU申请中断,CPU这时暂停工作,为中断服务.中断响应后关中断,将PSW、ACC压栈,判断是否首次中断,如果是首次中断,则将正负号标志位置入60H,再把万位置入61H中,如果不是首次中断,则跳到NEXT处,如果是第二次中断,则将千位数置入62H中,如果是第三次中断,再将百位数置入63H中,第四次中断则将十位数置入64H中,第五次中断则将小数点位置入65H中,同时个位置入66H中。
同时清除中断次数寄存器30H中的值,完成中断后将ACC、PSW出栈,开中断。
消隐的思想:
每次电压采集后,CPU将数据送到LCD显示,将可能出现以下几种需要消隐的情况。
例如:
2000V档量程:
─
0
1
9
9
.
9
此时万位的值‘0’不符合人们的视觉习惯,需要把万位的值消隐掉,编程是将#20H送入万位,使其在LCD中不显示任何字符即可。
同样的情况如下:
需要消隐万位、千位
需要消隐万位、千位、百位
2000V档量程:
─
0
0
1
9
.
9
─
0
0
0
1
.
9
需要消隐万位
需要消隐万位、千位
200V档量程:
─
0
1
9
.
9
9
─
0
0
1
.
9
9
需要消隐万位
20V档量程:
─
0
1
.
9
9
9
在采集到数据之后,置数之前判断档位,是2V档不消隐,是其他档位时再看要消隐的位之前有几个是零。
例如2000V档量程,-0001.9V,在2次中断时判断档位是2000V档,第1位是零,消隐第2位千位。
3.3通讯模块程序设计
89C51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。
但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。
这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。
如果在传行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。
89C51的串行口有4种工作方式,1种同步方式,3种异步方式。
本方式选方式1,一帧数据有10位,包括起始位0、8位数据位和1位停止位1。
串行口电路在发送时能自动加入起始位和停止位。
在接收时,停止位进入SCON中的RB8位。
方式1的波特率是可变的,由定时器1的溢出率决定。
由定时器1最好工作在方式2上(自动重装载模式),这样只需对TH1设置一次即可。
数据通过TXD输出,在8个位输出完毕后,SCON寄存器的TI位被设为1,CPU只要判断TI是1,接着发送下一个字节。
波特率的设定:
定时器T1工作在方式2的初值为:
(1.1)
为了减小误差,时钟振荡频率采用11.0592MHz,选用定时器T1工作在方式2作波特率发生器,波特率为300,设SMOD为0,依公式(1.1)得初值为:
所以TH1=TL1=A0H
MOVSCON,#50H;URAT工作在方式1上
MOVTMOD,#20H;TIME1工作在方式2上
MOVTH1,#0A0H;设置波特率为300
本设计的中断十分重要,为了减少相互间的干扰,保证可靠性,采用查询方式判断是否发送完毕。
A6:
JBCTI,A5;如果发送完毕跳,清标志位,跳到A5。
AJMPA6;否则跳到A6,等待
A5:
INCR0
电压检测原理,模数转换芯片的说明,与单片机的接口,接口程序设计,电路图,程序,不能实现程序的要有实现思路,流程图等
结论/小结/心得体会
电压测量通过不同的接口电路可实现温度、湿度、压力等测量,广泛应用于工业领域。
本电路设计别具一格,是一种高精度、低功耗、宽量程、智能化的电压表。
可扩展键盘、EEPROM、报警电路,实现电压异常记录、报警。
致谢
光阴如梭,转眼间,大学生涯将过去。
遥想入学之时,恍如隔日,不免感叹时光易逝,韶华难追。
在大学生涯即将结束之际,谨对四年来给予我关心与支持的良师益友和亲人们致以最诚挚的谢意!
参考文献
[1]徐爱钧.《智能化测量控制仪表原理与设计》(第二版)[M].北京:
北京航空航天大学出版社,2004.
[2]吴金戌,沈庆阳,郭庭吉.《8051单片机实践与应用》[M].北京:
清华大学出版社,2002.
[3]高峰,《单片微型计算机与接口技术》[M].北京:
科学出版社,2003.
[4]刘伟,赵俊逸,黄勇,《一种基予C8051F单片机的SOC型数据采录器的设计与实现》[A].天津市计算机学会单片机分会编.《2003年全国单片机及嵌如入式系统学术年会论文集(下册)》[C].北京:
北京航空航天大学出版社,2003.790-794
[5]http:
//www.ic-on-ICL7135.PDF、MAX232.PDF