標(biāo)題: 基于51單片機(jī)數(shù)控恒流源(電路原理圖講解+程序代碼) [打印本頁(yè)]
作者: DW小飛俠 時(shí)間: 2019-7-25 17:13
標(biāo)題: 基于51單片機(jī)數(shù)控恒流源(電路原理圖講解+程序代碼)
電路原理圖如下:
0.png (115.93 KB, 下載次數(shù): 97)
下載附件
2019-7-25 18:38 上傳
該項(xiàng)設(shè)計(jì)的主要目的是設(shè)計(jì)一種數(shù)控穩(wěn)壓電源。它利用單片機(jī)STC89C51作為主控芯片,控制數(shù)字/模擬轉(zhuǎn)換器(TLC5615)的輸出電壓的大小,經(jīng)過(guò)運(yùn)算放大器LM358與IRF9Z24N構(gòu)成負(fù)反饋系統(tǒng),從而輸出恒定電壓。最后通過(guò)電位器分壓將輸出信號(hào)反饋到運(yùn)算放大器LM358上,使輸出準(zhǔn)確度可以調(diào)節(jié)。此設(shè)計(jì)通過(guò)鍵盤(pán)電路與單片機(jī)連接,讀入控制數(shù)據(jù),利用軟件進(jìn)行判斷,從而起到控制電源輸出的作用。通過(guò)LCD1602(或LED數(shù)碼管)顯示數(shù)控電源的輸出電壓,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話(huà)。該項(xiàng)設(shè)計(jì)具有設(shè)計(jì)簡(jiǎn)單,控制靈活,調(diào)節(jié)方便,攜帶方便、成本低等優(yōu)勢(shì),具有較強(qiáng)的實(shí)用性。
下圖是為了了解整個(gè)電路如何工作的,把整個(gè)電路拆開(kāi)。
二、原理講解:
供電部分:
P2為接線(xiàn)柱,是整個(gè)系統(tǒng)的輸入電壓端口,整個(gè)數(shù)控電源有此輸入能量。D1、D2、D3、D4為四個(gè)二極管(in4007),起整流的作用,C6為濾波電容。整流濾波電路是使供電可以為交流,同時(shí)也可以用直流供電(交流供電不要超過(guò)20V,直流不要超過(guò)35V)。受電壓限制的主要是后級(jí)運(yùn)放耐壓、TL431耐壓以及7812的耐壓值。7812主要為保護(hù)7805,7805穩(wěn)出5V電壓共單片機(jī)供電使用。但是7805耐壓值是15V,所以前級(jí)要加7812保護(hù)7805。
晶振部分:
C2、C3、Y1(12MHZ)與單片機(jī)端口構(gòu)成震蕩電路,為51單片機(jī)提供時(shí)鐘。
復(fù)位電路:
RST連接單片機(jī)復(fù)位管腳,此電路及有上電復(fù)位功能,又有手動(dòng)復(fù)位功能。C1、R2構(gòu)成上電復(fù)位電路,上電瞬間C1導(dǎo)通,則RST為高電平,單片機(jī)將復(fù)位,電壓穩(wěn)定后C1儲(chǔ)存的電能通過(guò)R2對(duì)地釋放掉,單片機(jī)將正常運(yùn)行。同樣K2按下時(shí)RST為高電平,單片機(jī)復(fù)位,彈起來(lái)時(shí)RST為低電平,單片機(jī)正常運(yùn)行.
單片機(jī)部分:
單片機(jī)默認(rèn)選用STC89C51,同時(shí)兼容STC89C52、AT89S52、AT89S51、AT89C51等51單片機(jī)。
按鍵部分:
按鍵選用獨(dú)立按鍵,掃描時(shí)間短,使程序更簡(jiǎn)單且掃描時(shí)間更短,從而提高穩(wěn)定性。按鍵彈起時(shí)P20、P21、P22、P23為弱上拉狀態(tài),所以為高電平。按鍵按下時(shí)對(duì)應(yīng)的I/O口為低電平,可以被程序中的掃描函數(shù)檢測(cè)到。
數(shù)碼管顯示部分:
數(shù)碼管顯示采用四位一體共陽(yáng)數(shù)碼管,這樣使電路更為簡(jiǎn)單,只需四個(gè)9012三極管就可以將其驅(qū)動(dòng)。P24、P25、P26、P27分別作為數(shù)碼管的位選端,控制是否選通哪一位數(shù)碼管。采用PNP型三極管,低電平導(dǎo)通,高電平截止。R20、R30、R40、R50為三極管基極限流電阻,此電阻及能保護(hù)三極管又能保證三極管導(dǎo)通時(shí)處于完全導(dǎo)通狀態(tài)。R51為限流電阻,此電阻的大小直接決定數(shù)碼管的亮暗成都,在此選擇220歐姆、1/4色環(huán)電阻。數(shù)碼管的陰極端直接接單片機(jī)的P0口,而不需上拉電阻。STC89C51的單片機(jī)P0口為漏極開(kāi)路,所以作為輸出時(shí)必須接上拉電路,而作為輸入時(shí)相當(dāng)于數(shù)碼管作為上拉,所以不再需要上拉電阻,及簡(jiǎn)化了電路又節(jié)省了成本。
數(shù)模轉(zhuǎn)換部分:(此為數(shù)控電壓數(shù)控調(diào)壓關(guān)鍵所在)
數(shù)模轉(zhuǎn)換采用德州儀器的TLC5615,此為一片10位串行單5V電源DAC,直接電壓輸出。單片機(jī)P33、P32、P34分別連接TLC5615的時(shí)鐘端、片選端、數(shù)據(jù)端即可控制它輸出想要的電壓。此時(shí)TLC5615的6腳及參考電壓輸入端需接入2.5V的參考電壓。根據(jù)公式可知,當(dāng)參考電壓為2.5V時(shí),TLC5615將最大輸出5V電壓。
TL5615(DAC)電壓計(jì)算公式
Vout為7腳輸出電壓,Vrefin為6腳參考電壓輸入端,N為單片機(jī)通過(guò)1、2、3管腳向TLC5615寫(xiě)入的數(shù)據(jù),1024是根據(jù)這是一片10位數(shù)模轉(zhuǎn)換而計(jì)算出來(lái)的(210=1024),最后乘以二是因?yàn)門(mén)LC5615內(nèi)部有2倍的增益放大器。
在給TLC輸入2.5V參考電壓的時(shí)候,我們用了TL431芯片。TL431是可控精密穩(wěn)壓源。它的輸出電壓用兩個(gè)電阻就可以任意的設(shè)置到從Verf(2.5V)到36V范圍內(nèi)的任何值。該器件的典型動(dòng)態(tài)阻抗為0.2Ω,在很多應(yīng)用中用它代替穩(wěn)壓二極管。
同時(shí)用LM358作為跟隨器,減小2.5V基準(zhǔn)電源的阻抗,再送入TLC5615 參考電壓端。
(寫(xiě)論文時(shí),可以在此講解TL41技術(shù)參數(shù)LM358技術(shù)參數(shù)和原理和跟隨器電路原理)
TLC5615內(nèi)部原理圖:
TLC5615邏輯時(shí)序圖:
在給TLC輸入2.5V參考電壓的時(shí)候,我們用了TL431芯片。TL431是可控精密穩(wěn)壓源。它的輸出電壓用兩個(gè)電阻就可以任意的設(shè)置到從Verf(2.5V)到36V范圍內(nèi)的任何值。該器件的典型動(dòng)態(tài)阻抗為0.2Ω,在很多應(yīng)用中用它代替穩(wěn)壓二極管。
同時(shí)用OPA2107作為跟隨器,減小2.5V基準(zhǔn)電源的阻抗,再送入TLC5615 參考電壓端。
(寫(xiě)論文時(shí),可以在此講解TL41技術(shù)參數(shù)OPA2107技術(shù)參數(shù)和原理和跟隨器電路原理)
MOS放大部分:
將上述TLC5615輸出的可調(diào)電壓送到運(yùn)放LM358的反相端,通過(guò)MOS管(F9Z24N)放大。同時(shí)在F9Z24N的輸出端用RW1(10K)電位器分壓,取一定比例的輸出電壓反饋到比較器正相端,構(gòu)成一個(gè)反饋系統(tǒng)。此時(shí)MOS管輸出的PWM波的占空比將根據(jù)負(fù)載和輸入電壓而變化以保證輸出電壓的穩(wěn)定。C5作為輸出濾波電容,濾掉輸出電壓紋波。
根據(jù)反饋系統(tǒng)的穩(wěn)定原理計(jì)算出輸出電壓的公式,如下:
設(shè):Vo為輸出電壓,Vin為L(zhǎng)M358的2腳輸入電壓,RWH為電位器上部分電阻,RWL為電位器下部分電阻,RW為電位器阻值。
Vo=Vin×(RW/RWL);
(寫(xiě)論文時(shí),可以在此講解F9Z24N技術(shù)參數(shù))
報(bào)警電路:
此電路可以由單片機(jī)控制三極管(8550/9012)的通斷來(lái)控制蜂鳴器的報(bào)警。當(dāng)P36為高時(shí),三極管不高通,為低時(shí)三極管導(dǎo)通蜂鳴器響。當(dāng)過(guò)流或短路時(shí),單片機(jī)切斷輸出,同時(shí)蜂鳴器報(bào)名。
單片機(jī)源程序如下:
- #include "reg52.h" //包含頭文件
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //按鍵定義
- sbit KEY1= P2^0;
- sbit KEY2= P2^1;
- sbit KEY3= P2^2;
- sbit KEY4= P2^3;
- //數(shù)碼管位選端定義
- sbit W1= P2^4;
- sbit W2= P2^5;
- sbit W3= P2^6;
- sbit W4= P2^7;
- //DAC定義
- sbit CS_5615=P1^5; //定義片選信號(hào)IO口
- sbit CLK_5615=P1^6; //定義時(shí)鐘信號(hào)IO口
- sbit DAT_5615=P1^7; //定義數(shù)據(jù)輸入IO口
- //ADC定義
- sbit CS=P3^5; //定義片選信號(hào)IO口
- sbit CLK=P3^3; //定義時(shí)鐘信號(hào)IO口
- sbit DIO=P3^4; //定義數(shù)據(jù)輸入IO口
- uint U;
- uchar GETU=0;
- bit flag=0;
-
- uchar code table[]=
- {
- 0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7
- }; //共陽(yáng)數(shù)碼管段碼表 沒(méi)有小數(shù)點(diǎn) 0~9
- uchar code table1[]=
- {
- 0x7F,0x64,0xBD,0xF5,0xE6,0xF3,0xFB,0x67,0xFF,0xF7,0x5e
- };//帶小數(shù)點(diǎn)的編碼 0~9
- void delay_ms(uint z) //延時(shí)函數(shù)
- {
- uint a,b;
- for(a=z;a>0;a--)
- for(b=5;b>0;b--);
- }
- void shuma(uint buf) //數(shù)碼管顯示程序
- {
- uchar a,b,c,d; //定義變量
- a=buf/1000; //將數(shù)據(jù)除以1000得到千位數(shù)據(jù)
- b=buf%1000/100; //取余1000除以100得到百位數(shù)據(jù)
- c=buf%100/10; //得到十位數(shù)據(jù)
- d=buf%10; //得到個(gè)位數(shù)據(jù)
- W1=0;W2=1;W3=1;W4=1; //選中第一個(gè)位
- P0=~table[a]; //輸入該位要顯示的數(shù)據(jù)
- delay_ms(60); //延時(shí)
- W1=1;W2=0;W3=1;W4=1; //選中第二個(gè)位
- P0=~table1[b]; //注釋同上
- delay_ms(60);
- W1=1;W2=1;W3=0;W4=1;
- P0=~table[c];
- delay_ms(60);
- W1=1;W2=1;W3=1;W4=0;
- P0=~table1[10];
- delay_ms(60);
- W1=1;W2=1;W3=1;W4=1;
- }
- void tlc_5615(uint buf) //DA輸出
- {
- uint a,c; //定義變量
- c=buf; //要輸出的數(shù)據(jù)賦值
- CS_5615=0; //引腳拉低
- for(a=16;a>0;a--) //循環(huán)16次
- {
- DAT_5615=c>>15; //把數(shù)據(jù)串行輸入進(jìn)da芯片(把數(shù)據(jù)右移15位得到最高位數(shù)據(jù),賦值給數(shù)據(jù)腳)
- c=c<<1; //將數(shù)據(jù)左移一位,下次循環(huán)時(shí)就是傳輸?shù)诙粩?shù)據(jù)了
- CLK_5615=1; //拉高
- CLK_5615=0; //拉低
- }
- CLK_5615=1;
- CLK_5615=0;
- CLK_5615=1;
- CLK_5615=0;
- CS_5615=1;
- }
- unsigned int A_D()
- {
- unsigned char i,dat;
- CS=1; //一個(gè)轉(zhuǎn)換周期開(kāi)始
- CLK=0; //為第一個(gè)脈沖作準(zhǔn)備
- CS=0; //CS置0,片選有效
-
- DIO=1; //DIO置1,規(guī)定的起始信號(hào)
- CLK=1; //第一個(gè)脈沖
- CLK=0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
- DIO=1; //DIO置1, 通道選擇信號(hào)
- CLK=1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
- CLK=0; //第二個(gè)脈沖下降沿
- DIO=0; //DI置0,選擇通道0
- CLK=1; //第三個(gè)脈沖
- CLK=0; //第三個(gè)脈沖下降沿
- DIO=1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
- CLK=1; //第四個(gè)脈沖
- for(i=0;i<8;i++) //高位在前
- {
- CLK=1; //第四個(gè)脈沖
- CLK=0;
- dat<<=1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
- dat|=(unsigned char)DIO; //將輸出數(shù)據(jù)DIO通過(guò)或運(yùn)算儲(chǔ)存在dat最低位
- }
- CS=1; //片選無(wú)效
- return dat; //將讀出的數(shù)據(jù)返回
- }
- //主函數(shù)
- void main(void)
- {
- U=0; //電壓值顯示0
- while(1) //進(jìn)入循環(huán)
- {
- tlc_5615(U); //輸出電壓值
- shuma(U/8*10); //顯示電壓值
- if(flag==0) //沒(méi)有短路
- {
- if(KEY1==0) //按鍵1按下
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10); //此處調(diào)用顯示函數(shù)就是延時(shí)去抖的作用
- if(KEY1==0) //再次判斷按鍵按下
- {
- if(U<960) //1V對(duì)應(yīng)的是80 10位ad(10位ad最大數(shù)據(jù)是1024,這里為了取整數(shù),選擇80對(duì)應(yīng)1V,也就是8對(duì)應(yīng)0.1V,因?yàn)殡妷赫{(diào)節(jié)的變化一共有120種)
- U=U+8; //電壓加0.1V
- }
- }
- if(KEY2==0) //按鍵2按下
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY2==0)
- {
- if(U>=8) //電壓減
- U=U-8;
- }
- }
- if(KEY3==0) //按鍵3按下
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY3==0)
- {
- U=400; //輸出5V電壓
- }
- }
- if(KEY4==0) //按鍵4按下
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY4==0)
- {
- U=0; //關(guān)閉輸出
- }
- }
- }
- GETU=A_D(); //讀取ad數(shù)據(jù)
- if(GETU>=12) //0.0196V,采樣電阻采集到的電壓數(shù)據(jù)
- {
- U=0; //關(guān)閉輸出
- flag=1; //短路標(biāo)志位
- }
- }
- }
復(fù)制代碼
以上程序51hei提供下載:
C程序注釋.zip
(43.94 KB, 下載次數(shù): 150)
2019-7-25 17:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
原理圖.pdf
(222.22 KB, 下載次數(shù): 140)
2019-7-25 17:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
重點(diǎn):電路原理講解.doc
(791.5 KB, 下載次數(shù): 135)
2019-7-26 09:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: admin 時(shí)間: 2019-7-25 18:39
本帖需要重新編輯補(bǔ)全圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者: DW小飛俠 時(shí)間: 2019-7-26 09:10
我是截圖不能粘貼,所以上傳了一個(gè)Word文檔,里面有詳解
作者: 123456@QQ 時(shí)間: 2019-7-31 09:39
芯片選擇stc89c52的不行嗎
作者: 1792531927 時(shí)間: 2019-12-16 21:32
你這個(gè)是個(gè)恒壓源吧,不是恒流源
作者: aghkw 時(shí)間: 2020-2-15 09:02
下載來(lái)研究一下
作者: 泰泉 時(shí)間: 2020-3-17 09:00
這個(gè)樓主全面嗎
作者: lensurplus 時(shí)間: 2020-6-6 17:45
采樣電阻選擇那么大,這樣出來(lái)的恒流源電流會(huì)很小啊
作者: cjp88811283 時(shí)間: 2020-6-7 09:46
學(xué)習(xí)下,謝謝分享
作者: ljg5847 時(shí)間: 2020-6-7 10:31
學(xué)習(xí)下,謝謝分享
作者: 馮培培0614 時(shí)間: 2020-6-9 21:21
請(qǐng)問(wèn)沒(méi)有仿真文件和原理圖文件嗎
作者: 滄海一粒 時(shí)間: 2020-7-8 13:47
路過(guò)頂起,這個(gè)可以制作來(lái)玩玩,電源是經(jīng)常用到的
作者: 擎天微電子 時(shí)間: 2021-1-3 00:03
其實(shí)實(shí)際LM358驅(qū)動(dòng) MOSFET并不理想 發(fā)熱十分嚴(yán)重,理論上358 反相輸入 輸出的是 矩形波 但是用示波器測(cè)試是一個(gè)類(lèi)似于正弦波,用12V供電時(shí) 358輸出的 電壓大概是3-6V 由于MOSFET不是工作在開(kāi)關(guān)狀態(tài)導(dǎo)致發(fā)熱嚴(yán)重.
作者: Bubiu 時(shí)間: 2025-4-24 08:59
應(yīng)該行
作者: lgwd 時(shí)間: 2025-5-14 12:39
利用DAC0832的電路特性,與任一51CPU就可構(gòu)成8位數(shù)控恒流源!需要電流大就擴(kuò)展功放管!電路簡(jiǎn)單但效率高。軟件就是控制DAC0832輸出的幾條語(yǔ)句。取樣電阻不需要精確,因?yàn)橥ㄟ^(guò)反饋電阻調(diào)整補(bǔ)償即可!
作者: hu2018y 時(shí)間: 2025-5-20 23:37
多謝樓主通過(guò)這例子說(shuō)明用單片機(jī)控制做個(gè)可調(diào)電源的思路,給我個(gè)這文章的文檔吧?
作者: cwb2038 時(shí)間: 2025-5-21 07:37
學(xué)習(xí)一下,謝謝分享!
作者: 紅了腳丫 時(shí)間: 2025-5-21 11:39
擎天微電子 發(fā)表于 2021-1-3 00:03
其實(shí)實(shí)際LM358驅(qū)動(dòng) MOSFET并不理想 發(fā)熱十分嚴(yán)重,理論上358 反相輸入 輸出的是 矩形波 但是用示波器測(cè)試是 ...
還真有這個(gè)問(wèn)題,那要怎么改啊
作者: jiangje 時(shí)間: 2025-8-3 16:10
做的真好,能直接使用
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |