PIC 및 LED를 사용하여 배터리 전압 감소 모니터링
의 목적
배터리로 구동된 장치의 전원 전압이 떨어지고 회로가 움직이지 않는 것을 감지하기 전에 알려 주십시오.
가능한 한 실속 있고 저소모 전류로 이를 실현하기 위해 검색할 때 아래 사이트에서 하고 싶은 일에 부합한다.
또 평소가 아닌 만큼 일정 간격이나 임의의 시간에 한순간에 전류를 LED로 흘려보내면 판정이 가능하기 때문에 저소비 전류의 움직임도 기대할 수 있다.
이번에 우리는 PIC 마이크로컴퓨터로 실험 회로를 만들어 전원 전압의 하락을 판단하는 프로그램을 쓸 것이다.
개발 환경
실험 회로
다음 그림의 실험 회로를 조립했다.
정상적으로 전원은 3노트 7호 배터리(이번에는 약 4.2V), 전압이 떨어진 상태에서는 2노트 3호 배터리(이번에는 약 2.8V)다.
전압 읽기는 LED로 RA5핀에 연결되고 알림은 LED로 RA2핀에 연결됩니다.
또 신호선을 전압 읽기용 LED와 함께 RA4핀에 나란히 연결한다.
RA4핀을 아날로그 입력핀으로 설정하고 AD를 통해 읽을 수 있는 LED의 VF를 변환할 수 있습니다.
절차.
다음 페이지에서는 다양한 구성에 대해 자세히 설명합니다.
RA5 핀이 0으로 출력될 때 LED를 읽는 VF는 임계값 이상일 때 RA2 핀에 연결된 알림용 LED를 깜박입니다.
읽은 전압 값은 AD 변환을 통해 0~1023 사이의 값으로 변환되므로 이 기간 동안 임계값을 설정합니다.
이번 실험 회로에서의 전압 읽기용 LED의 VF는 2.3V 정도이며, 전압이 낮아졌을 때의 2.8V보다 약간 높은 3.0V 알림을 사용하면 2.3V/3.0V×1023≈784이므로 명확한 780을 임계값으로 합니다.
참고로 정상 전압 아래 VF의 AD 변환값은 2.3V/4.2V입니다.×1023≈560.
main.c
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// コンフィグレーションBIT1 設定
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
// コンフィグレーションBIT2 設定
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = OFF
#pragma config BORV = LO
#pragma config LVP = OFF
// 動作周波数
#define _XTAL_FREQ 4000000
// AD変換
unsigned int adconv()
{
__delay_us(5); // アナログ変換情報が設定されるまで待機
ADCON0bits.GO = 1; // PICにアナログ値読取り開始を指示
while(ADCON0bits.nDONE); // PICが読取り完了するまで待つ
return ADRES;
}
int main() {
// PIC設定
OSCCON = 0b01101010; // 内部クロック4MHz
ANSELA = 0b00010000; // アナログはRA4(RN3)に割り当て、残りをすべてデジタルに割り当てる
TRISA = 0b00010000; // RA4(RN3)を入力、その他のピンは出力に割り当てる(ただしRA3は入力専用のため設定は無効)
PORTA = 0b00000000; // すべてのピンの出力をLoとする
WPUA = 0b00000000; // プルアップ設定なし
// AD変換設定
ADCON1 = 0b11000000; // 読取値は右寄せ、A/D変換クロックはFOSC/4、VDDをリファレンスとする
ADCON0 = 0b00001101; // アナログ変換情報設定、RA4(RN3)から読み込む
unsigned int value = 0;
bool flag = false;
while(1) {
if (!flag){
RA5 = 0; // 電圧読み取り用LED点灯
__delay_ms(1000);
value = adconv(); // AN3(RA4)から電圧値を読み取る
RA5 = 1; // 電圧読み取り用LED消灯
__delay_ms(1000);
if(value > 780){ // 閾値以上で電圧低下を通知
flag = true;
}
}else{
RA2 = 1; // 電圧低下通知用LED点灯
__delay_ms(1000);
RA2 = 0; // 電圧低下通知用LED消灯
__delay_ms(1000);
}
}
return 0;
}
동작 확인
4개의 배터리 케이스만 있어서 배선이 엉망으로 보이니 양해해 주십시오.
전원 전압이 정상이면 전압 읽기용 LED가 깜박이고 전원 전압이 떨어지면 알림용 LED가 깜박거린다(사진은 분별하기 어렵지만 약간 빨간색이 보인다).
총결산
읽기 전압 시 LED의 전류는 약 80입니다.μA를 사용하면 저소모 전류의 전압을 낮추어 감시할 수 있다.
그러나 회로 전체를 보면 마이크로컴퓨터가 조작할 때 전류를 소모하는 비율이 거의 (실제 측정은 1.5~2ma 정도)이고 실제 조작할 때 수면 모드와 중단을 이용하여 간헐적인 동작을 해야 한다.
Reference
이 문제에 관하여(PIC 및 LED를 사용하여 배터리 전압 감소 모니터링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sutoo_the_cat/items/e342bf0f0a874f63f9c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)