数字电流表设计

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

一、原理及方案论证

1、数字电流表工作原理

1.1采样电阻网络

原理如下图所示,输入被测电流通过量程转换开关S1——S4,流经采样电阻R1——R4,由欧姆定律可知:U=I*R ,因而转换输出电压为0V ——0.1V 的电压,输出电压可再经后续放大电路放大处理。

1.2高共模抑制比放大电路

如下图,由双运放组成的同相输入高共模抑制比放大电路,其闭环输出可表示为:

使

共模输入为0,可令R1/R2=R4/R3,此时电路的差动闭环增益为Kd=1+R1/R2, U0=Kd(U1-U2); 下图即Kd=11,U0=11(U1-U2);

)21)(3

*14*22121(21)221(*)3*14*21(0U U R R R R R R U U R R R R U -++++-=

1.3通用A/D转换器

ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、双通道 A/D 转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。

ADC0832 具有以下特点:

◆ 8 位分辨率;

◆双通道 A/D转换;

◆输入输出电平与 TTL/CMOS 相兼容;

◆ 5V 电源供电时输入电压在 0~5V 之间;

◆工作频率为 250KHZ,转换时间为 32μS;

◆一般功耗仅为 15mW;

◆ 8P、14P—DIP(双列直插)、PICC 多种封装;

◆商用级芯片温宽为0°C to +70°C,工业级芯片温宽为- 40°C to +85°

C;

芯片接口说明

CS_ 片选使能,低电平芯片使能。

CH0 模拟输入通道 0,或作为 IN+/-使用。

CH1 模拟输入通道 1,或作为 IN+/-使用。

GND 芯片参考 0 电位(地)。

DI 数据信号输入,选择通道控制。

DO 数据信号输出,转换数据输出。

CLK 芯片时钟输入。

Vcc/REF 电源输入及参考电压输入(复用)。

1.4 AT89C52单片机

AT89C52 是美国ATMEL 公司生产的低电压,高性能CMOS 8 位单片机,片内含8k bytes 的可反复擦写的只读程序存储器(PEROM)和256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,与标准MCS-51 指令系统及8052 产品引脚兼容,片内置通用

8 位央处理器(CPU)和Flash 存储单元,功能强大AT89C52 单片机适合于

许多较为复杂控制应用场合。

主要性能参数

·与MCS-51 产品指令和引脚完全兼容

·8k 字节可擦写Flash 闪速存储器

·1000 次擦写周期

·全静态操作:0Hz-24MHz

·三级加密程序存储器

·256 ×8 字节内部RAM

·32 个可编程I /O 口线

·3 个16 位定时/计数器

·8 个断源

·可编程串行UART 通道

·低功耗空闲和掉电模式

功能特性概述

AT89C52 提供以下标准功能:8k 字节Flash 闪速存储器,256 字节内部RAM,32 个I /O 口线,3 个16位定时/计数器,一个6 向量两级断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52 可降至0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU 的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

2、方案论证

本设计采用精密采样电阻(9欧、0.9欧、0.09欧、0.01欧),电阻精度可达0.1%可忽略;八位A/D精度为5/256(V);因而除去放大电路增益误差及线性误差,电流表精度约为(5/256)/11,约为1.7mA;对于1000mA的总量程精度可达0.1%,因而方案可达设计要求。

二、系统硬件电路的设计

系统仿真接线简图

本设计中用到AT89C52单片机、八位ADC AD0832、发光二极管、六位八段显示数码管LED,通用运放 UA741 、PNP管及必要的电阻、电容元件等。系统原

理方框图电路仿真简图如上图。

系统方框图

三、系统程序设计

程序流程图如下:

系统程序流程图

C语言程序如下:

#include

#include"segment.h"

#define ADC0809BASE 0x4000

//ADC转换通路地址定义

/**********************************/

xdata unsigned char ADCIN0 _at_ (ADC0809BASE+0);

xdata unsigned char ADCIN1 _at_ (ADC0809BASE+1);

xdata unsigned char ADCIN2 _at_ (ADC0809BASE+2);

xdata unsigned char ADCIN3 _at_ (ADC0809BASE+3);

xdata unsigned char ADCIN4 _at_ (ADC0809BASE+4);

xdata unsigned char ADCIN5 _at_ (ADC0809BASE+5);

xdata unsigned char ADCIN6 _at_ (ADC0809BASE+6);

xdata unsigned char ADCIN7 _at_ (ADC0809BASE+7);

/************************************

启动ADC转换,并等待完成后返回转换结果

************************************/

unsigned char ADC0809_Convert(void)

{

while(!(P3&&0x04));//读取INT0的状态,等待上次转换结束,低电平表示正在转换

ADCIN0 = 0;

//ADCIN1 = 0;

while(!(P3&&0x04));//读取INT0的状态,为0则循环等待

return (ADCIN0);

//return (ADCIN1);

}

unsigned char t;

/************************************************

************************************************/

main()

{

while(1)

{

t=ADC0809_Convert();//测出AD值

dianya=t*3.921;//计算电压值1000/255

相关文档
最新文档