根據51hei論壇上的圖紙原理做的可調電源實測0.2v-11.5v可調,步進0.1v。本程序沒有用查表方式給tlc5615輸入AD值(費時間,懶。。。),所以輸入電壓與輸出電壓有誤差。
源圖紙用的是89c51單片機,本人用的15w408as單片機,自帶AD功能,可以將輸出的電壓返回單片機處理。顯示部分沒有用數碼管,感覺沒有OLED連線方便(IIC接口)
原理圖用的OPA2107運放,我買了兩個這個運放不能用,不知道我買的是壞的還是本身這個電路有問題,后面改用LM358可以正常使用。此電路我用兩個LM358,其中一個用來放大檢測電流電阻上的電壓,再輸入到單片機的AD腳進行計算處理。
此電路有電流檢測功能,但是程序里沒有設置短路保護功能。
實際做下來也不費勁,但是這個圖紙經我驗證有以下缺點:
1,電流只能達到600ma,再高場效應管發熱嚴重,輸入功率能達到40w而輸出功率只有5-8w。
2,效率不高,感覺效率能有50%就很不錯了,而且電流過大造成場館有異響。
3,調電壓的時候測量TL431的基準電壓2.5v,這個電壓數值會隨著電壓的調節略微變動,造成輸出誤差增大。給單片機的基準電壓我用的是ASM1117的 3.3v做基準電壓,感覺這個芯片的穩壓要比TL431好。
本人也就是普通的愛好者,一些東西還是靠論壇來實現的。有什么不對的地方希望指點一下。
制作出來的實物圖如下:
764141553.jpg (4.07 MB, 下載次數: 107)
下載附件
2021-4-11 20:10 上傳
393061953.jpg (4.4 MB, 下載次數: 102)
下載附件
2021-4-11 20:10 上傳
1721948193.jpg (4.24 MB, 下載次數: 93)
下載附件
2021-4-11 20:10 上傳
1116615773.jpg (4.21 MB, 下載次數: 107)
下載附件
2021-4-11 20:10 上傳
42242178.jpg (4.3 MB, 下載次數: 103)
下載附件
2021-4-11 20:10 上傳
電路原理圖如下:
圖片1.png (55.62 KB, 下載次數: 123)
下載附件
2021-4-11 20:11 上傳
單片機源程序如下:
- #include <STC15F2K60S2.H>
- #include "OLED.h"
- #include "TLC5615.h"
- #include "EC11.h"
- #define ADC_POWER 0x80
- #define ADC_FLAG 0x10
- #define ADC_START 0x08
- #define ADC_SPEEDLL 0x00
- #define ADC_SPEEDL 0x20
- #define ADC_SPEEDH 0x40
- #define ADC_SPEEDHH 0x60
- unsigned int EC11_Value1;
- unsigned char ch=2; //定義通道0位P1^0;1為P1^1;2為P1^2;
- float voltage=0, voltage1=0; //??????
- unsigned int Power1,ElectricC,RefAd=0,vin=0,PowerA=0,Wat=0;//P1^0,Power為電壓值,P1^2,refad為參考電壓3.3v的ad值.P1^1為采樣AD值
- /******************顯示函數**********************/
- void OLEDDisplay()
- {
- //設定電壓值
-
- OLED_DisplayCharacter(1, 9, (PowerSet+1)/100+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(1, 10, (PowerSet+1)%100/10+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(1, 12, (PowerSet+1)%10+'0', OLED_NOT_INVERT_COLOR);
- //顯示電壓值
- OLED_DisplayCharacter(2, 9, Power1/1000+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(2, 10, Power1%1000/100+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(2, 12, Power1%100/10+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(2, 13, Power1%100%10+'0', OLED_NOT_INVERT_COLOR);
- //顯示電流值
- OLED_DisplayCharacter(3, 10, ElectricC/1000+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(3, 12, ElectricC%1000/100+'0', OLED_NOT_INVERT_COLOR);
- OLED_DisplayCharacter(3, 13, ElectricC%100/10+'0', OLED_NOT_INVERT_COLOR);
- // //顯示編碼器值
- // OLED_DisplayCharacter(3, 6, EC11_Value/1000+'0', OLED_NOT_INVERT_COLOR);
- // OLED_DisplayCharacter(3, 7, EC11_Value%1000/100+'0', OLED_NOT_INVERT_COLOR);
- // OLED_DisplayCharacter(3, 8, EC11_Value%100/10+'0', OLED_NOT_INVERT_COLOR);
- // OLED_DisplayCharacter(3, 9, EC11_Value%10+'0', OLED_NOT_INVERT_COLOR);
- // OLED_DisplayCharacter(3, 11, KeyNumber+'0', OLED_NOT_INVERT_COLOR);
- }
- /**********************主函數*******************************/
- void main()
- {
- unsigned int i;
- OLED_Init();//初始化OLED
- P1ASF=0x07;//0x70=00000111,用P1^0,1^1,1^2三個IO口當ADC口
- ADC_RES=0;
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL | ADC_START | ch;
- for(i=0;i<1000;i++);
- IE=0xA0;
- EC11_Value1=EC11_Value;
- while(1)
- {
- OLEDDisplay(); //掃描顯示函數
-
- if(KeyNumber==1)
- {
- OLED_DisplayText(0, 6, "開", OLED_NOT_INVERT_COLOR);
- if(EC11_Value!=EC11_Value1)
- TLC5615DateOut(EC11_Value);
- EC11_Value1=EC11_Value;
- }
- else
- {
- OLED_DisplayText(0, 6, "關", OLED_NOT_INVERT_COLOR);
- TLC5615DateOut(0);
- }
- }
-
-
- }
- /****************************ADC中斷函數***********************/
- void adc_int() interrupt 5 //ADC中斷
- {
- static unsigned char i;
- unsigned int j=0;
- EC11_Display(); //掃描編碼器函數
- ADC_CONTR &=!ADC_FLAG;//清除中斷
- if(ch==0)
- {
- RefAd=(ADC_RES*4+ADC_RESL); //P1^2的參考AD值保存到RefAD中,這里用ASM1117的3.3v穩壓做參考AD值
- }
- if(ch==1)
- {
- vin=(ADC_RES*4+ADC_RESL); //讀取P1^1的值保存在vin中,這里讀到的是輸出電壓經10K電阻分壓得到的電壓值。
- voltage1=(3.318*vin)/RefAd;
- Power1=voltage1*1000;
- }
- if(ch==2) //讀取P1^0的AD值保存在PowerAD中,計算經運放過來的放大電壓,算出電流
- {
- PowerA=(ADC_RES*4+ADC_RESL);
- voltage=(3.318*PowerA)/RefAd;
- ElectricC=voltage*200;
- }
- ch=i;
- i++;
- if(i==10)i=0;//防止AD值過快有跳動
- ADC_RES=0;
- ADC_RESL=0; //AD數據位清零
- ADC_CONTR=ADC_POWER |ADC_SPEEDLL | ADC_START | ch; //啟動ADC中斷
-
- }
復制代碼
所有代碼51hei提供下載:
OLED顯示數字電壓.zip
(90.92 KB, 下載次數: 143)
2021-4-11 20:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|