1、基本要求 (1)输出电流范围:0~2000mA; (2)可按键设置输出电压值值,要求输出电压与给定值偏差的绝对值≤给定值的1%+10 mA; (3)具有“+”、“-”步进调整功能,步进0.1V; (4)三极管作调整输出,实现最低电压输出0V (5)纹波电压≤10mV; 本电源主要由数控部分和稳流输出部分组成 1.数控部分 数控部分主要有数字电路构成,它要完成键盘控制,LCD1602液晶显示输出的电压值,短路保护等功能。因此采用STC89C51单片机作为整机的控制单元,通过改变TLC5615的输入数字量来改变输出电压值,从而使输出功率管的基极电压发生变化,间接地改变输出电流的大小。采用软件方法来解决数据的预置以及电电压的步进控制,使系统硬件更加简洁,各类功能易于实现,能很好地满足题目的要求。 2. 稳流输出部分 这部分是将控制部分送来的电流控制字数据转换成稳定电流输出。电压控制电路采用数控的方式,利用单片机送出数字量,经过D/A转换转变成模拟信号,再送到大功率三极管进行放大。单片机系统实时对输出电流进行监控,采用数字方式作为反馈调整环节,由程序控制调节功率管的输出电压恒定。 部分代码: uchar code tab1[]={"Welcome to use "}; //固定字符 uchar code tab2[]={"adj power supply"}; //固定字符 uchar code tab3[]={"Voltage: . V"}; //固定字符 uchar code tab4[]={" "}; //固定字符 uchar code tab5[]={"Short circuit!!!"}; //固定字符 uchar code tab6[]={"Please restart!!"}; //固定字符 //延时函数,后面经常调用 void delay(uint xms)//延时函数,有参函数 { uint x,y; for(x=xms;x>0;x--) for(y=121;y>0;y--); } /********液晶写入指令函数与写入数据函数,以后可调用**************/ /*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/ void write_1602com(uchar com)//****液晶写入指令函数**** { RS=0;//数据/指令选择置为指令 RW=0; //读写选择置为写 P0=com;//送入数据 delay(1); EN=1;//拉高使能端,为制造有效的下降沿做准备 delay(1); EN=0;//en由高变低,产生下降沿,液晶执行命令 } void write_1602dat(uchar dat)//***液晶写入数据函数**** { RS=1;//数据/指令选择置为数据 RW=0; //读写选择置为写 P0=dat;//送入数据 delay(1); EN=1; //en置高电平,为制造下降沿做准备 delay(1); EN=0; //en由高变低,产生下降沿,液晶执行命令 } void lcd_init()//***液晶初始化函数**** { uchar p; write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示 write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示 for(p=0;p<16;p++) { write_1602dat(tab1[p]);//向液晶屏写日历显示的固定符号部分 } write_1602com(0xc0);//时间显示固定符号写入位置,从第2个位置后开始显示 for(p=0;p<16;p++) { write_1602dat(tab2[p]);//写显示时间固定符号,两个冒号 } delay(1000); write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示 for(p=0;p<16;p++) { write_1602dat(tab3[p]);//向液晶屏写日历显示的固定符号部分 } write_1602com(0xc0);//时间显示固定符号写入位置,从第2个位置后开始显示 for(p=0;p<16;p++) { write_1602dat(tab4[p]);//写显示时间固定符号,两个冒号 }
}
|