资源描述
- -
目 录
摘要1
第一章 引 言3
第二章 开发平台Keil4
2.1 系统概述4
2.2 整体架构5
第三章 硬件设计思想和原理图6
3.1 系统总体设计框图6
3.2 单片机系统7
3.3 AD转换电路8
3.4信号调理模块9
第四章 软件设计与流程10
4.1 程序流图10
4.2 功能介绍 10
第五章 软件仿真及测试数据 11
5.1 仿真结果11
参考文献12
附 录13
摘要:
在电路设计中我们时常会用到电压表,过去大局部电压表还是模拟的,虽然精度较高但模拟电压表采用用指针式,里面是磁电或电磁式构造,所以响应较慢。为适应许多高速信号领域目前已广泛使用数字电压表。本设计是基于Atmel51单片机开发平台和自动控制原理的根底上实现的一种数字电压表系统。该系统采用Atmel89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比拟器检测输入电压的围,并通过继电器阵列实现了输入量程的自动转换;使用共阴极数码管显示被测电压。
关键词:单片机、电压检测、模数转换、
Abstract:
In circuit design, we often use voltage meter,Over the past most of the voltage meter or a simulation,Although high precision analog voltage used in the table, but with the pointer, which is a magnetic or electromagnetic structure,so the slow response.To meet the many areas of high-speed signal has been widely used digital voltmeter.The design is based on Atmel51 microcontroller development platform and automatic control based on the principle of a digital voltage meter system.The system uses Atmel89C52 microcontroller as the control core, ADC0809 for the sampled data system, data sampling to achieve the measured voltage;Series pared with the range of detected voltage, and relay array to achieve through the automatic conversion of the input range; using mon cathode LED display the measured voltage.
Key words: Single Chip Micyoco、Voltage detection、Analog Digital Conversion
第一章 引 言
电子电压表主要用于测量各种高、低频信号电压,它是电子测量中使用最广泛的仪器之一。根据测量结果的显示方式及测量原理不同,电压测量仪器可分为两大类:模拟式电压表(AVM〕和数字式电压表〔DVM〕。模拟式电压表是指针式的,多用磁电式电流表作为指示器,并在表盘上刻以电压刻度。数字式电压表首先将模拟量经模数〔A/D〕转换器变成数字量,然后用电子计数器计数,并以十进制数字显示被测电压值。
众所周知,模拟电压表精度较高,曾经有很广阔的市场,现在依然有不少工程师依然在使用模拟电压表。确实模拟电压表在显示测量值方面精度校准,然而却也存在问题。模拟电压表采用用指针式,里面是磁电或电磁式构造,所以其响应速度较慢。
然而在高速开展的当今社会,高速信号处理的需求越来越多,由于模拟电压表响应速度较慢已经不适用与高速信号领域,取而代之的将是数字电压表。但数字电压表由于存在采样误差,精度不是很高。不过目前可以通过技术手段来缩小误差。使其精度到达与模拟电压表一样准确甚至更高。可见将来数字电压表必将取代模拟电压表。现在有越来越多的数字测量仪器的出现但原理皆与数字电压表殊途同归,因此研究数字电压表有着很大现实意义。
第二章开发平台Keil
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、构造性、可读性、可维护性上有明显的优势,因而易学易用。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能表达高级语言的优势。
2.1 系统概述
Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在的完整开发方案,通过一个集成开发环境〔uVision〕将这些局部组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选〔目前在国你只能买到该软件、而你买的仿真机也很可能只支持该软件〕,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
2.2 整体架构
C51工具包的整体构造较为丰富,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创立生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进展源代码级调试,也可由仿真器使用直接对目标板进展调试,也可以直接写入程序存贮器如EPROM中。
使用独立的Keil仿真器时,考前须知
1) 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
2) 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
3) 仿真芯片的31脚〔/EA〕已接至高电平,所以仿真时只能使用片ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM〔其CPU的/EA引脚接至低电平〕的目标系统中使用。
第三章 硬件设计思想和原理图
3.1 系统总体设计框图
本系统采样Atmel89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比拟器检测输入电压的围,用共阴极数码管显示结果。
显示电路
输入电压
51单片机
极性检测
AD转换
电压检测
3.2 单片机系统
单片机最小系统包括复位电路,晶振电路,电源电路,仿真时需搭建复位电路和晶振电路。
晶振电路:
单片机最小系统如下所示,其中P1口用于驱动数码管,P0口用于接收ADC0809转换的数据。P2口用于控制ADC0809。
单片机最小系统:
3.3 AD转换电路
利用ADC0809作为AD数据采样器件, ADC0809是CMOS单片型逐次逼近式A/D转换器它由8路模拟开关、地址锁存与译码器、比拟器、8位开关树型D/A转换器、逐次逼近。ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比拟器。START上升沿将逐次逼近存放器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进展。直到A/D转换完成,EOC变为高电平,指示A/D转换完毕,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门翻开,转换结果的数字量输出到数据总线上。
ADC0809各个管教功能:
IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路
ALE:地址锁存允许信号,输入,高电平有效。
START: A/D转换启动信号,输入,高电平有效。
EOC: A/D转换完毕信号,输出,当A/D转换完毕时,此端输出一个高电平〔转换期间一直为低电平〕。
OE:数据输出允许信号,输入,高电平有效。当A/D转换完毕时,此端输入一个高电平,才能翻开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
REF〔+〕、REF〔-〕:基准电压。
Vcc:电源,单一+5V。 GND:地。
ADC0809与单片机的连接。
3.4信号调理模块
该局部主要实现的功能是自动量程切换和电压变换,模块主要由电压极性检测电路、电压围粗测电路、电压变换电路三局部组成。
电压极性检测电路
电压极性检测电路采用过零比拟器检测负电压的方式实现的,运算放大器LM324的反向端接地,同向端通过100K电阻接输入信号。
电压围粗测电路
为了粗略地得到被测量的电压围我们采用多组比拟器的方式,通过阶梯式比拟的方法确定输入电压的围。
量程切换电路
电路由衰减电阻、切换继电器和运算放大器组成,对应的是衰减1/2、1/3、1/4和无零漂放大50倍,切换电路如下图。电压变换到0-5V标准信号后,再由A/D转换进展采样,最后由单片机算法复原。
第四章 软件设计与流程
4.1 程序流图软件局部采用模块化程序设计的方法,由单片机控制主程序、A/D转换子程序、电压检测及继电器控制程序、液晶显示组成。系统软件设计是在KeilC编译环境下进展的,由于C语言程序可移植性好,所以提高了编程的效率。
软件程序流程图:
4.2 功能介绍P0首先接收数据,据此控制PC6,PC7实现电压转换,保证正电压输出。PB0,PB1,PB2,PB3,PA6的输入值通过PA1,PA2,PA3,PA4,PA5控制继电器1,2,3,4,5实现电压增减并输入A/D转换器MAX187进展测量。最后输入PB4,PB6,PB7并由P1输入数码管显示。
第五章 软件仿真及测试数据
5.1 仿真结果
将写好的程序下载到仿真软件中的51单片机中,点击运行,观察数码管显示数值与图中输入电压进展比拟。理解其误差有多大。由于仿真软件缺少相应器材,故而未能进展彻底仿真。
总体电路图:
参考文献:
[1] 马潮 詹卫前 耿德根 编?Atmel51原理及应用手册? 清华大学
[2] 谭浩强编?C语言程序设计〔第二版〕?清华大学
[3] 马潮 编 ?AVR单片机嵌入式系统原理与应用实践? 航空航天大学
附 录
主程序:
#include<reg52.h>
Unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[4];
unsigned int i;
unsigned int j;
unsigned char getdata;
unsigned int temp;
unsigned int temp1;
unsigned char count;
unsigned char d;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P17=P1^7;
void TimeInitial();
void Delay(unsigned int i);
void TimeInitial()
{ TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void Display()
{
P1=dispbitcode[dispbuf[3]];
P20=0;
P21=1;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P17=1;
P20=1;
P21=0;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];
P20=1;
P21=1;
P22=0;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[0]];
P20=1;
P21=1;
P22=1;
P23=0;
Delay(10);
P1=0x00;
}
void main()
{
TimeInitial();
while(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);//查询转换完毕
OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=temp/1000;
Display();
}
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}
- word.zl
展开阅读全文