当前位置:文档之家› 课程设计-- 电压测量程序设计

课程设计-- 电压测量程序设计

课程设计-- 电压测量程序设计广西科技大学课程设计论文课题名称电压测量程序设计学院电气学院专业测控技术与仪器班级 102学号 2010003040 63/69姓名游献山覃源渊指导教师潘绍明、麦雪凤、罗功坤2013年 11 月 28 日摘要本课程设计是电压测量程序设计,利用实验台上的电压源,经过放大后送到a/d转换成数字信号,计算后在LCD上显示其电压值。

主要解决A/D转换,放大电路,数据处理和显示模块。

A/D转换用ADC0809,系统用AT单片机,放大电路用OP07同相放大,显示用1602液晶屏显示。

关键字:A/D0809,OP07,LCD1602,AT89C52 Abstract;This course is designed to measure the voltage programming, using voltage source test bench, after amplified and sent to the a/d converted into digital signals, calculated on the LCD display the voltage value. Mainly to solve the A/D conversion, amplification circuit, data processing and display module. A/D conversion with ADC0809, the system uses AT microcontroller, amplifying circuit with OP07 in-phase amplifier,With 1602 LCD screen display.Keyword:A/D0809,OP07,LCD1602,AT89C52目录引言 (3)1.系统设计方案的选择 (4)1.1基于单片机系统及A/D转换芯片的电压表。

(4)1.2.本设计使用的单片机的简介 (4)1.3.本设计使用的1602的简介 (4)1.4.选用的A/D0809简介 (4)1.5. 选用的OP07简介 (5)2. 总体设计方案 (5)3.硬件电路系统模块的设计 (5)3.1 单片机系统 (5)3.2输入OP07放大电路 (7)3.3A/D转换电路73.41602液晶电路74. 系统软件的设计 (8)4.1 主程序的设计 (8)4.2 A/D转换程序............................................ .. (9)5.系统的调试 (10)5.1硬件调试 (10)5.2软件调试 (10)总结 (11)参考文献 (11)附录1:源程序附录2:电路总图引言数字电压表最初是伺服步进电子管比较式,其优点是准确度比较高,但是采样速度慢,重量达几十公斤,体积大。

继之出现了斜波式电压表,它的速度方面稍有提高,但是准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐近式结构,它不仅保持了比较式准确度高的优点,而且速度也有了很大的提高,但它有一缺点是抗干扰能力差,很容易受到外界各种因素的影响。

随后,在斜波式的基础上双引伸出阶梯波式,它的唯一的进步是成本降低了,可是准确宽,速以及抗干扰能力都未能提高。

而现在,数字电压表的发展已经是非常的成熟,就原理来讲,它从原来的一,二种已发展到多种,在功能上讲,则从测单一参数发展到能测多种参数;从制作元件来看,发展到了集成电路,准确度已经有了很大的提高,精度高达1NV;读数每秒几万次,而相对以前,它的价格也有了降低了很多。

目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法。

而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。

而常用的分类方法有如下几种:按用途来分:有直流数字电压表,交、直流数字电压表,交直流万用表等。

按显示位数来分:有4位,5位,6位,7位,8位等。

按测量速度来分:有低准确度,中准确度,高准确度等。

按测量速度来分:有低速,中速,高速,超高速等。

但在日常生活中,数字电压表一般是按照原理不同进行分类的,目前大致分为以下几类:比较式,电压——时间变换式,积分式等。

在电量的测量中,电压、电流和频率是最基本的三个被测量。

其中,电压量的测量最为经常。

而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。

另外,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受用户青睐,数字式电压表就是基于这种需求而发展起来的,是一种必不可少的电子测量仪表。

1.1基于单片机系统及A/D转换芯片的电压表这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。

由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。

此方案的原理是模数(A/D)转换芯片的基准电压端,被测量电压输入端分别输入基准电压和被测电压。

模数(A/D)转换芯片将被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值。

最后单片机系统将计算好了的被测电压值按一定的时序送入显示电路模块加以显示。

