Điện Tử Cơ Bản

Cơ chế chuyển mạch cho mạch sạc pin Li-ion

Mạch Sạc pin Li-ion : Trong hướng dẫn trước, Nguồn dòng điện không đổi (CC) 60 mA và Nguồn điện áp không đổi (CV) 4,2 V được thiết kế bằng cách sử dụng IC điều chỉnh điện áp LM317. Nguồn dòng điện không đổi được sử dụng cho chế độ dòng điện không đổi khi sạc pin trong khi nguồn điện áp không đổi được sử dụng cho chế độ điện áp không đổi khi sạc pin. Trong quá trình thiết kế nguồn dòng điện không đổi và nguồn điện áp không đổi, việc thử nghiệm pin Li-ion trước khi sạc pin cũng đã được thảo luận. Hãy xem hướng dẫn trước “Khái niệm cơ bản về sạc pin Li-ion” để tìm hiểu về kiến ​​thức cơ bản về pin Lithium ion, phương pháp sạc và cấu trúc liên kết của chúng.
Trong hướng dẫn này, cơ chế chuyển mạch để mạch sạc chuyển từ chế độ dòng điện không đổi sang chế độ điện áp không đổi được thiết kế và hoàn thành mạch sạc pin Li-ion sử dụng cấu trúc liên kết điều chỉnh tuyến tính. Trong cơ chế chuyển mạch, việc phát hiện điện áp của pin được thực hiện với sự trợ giúp của mạch vi điều khiển. Cơ chế chuyển mạch dựa trên mạch rơ le được vận hành lại với sự trợ giúp của vi điều khiển. Bằng cách thêm cơ chế chuyển mạch dựa trên bộ điều khiển, mạch sạc đã hoàn thành cho pin Li-ion một cell.
Mặc dù bất kỳ bộ vi điều khiển nào cũng có thể được sử dụng để thiết kế mạch điều khiển của cơ chế chuyển mạch, nhưng Arduino UNO được sử dụng trong mạch sạc này vì nó là bảng tạo mẫu được sử dụng rộng rãi. Nó dễ dàng và nhanh chóng để phát triển trên Arduino vì sự hỗ trợ của cộng đồng lớn và các thư viện phần mềm có sẵn dễ dàng. 

Linh kiện bắt buộc  Mạch Sạc pin Li-ion

Hình 1: Danh sách các linh kiện cần thiết cho cơ chế chuyển mạch của Bộ điều chỉnh tuyến tính Bộ sạc pin Li-ion một cell

Sơ đồ khối mạch Sạc pin Li-ion

Hình 2: Sơ đồ khối của cơ chế chuyển mạch cho bộ điều chỉnh tuyến tính Bộ sạc pin Li-ion đơn cell

Kết nối mạch Sạc pin Li-ion

