直流数控电压源设计
直流数控电压源设计
一.题目基本要求 :
1.输出电压:范围0~+9.9V ,步进0.1V ,纹波不大于10mV ;
2.输出电流:100mA ;
3.输出电压值由数码管或液晶显示;
4.由“+”、“-”两键分别控制输出电压步进增减;
发挥部分:
1. 远程设置输出电压(如通过串口);
2. 输出过流保护功能
3. 增大输出电流
4. 考虑其它指标,如效率,负载调整率等
二.摘要
本次实验是以89C51单片机为控制单元, 以数模转换器DAC0832输出参考电压, 以该参考电压控制电压转换模块LM350的输出电压大小。该电路设计简单, 应用广泛, 精度较高等特点。目前所使用的直流可调电源中, 大多为旋钮开关调节电压, 调节精度不高, 而且经常跳变, 使用麻烦。利用本数控电源, 可以达到每步0. 1 V 的精度, 输出电压范目前所使用的直流可调电源中, 大多为旋钮开关调节电压, 调节精度不高, 而且经常跳变, 使用麻烦。利用本数控电源, 可以达到每步0. 1 V 的精度,
输出电压范围0~9.9V ,电流可以达到100mA ,且数码显示直观明显。
三、引言
总体设计思路采用A T89C51 系列单片机作为整机的控制单元, 通过改变输入数字量来改变输出电压值(A/ D 转换后电压值) , 经集成运放放大和射极输出器输出, 间接地改变输出电压的大小。
四.系统硬件设计结构框图
本数控直流稳压电源的设计以一稳压电源为基础,以高性能单片机系统为控制核心,以稳压驱动放大电路、短路保护电路为外围的硬件系统,在检测与控制软件的支持下实现对电压输出的数字控制,通过对稳压电源输出的电压进行数据采样与给定数据比较,从而调整和控制稳压电源的工作状态及监测开关电路的输出电流大小。本数控直流稳压电源实现以下功能:键盘可以直接设定输出电压值;可快速调整电压;LCD 显示电压值等。
数控电压源硬件电路图
五.主要芯片介绍
1.8051简介
我们采用8051系列的AT89S51作为CPU ,AT89S51是一种带4K 字节FLASH 可编程可擦除只读存储器(FPEROM —Flash Programmable and Erasable Read Only Memory )的低电压,高性能CMOS8位微处理器。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
主要特性
1)与MCS-51兼容 ;
2)8位字长的CPU ;
3)可在线ISP 编程的4KB 片内FLASH 存储器,用于程序存储,可擦写1000次;
4) 256B的片内数据存储器,其中高128字节地址被特殊功能寄存器SFR 占用;
5)可编程的32根I/O口线(P0~P3);
6)2个可编程16位定时器;
7)一个数据指针DPTR ;
8)1个可编程的全双工串行通信口;
9)具有“空闲”和“掉电”两种低功
耗工作方式;
10)可编程的3级程序锁定位;
11)工作电源的电压为5(1±0.2)V ;
12)振荡器最高频率为24MHz ;
13)编程频率3 ~24 MHz,编程电流
1mA ,编程电压为5V 。
芯片引脚排列与名称
DIP 封装形式的AT89S51的芯片引脚排
列与名称如图1所示。
VCC :供电电压。
GND :接地。
P0口:P0口为一个8位,并行, AT89S51的芯片引脚排列与名称
漏极开路双向I/O口,作为输出时可驱动8个TTL 负载。该口内无上拉电阻,在设计中作为D/A,A/D及液晶显示器的数据口。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL 门电流。P1口管脚写入1
后,被内部上拉为高,可用作输入,该口在设
计中低四位作为键盘输入口,高四位与RST 作为在线编程下载口。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收/输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,可作为输入。在作为输出时,P2口的管脚被外部拉低,将输出电流。该口在设计中作为D/A,A/D及液晶显示器的控制口。
P3口:P3口管脚是带内部上拉电阻的8位双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。P3口也可作为AT89S51的一些特殊功能口,如下表所示:
各端口引脚与复用功能表
该口在设计中使用其特殊功能作为D/A,A/D读写信号的控制口。和A/D的中断输入口。
RST :该引脚为复位信号输入端,高电平有效。在振荡器稳定工作情况下,该引脚被置成高电平并持续两个机器周期以上是系统复位。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。该引脚在设计中作为锁存器器和A/D的时钟信号。
/PSEN:外部程序存储器的选通信号。
/EA/VPP:/EA为访问芯片内部和芯片外部程序存储器的选择信号。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。
XTAL1:芯片内振荡器放大器的输入及内部时钟工作电路的输入。
XTAL2:芯片内振荡器放大器的输出。
2.D/A转换器DAC0832
简介
设计要求电压输出范围是0.0V ~9.9V ,步进0.1V ,共有100种状态,因此采用8位的D/A转换器就能满足设计要求。因此采用常用的DAC0832芯片。8位字长的D/A转换器DAC0832具有256种状态,能满足设计要求。DAC0832芯片是具有两个输入数据寄存器的8位DAC ,它能直接与AT89S51单片机相连接, 主要特性
1)8位分辨率;
2)电流型输出,稳定时间为1uS ;
3)可双缓冲输入,单缓冲输入或
直接数字输入;
4)单一电源供电(+5~+15V);
5 低功耗(20mW ;)
芯片引脚排列与名称
DIP 封装形式的DAC0832的芯片引
脚排列与名称如图51所示。
VCC:电源电压,+5V。
GND:地线输入端。 DAC0832的芯片引脚排列与名称
D0~D7:8位数字量输入引脚。单片机由这8根线传送给D/A转换数字量。D7为最高有效位,D0为最低有效位。
Vref :参考电压端。
/CS:片选信号,当/CS为低电平时候,芯片被选中工作。
ILE:允许数字量输入线。高电平有效。
/XREF:传送控制输入线,低电平有效。
/WR1,/WR2:写命令输入线。
Ffb :运算放大器反馈线。
Iout1,Iout2:模拟电流输出线,Iout1+Iout2为一常数。
3.A/D转换器ADC0809
简介
ADC0809是美国国家半导体公司生产的8位ADC ,它是采用逐次逼近的方法完成A/D转换的。ADC0809的内部结构框图如图所示。ADC0809由单一+5V电源供电,片内有带锁存功能的8路模拟多路开关,,可对8路0~5V
的输入模拟电
压信号分时进行转换,完成一次转换约需100us ;输出具有TTL 三台锁存缓冲器,可以直接接到单片机数据总线上。通过适当的外接电路,ADC0809可对0~5V的双级性模拟信号进行转换。
主要特性
1)8路8位A /D 转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单+5V 电源供电
5)模拟输入电压范围0~+5V ,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW 。
芯片引脚排列与名称
DIP 封装形式的ADC0809的芯片引脚排列
与名称如图6所示
各引脚功能说明如下:经过方案论证和比较后,
最终确定的系统框图如下, 主要由主电源、辅助
电源、D/ A 转换、集成运放、射极输出器、单
片机最小系统、显示及按键等组成。
此数控直流稳压电源共有六部分,输出电
压的调节是通过“+” ,“-”两键操作,步进
电压精确到 0.1V控制可逆计数器分别作加,减计数,可逆计数器的二进制数字输出分两路运行:一路用于驱动数字显示电路,精确显示当前输出电压值;另一路进入数模转换电路(D/A转换电路) ,数模转换电路将数字量按比例,转换成模拟电压,然后经过射极跟随器控制, 调整输出级,输出稳定直流电压。为了实现上述几部分的正常工作,需要另制15V ,和5V 的直流稳压电源。此下所讲的数控电源主要就是对此组电压进行控制,使输出 0~9.9V的稳定的可调直流
VCC:电源电压,+5V。
GND:地线输入端。
D0~D7:8位数字量输出引脚。A/D转换结果由这8根线传送给单片机最高有
效位,D0为最低有效位。
IN0~IN7:8路模拟量输入引脚。
Vref(+):参考电压正端。。
Vref(-):参考电压负端。
START:启动信号输入端,START 为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
ALE:地址锁存启动信号, 在ALE 的上升沿, 将A 、B 、C 上的通道地址锁存到内部的地址锁存器。START 和ALE 两信号用于启动A/D转换。
EOC:转换完成信号,当EOC 上升为高电平时,表明内部A/D转换已完成。 OE:允许输出信号。当OE=1时,即为高电平,允许输出锁存器输出数据。 CLK:时钟输入信号,0809的时钟频率范围在10~1200kHz ,典型值为640kHz 。
A 、B 、C:3位地址输入线,经过译码后可选通IN0~IN78个通道中的一个通道进行转换。A 、B 、C 的输入与选通的通道的关系如表所示:
4. 显示器
设计要求能显示当前电压值,因此可采用液晶显示或者数码管显示两种方法。考虑到数码管显示过于单调,因此采用采用液晶显示。液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在点阵型液晶显示模块已经是单片机应用设计中常用的信息显示器件了。
简介
本设计中采用了1602C 型点阵式液晶显示模块。LCD 技术和半导体技术的结合使该显示模块具有高可靠性和低功耗的特点。1602C 型点阵式液晶显示模块内部有字符产生存储器和数据存储器。该显示模块可直接与AT89s51单片机相接,所有的显示功能由控制器用指令实现。由单一的+5V的电源供电,数据传送方式有4位和8位两种选择。内有显示92个ASCII 字符和
92个特殊字符的字库。
引脚排列与名称
1602C 引脚排列与名称如图所示。
GND :电源地;
VCC :电源正极,4.5-5.5V ,通常使用5V 电压;
VO :LCD 对比度调节端,电压调节范围为0-5V ;
RS :写入数据或者指令选择端。要写入指令时,
使RS 为低电平;要写入数据时,使RS 为高电平;
R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;
E :LCD 模块使能信号控制端。写数据时,
需要下降沿触发;。
DB0-DB7:8位数据总线,三态双向。如果I/O口资源紧张的话,该模块也可以只使用4位数据线DB4-DB7接口传送数据。
A : LED背光正极。需要背光时,A 串接一个限流电阻接VDD ,K 接地,实测该模块的背光电流为50mA 左右;
K : LED背光地端
DAC0832接口电路
DAC0832 最具特色是输入为双缓冲结构,数字信号在进入D/A 转换前,需经过两个独立控制的8 位锁存器传送。其优点是D/A 转换的同时,DAC 寄存器中保留现有的数据,而在输入寄存器中可送入新的数据。系统中多个D/A 转换器内容可用一公共的选通信号选通输出。
设计中用2个电压控制字代表0.1V 当电压控制字从0,2,4,„„到198时,可调稳压源输出0.0,0.1,„„,9.9。由于DAC0832是电流输出型,输出的电流随输入的电压控制字线性变化。若要得到电压,还需要外接一片运放来实现电流到电压的转换。由于DAC0832 输出级没有加集成运放,所以需外加LM324 相配适用。考虑到设计需要,采用了单缓冲双级性的接法,如图所示:
其计算公式为:
V 1=-V ref (D ) 10 256
RX RX V 2=(-V 1) +(-5) RZ RY
其中Vref 为参考电压,D 为DAC0832接收到的数据。5为DAC0832基准电压。 如果图中所示电阻RX ,RY ,RZ 的阻值选取适当,则输出电压范围在电压控制字从0,2,4,„„到198变换时根据上式计算可得输出电压为+4.9V~-5V,正好满足后续电路的要求。其中P2.7为DAC0832的片选控制端。
ADC0809接口电路
由于输出电压范围是0.0V ~9.9V 超出了ADC0809的测量范围,因此使用电位器将输出电压分压后送至ADC0809的输入端。
ADC0809与AT89S51的接口电路如图所示
ADC0809接口电路
其中P2.6为0809的片选信号,与WR 和RD 分别通过或非门接到0809的START 和OE 上,EOC 通过非门与AT89S51的INT0相接。由于0809需要时钟信号,因此可以从AT89S51的ALE 端得到6分频的振荡信号,为了使6分频后的信号能满足0809的需求,我们采用的是4M 的晶体振荡器。
LCD1602C 接口电路
LCD1602C 与AT89S51的接口电路如图所示
图LCD 显示电路
可调稳压源电路
为了获得大的负载电流,可调稳压部分使
用了最大输出电流为1A 的7805三端集成稳
压块。7805原本是输出固定电压为5V
的集成
稳压块,但可以外接电路来改变输出电压值。可调稳压的电路见右图:
设运放理想。这时,可
认为运放输入电压很小。即:
Vout ≈Vin +5
其中Vin 为D/A部分输出的双级性电压,5为7805的稳压值。由上式可见,Vout 与Vin 之间成线形关系,当Vin 变化时,输出电压改变。由于Vin 是DAC0832输出的范围是+4.9V~-5V 的电压,因而Vout 的变化可以从0.0V ~9.9V 。经实验证明:这种可调稳压输出具有良好的负载特性,输出最大负载电流可达到1A 。电压输出端接上500mA 负载与未接负载(空载)之间输出电压仅相差0.04V 以内。
六.软件流程设计
图为系统主控程序。
2 D/A子程序
图为D/A子程序框图。
可以看出,D/A子程序的作用是将设定的数字量通过变换送给D/A。 3 A/D子程序 图为A/D子程序框图。
由A/D子程序框图看出,修改精度为一个数字量,由于A/D和D/A的精度限制,修改量只能达到0.05V ,但足已满足设计需要。
步进步减子程序
图为步进,步减子程序框图
步进,步减子程序框图
由步进,步减子程序框图可以看出,如果每次把D/A的数字量加01H ,可以使步进量和步减量由0.1V 变为0.05V 。如果采用更高位的D/A转换器。可以使步进量和步减量进一步的减小, 以满足更高的要求。
七.安装调试
电路组装好以后, 要检查一遍接线情况, 在确定安装接线无误的情况下, 就可进行电路通电调试。首先测量主电源、辅助电源输出电压是否达到要求; 在初始化 状态下, 调节集成运放μA741 的外接调零电位器, 使集成运放输出电压为零。调节射极输出器的偏置电阻R 9使输出电压为零; 在输入数值最大的情况下, 调节输出集成运放的负反馈电阻R 6 ,使其输出电压为12 V ,测量射极输出器的输出电压, 如果正常(12 V) ,说明设计组装基本成功。
八.设计总结
在本次设计过程中, 对纹波也没有提出严格要求, 所以常用的稳压集成电路就可以满足要求。在电路中采用了模拟器件和数字器件所以需要+5V、和-15V 电源供电。本设计输出的电压稳压精度高,可以用在对直流电压要求较高的设备上,或在科研实验室中当作实验电源使用。
在本次设计的过程中,我发现很多的问题,给我的感觉就是很难,很不顺手,看似很简单的电路,要动手把它给设计出来,是很难的一件事,主要原因是我们没有经常动手设计过电路,还有资料的查找也是一大难题,这就要求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本中学到的知识和实际的电路联系起来,这不论是对我们以后的就业还是学习,都会起到很大的促进和帮助,我相信,通过这次的课程设计,在下一阶段的学习中我会更加努力,力争把这门课学好,学精。
同时,通过本次课程设计,巩固了我们学习过的专业知识,也使我们把理论与实践从真正意义上相结合了起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力;从中可以自我测验,认识到自己哪方面有欠缺、不足,以便于在日后的学习中得以改进、提高;通过使用电路CAD 软件Protel 99 se , 也让我们了解到计算机辅助设计(CAD)的智能化, 有利于提高工作效率。 本次关于简易数控直流稳压电源的设计与制作是在老师的精心指导下,和同组内其他成员的共同交流下才得以顺利完成。经过本次毕业设计把我大学两年来所学的理论知识转化为实际应用,既锻炼了我们的实际操作能力,又使理论知识得以加强和升华,激发了创新意识。 再次感谢各位老师和同学们的帮助。
九.参考文献
[1 ] 郑萍. 现代电气控制技术[M] . 重庆:重庆大学出版社,2001. [2 ] 三菱公司. 中文FX 通讯手册[ Z] . 2005.
[3 ] 三菱公司. FR. S500 中文手册详细篇说明手册[ Z] . 2006.
[4 ] 刘俊. 三菱FX 系列PLC 与变频器的RS 485 通讯应用[J ] .可编程控制器与工厂自动化,2005 (12) :60262 ,95.
[5 ] 三菱公司. F940GOT2E Hardware Manual 介绍手册[ Z] . 2003.
[6 ] Mit subishi Company. FX Communication User′s Manual[ Z] . 2003. [7 ] 三菱公司. Gx2developer 用户手册[ Z] . 2005.
[8 ] 潘世永, 郑萍, 高丽萍, 等. PLC 远程仿真控制系统研究[J ] .中国远程教育,2005 (21) :71273.
[9 ] 陆述田. 计算机技术与PLC 控制在机电实训装置中的应用[J ] . 微计算机信息,2006 ,22 (19) :60261 ,147.
[10 ] 廖常初. FX 系列PLC 编程及应用[M] . 北京:机械工业出版社,2006.
十.附件
A 、程 序 实 现 #include
#define uchar unsigned char #define uint unsigned int
sbit rs=P3^3;//按键端口定义 sbit rw=P3^4; sbit lcden=P3^5; sbit keyup=P3^6; sbit keydown=P3^7;
int val=0;
uchar code table0[]="Voltage:"; uchar code table1[]="DC=.V";
void delayms(int x); //函数申明 void keyuper(); void keydowner();
void write(uchar com); void date(uchar date); void start(); void lcd1602();
void main() { uint k; P2=0X00; rw=0; start();
write(0x84);
for(k=0;table0[k]!='\0';k++) { date(table0[k]); delayms(2); }
write(0x80+0x44); date(table1[0]); date(table1[1]); date(table1[2]);
while(1) {
keyuper(); keydowner();
lcd1602(); }
}
void keyuper() //检测按键使电平上升函数 {
if(keyup==0) { delayms(10); if(keyup==0) { delayms(400); if(keyup==0) { val+=20; P2=val; delayms(1); if(val>256) val=0; while(keyup==0); } else { val+=1; P2=val; delayms(1); if(val>256) val=0; while(keyup==0); }
} } }
void keydowner() //检测按键使电平下降函数 { if(keydown==0) { delayms(10);
if(keydown==0) { delayms(400); if (keydown==0) {val-=10; P2=val; delayms(1); if(val
else { val-=1; P2=val; delayms(1); if(val
void write(uchar com)//写命令 { rs=0; P1=com; delayms(1);
lcden=1; delayms(1); lcden=0; }
void date(uchar date)//写数据 { rs=1; P1=date; delayms(1); lcden=1; delayms(1); lcden=0; }
void start()//初始化 {
lcden=0; write(0x38); write(0x0f); write(0x06); write(0x01); }
void lcd1602() { uint t;
t=5*5.12/256.0*val*100;
write(0x80+0x47); date(t/100+48); date(table1[3]); date(t/10%10+48); date(t%10+48); date(table1[4]); }
void delayms(int x) { int i,j;
for(i=x;i>0;i--) for(j=110;j>0;j--); }