本系統以直流電壓源為核心,ATC89S52 單片機為主控制器,通過鍵盤來設置直流電源的輸出電壓,設置步進等級可達0.1V,輸出電壓范圍為0—9.9V,輸出電流為500mA,并 由數碼管顯示輸出電壓值。由“+”、“-”兩鍵分別控制輸出電壓步進增減,并且輸出電 壓可預置在0~9.9V 之間的任意一個值。擴展輸出電壓種類后可輸出三角波、梯形波、鋸齒波、方波等波形。本系統由單片機程控輸出數字信號,經過D/A 轉換器(DA0832)輸出模擬電流量,再經過運算放大器隔離放大輸出模擬電壓量,控制穩壓芯片LM7805 電壓的變化而輸出不同的電壓。實際測試結果表明本系統輸出電壓值精確度較高。本系統實際應用于需要高穩定度小功率恒壓源的領域。
1.png (38.67 KB, 下載次數: 30)
下載附件
2019-4-12 01:42 上傳
. 基本功能實現:
(1) 可輸出電壓:范圍0~+9.9V,步進0.1V,紋波不大于10mV;
(2) 可輸出電壓值由數碼管顯示;
(3) 由“+”、“-”兩鍵分別控制輸出電壓步進增減;
(4) 為實現上述幾部件工作,自制一穩壓直流電源,輸出輸出± 15v,+5v;
2.擴展功能與創新:
(1)輸出電壓可預置在0~9.9V之間的任意一個值;
(2)擴展輸出電壓種類(比如三角波等);
(3)最大輸出電流可達1.5A;
(4)負載電流在0~1.5A間變化時輸出電壓的變化量不超過0.1V;
(5)設計并制作一個電子負載,用于測試上述電源的負載調整率,電子負載恒定電流的可調范圍為0.1A~1.5A。
0.png (319.25 KB, 下載次數: 31)
下載附件
2019-4-12 01:43 上傳
0.png (279.01 KB, 下載次數: 26)
下載附件
2019-4-12 01:43 上傳
單片機源程序如下:
#include<reg52.h>
#define uint unsigned int //無符號字符 8位
#define uchar unsigned char //無符號整數 16位
sbit dula=P2^6; //鎖存器段選
sbit wela=P2^7; //鎖存器位選
sbit lcdrs=P3^1; //1602數據命令選擇
sbit lcden=P3^0; //1602使能信號端
sbit key1=P2^3; //+鍵
sbit key2=P2^2; //-鍵
sbit key3=P2^1; //波產生鍵
sbit key0=P2^0; //功能鍵
sbit wr_da=P2^5; //DAC選通
uchar num,num0,num1,zsys,xsys,bxsz;
uchar code table_x[]={ //編碼表 無點數碼管顯示
0x3f,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0f,0x7f,0x5f};
uchar code table_z[]={ //編碼表 帶點數碼管顯示
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) //延時函數
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display_bjys(uchar zsys,uchar xsys) //預設&步進 數
{ 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) //波形設置 數碼管掃描子函數
{ dula=1;
P1=table_x[bxsz];
dula=0;
P1=0xff;
wela=1;
P1=0xf0;
wela=0;
delay(1);
}
void keycan_bjys() //預設&步進 按鍵掃描
{ if(key1==0) //按key1鍵加數
{
delay(5);
if(key1==0)
{ num++;
if(num==100)
num=0;
}
while(!key1);
delay(5);
while(!key1);
}
if(key2==0) //按key2鍵減數
{ 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) //預設功能
{ 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 開機顯示畫面函數
{ 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 步進電壓畫面顯示函數
{ 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 預設電壓畫面顯示函數
{ 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 波形設置畫面顯示函數
{ 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 三角波輸出顯示畫面函數
{ 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 梯形波輸出顯示畫面函數
{ 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 鋸齒波輸出顯示畫面函數
{ 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 方波輸出顯示畫面函數
{ 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() //初始化子函數
{ wela=0;
dula=0;
num=0;
num1=0;
P0=0;
wr_da=0;
delay(1);
wr_da=1;
delay(1);
key0=1;
}
全部資料51hei下載地址:
簡易數控穩壓電源.zip
(2.36 MB, 下載次數: 71)
2019-4-12 00:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|