Trong hướng dẫn trước, một nguồn dòng điện không đổi và một nguồn điện áp không đổi đã được thiết kế bằng cách sử dụng IC điều chỉnh điện áp LM317. LM317 là một trong những bộ điều chỉnh điện áp dương phổ biến đi kèm với các tính năng như bảo vệ quá áp, hạn chế dòng điện bên trong, bảo vệ quá tải, dòng tĩnh thấp (cho đầu ra ổn định hơn) và bù diện tích an toàn (mạch bên trong của nó giới hạn mức tiêu tán điện tối đa vì vậy nó không tự hủy). Bây giờ, đã đến lúc thiết kế một cơ chế chuyển đổi cho phép chuyển từ trạng thái dòng điện không đổi sang trạng thái điện áp không đổi khi sạc pin bằng cách cảm nhận điện áp đầu cuối của pin.
Theo chu kỳ sạc của pin Li-ion, nó phải sạc với dòng điện không đổi trong phạm vi điện áp xác định trước. Khi đó pin đạt đến điện áp đặt trước thì nó phải sạc bằng nguồn điện áp không đổi. Do đó phải có một số mạch điện thông minh có thể phát hiện điện áp thực của pin và chuyển pin giữa chế độ CC và CV.
Việc phát hiện điện áp của pin được thực hiện với sự trợ giúp của vi điều khiển (Arduino UNO trong mạch này) và việc chuyển mạch được thực hiện với sự trợ giúp của mạch chuyển tiếp. Pin cần sạc có điện áp danh định lớn nhất là 4,2 V. Để sạc pin này, cần cung cấp dòng điện không đổi 60 mA ở chế độ CC và điện áp không đổi 4,2 V ở chế độ CV. Mạch sạc được lắp ráp bằng cách kết nối các thành phần sau:
Rơle – Để chuyển mạch CC và CV các rơle cơ học được sử dụng trong mạch này. Có hai rơ le (được hiển thị là RL1 và RL2 trong sơ đồ mạch) được sử dụng trong mạch. Các rơ le một đầu của chân tiếp điện được kết nối với nguồn cung cấp 12V và một đầu khác ở bộ thu của bóng bán dẫn Q1 và Q2.
Chuyển mạch bóng bán dẫn – Rơle được kích hoạt khi bóng bán dẫn (Q1 và Q2) BẬT. Bóng bán dẫn Q1 và Q2 được giao tiếp với các chân 12 và 11 của bảng Arduino tương ứng. Các bóng bán dẫn được sử dụng làm công tắc bên cao trong mạch.
Điốt – Các điốt D1 và D2 ​​giúp xả dòng điện cuộn dây rơle khi chúng bị TẮT. Các điốt này được gọi là điốt bay trở lại hoặc điốt tự do.
Điện trở cảm nhận dòng điện –  Để cảm nhận dòng điện sạc, một điện trở có giá trị nhỏ R cảm biến (1 ohm) được sử dụng. Điện trở này được nối với chân NO của rơ le R2. Trong đoạn mạch, điện trở này giảm cực đại là 60 mV nên lấy điện trở có giá trị càng nhỏ càng tốt. Đánh giá công suất của cảm biến R điện trở có thể được tính toán như sau:

Dòng điện cực đại phải chạy từ điện trở Rsense là 60mA.

Power =(maximum current across Rsense)2*Rsense

Power = (0.06*0.06)*1

Có thể bạn quan tâm

Power = 3.6 mW

Vì vậy, theo sự sẵn có, một điện trở có giá sức mạnh của 0,25 W có thể được sử dụng cho Rsense . Điện trở cảm nhận dòng điện được giao tiếp với chân A1 của Arduino trong khi chân A0 của Arduino được giao tiếp với các cực đầu ra của mạch sạc để cảm nhận điện áp pin.

