数控直流电流源设计文档.docx

上传人:b****1 文档编号:1722483 上传时间:2023-05-01 格式:DOCX 页数:26 大小:564.19KB
下载 相关 举报
数控直流电流源设计文档.docx_第1页
第1页 / 共26页
数控直流电流源设计文档.docx_第2页
第2页 / 共26页
数控直流电流源设计文档.docx_第3页
第3页 / 共26页
数控直流电流源设计文档.docx_第4页
第4页 / 共26页
数控直流电流源设计文档.docx_第5页
第5页 / 共26页
数控直流电流源设计文档.docx_第6页
第6页 / 共26页
数控直流电流源设计文档.docx_第7页
第7页 / 共26页
数控直流电流源设计文档.docx_第8页
第8页 / 共26页
数控直流电流源设计文档.docx_第9页
第9页 / 共26页
数控直流电流源设计文档.docx_第10页
第10页 / 共26页
数控直流电流源设计文档.docx_第11页
第11页 / 共26页
数控直流电流源设计文档.docx_第12页
第12页 / 共26页
数控直流电流源设计文档.docx_第13页
第13页 / 共26页
数控直流电流源设计文档.docx_第14页
第14页 / 共26页
数控直流电流源设计文档.docx_第15页
第15页 / 共26页
数控直流电流源设计文档.docx_第16页
第16页 / 共26页
数控直流电流源设计文档.docx_第17页
第17页 / 共26页
数控直流电流源设计文档.docx_第18页
第18页 / 共26页
数控直流电流源设计文档.docx_第19页
第19页 / 共26页
数控直流电流源设计文档.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数控直流电流源设计文档.docx

《数控直流电流源设计文档.docx》由会员分享,可在线阅读,更多相关《数控直流电流源设计文档.docx(26页珍藏版)》请在冰点文库上搜索。

数控直流电流源设计文档.docx

数控直流电流源设计文档

 

课程名称:

电子技术综合设计

设计题目:

数控直流电流源

姓名:

班级:

学号:

 

成绩评定:

____

 

目录

一、设计任务与要求3

一、任务3

二、要求3

1、基本要求3

2、发挥部分3

三、说明4

二、总体设计方案4

一、方案比较、设计与论证4

1.数控模块4

2.电流源部分4

3.供电电源部分5

三、总体设计6

主要单元电路设计、分析与计算6

1、供电模块6

2、数控模块和测量模块7

3、A/D转换器ADC0809接口9

4、恒流源模块11

5、软件设计12

1、软件流程图12

2、软件模块分析12

四、系统测试及整机指标14

五、总结与心得15

六、参考文献15

附录1主要软件清单15

1、端口、地址初始化15

2、按键处理函数16

3、INT0中断初始化及中断函数18

附录2总原理图18

附录3元器件清单20

一、设计任务与要求

一、任务

设计并制作数控直流电流源。

输入交流200~240V,50Hz;输出直流电压≤10V。

其原理示意图如下所示。

 

二、要求

1、基本要求

(1)输出电流范围:

200mA~2000mA;