1.2本设计使用的单片机的简介本设计中选用是51系列的AT89C52,它是低电压、低功耗、高性能的CMOS8位单片机,片内含4KB的可反复擦写的只读程序存储器和128B的随机存取数据存储器,32个I/O口线,片内振荡器及时钟电路,并与MCS-51系列单片机兼容。

在设计中,单片机起着连接硬件电路与程序运行及存储数据的任务,一方面,它将A/D转换器、显示器等通过I/O口地址线和数据线连接起来;另一方面,它将用户下载的程序通过控制总线控制数据的输入输出,从而实现测电压的功能。

1.3本设计使用的1602的简介1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。

1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。

使用时直接编写软件程序按一定的时序驱动即可。

它的特点是显示字迹清楚,价格相对便宜。

1.4选用的A/D0809简介AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。

些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。

1.5选用的OP07简介Op07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。

由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。

OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A 为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。

2.0设计方案根据上述,我们选择单片机与A/D转换芯片结合的方法实现本设计。

使用的基本元器件是:AT89C52单片机,ADC0809模数转换芯片,1602液晶显示器,OP07放大电路,电容,电阻,晶振,标准电源等等。

设计的基本框图如下:图2.13.硬件电路系统模块的设计3.1单片机系统单片机最小系统其原理图如下:图3.1晶振电路如下图:图3.2复位电路如下图:图3.33.2输入电路于输入电路的电压要经过OP07放大电路放大,电路图如下:图3.43.3A/D转换电路ADC0809转换电路如下:图3.5 3.4显示电路1602液晶显示电路如下:图3.6 4.系统软件的设计4.1主程序的总体流程图:图4.1 4.2 A/D转换程序:图4.25.系统的调试完成了系统的硬件设计,制作和软件编程之后,要使系统能够按设计意图正常运行,必须进行系统调试。

调试分了硬件和软件调试5.1硬件调试硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。

1)检查所设计的硬件电路板所有的器件和引脚是否正确,尤其是电源的连接是否正确;检查各总线是否有短路的故障。

检查开关/按键是否正常,是否连接正确,为了保护芯片,应先对各插座电位进行检查,确认无误后再插入芯片。

2)将40芯片的仿真插头插入单片机插座进行调试,检查各接口是否满足设计的要求,有正常的程序测试硬件电路的好坏。

5.2软件调试软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错误,同时也能发现硬件的故障。

软件调试是一个模块一个模块进行的。

首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。

最后调试整个程序。

尤其注意的是各模块间能否正确的传递参数。

1)检查液晶显示模块程序。

在主程序中调用display()和dislay_zifu()函数,观察在1602液晶上是否能够显示相应的字符。

如果不能,则在相关的子程序中设计断点,反复调试直到能够显示。

2)检查按键模块程序。

本设计的按键模块程序是用状态机的方法,可以在key_state1状态下加一个任务,如显示一个字符在液晶上。

观察是否正确显示。

3)检查A/D转换模块程序。

可以在硬件电路的输入端输入已知的几个电压,分别观察液晶上是否显示相应的电压值。

4)检查数据的转换模块程序。

可以按硬件电路的按键开关,输入相应的电压,观察液晶显示的电压值是否一致。

如果一致。

则数据转换的算法正确的。

总调试。

当相应的各模块环节都正确后,可程序下载到单片机。

接上电源运行。

再检查所有功能,观察是否能预期的一样。

如果一样,说明设计成功完成。

总结:这次的课程认识到了我们的动手能力还不够,理论知识也学得不够扎实,还有我们的经验也不够。

经过了设计后我们的动手能力得到提高,也进一步巩固了我们的理论知识,同时也增加了一些设计的经验。

参考文献:[1]杨毅刚,彭喜元编著,单片机原理与应用设计北京:电子工业出版社。

2008.4[2]赵月飞等编著,Protel 99 SE基础与实例教程北京:机械工业出版社。

2009.12[3]姜志海编著,单片机的C语言程序设计与应用北京:电子工业出版社。

2011.7[4]史建芳编著,智能仪器设计基础北京:电子工业出版社。