Điện trở kéo xuống – Ở đầu ra, sử dụng giá trị cao của điện trở kéo xuống Rpull (1 MΩ). Điện trở này giúp mạch điện luôn ở chế độ lý tưởng. Điện trở này được sử dụng để nối đất các gai hoặc nhiễu không mong muốn ở đầu ra khi pin không được kết nối với đầu ra. Vì vậy chân ADC của bộ vi điều khiển sẽ không cảm nhận được tín hiệu đột ngột hoặc nhiễu trong tình trạng không có pin.
Vi điều khiển – Arduino UNO là bảng vi điều khiển được sử dụng trong mạch. Chân tương tự của bộ điều khiển cảm nhận dòng điện cũng như điện áp của pin. Vì vậy, bộ điều khiển giúp kích hoạt các rơ le BẬT và TẮT chuyển đổi đầu ra của mạch CC và CV. Cảm biến điện áp và dòng điện từ các chân tương tự được quản lý bởi Arduino Sketch. Các mức điện áp và dòng điện của pin được số hóa trong bộ điều khiển và so sánh với các giá trị danh định tối đa để xác định điểm chuyển mạch. Khi chuyển mạch, bộ điều khiển sẽ thay đổi logic kỹ thuật số tại các chân kết nối với bóng bán dẫn để kích hoạt các rơ le.
Tải xuống và kiểm tra Arduino Sketch để tìm hiểu cách nó cung cấp trí thông minh dựa trên phần mềm để chuyển mạch CC và CV theo lập trình.
Đèn LED chỉ báo – Có ba đèn LED được kết nối trong mạch để cho biết trạng thái sạc của mạch. Khi mạch bộ sạc làm việc ở chế độ CC, đèn LED màu trắng (hiển thị như D3 trong sơ đồ mạch) bắt đầu phát sáng. Khi mạch bộ sạc làm việc ở chế độ CV, đèn LED màu xanh lá cây (hiển thị như D4 trong sơ đồ mạch) bắt đầu phát sáng. Khi pin được sạc đầy, đèn LED màu đỏ (hiển thị như D5 trong sơ đồ mạch) bắt đầu phát sáng. Các đèn LED này được điều khiển bởi bảng Arduino và tùy thuộc vào điện áp thực của pin được bộ điều khiển cảm nhận, nó sẽ BẬT một trong các đèn LED này bằng cách chuyển một mức logic CAO tại chân giao diện. Đèn LED trong khi, đèn LED xanh lá cây và đèn LED đỏ được giao tiếp với các chân 7, 8 và 9 của bảng Arduino tương ứng.
Tụ điện – Tụ điện C1 ở đầu vào của bộ điều chỉnh điện áp có thể xử lý nhiễu nguồn điện. Tụ gốm C2 song song với C1 này được sử dụng để giảm ESR. Tụ điện được sử dụng trong mạch phải có định mức điện áp cao hơn điện áp cung cấp đầu vào. Nếu không, các tụ điện có thể bắt đầu rò rỉ dòng điện do quá điện áp tại các bản của nó và sẽ bùng phát. Phải đảm bảo rằng các tụ lọc đã được phóng điện trước khi làm việc với nguồn điện một chiều. Đối với điều này, các tụ điện phải được nối tắt bằng một tuốc nơ vít đeo găng tay cách điện.
Cách hoạt động của mạch – 
Theo thuật toán khi điện áp của pin nằm trong khoảng từ 3 V đến 4 V thì pin phải được sạc bằng nguồn dòng điện không đổi. Khi hiệu điện thế của acquy đạt đến 4 V thì cần nạp vào nguồn có hiệu điện thế không đổi là 4,2 V.
Mạch sạc này hoạt động ở bốn trạng thái: 
  Trạng thái lý tưởng – Ban đầu, 12V DC được đưa vào mạch sạc và bất kỳ pin nào không được kết nối ở đầu ra. Ở trạng thái này, mạch vẫn ở Trạng thái lý tưởng. Chân tương tự của bộ điều khiển cảm nhận không vôn ở đầu ra và không kích hoạt bất kỳ rơle nào.
  Trạng thái dòng điện không đổi – Khi pin được kết nối với mạch có điện áp thực trong khoảng từ 3V đến 4 V, thì bộ vi điều khiển sẽ kích hoạt các bóng bán dẫn Q1 và Q2. Điều này kích hoạt rơle R1 cũng như R2 và pin được kết nối với mạch CC. Pin bây giờ bắt đầu sạc với dòng điện không đổi là 60mA và đèn LED màu trắng được BẬT. Khi điện áp của pin đạt đến 4V thì pin sẽ chuyển sang trạng thái CV. 
  Trạng thái điện áp không đổi – Khi điện áp pin Li-ion đạt đến 4 V thì bộ vi điều khiển sẽ cảm nhận nó thông qua điện trở kéo xuống và chuyển bóng bán dẫn Q1 TẮT. Điều này khử năng lượng cho rơ le R1 và pin sau đó được kết nối với mạch CV. Mạch này sạc pin với điện áp không đổi là 4,2 V và đèn LED màu xanh lá cây được BẬT. Bộ vi điều khiển liên tục theo dõi dòng sạc hoặc dòng pin ở trạng thái này. 
  Trạng thái kết thúc – Khi dòng sạc xấp xỉ 10% đến 20% của 60 mA thì pin được cho là đã được sạc đầy. Trong mạch này, dòng điện sạc 10mA được đặt làm điểm TẮT để kết thúc sạc pin. Khi dòng điện của pin nhỏ hơn 10mA thì bộ vi điều khiển sẽ TẮT bóng bán dẫn Q2 và ngắt kích hoạt rơle R2. Thao tác này ngắt kết nối pin khỏi mạch CV và đèn LED Đỏ được BẬT để cho biết rằng pin đã được sạc đầy. 

Hướng dẫn lập trình 

