Chỉ báo pin thấp


22

Tôi đang tìm cách tạo ra một chỉ báo tuổi thọ pin mà tôi có thể sử dụng kết hợp với bộ điều khiển vi mô. Tôi hy vọng rằng sau đó tôi có thể đọc được thời lượng pin hiện tại và ngày càng đưa bộ điều khiển vi mô vào chế độ ngủ để duy trì tuổi thọ pin.


1
Vi điều khiển nào?
Brian Carlton

Câu trả lời:


13

Đối với câu hỏi chính, như làm thế nào để đo điện áp của pin, phương pháp đơn giản nhất là sử dụng một trong các chân ADC trên arduino.

Nếu bạn đang cung cấp 5v từ pin (không chắc), thì bạn có thể chạy thẳng tới một trong các chân tương tự và sử dụng analogRead () - mỗi mức tăng về giá trị (từ 0-1023) sẽ tương ứng với 4,9mV. Vì vậy, nhân giá trị đọc với 0,0049 để có được giá trị đọc volt.

Nếu bạn đang chạy cao hơn 5v (nhiều khả năng), bạn có thể sử dụng mạch phân chia điện áp (xem: http://en.wikipedia.org/wiki/Vol volt_divider ) để đưa điện áp bạn gửi đến đầu vào tương tự tới <= 5v. Nếu bạn đang chạy 12V, bạn sẽ muốn chia điện áp thành khoảng 1/3. Sau đó, sau khi nhân giá trị ADC, nhân 3 để có điện áp thực tế.

Do đó, nếu sử dụng điện áp 12V và bộ chia điện áp 1/3:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

! c


2
Tôi có hai điều quan trọng để thêm vào điều này. Đầu tiên, hầu hết các pin 12V không chết ở 0V, mà thay vào đó ở một mức độ khá gần, ít nhất là trong vòng 5 V, điện áp sạc đầy của bạn. Một kỹ thuật phổ biến để có được các phép đo độ phân giải cao hơn trong phạm vi hoạt động là giảm điện áp bằng một diode zener. Một điện trở nối tiếp với một zener và bạn đo trên điện trở. Thứ hai, hầu hết mọi người không nhận ra bạn cần rút dòng điện từ pin để có ý tưởng tốt về nguồn điện còn lại.
Kortuk

@Kortuk: Bạn có thể làm rõ hai cách học của tôi không: (1) Để có được trong phạm vi điện áp được chấp nhận bởi pin, bạn có gợi ý rằng phương pháp zener-diode sẽ cho độ phân giải cao hơn phương pháp chia điện áp không? (2) Tại sao bạn lại đưa ra một đề cập cụ thể ở đây rằng "bạn cần vẽ hiện tại ...", v.v.?
boardbite

22

tinker.it đã xuất bản một máy đo mức điện áp "bí mật" trong Atmega168 / atmega328. Với một mẹo nhỏ, Arduino có thể so sánh VCC với tham chiếu 1.1v chính xác bên trong. Giải thích và mã ở đây: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-vol volt /


tuyệt vời, tôi đang chạy một máy atmega trên pin và không thể có giá trị vref đáng tin cậy. cảm ơn vì đã đăng bài này, nó đã giải quyết vấn đề của tôi như ma thuật!
radhoo

10

Gợi ý của shutdrone là rất tốt, nhưng thiếu một chi tiết, vì nó ngụ ý rằng tham chiếu điện áp tương tự giống như điện áp được đo (ngoài việc giả sử rằng Arduino đang được sử dụng, không được nêu rõ ràng).

Bạn sẽ cần một ADC, cho dù nó không thể tách rời với uC của bạn hoặc một thành phần bên ngoài. ADC cần một tham chiếu điện áp tương tự (ARef) để so sánh đầu vào với. Bạn không muốn ARef giống với điện áp mà bạn cảm nhận được vì khi đó ADC sẽ luôn thấy các điện áp đầu vào và tham chiếu là bằng nhau, vì vậy giá trị tương tự cho điện áp được cảm nhận sẽ luôn là cực đại. Những gì bạn cần là một tham chiếu điện áp tương tự rất chính xác sẽ không thay đổi khi điện áp nguồn cung cấp thay đổi. ADC sẽ so sánh điện áp tham chiếu đó với điện áp pin; bạn có thể sử dụng bộ chia điện áp để giảm điện áp pin được cảm nhận trong phạm vi của ARef.

Arduino (Atmega8 / 168/328 / vv.) Có ADC tích hợp và tham chiếu tương tự 1.1V tích hợp, do đó, các thành phần bên ngoài duy nhất bạn cần là điện trở cho bộ chia điện áp. Tôi nghĩ rằng bạn cũng sẽ muốn sử dụng các giá trị rất cao cho các điện trở để giảm mức tiêu hao hiện tại trên pin.


2
Điểm tuyệt vời - và bạn đúng là tôi (không chính xác) đã giả định một Arduino trong hỗn hợp. =)! c
màn trập
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.