
Linh kiện để thiết kế mạch sạc pin Li-ion


Hình 4 : Sơ đồ thuật toán sạc cho Bộ điều chỉnh tuyến tính dựa trên Bộ sạc pin Lithium-Ion 3.7 V
Để thiết kế nguồn dòng điện không đổi và nguồn điện áp không đổi cho mạch sạc, các bước sau được thực hiện:
Kiểm tra thông số kỹ thuật của pin

Xác định các thông số Thiết kế mạch sạc pin Li-ion
Thiết kế nguồn dòng điện không đổi

I = 1,25 / R s (Công thức được đưa ra trong biểu dữ liệu của LM317)
Dòng điện mong muốn, I = 60mA
R s = 1,25 / 0,06
R s = 20 ohm (ước chừng)
Giá trị của dòng điện không đổi mong muốn có thể được thay đổi bằng cách thay đổi giá trị của R s. Vì LM317 có thể cung cấp dòng điện tối đa là 1,5 A, đó là lý do tại sao giá trị của R s không thể nhỏ hơn 0,83E.
Trong việc lựa chọn các điện trở nào, về cơ bản có hai thông số phải được xem xét, một là điện trở của nó và một là đánh giá công suất của nó. Định mức công suất được biểu thị bằng watt phụ thuộc vào dòng điện tối đa có thể chạy qua điện trở mà không làm hư điện trở. Vì vậy, nếu một điện trở watt thấp được sử dụng, thì dòng điện cao sẽ làm nóng điện trở và làm hư nó. Vì vậy, điều quan trọng không kém là xác định định mức công suất của điện trở. Nó có thể được tính như sau:
Dòng điện cực đại phải chạy qua điện trở R s là 60mA.
Vì vậy, Công suất = (điện áp rơi trên R s ) * (dòng điện tối đa trên R s )
Công suất = 1,25 * 0,06
Công suất = 75 mW (ước chừng)
Do đó, công suất cực đại do R s tiêu tán là 75 mW.
Tùy theo tình trạng sẵn có, có thể sử dụng điện trở 0,25W hoặc 250 mW.
Cần lưu ý rằng mạch sạc đã được thiết kế cho dòng sạc 60 mA ở chế độ CC. Nhưng theo dòng sạc của một pin cụ thể, nó có thể thay đổi đến giá trị cực đại 1,25 A bằng cách thay đổi giá trị của điện trở R s trong mạch LM317.
Thiết kế nguồn điện áp không đổi
Hình 7: Sơ đồ mạch của nguồn điện áp không đổi LM317 cho bộ sạc tuyến tính pin Lithium Ion
Để sử dụng LM317 làm nguồn điện áp không đổi, một mạch phân áp điện trở được sử dụng giữa chân đầu ra và đất. Mạch phân áp có một điện trở lập trình (Điện trở R p ) và một điện trở khác là điện trở đặt đầu ra (Điện trở R s ). Bằng cách lấy một tỷ lệ ok của điện trở lập trình và điện trở đầu ra, giá trị mong muốn của điện áp đầu ra có thể được xác định. Điện áp đầu ra V ra có thể được tính theo công thức sau:
V out = 1,25 * (1 + (R c / R p ) (Phương trình được đưa ra trong biểu dữ liệu của LM317)
Giá trị điển hình của điện trở R p phải từ 220E đến 240E để mạch ổn định. Trong mạch này, giá trị của điện trở lập trình R p được lấy là 220E. Bây giờ theo yêu cầu, điện áp đầu ra phải là 4,2V, vì vậy giá trị của điện trở R c sẽ như sau:
Điện áp đầu ra mong muốn, V ra = 4.2V
Điện trở bộ đầu ra, R p = 220E
Đưa các giá trị của V ra và R p vào phương trình,
4.2 = 1.25*(1+ (Rc / 220)
Sau khi giải phương trình, giá trị của Rc được tính như sau:
R c = 520 ohm ( ước chừng ) để sử dụng LM317 làm nguồn điện áp không đổi, một mạch phân áp điện trở được sử dụng giữa chân đầu ra và đất. Mạch phân áp có một điện trở lập trình (Điện trở R p ) và một điện trở khác là điện trở đặt đầu ra (Điện trở R s ). Bằng cách lấy một tỷ lệ ok của điện trở lập trình và điện trở đầu ra, giá trị mong muốn của điện áp đầu ra có thể được xác định. Điện áp đầu ra V ra có thể được tính theo công thức sau:
V out = 1,25 * (1 + (R c / R p ) (Phương trình được đưa ra trong biểu dữ liệu của LM317)
Giá trị điển hình của điện trở R p phải từ 220E đến 240E để mạch ổn định. Trong mạch này, giá trị của điện trở lập trình R p được lấy là 220E. Bây giờ theo yêu cầu, điện áp đầu ra phải là 4,2V, vì vậy giá trị của điện trở R c sẽ như sau:
Điện áp đầu ra mong muốn, V ra = 4.2V
Điện trở bộ đầu ra, R p = 220E
Đưa các giá trị của V ra và R p vào phương trình,
4.2 = 1.25*(1+ (Rc / 220)
Sau khi giải phương trình, giá trị của Rc được tính như sau:
R c = 520 ohm (ước chừng)
Do đó, bằng cách sử dụng hai IC LM317, Nguồn dòng điện không đổi 60 mA và Nguồn điện áp không đổi 4,2 V cuối cùng đã được thiết kế. Cả hai mạch nhỏ hơn này sẽ là một phần của mạch sạc cho pin Li-ion.

Hình 8: Sơ đồ mạch của nguồn điện áp không đổi và nguồn dòng điện không đổi trong bộ sạc tuyến tính pin Lithium Ion
Điều quan trọng là phải kiểm tra dòng điện định mức và điện áp danh định lớn nhất của pin trước khi thiết kế bộ sạc và sử dụng mạch sạc với nó. Điện áp sạc của ắc quy phải lớn hơn điện áp danh định lớn nhất của nó ở chế độ CV. Pin phải được sạc với tốc độ sạc từ 0,5 C đến 0,8 C. Điện trở R phải có định mức watt thích hợp để ngăn điện trở khỏi các hư hư nào.
Code Thiết kế mạch sạc pin Li-ion
//Program to *Linear regulator single 3.7V Li-ion battery charger *Charges the battery in Constant Current(CC) with 60mA current and in Constant Voltage(CV) mode with 4.2V */ /*IN/OUT Pin connection *Sense battery voltage - A0 *Sense resistor voltage - A1 *BJT for Switching state relay - 11 *BJT for isolation relay - 12 *CC mode LED - 9 *CV mode LED - 8 *Fully charged battery LED - 7 */ // They're used to give names // to the pins used: #define analogInPin_V_bat A0 // Analog input pin at battery positive #define analogInPin_I_bat A1 // Analog input pin at sense resistor #define switch_pin 11 // switching state relay #define isolation_pin 12 // Isolation pin relay //#define PowerSupply 10 // PowerSupply relay #define CC_LED 9 // LED indication for cv mode #define CV_LED 8 // LED indication for cc mode #define BAT_FULL_LED 7 // LED indication for FULLY CHARGE battery int Flag = 0; // variable to set CC and CV mode /////function declaration float senseVoltage(void); // Battery Voltage sensing float senseCurrent(float); // Charging current sensing /////Function definition /* * Function Name - senseVoltage * Function to read voltage of battery * Input parameters - none * Return - float */ float senseVoltage(){ ///read analog voltage int senseV_bat = analogRead(analogInPin_V_bat); // map it to the range of the analog out: float V_bat =(senseV_bat/1024.0)*5.0; Serial.println("currentBatteryVoltage"); Serial.println(V_bat); return(V_bat); } /* * Function Name - senseCurrent * Function to read charging current of battery * Input parameters - float * Return - float */ float senseCurrent(float currentBatteryVoltage){ ///read analog voltage float senseResistor = analogRead(analogInPin_I_bat); // map it to the range of the analog out: float senseResistorVoltage =(senseResistor/1024.0)*5.0; float actualResistor_Voltage = (senseResistorVoltage-currentBatteryVoltage); ////calculating current from voltage difference of sense resistor float I_bat = (actualResistor_Voltage)*1000; //print at serial monitor Serial.println("currentBatteryVoltage"); Serial.println(currentBatteryVoltage); Serial.println("senseResistorVoltage"); Serial.println(senseResistorVoltage); Serial.println("actualResistor_Voltage"); Serial.println(actualResistor_Voltage); Serial.println("I_bat"); Serial.println(I_bat); return(I_bat); } void setup() { // initialize serial communications at 9600 bps: Serial.begin(9600); /////////set IN/OUT pins pinMode(switch_pin,OUTPUT); pinMode(isolation_pin,OUTPUT); pinMode(CC_LED,OUTPUT); pinMode(CV_LED,OUTPUT); pinMode(BAT_FULL_LED,OUTPUT); //initially both relays are OFF digitalWrite(switch_pin,LOW); digitalWrite(isolation_pin,LOW); } void loop() { uint8_t BatteryState=0 ; // Variable to keep track of battery state //Every time eet these pin low digitalWrite(isolation_pin,LOW); digitalWrite(CC_LED,LOW); digitalWrite(CV_LED,LOW); //////////****read the analogvalues float batteryVoltage = senseVoltage(); //return battery voltage float batteryCurrent = senseCurrent(batteryVoltage); // return battery charging current if(Flag == 1) { // After CC mode enter in CV mode BatteryState = 2; Flag = 0;}// Battery enter in CV mde after CC mode else if(Flag == 2){ while(batteryVoltage>=4.0){ batteryVoltage = senseVoltage(); //check for when battery is removed or battery is discharged below 4V if(batteryVoltage <4){ Flag = 0; digitalWrite(BAT_FULL_LED,LOW); break;}}}// battery fully charged scanning for battery removed or not else if(batteryVoltage < 3.0){ //do nothing }// No Battery or bad battery,Ideal state else if(batteryVoltage<4.0 && batteryVoltage>3.0){ digitalWrite(isolation_pin,LOW); BatteryState = 1; }//charge battery in CC MODE else if(batteryVoltage >= 4.0){ BatteryState = 2; }//charge battery in CV MODE /////////////*****MODE SELECT****/////////// switch(BatteryState){ case 1: // CC MODE ///Switch ON CC mode LED and trigger relay digitalWrite(isolation_pin,HIGH); digitalWrite(switch_pin,HIGH); digitalWrite(CC_LED,HIGH); Serial.println("CC mode"); //when battery voltage is in between 3V and 4V enter in while loop while(batteryVoltage <4.0 && batteryVoltage>=3.0){ batteryVoltage = senseVoltage(); //check for when battery is charging in CC mode if(batteryVoltage>=4.0){ digitalWrite(isolation_pin,LOW); //delay to compensate switching time of relay with software delay(100); Flag = 1; digitalWrite(CC_LED,LOW); break;} //check for when battery is removed else if(batteryVoltage<3.0){ digitalWrite(isolation_pin,LOW); digitalWrite(switch_pin,LOW); digitalWrite(CC_LED,LOW); Serial.println("EXIT "); //delay to compensate switching time of relay with software delay(100); break;} } break; /// exit case 1. case 2: // CV MODE ///Switch ON CV mode LED and trigger relay digitalWrite(isolation_pin,HIGH); digitalWrite(CV_LED,HIGH); Serial.println("Cv mode"); batteryVoltage = senseVoltage(); //when battery voltage is in 4V enter in while loop while(batteryVoltage >=4.0 ){ batteryVoltage = senseVoltage(); batteryCurrent = senseCurrent(batteryVoltage); //check for when battery is charging in CV mode if(batteryCurrent < 10){ digitalWrite(isolation_pin,LOW); //delay to compensate switching time of relay with software delay(100); digitalWrite(CV_LED,LOW); digitalWrite(BAT_FULL_LED,HIGH); Flag = 2; Serial.println("Battery charged"); break;} //check for when battery is removed else if(batteryVoltage<3.0){ digitalWrite(isolation_pin,LOW); //delay to compensate switching time of relay with software delay(100); digitalWrite(CV_LED,LOW); break;} } break; /////end of switch case 2. } }
Sơ đồ mạch Thiết kế mạch sạc pin Li-ion
Sơ đồ mạch sạc pin Li-ion click để xem phóng to :