電動(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à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ù)字寫入(充電,高);//開(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ù)字寫入(充電,高);//開(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)論