Potentiometer

/ Analog Input  |   Potentiometer  |   LM35  |   LM35-MP20

     Potentiometer(전위차계)는 흔하게 가변저항(Variable resistor)로 부르며 저항값을 조절가능한 소자로 아래 그림과 같이 3개의 전극으로 이루어져있다.

pic-01
ref) https://www.teachwithict.com/potentiometer.html
Potentiometer (가변저항)의 구조


     아래 그림은

pic-01
가변저항의 위치에 따른 전압값의 변화


     
pic-01
소형 포텐시오미터의 위치에 따른 전압값의 변화


     

소형 포텐시오미터의 출력 값을 PIC16F18345의 Analog Input을 사용하여 읽기 위한 그림


Analog Input 명령어: (CCS-C Manual 참고)
     setup_adc ( ), setup_adc_port ( ), set_adc_channel ( ), setup_vref ( ), read_adc ( )

           - setup_adc (): ADC 포트 설정 명령어
           - setup_adc_port (): ADC 포트 설정 명령어
           - set_adc_channel (): ADC 채널 설정 명령어
           - setup_vref (): Vref 설정 명령어
           - read_adc (): ADC 읽기 명령어


    Coding 과정

        1. PIC 설정
            #include  <16f18345.h>                      //* PIC16F18345용 헤더파일
            #device     ADC=10                              //* ADC 분해능 설정, 10 Bit로 설정
            #fuses    HS,NOMCLR		                //* 4 MHz 이상 Crystal 사용 (외부 발진회로 사용)
            #use      delay (clock = 20000000)	//* 외부 클럭을 20 MHz로 설정

        2. 포트 설정
            setup_adc_port (sAN2 | VSS_VDD) ;
                        //* channel 2 사용 (한개), 최저 입력전압은 0V(Vss), 최고 입력전압은 전원전압 5V(Vdd)를 사용
            setup_adc (ADC_CLOCK_INTERNAL) ;     //* ADC 동작을 내부 클럭을 사용함

        3. 채널 설정
            set_adc_channel (channel number) ;      //* 사용하려는 채널 선택

        4. ADC 함수
            read_adc () ;                                           //* ADC 값 읽음

        5. 예제 프로그램
            아래 프로그램 참고

* PIC16F18345을 사용하여 Potentiometer의 출력 값을 읽는 프로그램

    //******************************************************************************
    // Potentiometer의 출력 값 읽기
    //******************************************************************************

    #include    <16f18345.h>                    //* PIC16F18345용 헤더파일
    #device     ADC=10                              //* ADC 10Bit 분해능으로 설정
    #fuses      HS,NOMCLR                        //* 4 MHz 이상 Crystal 사용 (외부 발진회로 사용)
    #use        delay (clock = 20000000)    //* 외부 클럭을 20 MHz로 설정

    void main (void)
    {   int16   adc_value ;                          //* 변수 설정
        float   volt ;

        setup_adc_ports (sAN2, VSS_VDD) ;
                //* channel 2 사용 (한개), 최저 입력전압은 0V(Vss), 최고 입력전압은 전원전압 5V(Vdd)를 사용
        setup_adc (ADC_CLOCK_INTERNAL) ;
                //* ADC 기본 동작은 내부 주파수를 사용하여 동작
        set_adc_channel (2) ;  //* ADC 값을 읽기위한 channel을 2번으로 설정 (PIN RA2가 channel 2 번임)

        while (1) {
            adc_value = read_adc () ;               //* ADC 값을 읽어 adc_value에 저장
            volt = (float)adc_value * 4.8875 ;  
                //* 읽은 ADC 값(adc_value)을 전압으로 환산, 5000 mV / 1023 = 4.8875 (Analog Input, page 식 (2) 참고)
        }
    }
    //******************************************************************************


     위의 경우 측정한 전압을 표시 할 수 있는 방법이 따로 없다. Analog Input을 사용하여 읽은 접압을 표시하기 위하여 아래 그림과 같이 16x2 문자 LCD와 D011 문자 LCD Module을 사용하였다. D011 문자 LCD Module은 UART 또는 I2C로 외부와 통신가능하여 Microcontroller를 사용하여 쉽게 문자를 표시 할 수 있다.


소형 포텐시오미터의 출력 값을 읽고 LCD에 표시하기위한 회로


* PIC16F18345을 사용하여 Potentiometer의 출력 값을 16 x 2 문자 LCD에 표시하는 프로그램

    //******************************************************************************
    // Potentiometer의 출력 값을 읽고 LCD에 표시하기
    //******************************************************************************

    #include    <16f18345.h>                        //* PIC16F18345용 헤더파일

    #device     ADC=10                                 //*  ADC 10 Bit로 설정
    #fuses      HS,NOMCLR                            //*  Highr Speed Crystal, No Master Clear
    #use        delay (clock = 20000000)        //* 20 MHz Crystal 사용

    void main (void)
    {   int16   adc_value ;
        int16   volt ;

        setup_adc_ports (sAN2, VSS_FVR) ;           //* 16f18345.h 참고
        setup_vref (VREF_ON | VREF_ADC_4v094) ;     //* PIC 내부 Voltage Reference 사용, 4.096 V 로 설정, 16f18345.h 참고
        setup_adc (ADC_CLOCK_INTERNAL) ;              //* 내부 클럭사용
        set_adc_channel (2) ;                                //* ADC Channel을 2로 설정 (PIN RA2 사용)
        delay_ms (1000) ;

        printf ("$#BL_80;") ;                       //* LCD 화면 지우기
        printf ("$1,1,**  Pot Test **;") ; 
                //* LCD화면 1 칸, 1 줄, 에 "**  Pot Test **" 쓰기 ('$': 쓰기시작, ';': 끝내기 명령문자)
        printf ("$1,2,    2021/07/01 ;") ; 
                //* LCD화면 1 칸, 2 줄, 에 "    2021/07/01 " 쓰기
        delay_ms (1000) ;

        while (1) {
            adc_value = read_adc () ;           //* ADC 값 읽음
            volt = adc_value * 4 ;              
                //* 전압계산 V (mV) = adc_value * Vref / Bmax = 4096 mV / 1023  = adc_value * 4
            printf ("$3,2,Volt: %4ld mV;", volt) ;
            delay_ms (100) ;
        }
    }
    //******************************************************************************

      C Source Code



참고:

     1. Potentiometer
     2. Potentiometer: Definition, Types, And Working Principle
     3. Physical Computing: Potentiometers
     4. Potentiometers: Wirewound Potentiometers, Multiturn Potentiometers
     5. Potentiometer
     10. ​Connecting a Potentiometer to a micro:bit



< Prev
TOP
Next >