電動(dòng)汽車、無(wú)人機(jī)和物聯(lián)網(wǎng)設(shè)備等其他移動(dòng)電子產(chǎn)品的進(jìn)步似乎對(duì)未來(lái)充滿希望。所有這些中的一個(gè)共同點(diǎn)是它們都由電池供電。按照摩爾定律,電子設(shè)備趨于變得更小、更便攜,這些便攜式設(shè)備應(yīng)該有自己的電源來(lái)運(yùn)行。當(dāng)今便攜式電子產(chǎn)品最常見(jiàn)的電池選擇是鋰離子或鋰聚合物電池。雖然這些電池具有非常好的電荷密度,但它們?cè)趷毫訔l件下化學(xué)性質(zhì)不穩(wěn)定,因此在充電和使用時(shí)應(yīng)小心。
在這個(gè)項(xiàng)目中,我們將構(gòu)建一個(gè)兩級(jí)電池充電器(CC 和 CV),可用于為鋰離子或鋰聚合物電池充電。電池充電器電路專為我在大多數(shù)機(jī)器人項(xiàng)目中常用的 7.4V 鋰電池組(兩個(gè) 18650 串聯(lián))而設(shè)計(jì),但可以輕松修改電路以適應(yīng)較低或稍高的電池組,例如構(gòu)建3.7 鋰電池充電器或12v鋰離子電池充電器。正如您可能知道的那樣,這些電池有現(xiàn)成的充電器,但便宜的充電器非常慢,而快速的充電器非常昂貴。所以在這個(gè)電路中,我決定用具有 CC 和 CV 模式的 LM317 IC 構(gòu)建一個(gè)簡(jiǎn)單的粗充電器。 此外,還有什么比構(gòu)建自己的小工具并在其過(guò)程中學(xué)習(xí)更有趣的事情。
電池充電器的 CC 和 CV 模式:
我們打算在這里構(gòu)建的充電器是兩步充電器,這意味著它將具有兩種充電模式,即恒定充電 (CC) 和恒定電壓 (CV)。通過(guò)結(jié)合這兩種模式,我們將能夠比平時(shí)更快地為電池充電。
恒定電荷 (CC):
第一個(gè)開(kāi)始運(yùn)行的模式將是 CC 模式。這里應(yīng)該進(jìn)入電池的充電電流量是固定的。為了保持該電流,電壓將相應(yīng)變化。
恒壓(CV):
一旦 CC 模式完成,CV 模式將啟動(dòng)。這里的電壓將保持固定,電流將根據(jù)電池的充電要求而變化。
在我們的例子中,我們有一個(gè) 7.4V 鋰電池組,它只不過(guò)是兩個(gè) 3.7V 的 18650 電池串聯(lián)(3.7V + 3.7V = 7.4V)。此電池組應(yīng)在電壓降至 6.4V(每節(jié) 3.2V)時(shí)充電,最高可充電至 8.4V(每節(jié) 4.2V)。因此,這些值已經(jīng)為我們的電池組固定。
接下來(lái)我們決定了CC模式下的充電電流,這通??梢栽陔姵氐臄?shù)據(jù)表中找到,該值取決于電池的Ah額定值。在我們的例子中,我決定將800mA 的值作為恒定充電電流。因此,最初當(dāng)連接電池進(jìn)行充電時(shí),充電器應(yīng)進(jìn)入 CC 模式并通過(guò)改變充電電壓將 800mA 推入電池。這將為電池充電,電池電壓將開(kāi)始緩慢增加。
由于我們將大電流推入具有較高電壓值的電池,因此在電池充滿電之前,我們不能將其留在 CC 中。當(dāng)電池電壓達(dá)到相當(dāng)大的值時(shí),我們必須將充電器從 CC 模式切換到 CV 模式。我們的電池組在充滿電后應(yīng)該是 8.4V,因此我們可以將其從 CC 模式切換到 8.2V 的 CV 模式。
一旦充電器切換到 CV 模式,我們應(yīng)該保持恒定電壓,在我們的例子中,恒定電壓的值為 8.6V。與 CC 模式相比,電池在 CV 模式下消耗的電流要少得多,因?yàn)殡姵乇旧碓?CC 模式下幾乎已充電。因此,在固定的 8.6V 下,電池將消耗更少的電流,并且隨著電池充電,該電流將減少。因此,當(dāng)電流達(dá)到非常低的值(例如小于 50mA)時(shí),我們必須監(jiān)控電流,我們假設(shè)電池已充滿電,并使用繼電器自動(dòng)斷開(kāi)電池與充電器的連接。
總結(jié)一下,我們可以列出電池充電過(guò)程如下
進(jìn)入 CC 模式并以固定的 800mA 穩(wěn)壓電流為電池充電。
監(jiān)控電池電壓,當(dāng)它達(dá)到 8.2V 時(shí)切換到 CV 模式。
在 CV 模式下,使用固定的 8.6V 穩(wěn)壓電壓為電池充電。
監(jiān)控充電電流,因?yàn)樗档土恕?/p>
當(dāng)電流達(dá)到 50mA 時(shí),自動(dòng)斷開(kāi)電池與充電器的連接。
800mA、8.2V 和 8.6V 的值是固定的,因?yàn)槲覀冇幸粋€(gè) 7.4V 鋰電池組。您可以根據(jù)電池組的要求輕松更改這些值。另請(qǐng)注意,存在許多階段充電器。像這樣的兩級(jí)充電器是最常用的一種。在三階段充電器中,階段將是 CC、CV 和浮動(dòng)。在四級(jí)或六級(jí)充電器中,將考慮內(nèi)部電阻、溫度等?,F(xiàn)在,我們對(duì)兩步充電器的實(shí)際工作方式有了一個(gè)簡(jiǎn)要的了解,讓我們進(jìn)入電路圖。
電路原理圖
這個(gè)鋰離子電池充電器的完整電路圖可以在下面找到。該電路是使用 EasyEDA 制作的,PCB 也將使用相同的制作。
如您所見(jiàn),電路非常簡(jiǎn)單。我們使用了兩個(gè)LM317 可變電壓調(diào)節(jié)器 IC,一個(gè)用于調(diào)節(jié)電流,另一個(gè)用于調(diào)節(jié)電壓。第一個(gè)繼電器用于在 CC 和 CV 模式之間切換,第二個(gè)繼電器用于連接或斷開(kāi)電池與充電器的連接。讓我們將電路分成幾段并了解其設(shè)計(jì)。
LM317 電流調(diào)節(jié)器
LM317 IC 可在單個(gè)電阻器的幫助下充當(dāng)電流調(diào)節(jié)器。相同的電路如下所示
對(duì)于我們的充電器,我們需要如上所述調(diào)節(jié) 800mA 的電流。數(shù)據(jù)表中給出了計(jì)算所需電流的電阻值的公式:
電阻器(歐姆)= 1.25 / 電流(安培)
在我們的例子中,電流值為 0.8A,為此我們得到 1.56 歐姆的電阻值。但是我們可以使用的最接近的值是上面電路圖中提到的 1.5 歐姆。
LM317 穩(wěn)壓器
對(duì)于鋰電池充電器的 CV 模式,我們必須將電壓調(diào)節(jié)到 8.6V,如前所述。同樣,LM317 只需兩個(gè)電阻即可做到這一點(diǎn)。相同的電路如下所示。
計(jì)算 LM317 穩(wěn)壓器輸出電壓的公式為
在我們的例子中,輸出電壓 (Vout) 應(yīng)為 8.6V,R1(此處為 R2)的值應(yīng)小于 1000 歐姆,因此我選擇了 560 歐姆的值。有了這個(gè),如果我們計(jì)算 R2 的值,我們得到它是 3.3k 歐姆?;蛘?,您可以使用任何值的電阻器組合,只要您獲得 8.6V 的輸出電壓。
用于在 CC 和 CV 模式之間切換的繼電器布置
我們有兩個(gè) 12V 繼電器,每個(gè)都由 Arduino 通過(guò)BC547 NPN 晶體管驅(qū)動(dòng)。兩者的繼電器布置如下圖所示
第一個(gè)繼電器用于在充電器的 CC 和 CV 模式之間切換,該繼電器由標(biāo)記為“模式”的 Arduino 引腳觸發(fā)。默認(rèn)情況下,繼電器在觸發(fā)時(shí)處于 CC 模式,它會(huì)從 CC 模式變?yōu)?CV 模式。
同樣,第二個(gè)繼電器用于連接或斷開(kāi)充電器與電池的連接;該繼電器由標(biāo)記為“充電”的 Arduino 引腳觸發(fā)。默認(rèn)情況下,繼電器會(huì)斷開(kāi)電池與充電器的連接,當(dāng)觸發(fā)時(shí),它會(huì)將充電器連接到電池。除此之外,兩個(gè)二極管 D1 和 D2 用于保護(hù)電路免受反向電流的影響,而 1K 電阻器 R4 和 R5 用于限制流過(guò)晶體管基極的電流。
測(cè)量鋰電池電壓
為了監(jiān)控充電過(guò)程,我們必須測(cè)量電池電壓,然后我們才能在電池電壓達(dá)到 8.2V 時(shí)將充電器從 CC 模式切換到 CV 模式,如上所述。使用 Arduino 等微控制器測(cè)量電壓的最常用技術(shù)是使用分壓器電路。這里使用的一個(gè)如下所示。
我們知道 Arduino 模擬引腳可以測(cè)量的最大電壓為 5V,但我們的電池在 CV 模式下可能高達(dá) 8.6V,因此我們需要將其降壓到較低的電壓。這完全由分壓器電路完成。您可以使用此在線分壓器計(jì)算器計(jì)算電阻器的值并了解有關(guān)分壓器的更多信息。在這里,我們將輸出電壓減去原始輸入電壓的一半,然后通過(guò)“ B_Voltage ”標(biāo)簽將該輸出電壓發(fā)送到 Arduino 模擬引腳。我們稍后可以在對(duì) Arduino 進(jìn)行編程時(shí)檢索原始值。
測(cè)量充電電流
另一個(gè)要測(cè)量的重要參數(shù)是充電電流。在 CV 模式下,當(dāng)充電電流低于 50mA 時(shí),電池將與充電器斷開(kāi)連接,表示充電完成。測(cè)量電流的方法有很多,最常用的方法是使用分流電阻。相同的電路如下所示
它背后的概念是簡(jiǎn)單的歐姆定律。使流向電池的全部電流流過(guò)分流電阻器2.2R。然后根據(jù)歐姆定律(V = IR),我們知道該電阻器上的電壓降將與流過(guò)它的電流成正比。由于我們知道可以使用 Arduino 模擬引腳測(cè)量電阻的值和其兩端的電壓,因此可以輕松計(jì)算出電流值。電阻上的電壓降值通過(guò)標(biāo)簽“B_Current ”發(fā)送到 Arduino。我們知道最大充電電流為 800mA,因此通過(guò)使用公式 V=IR 和 P=I 2 R 我們可以計(jì)算電阻器的電阻值和功率值。
Arduino和液晶顯示器
最后,在 Arduino 方面,我們必須將LCD 與 Arduino連接,以向用戶顯示充電過(guò)程,并通過(guò)測(cè)量電壓、電流并相應(yīng)地觸發(fā)繼電器來(lái)控制充電。
Arduino Nano 有一個(gè)板載電壓調(diào)節(jié)器,因此電源電壓提供給 Vin,調(diào)節(jié)后的 5V 用于運(yùn)行 Arduino 和16x2 LCD 顯示器。電壓和電流可以通過(guò)模擬引腳 A0 和 A1 分別使用標(biāo)簽“B_Voltage”和“B_Current”測(cè)量。繼電器可以通過(guò)切換通過(guò)標(biāo)簽“模式”和“充電”連接的 GPIO 引腳 D8 和 D9 來(lái)觸發(fā)。一旦原理圖準(zhǔn)備好,我們就可以繼續(xù)進(jìn)行PCB制造。
為 Arduino 編程進(jìn)行兩步鋰電池充電
硬件準(zhǔn)備好后,我們可以繼續(xù)為 Arduino Nano 編寫(xiě)代碼。該項(xiàng)目的完整程序在頁(yè)面底部提供,您可以將其直接上傳到您的 Arduino?,F(xiàn)在,讓我們將程序分解成小片段并了解代碼的實(shí)際作用。
與往常一樣,我們通過(guò)初始化 I/O 引腳開(kāi)始程序。從我們的硬件中我們知道,引腳 A0 和 A2 分別用于測(cè)量電壓和電流,引腳 D8 和 D9 用于控制模式繼電器和充電繼電器。定義相同的代碼如下所示
?
常量 int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; //注明LCD連接的管腳號(hào) LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 整數(shù)電荷 = 9;//引腳連接或斷開(kāi)電池到電路 int Mode = 8; //引腳在 CC 模式和 CV 模式之間切換 int Voltage_divider = A0; //測(cè)量電池電壓 int Shunt_resistor = A1; //測(cè)量充電電流 float Charge_Voltage; 浮動(dòng) Charge_current;
?
在setup函數(shù)中,我們初始化 LCD 函數(shù)并在屏幕上顯示介紹消息。我們還將繼電器引腳定義為輸出引腳。然后觸發(fā)充電繼電器將電池連接到充電器,默認(rèn)情況下充電器保持在 CC 模式。
?
無(wú)效 setup() { lcd.begin(16, 2); //初始化16*2 LCD lcd.print("7.4V Li+充電器"); //介紹消息行 1 lcd.setCursor(0, 1); lcd.print("-CircuitDigest"); //介紹消息行 2 lcd.clear(); pinMode(充電,輸出); pinMode(模式,輸出); 數(shù)字寫(xiě)入(充電,高);//開(kāi)始充電 最初通過(guò)連接電池 digitalWrite(Mode,LOW); // CV 模式為 HIGH,CC 模式為 LOW,初始 CC 模式 延遲(1000); }
?
接下來(lái),在無(wú)限循環(huán)函數(shù)中,我們通過(guò)測(cè)量電池電壓和充電電流來(lái)開(kāi)始程序。數(shù)值 0.0095 和 1.78 乘以模擬值,將 0 到 1024 轉(zhuǎn)換為實(shí)際電壓和電流值,您可以使用萬(wàn)用表和鉗形表測(cè)量實(shí)際值,然后計(jì)算乘數(shù)值。理論上,它也是根據(jù)我們使用的電阻器計(jì)算乘數(shù)值,但它并不像我預(yù)期的那么準(zhǔn)確。
?
//最初測(cè)量電壓和電流 Charge_Voltage = analogRead(Voltage_divider) * 0.0092; //測(cè)量電池電壓 Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流
?
如果充電電壓低于 8.2V,我們進(jìn)入 CC 模式,如果高于 8.2V,我們進(jìn)入 CV 模式。每種模式都有自己的while循環(huán)。在 CC 模式循環(huán)內(nèi),我們將 Mode 引腳保持為低電平以保持 CC 模式,然后繼續(xù)監(jiān)控電壓和電流。如果電壓超過(guò) 8.2V 閾值電壓,我們使用 break 語(yǔ)句斷開(kāi) CC 回路。充電電壓的狀態(tài)也顯示在 CC 回路內(nèi)的 LCD 上。
?
//如果電池電壓低于8.2V進(jìn)入CC模式 while(Charge_Voltage<8.2) //CC MODE Loop { digitalWrite(Mode,LOW); //保持CC模式 //測(cè)量電壓和電流 Charge_Voltage = analogRead(Voltage_divider) * 0.0095; //測(cè)量電池電壓 Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流 //在 LCD 上打印細(xì)節(jié)lcd.print ("V="); lcd.print(Charge_Voltage); lcd.setCursor(0, 1); lcd.print("在抄送模式"); 延遲(1000); lcd.clear(); //檢查我們是否必須退出 CC 模式 if(Charge_Voltage>=8.2) // 如果是 { digitalWrite(Mode,HIGH); //更改為CV模式 break; } }
?
CV 模式也可以采用相同的技術(shù)。如果電壓超過(guò) 8.2V,充電器通過(guò)將 Mode 引腳設(shè)為高電平進(jìn)入 CV 模式。這會(huì)在電池上施加一個(gè)恒定的 8.6V,并且允許充電電流根據(jù)電池要求而變化。然后監(jiān)控這個(gè)充電電流,當(dāng)它低于 50mA 時(shí),我們可以通過(guò)斷開(kāi)電池與充電器的連接來(lái)終止充電過(guò)程。為此,我們只需關(guān)閉充電繼電器,如下面的代碼所示
?
//如果電池電壓大于8.2V進(jìn)入CV模式 while (Charge_Voltage>=8.2) //CV MODE Loop { digitalWrite(Mode,HIGH); //保持 CV 模式 //測(cè)量電壓和電流 Charge_Voltage = analogRead(Voltage_divider) * 0.0092; //測(cè)量電池電壓 Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流 //在 LCD 中向用戶顯示詳細(xì)信息 lcd.print("V="); lcd.print(Charge_Voltage); lcd.print("我="); lcd.print(Charge_current); lcd.setCursor(0, 1); lcd.print("在 CV 模式下"); 延遲(1000); lcd.clear(); //通過(guò)監(jiān)控充電電流檢查電池是否充電 if(Charge_current<50) //如果是 { digitalWrite(Charge,LOW); //關(guān)閉充電 while(1) //保持充電器關(guān)閉直到重啟 { lcd.setCursor(0, 1); lcd.print("充電完成。"); 延遲(1000); lcd.clear(); } } } }
?
7.4V兩步鋰電池充電器的工作原理
硬件準(zhǔn)備好后,將代碼上傳到 Arduino 板。然后將電池連接到板子的充電端。確保以正確的極性連接它們,顛倒極性會(huì)對(duì)電池和電路板造成嚴(yán)重?fù)p壞。連接電池電源后,使用 12V 適配器連接充電器。您將收到介紹性文字,充電器將根據(jù)電池狀態(tài)進(jìn)入 CC 模式或 CV 模式。如果在充電時(shí)電池完全放電,它將進(jìn)入 CC 模式,您的 LCD 將顯示如下內(nèi)容。
隨著電池充電,電壓將增加,如下面的視頻所示。當(dāng)此電壓達(dá)到 8.2V 時(shí),充電器將從 CC 模式進(jìn)入 CV 模式,現(xiàn)在它將同時(shí)顯示電壓和電流,如下所示。
從這里開(kāi)始,電池的電流消耗會(huì)隨著充電而慢慢下降。當(dāng)電流達(dá)到 50mA 或更低時(shí),充電器假定電池已充滿電,然后使用繼電器斷開(kāi)電池與充電器的連接,并顯示以下屏幕。之后,您可以斷開(kāi)電池與充電器的連接并在您的應(yīng)用程序中使用它。
希望您了解該項(xiàng)目并喜歡構(gòu)建它,這個(gè)完整的電路板可以用作方便的鋰離子電池充電模塊。
/*
* 7.4V 鋰電池兩步充電器代碼
* 作者:Aswinth Raj
* 適用于:www.circuitdigest.com
* 日期:2019 年 11 月1 日
*/
#include
常量 int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; //注明LCD連接的管腳號(hào)
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
整數(shù)電荷 = 9;//引腳連接或斷開(kāi)電池到電路
int Mode = 8; //引腳在 CC 模式和 CV 模式之間切換
int Voltage_divider = A0; //測(cè)量電池電壓
int Shunt_resistor = A1; //測(cè)量充電電流
float Charge_Voltage;
浮動(dòng) Charge_current;
無(wú)效 setup() {
lcd.begin(16, 2); //初始化16*2 LCD
lcd.print("7.4V Li+充電器"); //介紹消息行 1
lcd.setCursor(0, 1);
lcd.print("-CircuitDigest"); //介紹消息行 2
lcd.clear();
pinMode(充電,輸出);
pinMode(模式,輸出);
數(shù)字寫(xiě)入(充電,高);//開(kāi)始充電 最初通過(guò)連接電池
digitalWrite(Mode,LOW); // CV 模式為 HIGH,CC 模式為 LOW,初始為 CC 模式
延遲(1000);
}
無(wú)效循環(huán)(){
//最初測(cè)量電壓和電流
Charge_Voltage = analogRead(Voltage_divider) * 0.0092; //測(cè)量電池電壓
Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流
//如果電池電壓低于8.2V進(jìn)入CC模式
while(Charge_Voltage<8.2) //CC MODE Loop
{
digitalWrite(Mode,LOW); //保持CC模式
//測(cè)量電壓和電流
Charge_Voltage = analogRead(Voltage_divider) * 0.0095; //測(cè)量電池電壓
Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流
//在 LCD 上打印
細(xì)節(jié) lcd.print("V="); lcd.print(Charge_Voltage);
lcd.setCursor(0, 1);
lcd.print("在抄送模式");
延遲(1000);
lcd.clear();
//檢查我們是否必須退出 CC 模式
if(Charge_Voltage>=8.2) // 如果是
{
digitalWrite(Mode,HIGH); //更改為CV模式
break;
}
}
//如果電池電壓大于8.2V進(jìn)入CV模式
while (Charge_Voltage>=8.2) //CV MODE Loop
{
digitalWrite(Mode,HIGH); //保持CV模式
//測(cè)量電壓和電流
Charge_Voltage = analogRead(Voltage_divider) * 0.0092; //測(cè)量電池電壓
Charge_current = analogRead(Shunt_resistor) * 1.78; //測(cè)量充電電流
//在 LCD 中向用戶顯示詳細(xì)信息
lcd.print("V="); lcd.print(Charge_Voltage);
lcd.print("我="); lcd.print(Charge_current);
lcd.setCursor(0, 1);
lcd.print("在 CV 模式下");
延遲(1000);
lcd.clear();
//通過(guò)監(jiān)控充電電流檢查電池是否充電
if(Charge_current<50) //如果是
{
digitalWrite(Charge,LOW); //關(guān)閉充電
while(1) //保持充電器關(guān)閉直到重啟
{
lcd.setCursor(0, 1);
lcd.print("充電完成。");
延遲(1000);
lcd.clear();
}
}
}
}
//**快樂(lè)充電**//
?
評(píng)論
查看更多