1、基于单片机的数控直流稳压电源一、引言(1)题目要求:利用LM317三端稳压器,设计制作一个数控稳压电源,要求:1、输出电压:2-15V,步进0.1V,纹波10mV; 2、输出电流0.5A;3、输出电压值由数码管显示,由“+”、“-”键分别控制输出电压的步进(2) 概况:直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。传统的多 功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高。普 通直流稳压电源品种很多但均存在以下问题:输出电压是通过粗调(波段开关)及细调(电 位器)来调节。这样,当输出电压需要精确输出,或需要在一个小范围内改变时(如 1.0210
2、3V),困难就较大。另外,随着使用时间的增加,波段开关及电位器难免接触不良, 对输出会有影响。常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也 不高。本文设计了一种以单片机为核心的智能化高精度简易直流电源,克服了传统直流电压 源的缺点,具有很高的应用价值。 二、系统设计(1) 方案论证:方案:采用单片机控制此方案采用 AT89C51单片机作为整机的控制单元,通过改变输入数字量来改变输出电压值。这里主要利用单片机程控输出数字信号,经过 D /A 转换器( DA0832)输出模拟量,然后使用运算放大器把电流转换成电压,在通过三段稳压器LM317使得输出电压和输出电流达到稳压的目的。
3、方案论证:1、输出模块:使用运算放大器做前级的运算放大器,由于运算放大器具有很大的电源电压抑制比,可以减少输出端的纹波电压。使用LM317做电流稳压器,把电流稳定到0.5A。 2、数控模块:采用AT89C51单片机完成整个数控部分的功能,同时,AT89C51作为一个智能化的可编程器件,便于系统功能的扩展。 3、显示模块:本来准备使用液晶显示,可是想想我们的层次不够,液晶现实的额程序不会写,只能退而其次,选择使用单片机通过锁存器控制8段LED数码管直接显示,这样可以精确的显示输出电压。(2) 系统结构: 单片机显示电路按键D/A转换放大电路稳压电路输出电路 系统结构设计图如上图所示。该系统主要由
4、单片机最小控制系统、显示电路、独立按键、D/A转换电路、放大电路和稳压电路组成。单片机设定预输出值,并可以通过独立键盘改变单片机的预设值。然后通过DAC0832转化为模拟量,再经过运算放大和稳压稳流电路最后输出预设电压值,通过LED显示能够直观的看到预设值。因为器材原因,我们设计的稳压电源采用的是外部稳压器提供的电源。这样虽然算不上是一个完整的数控直流稳压电源,但是,除了这点,我们设计的电源基本已经复合要求。(3) 硬件设计: 1、最小系统控制电路设计:最小控制系统由STC单片机、晶振、独立键盘和复位电路等组成。如下图所示。AT89C51的管脚排列如上图所示,9管脚接复位电路,18、19管脚为
5、晶振的两个输入端,20管脚接地,40管脚接+5V。 晶振Y1和两个电容C2、C3构成自激震荡,连接到单片机的X1和X2端,电解电容C4、电阻R5和按键S5构成复位电路,连接到单片机的复位端。当按键S5按下后,复位端通过R5与+5V电源接通,电容迅速放电,使RST管脚为高电平;当复位按键S5弹起后,+5V电源通过R6对电容C4重新充电,RST管脚出现复位正脉冲。2、D/A转换电路设计: 如上图所示,DA0832的8位数据线D0D7与单片机的P1口连接,1管脚(CS)和17管脚(Xfer)接地,8管脚(Vref)的参考电压为5V,则LSB=5V/28=0.02V,即最小分表率为0.02V。11管脚
6、(Iout1)和12管脚(Iout2)为电流输出端。3、放大电路与稳压稳流电路设计: 如上图所示,本设计中将DAC0832的Iout2接地,采用Iout1输出,然后接运算放大LM358P将输出电流转化为电压。经过LM358P转化后的电压值也为5V。为了达到与单片机预设电压范围215V同步,输出端电压需要经过二级放大。第一级不放大,直接将D/A输出的电流转化为电压,第二级放大,放大倍数=R2/R1=5.5K/1.1K=5。这里的R2由于找不到5.5K的电阻,所以用电位器代替。因为DA0832转换后的电压的范围为05V,即DA0832的8位输入端全为高电平1时,输出电压为5V,输入端全为低电平0时
7、,输出电压为0V,且呈线性变化。为此为了使输出与LED显示同步,必须经过放大倍数=5的二级放大。再经过运放放大后的电压已经复合要求,可是电流却没有复合要求,这就要用到了三段稳压器LM317。在这里,LM317作为电流稳压器,其应用电路如下图所示,其中,所以R1的值应该为2.5。可是,我们在实验室能找到的最小电阻是200,这还是远远大于2.5。所以我们的输出电流才6ma。这里还要说的是,本来我们采用的运算放大器是Lm324n,可是,因为我的不小心,在测试运放放大的时候,把芯片烧坏了。并且我们手头没有多余的芯片,幸亏和我们做同一方案的同学有运放Lm358p,所以我们也采用了Lm358p。4、显示模
8、块设计:如上图所示,显示部分采用数码管sr410561k,锁存器74HC573。数码管段码ADP接锁存器1的Q0Q7,数码管的位选13接锁存器2的Q0Q3。P0接锁存器1、2的D0D7。锁存器1的LE接单片机P22,锁存器2的LE接单片机 P23。数码管的adp接锁存器1的Q0Q7,数码管的位选13分别接锁存器2的Q0Q3。在使用数码管的过程中,我们发现数码管的位选直接接到单片机的P2口上,会使数码管的亮度不够。现在我们有2种方法解决。第一,接上拉电阻,经计算,200左右的电阻可使数码管达到最亮,为了保险起见,可以使用400的电阻。但当时我们手头刚好没有400的电阻,所以我们采用了第二种方法,
9、把数码管的位选接锁存器上。 (4) 软件设计:程序流程图设计: 程序设计流程图下图所示。 程序开始以后,首先程序初始化,显示LED预设的初始电压值。然后进行按键检测,如果没有按键按下,LED显示的电压不变;如果有按键按下,确认当前LED的调整值。接着启动D/A转换,将转换后的模拟量送给系统最终输出端。程 序 初 始 化键 盘 扫 描D/A转换开始键盘扫描NoYes显示程序结束程序代码:在附录(5) 系统调试: 显示模块调试 :算出数码管的段码,位选,使数码管能正确的显示预设值。 按键模块调试:消除抖动,使我们按一下按键的加、减键时,能实现显示程序的步进0.1。 放大稳压电路调试:为了使输出电压
10、和显示模块对应,我们要调节放大电路的方法倍数。假使显示的电压为11.3v,那么因为三端稳压器的自带电压为1.25v,所以放大电路输出电压因为11.3-12.510v,所以一级放大的输出电压应为-2v,二级放大的电压应为10v。稳流方面,因为器材的原因,我们只能把电流稳定在6ma。(6) 系统测试:各个模块连接起来后,因为电路的改变,可能会改变输出值的大小,所以我们要进行整体的测试:先测试放大电路的第一级放大,然后调整LM358P和DAC0832连接的那个电位器,使输出电压再次达到预想值。再调整第二级放大,把放大倍数再次调为5倍。 把程序下载到硬件电路,测试最后输出值,是否为我们的预想值三、总结
11、附录:程序代码:#include#define uint unsigned int#define uchar unsigned char#define DAC0832_PORT P1sbit duanxuan=P26;sbit weixuan=P25;sbit cs=P22;sbit wr1=P23;sbit S1=P20;/加sbit S2=P21;/减uchar num=20;uchar code table=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;void delay(uint z) /延时z ms子程序 uint x,y;fo
12、r(x=z;x0;x-)for(y=110;y0;y-);init()/初始化子函数 P1=num; uchar keyscan()/键盘扫描程序 if(S1=0) delay(10); /键盘按键消抖if(S1=0)if(num=150)num=20;elsenum+;while(!S1);/松手检测 if(S2=0) delay(10); if(S2=0)if(num=20)num=150;elsenum-;while(!S2);/松手检测 return(num);void display()/显示程序 duanxuan=1;P0=tablenum/100;/十位duanxuan=0;we
13、ixuan=1; P0=0x80;weixuan=0;delay(1);duanxuan=1;P0=(tablenum%100/10)&0xfe);/个位duanxuan=0;weixuan=1; P0=0x40;weixuan=0;delay(1);duanxuan=1;P0=tablenum%10;/小数duanxuan=0;weixuan=1; P0=0x20;weixuan=0;delay(1);uchar dazh( uchar n)/D/A转换子程序 cs=0;选定芯片wr1=0;允许写入n=num-13;输出电压值 DAC0832_PORT=n; /把n送给給DA/ 主程序 /void main() init();while(1) keyscan();display();dazh();
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100