压控恒流源2

更新时间:2023-11-08 00:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数控恒流源设计

摘要: 设计利用集成运放、场效应管对电流放大与单片机的自动控制来实现

数控直流电流源。系统有控制模块与恒流源模块组成。控制模块使用AT89S52结合按键与四位数码管显示,实现对恒流源的数控和预设值的显示。恒流源模块采用OP07与IRF640组成的反馈放大电路实现对电流的放大。控制到恒流源的信号转换采用DAC0832来实现;实测显示模块有ADC0809组成的显示电路来显示。并使用自制电源进行供电。

关键词: AT89S51,恒流源,ADC0809,DAC0832,OP07 1硬件电路设计与分析

1.1

恒流源模块:

恒流源分为流控式与压控式,由于压控式易于实现,电路实现相对简单;因此本模块使用了压控式恒流源。压控式恒流源可以有集成运放芯片与晶体复合管或场效应管来实现;但由于晶体复合管实现起来比较复杂,发热量相对MOS管相

对较大,性能参数相对MOS管较差;因此本模块采用高精度集成运放芯片OP07与大功率场效应管IRF640相结合构成的恒流源。

压控恒流源是系统的重要组成部分,它的功能用电压来控制电流的变化,由于系统对输出电流大小和精度的要求比较高,所以选好压控恒流源电路显得特别重要。

恒流源是采用了电流反馈的方式来稳定电流的,下图是个典型的正向电流源,利用运放虚短的概念,使R2上的电压保持与V一致,来获得一个I=V/R2的恒流源。 该恒流源电路由运算放大器、大功率场效应管Q1、采样电阻R3、负载电阻R4等组成。电路原理图如图所示 :

恒流源电路图

调整管采用大功率场效应管IRF640N 更易于实现电压线性控制电流, 满足最大电流和电压线性电流化。因为当场效应管工作于饱和区时,漏电流Id近似

为电压Ugs控制的电流。即当Ud为常数时,满足:Id=f(Ugs),只要Ugs不变,Id就不变。

在此电路中,R3为取样电阻,阻值为10欧。运放采用OP07作为电压跟随器,场效应管Id=Is(栅极电流相对很小,可忽略不计) 所以Io=Is= Ui/R3。正因为Io=Ui/R3,电路输入电压Ui控制电流Io,即Io不随R4的变化而变化,从而实现压控恒流。

由于输出电压变化的范围U〈=10V,Iomax=200mA,可以得出负载电阻R3max=50欧。

1.2控制模块:

由于按键模块、数码管显示、D/A模块本就是控制模块的细化模块;因此在电路设计、分析中把这几个模块在一起分析。以AT89S52最小系统为核心,外加按键模块、数码管显示模块、以及D/A转换。D/A设计在使用芯片上采用8位DAC0832芯片,DAC0832输出的电流通过OP07运放放大为电压,再通过一个运放OP07将电压变为正电压,通过单片机控制输出电压大小,实现数模转换,来控制恒流源的输入电压,从而控制恒流源的输出电流,电路图如下:

控制电路图

1.3显示模块:

由于在控制模块的电路分析中已经对液晶显示器进行了分析,并且在软件设计模块中也会有体现,这里不再多做介绍。使用ADC0809芯片将模拟信号转换为数字信号,经单片机采集后经数码管显示;测电流时,外串联一个电阻将电流信号转换为电压信号显示。其中ADC0809的模拟输入电压就是恒流源中采样电阻的电压,原理图如下:

2 软件设计模块

恒流源的数字控制器采用ATMEL公司的AT89S52,因为在程序不需要涉及

精准实时操作,所以使用C语言进行软件编写,这样可以大大提高程序编写时的效率。

程序设计上使用一个定时器作为系统实时时钟,周期性的进行数码管显示,按键扫描,AD转换和显示内用的切换。而主循环负责对按键进行处理。主程序流程图如图:

5 软件流程图

程序:

#include #include

#define DAC0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int sbit START=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit dp=P1^7; sbit s1=P3^4; sbit s2=P3^5;

sbit P27=P2^7; sbit P26=P2^6; uchar data led[4]; uint data tvdata;

int temp=53; //预设电压 uchar b;

uchar code tv[]={0xfe,0xfd,0xfb,0xf7};

uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void init() //中断初始化 { TMOD=0x01; TH0=(65536-35)/256; TL0=(65536-35)%6; EA=1; ET0=1; TR0=1; }

void time0()interrupt 1 //定时器0服务程序 {

TH0=(65536-35)/256; TL0=(65536-35)%6; b=~b; P26=b; }

void delay(uint i)

{

while(i--); }

void keyscan() //键盘扫描 { if(s1==0) { delay(10); if(s1==0) {

while(!s1);

temp=temp+1;

if(temp>=105)

temp=11; } } if(s2==0) { delay(10); if(s2==0) {

while(!s2);

temp=temp-1; if(temp<11) temp=105; } }

}

void ledxianshi(void) //显示模块 {

uchar k,i; uint t;

t=(tvdata*1.0/255*500)*10; led[0]=t; led[1]=t/10; led[2]=t/100; led[3]=t/1000;

for(k=0;k<4;k++) {

P2=tv[k]; i=led[k]; P1=a[i]; if(k==1)dp=1; delay(300); } }

void main(void) { init(); while(1) {

START=1;

START=0; //启动转换 while(EOC==0); OE=1; tvdata=P0; OE=0; // START=1;

keyscan(); DAC0832=temp;

ledxianshi(); delay(10); } }

设计中存在的问题分析与解决方案:

(1)数码管显示亮度不够:只有第一位较亮,其余三位亮度均不明显;经测试分析原因是没有加数码管驱动芯片,数码管的显示时间较短。 解决方法:加驱动芯片74HC245,将数码管的显示时间延长一些。

(2)用万用表测电流时电流偏小,测量电压时显示正确;经测试分析原因可能是取样电阻10欧太小,恒流源最大输入电压为2V,测电流时万用表内部和表头都有一定的电阻值共约为1.5欧。

解决方法:将取样电阻加大为25欧,恒流源最大输入电压增加为5V,以减少测量仪器本身的内阻带来的误差。因为取样电阻不是很大,测量仪器带来的误差

不可能忽略,经测试恒流源输入的电压越大,万用表测得的输出电流误差也就越大。

(3)数码管显示的数据不稳,仅在两个值之间变化;经测试分析得出的结论是原因可能以下几个方面:一是电压源的纹波偏大导致输入的电流不稳;二是AD模块始终循环采集电压,每次采集的电压并不完全相同,只要采集的电压有一点点变化就会导致显示不稳;三是电路焊接出现的问题。

本文来源:https://www.bwwdw.com/article/u932.html

Top