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