거의 모든 임베디드 애플리케이션에서 사용되는 공통 기능 중 하나는 ADC 모듈 (아날로그-디지털 컨버터)입니다. 이러한 아날로그-디지털 변환기 는 온도 센서, 기울기 센서, 전류 센서, 플렉스 센서 등과 같은 아날로그 센서에서 전압을 읽을 수 있습니다. 따라서이 튜토리얼 에서는 MSP430G2에서 ADC를 사용하여 Energia IDE를 사용하여 아날로그 전압을 읽는 방법을 배웁니다 . 작은 전위차계를 MSP 보드에 연결하고 다양한 전압을 아날로그 핀에 공급하고 전압을 읽고 직렬 모니터에 표시합니다.
ADC 모듈 이해:
저를 믿으세요. MSP430G2를 연결하고 아날로그 전압을 읽도록 프로그래밍하는 데 10 분이 거의 걸리지 않습니다. 그러나 MSP 보드의 ADC 모듈을 이해하는 데 시간을 투자하여 향후 모든 프로젝트에서 효과적으로 사용할 수 있도록하겠습니다.
마이크로 컨트롤러는 디지털 장치이므로 1과 0 만 이해할 수 있습니다. 그러나 현실 세계에서는 온도, 습도, 풍속 등과 같은 거의 모든 것이 본질적으로 아날로그입니다. 이러한 아날로그 변화와 상호 작용하기 위해 마이크로 컨트롤러는 ADC라는 모듈을 사용합니다. 다양한 유형의 ADC 모듈을 사용할 수 있으며 MSP에서 사용되는 것은 SAR 8 채널 10 비트 ADC입니다.
SAR (Successive Approximation) ADC: SAR ADC는 비교기 및 일부 논리 대화를 사용하여 작동합니다. 이 유형의 ADC는 기준 전압 (가변)을 사용하고 비교기를 사용하여 입력 전압을 기준 전압과 비교하며 디지털 출력이 될 차이는 MSB (Most Significant Bit)에서 저장됩니다. 비교 속도는 MSP가 작동하는 클럭 주파수 (Fosc)에 따라 다릅니다.
10 비트 분해능: 이 ADC는 8 채널 10 비트 ADC입니다. 여기서 8 채널이라는 용어는 아날로그 전압을 측정 할 수있는 8 개의 ADC 핀이 있음을 의미합니다. 10 비트라는 용어는 ADC의 분해능을 의미합니다. 10 비트 는 1024 의 10 제곱 (2 10) 의 제곱을 의미합니다. 이것은 ADC의 샘플 단계 수이므로 ADC 값의 범위는 0에서 1023입니다. 값은 0에서 10까지 증가합니다. 아래 공식을 사용하여 계산할 수있는 단계 당 전압 값을 기준으로 1023
참고: 기본적으로 Energia에서 기준 전압은 Vcc (~ 3v)로 설정되며 analogReference () 옵션 을 사용하여 기준 전압을 변경할 수 있습니다.
ADC를 다른 마이크로 컨트롤러와 인터페이스하는 방법도 확인하십시오.
- Arduino Uno에서 ADC를 사용하는 방법?
- ADC0808과 8051 마이크로 컨트롤러의 인터페이스
- PIC 마이크로 컨트롤러의 ADC 모듈 사용
- Raspberry Pi ADC 튜토리얼
회로도:
이전 튜토리얼에서 LCD를 MSP430G2와 인터페이스하는 방법을 이미 배웠습니다. 이제 MSP430 에 전위차계를 추가 하여 가변 전압을 공급하고 LCD에 전압 값을 표시 할 것입니다. LCD 인터페이스를 모르는 경우 위의 링크로 돌아가서 읽어보십시오. 회개를 피하기 위해 정보를 건너 뛸 것입니다. 프로젝트의 전체 회로도가 아래에 나와 있습니다.
보시다시피 여기에는 두 개의 전위차계가 사용됩니다. 하나는 LCD의 대비를 설정하는 데 사용되고 다른 하나는 보드에 가변 전압을 공급하는 데 사용됩니다. 그 전위차계에서 전위차계의 한쪽 끝은 Vcc에 연결되고 다른 쪽 끝은 접지에 연결됩니다. 중앙 핀 (파란색 선)은 핀 P1.7에 연결됩니다. 이 핀 P1.7은 0V (접지)에서 3.5V (Vcc)까지 가변 전압을 제공합니다. 따라서이 가변 전압을 읽고 LCD에 표시하도록 핀 P1.7을 프로그래밍해야합니다.
Energia에서 핀 P1.7이 속한 아날로그 채널을 알아야합니다. 아래 사진을 참고하시면 확인할 수 있습니다.
오른쪽에서 P1.7 핀을 볼 수 있으며이 핀은 A7 (채널 7)에 속합니다. 마찬가지로 다른 핀의 각 채널 번호도 찾을 수 있습니다. A0에서 A7까지의 모든 핀을 사용하여 아날로그 전압을 읽을 수 있습니다. 여기서 A7을 선택했습니다.
ADC 용 MSP430 프로그래밍:
아날로그 전압을 읽도록 MSP430을 프로그래밍하는 것은 매우 간단합니다. 이 프로그램에서 값의 아날로그를 읽고 그 값으로 전압을 계산 한 다음 LCD 화면에 둘 다 표시합니다. 전체 프로그램은 내가 도움말을 조각에서 프로그램을 설명하고 더 아래로 더 잘 이해하고,이 페이지 하단에서 확인할 수 있습니다.
LCD 핀 을 정의하는 것으로 시작합니다. 이것은 LCD 핀이 연결된 MSP430의 핀을 정의합니다. 연결을 참조하여 핀이 각각 연결되었는지 확인할 수 있습니다.
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
다음으로 LCD 디스플레이를위한 헤더 파일 을 포함합니다. MSP가 LCD와 통신하는 방법에 대한 코드가 포함 된 라이브러리를 호출합니다. 이 라이브러리는 기본적으로 Energia IDE에 설치되므로 추가 할 필요가 없습니다. 또한 위에서 정의한 핀 이름으로 Liquid Crystal 함수가 호출되는지 확인하십시오.
#포함
우리의 내부 설정 () 함수를, 우리는 단지 LCD 화면에 표시 할 인트로 메시지를 줄 것이다. MSP430G2에서 LCD를 사용하는 방법을 이미 배웠기 때문에 깊이 들어 가지 않습니다.
lcd.begin (16, 2); // 16 * 2 LCD 디스플레이를 사용하고 있습니다. lcd.setCursor (0,0); // 커서를 첫 번째 행 첫 번째 열에 놓습니다. lcd.print ("MSP430G2553"); // 소개 메시지 표시 lcd.setCursor (0, 1); // 커서를 첫 번째 열 두 번째 행으로 설정 lcd.print ("-CircuitDigest"); // 소개 메시지 표시
마지막으로 infinite loop () 함수 내 에서 A7 핀에 공급되는 전압을 읽기 시작 합니다. 이미 논의했듯이 마이크로 컨트롤러는 디지털 장치이며 전압 레벨을 직접 읽을 수 없습니다. SAR 기술을 사용하여 전압 레벨은 0에서 1024까지 매핑됩니다.이 값을 ADC 값이라고하며이 ADC 값을 얻으려면 다음 라인을 사용하면됩니다.
int val = analogRead (A7); // A7 핀에서 ADC 값 읽기
여기서 analogRead () 함수 는 핀의 아날로그 값을 읽는 데 사용되며 , 가변 전압을 핀 P1.7에 연결했기 때문에 내부에 A7을 지정했습니다. 마지막으로이 값을 " val " 이라는 변수에 저장합니다. 이 변수에 저장할 0에서 1024 사이의 값만 가져 오므로이 변수의 유형은 정수입니다.
다음 단계는 ADC 값에서 전압 값 을 계산하는 것 입니다. 이를 위해 다음 공식이 있습니다.
전압 = (ADC 값 / ADC 분해능) * 기준 전압
우리의 경우 마이크로 컨트롤러의 ADC 분해능이 1024라는 것을 이미 알고 있습니다. ADC 값은 이전 라인에서도 발견되며 val이라는 변수를 저장했습니다. 기준 전압은 마이크로 컨트롤러의 작동 전압과 동일하다. MSP430 보드가 USB 케이블을 통해 전원이 공급되는 경우 작동 전압은 3.6V 입니다. 보드의 Vcc 및 접지 핀에서 멀티 미터를 사용하여 작동 전압을 측정 할 수도 있습니다. 따라서 위의 공식은 아래와 같이 우리의 경우에 적합합니다.
부동 전압 = (float (val) / 1024) * 3.6; // ADC 값을 전압으로 변환하는 공식
line float (val) 과 혼동 될 수 있습니다 . 이것은 변수“val”을 int 데이터 유형에서“float”데이터 유형 으로 변환하는 데 사용됩니다. 이 변환은 val / 1024의 결과를 float로 얻은 경우에만 3.6을 곱할 수 있기 때문에 필요합니다. 값이 정수로 수신되면 항상 0이되고 결과도 0이됩니다. ADC 값과 전압을 계산하고 나면 남은 것은 LCD 화면에 결과 를 표시하는 것뿐입니다. 다음 줄을 사용하여 수행 할 수 있습니다.
lcd.setCursor (0, 0); // 커서를 0 열, 0 행으로 설정 lcd.print ("ADC Val:"); lcd.print (val); // ADC 값 표시 lcd.setCursor (0, 1); // 커서를 0 열, 1 행으로 설정 lcd.print ("Voltage:"); lcd.print (전압); // 디스플레이 전압
여기에서는 첫 번째 줄에 ADC 값을 표시하고 두 번째 줄에 전압 값을 표시했습니다. 마지막으로 100 밀리 초의 지연을주고 LCD 화면을 지 웁니다. 이것은 값이 100mil마다 업데이트됩니다.
결과 테스트!
마지막으로, 우리는 프로그램을 테스트하고 가지고 노는 재미있는 부분으로 내려갑니다. 회로도에 표시된대로 연결하기 만하면됩니다. 작은 브레드 보드를 사용하여 연결하고 점퍼 와이어를 사용하여 브레드 보드를 MSP430에 연결했습니다. 연결이 완료되면 다음과 같이 보입니다.
그런 다음 아래 제공된 프로그램을 Energia IDE를 통해 MSP430 보드에 업로드합니다. 명확한 단어가 보일 때까지 전위차계를 사용하여 LCD의 대비를 조정하지 않으면 LCD에서 소개 텍스트를 볼 수 있어야합니다. 또한 재설정 버튼을 눌러보십시오. 예상대로 작동하면 다음 화면을 볼 수 있습니다.
이제 전위차계를 변경하면 LCD에 표시되는 전압도 변하는 것을 볼 수 있습니다. 이를 위해 전압을 올바르게 측정하고 있는지 확인하고 멀티 미터를 사용하여 POT 중심과 접지의 전압을 측정합니다. 멀티 미터에 표시되는 전압은 아래 그림과 같이 LCD에 표시되는 값과 가까워 야합니다.
즉, MSP430 보드의 ADC를 이용하여 아날로그 전압을 측정하는 방법을 배웠습니다. 이제 많은 아날로그 센서를 보드와 인터페이스하여 실시간 매개 변수를 읽을 수 있습니다. 튜토리얼을 이해하고 즐겁게 배우 셨기를 바랍니다. 문제가있는 경우 아래 댓글 섹션이나 포럼을 통해 문의하세요. 또 다른 새로운 주제로 MSP430의 또 다른 튜토리얼을 따라가 보겠습니다.