1、1数控直流稳压电源摘要:数控直流稳压源就是能用数字来控制电源输出电压的大小,而且能使输出的直流电压能保持稳定、精确的直流电压源。电源具有高频率、高功率密度、高效率等优点, 被称作高效节能电源。该系统由单片机控制 DAC0832 输出电压,在经过运放放大,可以输出 112V 电压,1A 电流,此可调的低功率开关稳压电源,以满足小型电子设备的供电需要。关键词: 直流稳压源 单片机 DAC0832 运放 1 任务的提出1.1 基本功能电路可以输出 112V 电压,1A 电流,有两个开关,分别增减电压 0.2V,使用者可以自己微调。数码管显示当前输出的电压值。1.2 方案论证方案一: 三端稳压电源采用
2、可调三端稳压电源构成直流可调电源,采用两个 LM317 控制,可变电阻RP 用数字电位器作为反馈电阻,调节其值,即可调节其放大倍数。但由于三端稳压芯片 LM317 和 LM337 的输出电压不能从 0V 起调,输出公式:Vout=1.25(1+R2/R1)。所以,可以采用在输出的地方加两个二级管,利用 PN节的固有电压来实现从 0V 起调。方案二:采用 A/D 和 D/A采用 A/D 和 D/A 构成直流电源,采用单片机控制 DAC0832 输出电压,在经过运放放大,即可满足要求。方案三:采用 7805 构成直流电源采用 7805 构成直流电源,改变 RP 阻值使 7805 的公共端的电压在
3、0 到10V 之间可调,则 7805 的输出端电压就可实现-5V +5V 之间可调了。这种方案是利用了 7805 的输出端与公共端的电压固定为+5 的特性来设计的。但同样存在不好数控的问题。方案一结构简单,使用方便,干扰和噪音小。但数字电位器误差较大,控制精度不够高,误差电压较大。同时更重要的是几乎所有的数字电位器能够容忍的电流都在 20mA 以下。方案二精确度高,纹波小,效率和密度比较高,可靠性也不错。方案三同样存在数控不好的问题。所以我选择方案二。2 总体设计根据设计任务要求,该系统主要包括三大部分:数字控制部分、模拟/数字2转换部分(D/A 变换器)及运算放大。数字控制部分用+、- 按键
4、控制一可逆二进制计数器,二进制计数器的输出输入到 D/A 变换器,经 D/A 器转换成相应的电压,此电压经过放大到合适的电压值后输出,使稳压电源的输出电压以 0.2V的步进值增或减。2.1 电路设计框图数控直流稳压电源的工作原理框图如图 2.1 所示。图 2.1 设计框图2.2 总体电路仿真图P0.30.2P0.10. P0.40.5P0.60.7P0.0.1P0.20.3P0.40.5P0.60.7OUTP0.0.1P0.20.3P0.40.5P0.60.7P2.02.1P1.01.P1.21.3P1.41.5P1.61.7P1.01.P1.21.3P1.41.5P1.61.7 P2.02.
5、1P2.2.3P2.2.3OUT1OUT12345678910 RN110k+5vVREF8GND3 VC20CS1WR12DI34I25DI16I07FB9GND10 IOUT11IT212DI713I614DI515I416XFER17W218ILE(BY1/BY2) 19U2DAC0832 56741 U3:BLM324109 841U3:CLM324R510k R612kR720k+5V12345678910RN210k+5V +15V-15V+15V-15V+10V+8.8VoltsXTAL218XTAL119ALE3031PSN29RST9P0./AD0390.1/138P0.2/
6、AD2370.3/336P0.4/AD4350.5/534P0.6/AD630.7/732P1.011.2P1.231.34P1.451.56P1.671.78P3.0/RXD103.1/T1P3.2/INT0123./IT113P3.4/T014P3.7/RD173.6/W163.5/T115P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427U1AT89C51+5V Q1MPS8098R215+15V图 2.2 电路总仿真图ATC9851 单片机 DAC0832 数字控制+0.24V-0.24V运放输出数码管
7、显示电流放大3电路的总仿真电路图如图 2.2 所示。3 详细设计3.1DAC08321.DAC0832 结构D0D7:8 位数据输入线,TTL 电平,有效时间应大于 90ns(否则锁存器的数据会出错);VREF:基准电压输入线,VREF 的范围为-10V+10V;IOUT1:电流输出端 1,其值随 DAC 寄存器的内容线性变化;IOUT2:电流输出端 2,其值与 IOUT1 值之和为一常数; Rfb:反馈信号输入线,改变 Rfb 端外接电阻值可调整转换满量程精度;2.DAC0832 工作原理 当 VREF 接 10V 时, 输出电压范围是 0V10V。若输入数字为 0255,则输出为 Uout
8、 =VREFD/256。基本应用电路图如图 3.1 所示。图 3.1部分程序如下:void wbT0_time() interrupt 0 if(jia1=0)while(jia1=0);/按键按下P0=P0+0x05;num=num+24;/电压增加 2.4V3.2 单片机控制电路单片机 P2 口输出接到 DAC0832 的 D0D7,从而改变 DAC 的输出电压。单片机接数码管,显示当前的输出电压值。单片机还接有两个开关,用于调动输出电压,一个每次增加 0.24V,另一个每次减 0.24V。该电路图如图 3.2 所示。4P0.0JIA 0.24VP0.0P0.1P0.2P0.3P0.4P0
9、.5P0.6P0.7P2.0P2.1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P2.2P2.3JIAN 0.24V12345678910RN210kXTAL218XTAL119ALE30 EA31 PSEN29RST9P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 3P0.7/AD7 32P1.01 P1.12 P1.23P1.34 P1.45 P1.56P1.67 P1.78P3.0/RXD 10P3.1/TXD 1P3.2/INT0 12P3.3/INT1 13P3.
10、4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28P2.0/A8 21P2.1/A9 2P2.2/A10 23P2.3/A1 24P2.4/A12 25P2.5/A13 26P2.6/A14 27U1AT89C51+5V图 3.2 电压控制图3.3 运放电路和电流放大电路一级运放输出电压为 010V,经过二级运放,放大到 012V,以满足设计要求。该部分电路图如图 3.3 所示。P0.3P0.2P0.1P0.0 P0.4P0.5P0.6P0.7OUTOUT1VREF8GND3 VCC 20CS1 WR12 DI34 DI25DI16 DI07RFB
11、9 GND10 IOUT1 11IOUT2 12DI7 13DI6 14DI5 15DI4 16XFER 17WR2 18ILE(BY1/BY2) 19U2DAC0832 567411 U3:BLM324109 841U3:CLM324R510k R612.5kR720k+5V+15V-15V+15V-15V+10V+88.8VoltsQ1MPS8098R215+15VOUT15图 3.3 电压电流放大电路电路仿真结果如图 3.4 所示。图 3.4 电路显示当 DAC0832 输入为 0xff 时,输出电压电流如图 3.5 所示。图 3.5 输出电压 电流4 程序#include#define
12、 uchar unsigned char#define uint unsigned intsbit jia1=P32;/jia 0.24vsbit jian1=P33;/jian 0.24vuint num;uchar code table1=0xBF,0x86,0xDB,0xCF,0xed,0xeD,0xfd,0x87,0xFF,0xEF;/you. uchar code table=0x3F,0x06,0x5B,0x4F,60x66,0x6D,0x7D,0x07,0x7F,0x6F;/wu.void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for
13、(j=110;j0;j-);void display(uint xnum)uchar ge,shi,bai,qian;qian=xnum/1000;bai=xnum%1000/100;shi=xnum%100/10;ge=xnum%10;P1=0x00;P2=0xfe;P1=tableqian;delayms(17);P1=0x00;P2=0xfd;P1=table1bai;delayms(17);P1=0x00;P2=0xfb;P1=tableshi;delayms(17);P1=0x00;P2=0xf7;P1=tablege;delayms(17);void main()P0=0xff;num=621;display(num);7EA=1;EX1=1;EX0=1;while(1)display(num);if(num=1211)num=0;void wbT0_time() interrupt 0 if(jia1=0)while(jia1=0);P0=P0+0x05;num=num+24;void wbT1_time() interrupt 2if(jian1=0)while(jian1=0);if(num=0)num=1200;P0=P0-0x05;num=num-24;