2012.9附录1:源程序主程序:#include<reg52.h>#include <intrins.h>#include "LCD1602.h"#include "ADC0809.h"sbit CLOCK=P0^7;extern uchar display_buffer[][16]; void main(){TMOD=0x02;TH0=0x14;TL0=0x00;IE=0x82;TR0=1;Initialize_LCD1602();delay50us(10);Write_LCD_Command(0x80);//设置显示的初始位置LCD_Display(display_buffer[0]);//显示"The voltage is: "while(1){adc0809_init();Refresh_show();Write_LCD_Command(0xC0);//设置显示的初始位置LCD_Display(display_buffer[1]); //显示测得的数据}}void Timer0_INT() interrupt 1{CLOCK=!CLOCK;}LCD1602头文件:#ifndef __lCD1602_H__#define __LCD1602_H__#include <reg52.h>#define dat_port P0#define uchar unsigned char#define uint unsigned int#define delay4us() {_nop_();_nop_();_nop_();_nop_();} sbit RS=P1^5;//RS=1 数据RS=0 命令sbit RW=P1^6;//RW=1 读取RW=0 写入sbit E=P1^7;//E 使能信号uchar LCD_Busy_Check();//忙检查void Write_LCD_Command(uchar cmd);//向LCD写入命令void Write_LCD_Data(uchar dat); //向LCD写入一个字节的数据函数void Initialize_LCD1602(); //液晶初始化函数void LCD_Display(uchar *str);//在LCD上显示字符串#endifLCD1602C源程序:LCD1602.c源程序//液晶控制与显示驱动程序#include <reg52.h>#include <intrins.h>#include <string.h>#include "LCD1602.h"#include "ADC0809.h"//---------------忙检查-------------------//uchar LCD_Busy_Check(){uchar LCD_Status;RS = 0;RW = 1;E = 1;delay4us();LCD_Status = P3;E = 0;return LCD_Status;}//--------------向LCD写入命令--------------------//void Write_LCD_Command(uchar cmd){while((LCD_Busy_Check()& 0x80)==0x80); //忙等待RS = 0;RW = 0;E = 0;P3 = cmd;delay4us();E = 1;delay4us();E = 0;}//-----------向LCD写入一个字节的数据函数-----------------*/void Write_LCD_Data(uchar dat){while((LCD_Busy_Check()&0x80)==0x80);RS = 1;RW = 0;E = 0;P3 = dat;delay4us();E = 1;delay4us();E = 0;}//-----------LCD初始化-----------------*/void Initialize_LCD1602() //液晶初始化函数{Write_LCD_Command(0x38);delay50us(10); //功能设置,数据长度为8位,双行显示,5×7点阵字体Write_LCD_Command(0x0C);delay50us(10); // 显示开,关光标Write_LCD_Command(0x06);delay50us(10); //字符进入模式:屏幕不动,字符后移Write_LCD_Command(0x01);delay50us(10);//清屏}//-----------在LCD上显示字符串-----------------*/ void LCD_Display(uchar *str){uchar i;for(i=0;i<strlen(str);i++){Write_LCD_Data(str[i]);delay50us(100);}}ADC0809头文件:#ifndef __ADC0809_H__#define __ADC0809_H__#include <reg52.h>#define data_port P1#define uchar unsigned char#define uint unsigned intsbit START=P0^4;sbit EOC=P0^5;sbit OE=P0^6;void delay50us(uint m);// 延时uint adc0809_init(); // AD初始化void Refresh_show();#endifADC0809C源程序:#include<reg52.h>#include <intrins.h>#include "ADC0809.h"unsigned long dat_adc0809;uchar display_buffer[][16]={{"Current voltage:"},{" (CH) =0.00V"}};void delay50us(uint m){uint n,k;for(n=m;n>0;n--)for(k=25;k>0;k--);}uint adc0809_init() // AD初始化{START=0;OE=0;START=1;START=0;while(EOC==0);OE=1;dat_adc0809=P2;OE=0;return dat_adc0809;}void Refresh_show() //刷新显示{uint t=dat_adc0809*500.0/255; //display_buffer[1][7] = t/100+'0'; //整数位display_buffer[1][9] = t/10%10+'0'; //两个小数位display_buffer[1][10] = t%10+'0';}附录2:原理图。

相关主题