(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10mA;

(3)具有“+”、“-”步进调整功能,步进≤10mA;

(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10mA;

(5)纹波电流≤2mA;

(6)自制电源。

2、发挥部分

(1)输出电流范围为20mA~2000mA,步进1mA;

(2)设计、制作测量并显示输出电流的装置(可同时或交替显示电流的给定值和实测值),测量误差的绝对值≤测量值的0.1%+3个字;

(3)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的0.1%+1mA;

(4)纹波电流≤0.2mA;

(5)其他。

三、说明

1、需留出输出电流和电压测量端子;

2、输出电流可用高精度电流表测量;如果没有高精度电流表,可在采样电阻上测量电压换算成电流;

3、纹波电流的测量可用低频毫伏表测量输出纹波电压,换算成纹波电流。

二、总体设计方案

一、方案比较、设计与论证

根据题目要求,数控直流电源应该包括如下模块:

电流源模块、测量模块、供电模块和数控模块等。

1.数控模块

数控模块可采用传统逻辑电路组成,如采用数字电路和FPGA门阵列等,也可以采用单片机系统。

单片机系统具有灵活的接口和在线编程能力,容易实现体重有关键盘设置、显示以及测量功能等。

故本方案采用了以AT89s52单片机为核心的单片机习题完成对整个电路的控制。

2.电流源部分

在小电流输出的电流源中,可采用晶体管构成的镜像电流源、微电流源等。

本设计中要求的输出电流为200~2000mA,输出电流较大,在实现方案上常用如下三中方案。

方案一:

以可调直流稳压电源为基础,如图1所示。

当R2固定时,可保证流过负载的电流恒定,通过调节R2的大小,即可以实现改变负载电流的目的。

该方案可以输出较大的电流,但难于实现数控要求。

方案二:

采用基于PWM控制的电流源,该方案采用脉冲宽度调制技术,通过改变控制脉冲的占空比实现输出电流的控制,该方案的有点是效率高,可输出的电流大。

但由于功率管工作在开关状态,因此交流纹波较高。

方案三:

采用基于运算放大器和晶体管构成的电流深度反馈电路。

该方案在电路中引入了深度电流负反馈,因此可以保证输出电流具有很高的稳定性。

电流源所需要的控制电压由高精度D/A转换器提供,易实现输出电流的小步进调节。

该方案如图2所示。

综合上述分析,电流源部分采用方案三。

3.供电电源部分

根据设计的要求,需要一个具有20V电压、2A以上电流输出的电流电源,对电源没有特别的要求。

本设计采用了机遇可调三端稳压器的线性直流稳压电源。

综上所述,整个系统的硬件组成框图如图3所示。

三、总体设计

主要单元电路设计、分析与计算

1、供电模块

线性电源虽然简单,但在整个系统中有非常重要的作用。

电路中在输出端并联了大电容、串联了电感确保输出电流纹波小。

本电源先通过变压器电压变换隔离、桥式全波整流、电容滤波,再通过三端固定输出集成稳压器产生稳定电压+12V、-12V、+5V、-5V,稳压器内部电路由恒流源、基准电压、取样电阻、比较放大、调整管、保护电路、温度补偿电路等组成,如图4所示。

为了改善纹波特性,在输入端加接电容;为了改善负载的瞬态响应,在输出端加接电容。

输入电压选择原则是:

Vimax>Vi>Vo+2V。

Vimax为产品允许的最大输入电压,Vo为输出电压,2V为最小输出电压。

图4直流电源电路

20V电压、2A以上电流输出的直流电源,我们采用LM338可变输出稳压芯片。

交流输入经过电容滤波后送到三端稳压集成电路LM338的Vin端,输出端Vout=VREF(1+RW1/R1)+IADJR2。

在LM338的ADJ短加一个接地滤波电容,会使纹波抑制比大幅提高,进而提供非常稳定的电源。

2、数控模块和测量模块

(1)键盘与显示电路

键盘显示电路如图5所示。

用单片机作为这一控制系统的核心,单片机与键盘相连,采用4*4矩阵式键盘,用查询方式,由键盘控制输入电流值,同时也由键盘进行控制其步进调整功能。

显示器LCD选用JHD1602-B,具有体积小、质量轻、功耗低等优点,单片机四条数据线与其相连,数据分两次传送;两条控制线E、R/S控制LCD的显示。

图5

(1)4*4的矩阵键盘连接到P1口

图5

(2)LCD1602显示电路,数据口连接到P2口,1602的控制口由P3.3~P3.5控制

(2)D/A、A/D机器接口电路

1、根基题目要求输出电流范围为20~2000mA、步进10mA,需要至少198个状态,2n>198,n≥8,为了达到系统的控制精度,选取8位D/A。

具体电路接口如图5所示。

D/A转换器选用DAC0832,它是并行输入可编程双路8位D/A转换器。

该器件仅有20个引脚,本系统采用DAC0832的直通工作方式。

AT89s52单片机控制它只需要9个引脚,分别是8个数据口和一个片选端,非常方便。

+5V单电源工作。

选典型参考电压+5V,输出电压公式为:

V0=VREF×(n/256)

其输出电压范围为:

0~5V。

图6DAC0832与MCU的连接电路

电路说明:

   单片机执行指令dac0832=P0(dac0832为DAC0832的地址)时在ALE产生一个地址锁存信号,将P0口的数据输出到DAC0832的输入端,由于DAC0832是采用直通的方式对输入的数据进行转换,故执行完该指令后直接将P0口给定的数字量进行转换,由于DAC0832输出的是电流,且内部自带反馈电阻,故在其输出端采用LM358对电流转换成电压信号并进行放大,放大后的信号直接控制恒流源电路使其输出指定恒定的电流值。

   

3、A/D转换器ADC0809接口

ADC0809由8路模拟开关、地址锁存与译码器、比较器、256电阻阶梯、树状开关、逐次逼近式寄存器SAR、控制电路和三态输出锁存器等组成,其逻辑框图如图6所示:

图7ADC0809逻辑框图

ADC0809主要信号引脚的功能说明如下:

1、IN7~IN0——模拟量输入通道

2、ALE——地址锁存允许信号。

对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。

3、START——转换启动信号。

START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。

本信号有时简写为ST.

4、A、B、C——地址线。

通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC

5、CLK——时钟信号。

ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。

通常使用频率为500KHz的时钟信号

6、EOC——转换结束信号。

EOC=0,正在进行转换;EOC=1,转换结束。

使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。

7、D7~D0——数据输出线。

为三态缓冲输出形式,可以和单片机的数据线直接相连。

D0为最低位,D7为最高

8、OE——输出允许信号。

用于控制三态输出锁存器向单片机输出转换得到的数据。

OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。

9、Vcc——+5V电源。

10、Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。

其典型值为+5V(Vref(+)=+5V,Vref(-)=-5V).

电路说明:

ADC0809内部有一个8位“三态输出锁存器”可以锁存A/D转换后的数字量,故本身既可以看做一种输入设备,也可以认为是并行I/O接口芯片。

因此ADC0809可以直接和AT89s52相连。

由图可见START和ALE互连可使ADC0809在接收模拟量路数地址时启动工作。

START启动信号由AT89s52单片机WR和译码器输出端经过或门产生。

平时START因译码器输出高电平而封锁,当单片机执行指令adc0809=P0(adc0809为译码器输出0x0000地址)时,   START上产生一个正脉冲,如图CS和WR均为低电平,启动ADC0809工作。

EOC经过反相器和INT0相连,这说明AT89s52是采用中断方式和ADC0809传送A/D转换后的数字量。

ADC0809的采用频率是采用单片机ALE端产生的固定频率经D触犯器二分频所得的频率对模拟信号进行采样。

4、恒流源模块

(1)负反馈电路的分析与设计

D/A输出电压作为恒流源的参考电压,运算放大器U4与晶体管Q1,Q2组成的达林顿电路构成电压跟随器。

利用晶体管平坦的输出特性即可得到横流输出。

由于跟随器是一种深度的电压负反馈,因此电流源具有较好的稳定性。

本电流源的稳定度由于0.5%。

为了提高稳定度,D/A部分的参考电压采用+5V参考电压。

RS采用大线径康铜丝制作,康铜丝温度系数很小(拼了精度为5X10-6/℃),大线径可使其温度影响减至最小。

U4的同向端输入电压为V2,反向端的反馈电压为V1,流过RS的电流:

IE=V2/RS

复合管的放大倍数为俩个三极管放大倍数值之积,输出电流即集电极电流:

I0=IC≈IE=V2/RS

对于理想运算放大器,同向反向间的压差为0,即:

V1=V2

所以输出电流与输入电压间的关系:

I0=V1/RS

U4采用精密运算放大器OP07,该放大器有调节零点漂移的功能。

Q1采用9014,它的放大倍数大约为400.Q2选用低频大功率管3DD15,它的放大倍数为10~20倍,漏电流很小。

Q1的加入是为了增加复合管的放大倍数。

(2)供电电压的选择

题目中要求输出电流最大为2A,输出电压最大为10V,取极限情况,又因为选取的取样电阻为2Ω,则取样电阻上的压降为4V,而功率管要工作在放大状态,Vce至少为2V,所以供电电压必须大于16V。

因此选取供电电压20V。

(3)取样电阻的选择

由F-5-4知输出电流的控制是通过改变输入电压来实现的,这就要求电流取样电阻随温度变化很小。

锰铜丝的温度系数非常小,于是采用大直径的锰铜丝。

(4)测量电路的分析和设计

题目要求测量输出电流值,理论上是通过三极管的集电极串联一个很小电阻,通过差分放大实现。

但是由于输出的电压复读最大为10V,在小电阻上电位已经和差分放大的电源可比拟,将会产生很大的共模增益,导致输出电压与小电阻上的电压没有线性关系,故从发射极测量。

采用电压跟随器运算放大器的输入阻抗很大,可以达到不分流而得到电压的目的。

为了我电路的简洁,采用直接把电流取样电阻的中点电位作为输出电流的等效值。

5、软件设计

1、软件流程图

软件流程图如图8所示

2、软件模块分析

(1)、初始化模块

ⅰ、液晶初始化

在LCD1602-B的第一行显示“InputmA”指示按键输入的电流值;

在LCD1602-B的第二行显示“OutputmA”指示ADC0809采样的值。

ⅱ、INT0中断初始化

TCON=0x01;//INT0中断初始化,负边沿触发方式,响应中断时自动撤除中断标志位

IP=0x01;//INT0中断初始化,设置INT0为高优先级中断

IE=0x81;//INT0中断初始化,开INT0中断

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

/*采样INT0中断函数*/

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

voidinto_interupt(void)interrupt0

{

uchari,data_back1,data_back[4];

data_back1=(uchar)adc0809;//P2口采样得到的数据

for(i=0;i<3;i++)

{

data_back[i]=data_back1%10;

}

data_back[3]=0;

for(i=0;i<4;i++)

{

lcd_pos(76-i);//采样得到的数据显示在第二行

lcd_wdat(data_back[3-i]);

}

}

(2)、主函数

voidmain(void)

{

ucharm;

TCON=0x01;//INT0中断初始化,负边沿触发方式,响应中断时自动撤除中断标志位

IP=0x01;//INT0中断初始化,设置INT0为高优先级中断

IE=0x81;//INT0中断初始化,开INT0中断

delay(10);//延时

lcd_init();//初始化LCD

lcd_pos(0);//设置显示位置为第一行的第1个字符

m=0;

while(cdis1[m]!

='\0')

{//显示字符

lcd_wdat(cdis1[m]);

m++;

}

lcd_pos(0x40);//设置显示位置为第二行第1个字符

m=0;

while(cdis2[m]!

='\0')

{

lcd_wdat(cdis2[m]);//显示字符

m++;

}

while

(1)

{

adc0809=0x0000;//启动ADC0809并选通IN0通道进行采样,确保送完输入值后能启动ADC0809

keydown();

for(n=0;n

{

lcd_pos(12-n);

lcd_wdat(dis_buf[key_cli-1-n]);//显示输入数据

}

}

}

(3)功能按键模块

key=12;//步进+将输入的数据+10

key=13;//步进-将输入的数据-10

key=14;//确定键将输入的数据传送给DAC0832进行转换

key=15;//取消键清楚上次输入的数据

四、系统测试及整机指标

5、总结与心得

本系统采用八位DA转换器,精度无法满足设计要求,要满足设计的要求应选择11位的DA。

恒流源模块采用的是达林顿管对电流进行放大,为了达到更好的效果可以采用场效应管代替达林顿管(晶体管)。

在电源部分可以采用先用开关电源再用线性电源,可以将纹波电流降低到一个理想的范围。

同时由于本系统中的键盘模块是采用扫描的方式,而ADC0809的采用是由中断控制,而ADC0809的速度比较慢,这样就可能使得在按下键的时候单片机可能是在响应ADC0809,这样按下的键就无法被单片机识别,为了解决该问题,可以采用更加高速的AD或者高速的单片机,例如AVR系列单片机。

也可以采用两个51系列的单片机,一片完成按键的输入,另一片则完成对输出电流的转换成电压的采样。

在布局方面,整体布局还不够人性化,是为了完成设计要求而设计,在布局时应模块化布局。

在软件编程方面也应该采用模块化的设计思想,本设计的软件方面结构不都精简,例如将键盘扫描和按键处理写在同一个函数中,在一个比较大的系统中应将其区分开来,又例如对显示输入程序时为将显示模块独立为一个函数而是直接嵌入到其他源程序中,这样写出的代码的效率很低,比较浪费系统的资源。

由于系统采用了较多的IC,有模拟的也有数字的,系统未将模拟电源和数字电源区分开来,为了尽可能的减小模拟和数字信号之间的干扰应将其分别供电。

六、参考文献

1、求是科技.单片机典型模块设计实例导航人民邮电出版社,2005第4版

2、胡汉才.单片机原理及接口技术清华大学出版社20042月第二版

3、华成英童诗白.模拟电子技术基础高等教育出版社,200612月第12次印刷

4、戴佳.51单片机C语言应用程序设计实例精讲电子工业出版社2006第2版

5、沈国琴.51单片机C语言开发与实例人民邮电出版社20082月第一版

 

附录1主要软件清单

1、端口、地址初始化

#include

#include

#include

#definedac0832XBYTE[0x0000]//DAC0832端口地址

#defineadc0809XBYTE[0x0001]//ADC0809端口地址

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[16]={0x30,'1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

uchardis_buf[],dis_buf1[];//显示缓存

ucharn,temp;

ucharkey;//键顺序码

ucharkey_cli;//数字键被按下的次数

ucharjia,jian,enter,cance;//功能键

voidkey_process(void);

voiddelay0(ucharx);//x*0.14MS

sbitLCD_RS=P3^3;//LCDRS控制端

sbitLCD_RW=P3^5;//LCDRW控制端

sbitLCD_EN=P3^4;//LCDEN控制端

ucharcodecdis1[]={"InputmA"};

ucharcodecdis2[]={"OutputmA"};

2、按键处理函数

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

/**/

/*按键处理子程序*/

/**/

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

voidkeyscan(void)

{

ucharout_temp;

P1=0x0F;//低四位输入

delay(50);

temp=P1;//读P1口

temp=temp&0x0F;

temp=~(temp|0xF0);

if(temp==1)

key=0;

elseif(temp==2)

key=1;

elseif(temp==4)

key=2;

elseif(temp==8)

key=3;

else

key=16;

P1=0xF0;//高四位输入

delay(50);

temp=P1;//读P1口

temp=temp&0xF0;

temp=~((temp>>4)|0xF0);

if(temp==1)

key=key+0;

elseif(temp==2)

key=key+4;

elseif(temp==4)

key=key+8;

elseif(temp==8)

key=key+12;

else

key=16;

if(key<=9)

{

dis_buf[key_cli]=table[key];//查表得键值

key_cli++;

}

if(key==14)//确定键送数

{

out_temp=0;

for(n=0;n

{

out_temp=out_temp*10+(dis_buf[n]-0x30);

}

out_temp=out_temp/10;//缩小10倍送P0口

dac0832=out_temp;

}

if(key==15)//取消键

{

for(n=0;n

{

dis_buf[n]='';

}

for(n=0;n

{

lcd_pos(12-n);

lcd_wdat(dis_buf[key_cli-1-n]);

}

key_cli=0;

}

if(key==12)//步进+键

{

n=key_cli-2;

dis_buf[n]=dis_buf[n]+0x01;

if(dis_buf[n]>0x39)

{

dis_buf[n]=0x30;

n=key_cli-3;

dis_buf[n]=dis_buf[n]+0x01;

}

}

if(key==13)//步进-键

{

n=key_cli-2;

dis_buf[n]=dis_buf[n]-0x01;

if(dis_buf[n]<0x30)

{

n=key_cli-3;

dis_buf[n]=dis_buf[n]-0x01;

n=key_cli-2;

dis_buf[n]=0x39;

}

}

}

3、INT0中断初始化及中断函数

TCON=0x01;//INT0中断初始化,负边沿触发方式,响应中断时自动撤除中断标志位

IP=0x01;//INT0中断初始化,设置INT0为高优先级中断

IE=0x81;//INT0中断初始化,开INT0中断

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

/**/

/*采样INT0中断函数*/

/**/

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

voidinto_interupt(void)interrupt0

{

uinti,data_return;

uchardata_back[4];

data_return=(uchar)adc0809;//P0口采样得到的数据

for(i=0;i<3;i++)

{

data_retur

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2