|
本系統(tǒng)以直流電壓源為核心,ATC89S52 單片機(jī)為主控制器,通過鍵盤來設(shè)置直流電源的輸出電壓,設(shè)置步進(jìn)等級(jí)可達(dá)0.1V,輸出電壓范圍為0—9.9V,輸出電流為500mA,并 由數(shù)碼管顯示輸出電壓值。由“+”、“-”兩鍵分別控制輸出電壓步進(jìn)增減,并且輸出電 壓可預(yù)置在0~9.9V 之間的任意一個(gè)值。擴(kuò)展輸出電壓種類后可輸出三角波、梯形波、鋸齒波、方波等波形。本系統(tǒng)由單片機(jī)程控輸出數(shù)字信號(hào),經(jīng)過D/A 轉(zhuǎn)換器(DA0832)輸出模擬電流量,再經(jīng)過運(yùn)算放大器隔離放大輸出模擬電壓量,控制穩(wěn)壓芯片LM7805 電壓的變化而輸出不同的電壓。實(shí)際測(cè)試結(jié)果表明本系統(tǒng)輸出電壓值精確度較高。本系統(tǒng)實(shí)際應(yīng)用于需要高穩(wěn)定度小功率恒壓源的領(lǐng)域。
. 基本功能實(shí)現(xiàn):
(1) 可輸出電壓:范圍0~+9.9V,步進(jìn)0.1V,紋波不大于10mV;
(2) 可輸出電壓值由數(shù)碼管顯示;
(3) 由“+”、“-”兩鍵分別控制輸出電壓步進(jìn)增減;
(4) 為實(shí)現(xiàn)上述幾部件工作,自制一穩(wěn)壓直流電源,輸出輸出± 15v,+5v;
2.?dāng)U展功能與創(chuàng)新:
(1)輸出電壓可預(yù)置在0~9.9V之間的任意一個(gè)值;
(2)擴(kuò)展輸出電壓種類(比如三角波等);
(3)最大輸出電流可達(dá)1.5A;
(4)負(fù)載電流在0~1.5A間變化時(shí)輸出電壓的變化量不超過0.1V;
(5)設(shè)計(jì)并制作一個(gè)電子負(fù)載,用于測(cè)試上述電源的負(fù)載調(diào)整率,電子負(fù)載恒定電流的可調(diào)范圍為0.1A~1.5A。
單片機(jī)源程序如下:
#include<reg52.h>
#define uint unsigned int //無符號(hào)字符 8位
#define uchar unsigned char //無符號(hào)整數(shù) 16位
sbit dula=P2^6; //鎖存器段選
sbit wela=P2^7; //鎖存器位選
sbit lcdrs=P3^1; //1602數(shù)據(jù)命令選擇
sbit lcden=P3^0; //1602使能信號(hào)端
sbit key1=P2^3; //+鍵
sbit key2=P2^2; //-鍵
sbit key3=P2^1; //波產(chǎn)生鍵
sbit key0=P2^0; //功能鍵
sbit wr_da=P2^5; //DAC選通
uchar num,num0,num1,zsys,xsys,bxsz;
uchar code table_x[]={ //編碼表 無點(diǎn)數(shù)碼管顯示
0x3f,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0f,0x7f,0x5f};
uchar code table_z[]={ //編碼表 帶點(diǎn)數(shù)碼管顯示
0xbf,0x8c,0xf6,0xde,0xcd,0xdb,0xfb,0x8f,0xff,0xdf};
void delay(uint z);
void display_bjys(uchar zsys,uchar xsys);
void display_bxsz(uchar bxsz);
void trigle();
void trap();
void saw();
void square();
void keycan_bjys();
void keycan_bxsz();
void write_com(uchar com);
void write_date(uchar date);
void init_kjhm();
void init_bjhm();
void init_yshm();
void init_bxxzhm();
void init_trigle();
void init_trap();
void init_saw();
void init_square();
void init();
void main()
{ init_kjhm();
init(); //初始化子程序
while(1)
{ dula=1;
P1=0x3f;
dula=0;
wela=1;
P1=0xf0;
wela=0;
if(key1==0||key2==0)
{ if(key0==0)
init_bjhm();
if(key0!=0)
init_yshm();
while(1)
{ keycan_bjys();
if(key3==0)
{ dula=1;
P1=0xff;
dula=0;
wela=1;
P1=0xff;
wela=0;}
if(key3==0)
break;
}
}
if(key3==0)
{ init_bxxzhm();
while(1)
{ keycan_bxsz();
if(key1==0||key2==0)
{ dula=1;
P1=0xff;
dula=0;
wela=1;
P1=0xff;
wela=0;
}
if(key1==0||key2==0)
break;
}
}
}
}
void delay(uint z) //延時(shí)函數(shù)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display_bjys(uchar zsys,uchar xsys) //預(yù)設(shè)&步進(jìn) 數(shù)
{ dula=1;
P1=table_z[zsys];
dula=0;
P1=0xff;
wela=1;
P1=0xfe;
wela=0;
delay(1);
dula=1;
P1=table_x[xsys];
dula=0;
P1=0xff;
wela=1;
P1=0xfd;
wela=0;
delay(1);
}
void display_bxsz(uchar bxsz) //波形設(shè)置 數(shù)碼管掃描子函數(shù)
{ dula=1;
P1=table_x[bxsz];
dula=0;
P1=0xff;
wela=1;
P1=0xf0;
wela=0;
delay(1);
}
void keycan_bjys() //預(yù)設(shè)&步進(jìn) 按鍵掃描
{ if(key1==0) //按key1鍵加數(shù)
{
delay(5);
if(key1==0)
{ num++;
if(num==100)
num=0;
}
while(!key1);
delay(5);
while(!key1);
}
if(key2==0) //按key2鍵減數(shù)
{ delay(5);
if(key2==0)
{ num--;
if(num==-1)
num=99;
}
while(!key2);
delay(5);
while(!key2);
}
zsys=num/10;
xsys=num%10;
display_bjys(zsys,xsys);
if(key0==0) //預(yù)設(shè)功能
{ P0=num;
wr_da=0;
delay(1);
}
}
void keycan_bxsz() //波形 按鍵掃描
{
if(key3==0)
{ delay(5);
if(key3==0)
{ num1++;//num1自加 選擇波形
if(num1==5)
num1=1;
bxsz=num1;
display_bxsz(bxsz);
while(!key3);
delay(5);
while(!key3);
}
if(key0==0)//功能鍵按下 確定波形輸出
{ if(num1==1)
{ init_trigle();
while(1)
{ trigle();
if(key0!=0)
break;
}
}
if(num1==2)
{ init_trap();
while(1)
{ trap();
if(key0!=0)
break;
}
}
if(num1==3)
{ init_saw();
while(1)
{ saw();
if(key0!=0)
break;
}
}
if(num1==4)
{ init_square();
while(1)
{ square();
if(key0!=0)
break;
}
}
}
}
}
void init_kjhm() //初始化 1 開機(jī)顯示畫面函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init_bjhm() //初始化2 步進(jìn)電壓畫面顯示函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init_yshm() //初始化3 預(yù)設(shè)電壓畫面顯示函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init_bxxzhm() //初始化4 波形設(shè)置畫面顯示函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
write_date(':');
delay(50);
}
void init_trigle() //初始化5 三角波輸出顯示畫面函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init_trap() //初始化6 梯形波輸出顯示畫面函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_date(':');
write_com(0x80+0x40);
delay(50);
}
void init_saw() //初始化7 鋸齒波輸出顯示畫面函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init_square() //初始化8 方波輸出顯示畫面函數(shù)
{ dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x80+0x40);
}
void init() //初始化子函數(shù)
{ wela=0;
dula=0;
num=0;
num1=0;
P0=0;
wr_da=0;
delay(1);
wr_da=1;
delay(1);
key0=1;
}
全部資料51hei下載地址:
簡(jiǎn)易數(shù)控穩(wěn)壓電源.zip
(2.36 MB, 下載次數(shù): 71)
2019-4-12 00:05 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|