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