Arduino Sketch quản lý để cảm nhận điện áp pin và dòng điện của pin và theo đó nó thay đổi trạng thái sạc bằng cách chuyển đổi các rơ le. Trong bản phác thảo Arduino, trước hết, các kết nối mạch được biểu diễn bằng cách xác định các biến cho chúng. 
Hình 3: Ảnh chụp màn hình mã Arduino được sử dụng để thay đổi trạng thái sạc
Để cảm nhận điện áp pin, hàm SenseVoltage () được xác định. Trong hàm, điện áp pin được cảm nhận bằng cách sử dụng hàm analogRead () và số đọc kỹ thuật số được trả về dưới dạng float. Để cảm nhận dòng điện của pin, hàm senseCurrent () được xác định. Hàm hoạt động giống như hàm senseVoltage () ngoại trừ chân liên kết có điện trở cảm nhận dòng điện được kết nối với nó.
Hình 4: Ảnh chụp màn hình Mã Arduino được sử dụng để cảm nhận điện áp
Các chân Arduino được đặt làm đầu vào hoặc đầu ra kỹ thuật số bằng cách sử dụng hàm pinMode () trong hàm setup () và các lôgic mặc định được chuyển cho chúng. Hàm setup () chỉ chạy một lần khi bảng được bật nguồn ban đầu. 
Hình 5: Ảnh chụp màn hình chức năng thiết lập trong Mã Arduino cho Cơ chế chuyển mạch của Bộ điều chỉnh tuyến tính
 Trạng thái sạc của pin được xác định bằng cách sử dụng biến Flag trong mã.
Hình 6: Ảnh chụp màn hình Biến cờ trong Mã Arduino cho Cơ chế chuyển mạch của Bộ điều chỉnh tuyến tính
Theo trạng thái pin, các rơ le được kích hoạt bằng cách thiết lập logic kỹ thuật số tại các chân điều khiển kết nối với các bóng bán dẫn chuyển mạch. Việc thay đổi logic số được thực hiện bởi một câu lệnh switch trong mã có biến Flag là đối số chuyển mạch. 
Hình 7: Ảnh chụp màn hình logic kỹ thuật số trong mã Arduino cho cơ chế chuyển mạch của bộ điều chỉnh tuyến tính
Điều này hoàn thành bản phác thảo Arduino. Kiểm tra mã hoàn chỉnh và biên dịch nó sang bảng Arduino để thử nghiệm. 

Kiểm tra mạch

Để kiểm tra mạch sạc, nó được sạc bằng pin Li-ion có điện áp danh định 3,7 V. Ban đầu, điện áp của pin (Vbat) được đo là 3,84 V và các quan sát sau đây được ghi nhận khi sạc pin:
Hình 8: Bảng liệt kê các ký tự đầu ra của Bộ sạc pin Li-ion
Từ những quan sát trên, có thể phân tích rằng pin sạc rất chậm. Điều này là do dòng sạc ít hơn (chỉ 60 mA) ở chế độ dòng điện không đổi. Nếu dòng sạc tăng lên thì pin sẽ mất ít thời gian hơn để sạc. Dòng sạc của pin ở chế độ CC có thể được tăng lên theo tiêu chuẩn của pin. Điều này làm giảm thời gian sạc của pin.
Mạch sạc được thiết kế sử dụng bộ điều chỉnh tuyến tính có các tính năng sau: 
  Bảo vệ ngược cực của pin – Trong mạch, rơle cung cấp cách ly khi pin được kết nối ngược cực.
  Bảo vệ dòng ngược – Khi mạch sạc TẮT và pin vẫn được gắn ở đầu ra, thì có thể có một dòng điện ngược từ pin đến mạch sạc. Vì vậy, rơ le R1 cung cấp cách ly và bảo vệ mạch khỏi dòng điện trở lại.
  Tự động ngắt sạc – Bộ điều khiển được lập trình để ngắt mạch CV khi điện áp pin đạt đến 4,2 V. Vì vậy, có một kết thúc sạc tự động tránh bất kỳ sự sạc quá mức nào của pin.
  Chỉ báo trực quan – Có các đèn LED được giao tiếp trong mạch để chỉ báo trạng thái sạc của pin. Khi pin được sạc từ 50% đến 90% và bộ sạc đang hoạt động ở chế độ dòng điện không đổi, đèn LED trắng sẽ bật. Khi pin được sạc từ 90% trở lên và bộ sạc đang hoạt động ở chế độ điện áp không đổi, đèn LED màu xanh lục sẽ bật. Khi pin được sạc đầy, đèn LED màu đỏ sẽ bật. Tất cả các đèn LED này được bộ điều khiển chuyển đổi tùy thuộc vào điện áp thực của pin mà nó cảm nhận được. 
