集合四種功能,我的“雙核獨顯”電源制作過(guò)程 12-06
近段時(shí)間我制造了一個(gè)集電流源、電壓源、充電和烙鐵于一身的“四用”電源,同時(shí)還有個(gè)顯示屏顯示。在設計過(guò)程中,我用到兩個(gè)單片機,一個(gè)負責變量采集,一個(gè)主負責顯示。于是我的同事就把這個(gè)“怪獸”叫做“雙核獨顯”電源。
核心是控制一個(gè)由MOS管搭建的一個(gè)電壓調節板,可以數控電壓,因此得到一個(gè)電壓源;通過(guò)電流反饋,調節電壓,又得到一個(gè)電流源;通過(guò)電流電壓反饋,得到一個(gè)鋰電池充電器;通過(guò)烙鐵溫度反饋,得到一個(gè)恒溫烙鐵控制器,思路就是這么來(lái)的。單片機是飛思卡爾QD4,兩個(gè)16bit定時(shí)器/PWM ,四通道10bitAD。它的主要功能有:1、電壓源;2、電流源;3、充電器;4、恒溫烙鐵控制器。
下面是電路圖:
主控電路
調壓電路
調壓電路中NMOS借鑒白光烙鐵的電路,不過(guò)要做快速開(kāi)關(guān),圖中的R9不能太大,我用500歐的,PWM 2KHZ可以。上拉電阻R13也很重要,在單片機異常是,保證關(guān)斷輸出。MOS后端的電路,可以參考DC芯片資料。
其中具體的焊接過(guò)程我就忽略不寫(xiě)了,相信大家根據我給的電路圖就可以做出相對應的產(chǎn)品。
以下是一些總體圖和測試圖:
總體的樣子
電源輸入是用筆記本電源。輸出是一個(gè)USB口,我平時(shí)用不到大電流,3A足夠了,步進(jìn)10ma。最大輸出電壓接近輸入電壓,步進(jìn)0.01V。顯示用的是nokia5110顯示屏(上圖是用5V供電,屏幕有雜點(diǎn),下面改為3.7V,完美屏)。
輸入由一個(gè)電位器,一個(gè)按鍵構成。電位器仿照示波器的用法,可以上下選擇,也可以輸入設定值。按鍵短按用來(lái)“確定”,長(cháng)按“返回”這些信息由單片機1采集,單線(xiàn)發(fā)送給單片機2,顯示。單線(xiàn)通信花了不少精力。采樣電阻50m歐,用358放大。電流采集后要校正,消除偏差。
做好了這一大堆東西后,我們要對其進(jìn)行基本的功能測試。
一、電壓源
下圖中:9.22V是實(shí)時(shí)采集的真實(shí)電壓,S:設定值,I:電流
電壓輸出相應很快,示波器截圖
快速扭動(dòng)電位器,都可以用示波器作畫(huà)了
二、電流源
下圖中:0.44A是實(shí)時(shí)采集的真實(shí)電流,S:設定值,V:電壓
三、充電模式
為了測試,把我移動(dòng)電源的電池芯拆出來(lái)了。當時(shí)舍得的橫流充階段電流為300ma,這叫一個(gè)等啊
不過(guò)能看到這么多輸出信息,挺爽的
0264mA是累計充電電量,I:當前充電電流,V:電池電壓
四、烙鐵模式
炊煙裊裊啊……公司的熱成像儀送檢了,無(wú)法校準溫度。我是用公式直接算的,感覺(jué)偏低了。不過(guò)筆記本電源供電,剛剛的。愛(ài)死這個(gè)烙鐵了
介紹一下這個(gè)USB烙鐵
烙鐵是用白光936烙鐵柄改的,接了個(gè)USB頭,外側做電源線(xiàn),usb的數據線(xiàn)接反饋電阻。經(jīng)過(guò)測試,3A電流,usb口毫無(wú)問(wèn)題,而且升溫也不錯,所以程序了限定3A。太大電流,筆記本電源會(huì )保護。
以下是我將產(chǎn)品組裝進(jìn)盒子里面的圖示:
殼子是拆了一個(gè)12V/2A的電源的塑料殼,把這么大一坨東西,塞進(jìn)去,可是費了功夫。
終于塞的差不多
進(jìn)去了??!左面一張
右面一張
上面的是開(kāi)機圖片(怎么跟大哥大似的)……
到此為止所有的制作就已經(jīng)完成了。
在制作過(guò)程中,我想給大家說(shuō)一下我的一些編程方面的經(jīng)驗。
一、時(shí)基函數
我現在覺(jué)得這個(gè)函數應該是每個(gè)工程必須的,但回想我看過(guò)的單片機書(shū),好像沒(méi)有講到這一點(diǎn)的,相見(jiàn)恨晚。
void TimePro()
{
if(!b_8msFG)
return;
b_8msFG = 0;
Tim8ms++;
PIHtim++;
if(KeyTim 《 255)
KeyTim++;
if(PIHtim 》 4)
{
TPM2C0SC = 0x48; //開(kāi)外部中斷
}
LCDTim++;
LCDFlashTim++;
if(Tim1ms 》 124)
{
Tim1ms = 0;
Tim1S++;
……
……
……
}
}
上面就是一個(gè)“時(shí)基函數”,當你的程序有幾個(gè)外圍需要同時(shí)控制時(shí),再用NOP延時(shí),直線(xiàn)執行已經(jīng)忙不過(guò)來(lái)了,需要用上面的函數。
b_8msFG在8ms定時(shí)中斷中置為1。TimePro()在主函數中調用。這樣KeyTim、LCDTim這些計時(shí)變量就在一直計時(shí)。例如調用鍵盤(pán)程序,判斷一下KeyTim是否到時(shí)間,到了執行,KeyTim清零,不到返回,再去調用別的函數體。這樣分時(shí)復用CPU,避免了NOP來(lái)浪費系統資源,當幾個(gè)外圍執行周期不同時(shí),更是這樣 。
二、AD采樣(數字濾波)
這個(gè)程序是公司的標準模塊。大學(xué)時(shí),AD采出來(lái),我就直接用了。工作了才發(fā)現這樣不好,采完后還要做一下數字濾波。數字濾波,不知誰(shuí)起的這么好聽(tīng)的名字,唬住不少人。其實(shí)很簡(jiǎn)單,但很實(shí)用。在這里,實(shí)際操作就是:采六次,去掉最大最小值,剩四個(gè)求平均。以前對它的作用體會(huì )不深,當有一個(gè)單片機直接測交流真有效值的項目,一個(gè)不堪入目的波形進(jìn)入單片機,數字濾波后,一下數值穩定不亂跳了,頓生感慨。
下面是程序:
void ADPro()
{
uchar n,i;
if(ADTim 《10) return;
ADTim = 0;
for(n=0;n《6;n++)
{
ADChannel = Channelin; //通道選擇;
while(!ADC1SC1_COCO) NOP();//等待轉換完成
ADC1SC1_COCO = 0;
ADNum = ADC1R; //取得AD值
// ADNum = 298;
if(0==n)
{
m_ADCSum = 0;
m_ADCMax = ADNum;
m_ADCMin = ADNum;
}
if(ADNum《m_ADCMin)
{
m_ADCMin = ADNum;
}
else if(ADNum》m_ADCMax)
{
m_ADCMax = ADNum;
}
m_ADCSum += ADNum;
ADNum = 0;
}
m_ADCSum=m_ADCSum-m_ADCMax;
m_ADCSum=m_ADCSum-m_ADCMin; //減去最大最小值
m_ADCSum = m_ADCSum》》2; //取均值
switch (Channelin)
{
case 0 :
ADSet = m_ADCSum;
break;
case 1 :
ADI = m_ADCSum;
break;
case 2 :
ADTemp = m_ADCSum;
break;
ca
評論