1、基本要求 (1)輸出電流范圍:0~2000mA; (2)可按鍵設(shè)置輸出電壓值值,要求輸出電壓與給定值偏差的絕對值≤給定值的1%+10 mA; (3)具有“+”、“-”步進(jìn)調(diào)整功能,步進(jìn)0.1V; (4)三極管作調(diào)整輸出,實(shí)現(xiàn)最低電壓輸出0V (5)紋波電壓≤10mV; 本電源主要由數(shù)控部分和穩(wěn)流輸出部分組成 1.數(shù)控部分 數(shù)控部分主要有數(shù)字電路構(gòu)成,它要完成鍵盤控制,LCD1602液晶顯示輸出的電壓值,短路保護(hù)等功能。因此采用STC89C51單片機(jī)作為整機(jī)的控制單元,通過改變TLC5615的輸入數(shù)字量來改變輸出電壓值,從而使輸出功率管的基極電壓發(fā)生變化,間接地改變輸出電流的大小。采用軟件方法來解決數(shù)據(jù)的預(yù)置以及電電壓的步進(jìn)控制,使系統(tǒng)硬件更加簡潔,各類功能易于實(shí)現(xiàn),能很好地滿足題目的要求。 2. 穩(wěn)流輸出部分 這部分是將控制部分送來的電流控制字?jǐn)?shù)據(jù)轉(zhuǎn)換成穩(wěn)定電流輸出。電壓控制電路采用數(shù)控的方式,利用單片機(jī)送出數(shù)字量,經(jīng)過D/A轉(zhuǎn)換轉(zhuǎn)變成模擬信號(hào),再送到大功率三極管進(jìn)行放大。單片機(jī)系統(tǒng)實(shí)時(shí)對輸出電流進(jìn)行監(jiān)控,采用數(shù)字方式作為反饋調(diào)整環(huán)節(jié),由程序控制調(diào)節(jié)功率管的輸出電壓恒定。 部分代碼: 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!!"}; //固定字符 //延時(shí)函數(shù),后面經(jīng)常調(diào)用 void delay(uint xms)//延時(shí)函數(shù),有參函數(shù) { uint x,y; for(x=xms;x>0;x--) for(y=121;y>0;y--); } /********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用**************/ /*在這個(gè)程序中,液晶寫入有關(guān)函數(shù)會(huì)在DS1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/ void write_1602com(uchar com)//****液晶寫入指令函數(shù)**** { RS=0;//數(shù)據(jù)/指令選擇置為指令 RW=0; //讀寫選擇置為寫 P0=com;//送入數(shù)據(jù) delay(1); EN=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備 delay(1); EN=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令 } void write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)**** { RS=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù) RW=0; //讀寫選擇置為寫 P0=dat;//送入數(shù)據(jù) delay(1); EN=1; //en置高電平,為制造下降沿做準(zhǔn)備 delay(1); EN=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令 } void lcd_init()//***液晶初始化函數(shù)**** { uchar p; write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù) write_1602com(0x0c);//開顯示不顯示光標(biāo) write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移 write_1602com(0x01);//清顯示 write_1602com(0x80);//日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開始顯示 for(p=0;p<16;p++) { write_1602dat(tab1[p]);//向液晶屏寫日歷顯示的固定符號(hào)部分 } write_1602com(0xc0);//時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示 for(p=0;p<16;p++) { write_1602dat(tab2[p]);//寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào) } delay(1000); write_1602com(0x80);//日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開始顯示 for(p=0;p<16;p++) { write_1602dat(tab3[p]);//向液晶屏寫日歷顯示的固定符號(hào)部分 } write_1602com(0xc0);//時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示 for(p=0;p<16;p++) { write_1602dat(tab4[p]);//寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào) }
}
|