Mạch sạc này thiết kế đơn giản và chỉ cần các linh kiện điện tử cơ bản để lắp ráp. Mã chương trình được sử dụng trên bảng Arduino cũng đơn giản và dễ hiểu. Mặc dù mạch sạc này có một số hạn chế nhất định.
Thời gian sạc của mạch để sạc pin nhiều hơn khi dòng sạc đặt ở chế độ dòng điện không đổi ít hơn. Có thể giảm thời gian sạc bằng cách tăng dòng sạc ở chế độ CC. Để tìm hiểu cách tăng dòng điện sạc ở chế độ CC, hãy xem hướng dẫn trước, trong đó các mạch nguồn điện áp không đổi và dòng điện không đổi được thiết kế. Mạch này đã trở nên khá cồng kềnh do sử dụng rơ le cơ học. Ngoài ra, mạch được thiết kế chỉ hoạt động ở trạng thái dòng điện không đổi và điện áp không đổi. Mạch sạc không hoạt động ở trạng thái sạc nhỏ giọt, nghĩa là để sạc pin khi điện áp thực của nó dưới 3V. Vì vậy, mạch sạc này nên được sử dụng để sạc Pin Li-ion có điện áp trên 3V.
Trong khi lắp ráp mạch, điều quan trọng là phải thực hiện các biện pháp phòng ngừa nhất định. Vì lý do an toàn, pin Li-ion phải luôn được sạc với tốc độ sạc từ 0,5 C đến 0,8 C. Điện áp rơle phải nhỏ hơn điện áp đầu vào được áp dụng để kích hoạt rơle. Các Flyback điốt (D1 và D2) nên được sử dụng trên cả hai rơle để ngăn ngừa các mạch từ bất kỳ trở lại hiện tại. Một điện trở có định mức công suất thích hợp phải được sử dụng cho Rsense nếu không một điện trở có định mức công suất thấp hơn có thể bị hỏng do dòng điện cao. Arduino có thể cảm nhận điện áp tối thiểu là 5 mV. Do đó, điện trở cảm nhận dòng điện phải được chọn một cách khôn ngoan, sao cho điện áp trên nó không giảm xuống dưới 5 mV ở bất kỳ trạng thái sạc nào. Cần phải cẩn thận để các đầu nối đầu ra của mạch sạc không bị đoản mạch. Nếu không, nó sẽ làm cho các cực của pin cũng ngắn và điều này có thể làm pin bùng cháy. Vì vậy, có thể có nguy cơ nghiêm trọng nếu các cực của pin bị đoản mạch ngay cả khi nhầm lẫn. Nếu không, không được có bất kỳ kết nối lỏng lẻo nào trong mạch, không thể có điện áp hoặc điện áp đột ngột ở đầu ra. 
Trong khi lắp ráp mạch, điều quan trọng là phải giữ một số biện pháp phòng ngừa đặc biệt trong khi giao tiếp các thành phần với  Arduino. Cần đảm bảo rằng mặt sau của bo mạch điều khiển không chạm vào bất kỳ bề mặt kim loại nào vì nó có thể chạy dòng điện nhỏ bên dưới và có thể làm hỏng bo mạch. Điện áp cung cấp cho Arduino UNO không được vượt quá 12V. Vì vậy, một nguồn cung cấp DC được điều chỉnh nên được sử dụng để cấp nguồn cho  Arduino vì nó chỉ hoạt động trên nguồn điện một chiều. Vì vậy, ngay cả khi nguồn điện sơ cấp cho mạch sạc là nguồn điện xoay chiều, thì nó phải được hạ xuống bằng biến áp, chỉnh lưu bằng mạch cầu và điều chỉnh bằng IC điều chỉnh điện áp như 7812. Trong khi biên dịch mã, phải chọn đúng bo mạch. trong Arduino IDE.

Code

//Program to 
 Author - Diksha
 *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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button