PIC 및 LED를 사용하여 배터리 전압 감소 모니터링

의 목적


배터리로 구동된 장치의 전원 전압이 떨어지고 회로가 움직이지 않는 것을 감지하기 전에 알려 주십시오.
가능한 한 실속 있고 저소모 전류로 이를 실현하기 위해 검색할 때 아래 사이트에서 하고 싶은 일에 부합한다.
  • 전원 전압이 낮아진 판단
  • 마이크로컴퓨터에 연결된 LED의 전류를 읽을 때의 VF(양방향 전압)를 통해 전원 전압이 낮아진 것을 판단할 수 있다.
    또 평소가 아닌 만큼 일정 간격이나 임의의 시간에 한순간에 전류를 LED로 흘려보내면 판정이 가능하기 때문에 저소비 전류의 움직임도 기대할 수 있다.
    이번에 우리는 PIC 마이크로컴퓨터로 실험 회로를 만들어 전원 전압의 하락을 판단하는 프로그램을 쓸 것이다.

    개발 환경

  • MPLAB X IDE v5.10
  • PICKit3
  • 실험 회로


    다음 그림의 실험 회로를 조립했다.
  • PIC12F1822
  • 필름 콘덴서 0.1μF(PIC 전원 안정화)
  • 저항기×2(22kΩ、10kΩ)
  • LED×2(전압 읽기: 녹색, 알림: 빨간색, 모두 하이라이트)
  • 단일 3배터리(일반시 3노트, 전압 저하 상태 2노트 아날로그)

  • 정상적으로 전원은 3노트 7호 배터리(이번에는 약 4.2V), 전압이 떨어진 상태에서는 2노트 3호 배터리(이번에는 약 2.8V)다.
    전압 읽기는 LED로 RA5핀에 연결되고 알림은 LED로 RA2핀에 연결됩니다.
    또 신호선을 전압 읽기용 LED와 함께 RA4핀에 나란히 연결한다.
    RA4핀을 아날로그 입력핀으로 설정하고 AD를 통해 읽을 수 있는 LED의 VF를 변환할 수 있습니다.

    절차.


    다음 페이지에서는 다양한 구성에 대해 자세히 설명합니다.
  • PIC12F11822 사용 방법: 12F11822 메모
  • 1초마다 RA5핀의 출력을 0과 교체하고, RA5핀이 1(Hi)일 경우 LED 양쪽의 전위차가 0V이기 때문에 전류가 유통되지 않지만, 0(Lo)일 때는 전위차가 발생해 전류가 흐른다.
    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 정도)이고 실제 조작할 때 수면 모드와 중단을 이용하여 간헐적인 동작을 해야 한다.

    좋은 웹페이지 즐겨찾기