電路原理圖如下:
0.png (115.93 KB, 下載次數: 97)
下載附件
2019-7-25 18:38 上傳
該項設計的主要目的是設計一種數控穩壓電源。它利用單片機STC89C51作為主控芯片,控制數字/模擬轉換器(TLC5615)的輸出電壓的大小,經過運算放大器LM358與IRF9Z24N構成負反饋系統,從而輸出恒定電壓。最后通過電位器分壓將輸出信號反饋到運算放大器LM358上,使輸出準確度可以調節。此設計通過鍵盤電路與單片機連接,讀入控制數據,利用軟件進行判斷,從而起到控制電源輸出的作用。通過LCD1602(或LED數碼管)顯示數控電源的輸出電壓,實現簡單的人機對話。該項設計具有設計簡單,控制靈活,調節方便,攜帶方便、成本低等優勢,具有較強的實用性。
下圖是為了了解整個電路如何工作的,把整個電路拆開。 二、原理講解: 供電部分: P2為接線柱,是整個系統的輸入電壓端口,整個數控電源有此輸入能量。D1、D2、D3、D4為四個二極管(in4007),起整流的作用,C6為濾波電容。整流濾波電路是使供電可以為交流,同時也可以用直流供電(交流供電不要超過20V,直流不要超過35V)。受電壓限制的主要是后級運放耐壓、TL431耐壓以及7812的耐壓值。7812主要為保護7805,7805穩出5V電壓共單片機供電使用。但是7805耐壓值是15V,所以前級要加7812保護7805。 晶振部分: C2、C3、Y1(12MHZ)與單片機端口構成震蕩電路,為51單片機提供時鐘。 復位電路: RST連接單片機復位管腳,此電路及有上電復位功能,又有手動復位功能。C1、R2構成上電復位電路,上電瞬間C1導通,則RST為高電平,單片機將復位,電壓穩定后C1儲存的電能通過R2對地釋放掉,單片機將正常運行。同樣K2按下時RST為高電平,單片機復位,彈起來時RST為低電平,單片機正常運行. 單片機部分: 單片機默認選用STC89C51,同時兼容STC89C52、AT89S52、AT89S51、AT89C51等51單片機。 按鍵部分: 按鍵選用獨立按鍵,掃描時間短,使程序更簡單且掃描時間更短,從而提高穩定性。按鍵彈起時P20、P21、P22、P23為弱上拉狀態,所以為高電平。按鍵按下時對應的I/O口為低電平,可以被程序中的掃描函數檢測到。
數碼管顯示部分: 數碼管顯示采用四位一體共陽數碼管,這樣使電路更為簡單,只需四個9012三極管就可以將其驅動。P24、P25、P26、P27分別作為數碼管的位選端,控制是否選通哪一位數碼管。采用PNP型三極管,低電平導通,高電平截止。R20、R30、R40、R50為三極管基極限流電阻,此電阻及能保護三極管又能保證三極管導通時處于完全導通狀態。R51為限流電阻,此電阻的大小直接決定數碼管的亮暗成都,在此選擇220歐姆、1/4色環電阻。數碼管的陰極端直接接單片機的P0口,而不需上拉電阻。STC89C51的單片機P0口為漏極開路,所以作為輸出時必須接上拉電路,而作為輸入時相當于數碼管作為上拉,所以不再需要上拉電阻,及簡化了電路又節省了成本。 數模轉換部分:(此為數控電壓數控調壓關鍵所在) 數模轉換采用德州儀器的TLC5615,此為一片10位串行單5V電源DAC,直接電壓輸出。單片機P33、P32、P34分別連接TLC5615的時鐘端、片選端、數據端即可控制它輸出想要的電壓。此時TLC5615的6腳及參考電壓輸入端需接入2.5V的參考電壓。根據公式可知,當參考電壓為2.5V時,TLC5615將最大輸出5V電壓。 TL5615(DAC)電壓計算公式
Vout為7腳輸出電壓,Vrefin為6腳參考電壓輸入端,N為單片機通過1、2、3管腳向TLC5615寫入的數據,1024是根據這是一片10位數模轉換而計算出來的(210=1024),最后乘以二是因為TLC5615內部有2倍的增益放大器。 在給TLC輸入2.5V參考電壓的時候,我們用了TL431芯片。TL431是可控精密穩壓源。它的輸出電壓用兩個電阻就可以任意的設置到從Verf(2.5V)到36V范圍內的任何值。該器件的典型動態阻抗為0.2Ω,在很多應用中用它代替穩壓二極管。 同時用LM358作為跟隨器,減小2.5V基準電源的阻抗,再送入TLC5615 參考電壓端。 (寫論文時,可以在此講解TL41技術參數LM358技術參數和原理和跟隨器電路原理) TLC5615內部原理圖: TLC5615邏輯時序圖:
在給TLC輸入2.5V參考電壓的時候,我們用了TL431芯片。TL431是可控精密穩壓源。它的輸出電壓用兩個電阻就可以任意的設置到從Verf(2.5V)到36V范圍內的任何值。該器件的典型動態阻抗為0.2Ω,在很多應用中用它代替穩壓二極管。 同時用OPA2107作為跟隨器,減小2.5V基準電源的阻抗,再送入TLC5615 參考電壓端。 (寫論文時,可以在此講解TL41技術參數OPA2107技術參數和原理和跟隨器電路原理) MOS放大部分: 將上述TLC5615輸出的可調電壓送到運放LM358的反相端,通過MOS管(F9Z24N)放大。同時在F9Z24N的輸出端用RW1(10K)電位器分壓,取一定比例的輸出電壓反饋到比較器正相端,構成一個反饋系統。此時MOS管輸出的PWM波的占空比將根據負載和輸入電壓而變化以保證輸出電壓的穩定。C5作為輸出濾波電容,濾掉輸出電壓紋波。 根據反饋系統的穩定原理計算出輸出電壓的公式,如下: 設:Vo為輸出電壓,Vin為LM358的2腳輸入電壓,RWH為電位器上部分電阻,RWL為電位器下部分電阻,RW為電位器阻值。 Vo=Vin×(RW/RWL); (寫論文時,可以在此講解F9Z24N技術參數) 報警電路: 此電路可以由單片機控制三極管(8550/9012)的通斷來控制蜂鳴器的報警。當P36為高時,三極管不高通,為低時三極管導通蜂鳴器響。當過流或短路時,單片機切斷輸出,同時蜂鳴器報名。
單片機源程序如下:
- #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;
- //數碼管位選端定義
- sbit W1= P2^4;
- sbit W2= P2^5;
- sbit W3= P2^6;
- sbit W4= P2^7;
- //DAC定義
- sbit CS_5615=P1^5; //定義片選信號IO口
- sbit CLK_5615=P1^6; //定義時鐘信號IO口
- sbit DAT_5615=P1^7; //定義數據輸入IO口
- //ADC定義
- sbit CS=P3^5; //定義片選信號IO口
- sbit CLK=P3^3; //定義時鐘信號IO口
- sbit DIO=P3^4; //定義數據輸入IO口
- uint U;
- uchar GETU=0;
- bit flag=0;
-
- uchar code table[]=
- {
- 0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7
- }; //共陽數碼管段碼表 沒有小數點 0~9
- uchar code table1[]=
- {
- 0x7F,0x64,0xBD,0xF5,0xE6,0xF3,0xFB,0x67,0xFF,0xF7,0x5e
- };//帶小數點的編碼 0~9
- void delay_ms(uint z) //延時函數
- {
- uint a,b;
- for(a=z;a>0;a--)
- for(b=5;b>0;b--);
- }
- void shuma(uint buf) //數碼管顯示程序
- {
- uchar a,b,c,d; //定義變量
- a=buf/1000; //將數據除以1000得到千位數據
- b=buf%1000/100; //取余1000除以100得到百位數據
- c=buf%100/10; //得到十位數據
- d=buf%10; //得到個位數據
- W1=0;W2=1;W3=1;W4=1; //選中第一個位
- P0=~table[a]; //輸入該位要顯示的數據
- delay_ms(60); //延時
- W1=1;W2=0;W3=1;W4=1; //選中第二個位
- 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; //要輸出的數據賦值
- CS_5615=0; //引腳拉低
- for(a=16;a>0;a--) //循環16次
- {
- DAT_5615=c>>15; //把數據串行輸入進da芯片(把數據右移15位得到最高位數據,賦值給數據腳)
- c=c<<1; //將數據左移一位,下次循環時就是傳輸第二位數據了
- 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; //一個轉換周期開始
- CLK=0; //為第一個脈沖作準備
- CS=0; //CS置0,片選有效
-
- DIO=1; //DIO置1,規定的起始信號
- CLK=1; //第一個脈沖
- CLK=0; //第一個脈沖的下降沿,此前DIO必須是高電平
- DIO=1; //DIO置1, 通道選擇信號
- CLK=1; //第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數據用于選擇通道,這里選通道CH0
- CLK=0; //第二個脈沖下降沿
- DIO=0; //DI置0,選擇通道0
- CLK=1; //第三個脈沖
- CLK=0; //第三個脈沖下降沿
- DIO=1; //第三個脈沖下沉之后,輸入端DIO失去作用,應置1
- CLK=1; //第四個脈沖
- for(i=0;i<8;i++) //高位在前
- {
- CLK=1; //第四個脈沖
- CLK=0;
- dat<<=1; //將下面儲存的低位數據向右移
- dat|=(unsigned char)DIO; //將輸出數據DIO通過或運算儲存在dat最低位
- }
- CS=1; //片選無效
- return dat; //將讀出的數據返回
- }
- //主函數
- void main(void)
- {
- U=0; //電壓值顯示0
- while(1) //進入循環
- {
- tlc_5615(U); //輸出電壓值
- shuma(U/8*10); //顯示電壓值
- if(flag==0) //沒有短路
- {
- if(KEY1==0) //按鍵1按下
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10); //此處調用顯示函數就是延時去抖的作用
- if(KEY1==0) //再次判斷按鍵按下
- {
- if(U<960) //1V對應的是80 10位ad(10位ad最大數據是1024,這里為了取整數,選擇80對應1V,也就是8對應0.1V,因為電壓調節的變化一共有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; //關閉輸出
- }
- }
- }
- GETU=A_D(); //讀取ad數據
- if(GETU>=12) //0.0196V,采樣電阻采集到的電壓數據
- {
- U=0; //關閉輸出
- flag=1; //短路標志位
- }
- }
- }
復制代碼
以上程序51hei提供下載:
C程序注釋.zip
(43.94 KB, 下載次數: 150)
2019-7-25 17:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖.pdf
(222.22 KB, 下載次數: 140)
2019-7-25 17:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
重點:電路原理講解.doc
(791.5 KB, 下載次數: 135)
2019-7-26 09:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|