태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

1. 실습 목적

TMS320F28377D의 다음 그림과 같은 ADC는 기존 28x 프로세서에는 없었던 PPB(Post-Processing Block)라는 후-처리 블록을 가지고 있습니다. PPB는 별도의 연산 부하 없이 ADC 결과를 여러가지로 가공해주는 아주 유용한 기능입니다.

 

 

 


(클릭하시면 그림을 더 자세하게 보실 수 있습니다)

 

이번 예제는 이러한 PPB가 가지고 있는 여러가지 기능 중에서 MAX/MIN Detection과 Zero Crossing Detection 기능을 사용해보는 예제입니다. 해당 기능은 앞서 배워던 Error Calculation 기능을 통해서 자동 계산됐던 오차(Error)값이 미리 설정한 최대값(ADCPPBxTRIPHI)보다 커질 때, 미리 설정한 최소값(ADCPPBxTRIPLO)보다 작아질 때 그리고 오차값이 작아지는 과정이나 커지는 과정에서 0값을 지나갈 때를 감지해주는 기능입니다. 이 과정에서도 앞서 배운 후처리 기능들과 마찬가지로 CPU에 대한 연산부하(Overhead)가 전혀 없습니다.

 

 

실제 예제에서는 앞서 예제와 마찬가지로  Delfino EVM의 Potentiometer의 동일한 DC 출력 신호를 2개의 SOC를 사용해서 순차적으로 2회 ADC하고, 첫번째 SOC는 PPB - Offset Correction 사용하지 않고, 두번째 SOC는 PPB - Offset Correction 사용하여 두 SOC의 ADC 결과를 확인하고, Potentiometer를 조절하여 ADC에 입력되는 전압이 미리 설정한 최대값/최소값을 벗어날때 인터럽트가 발생하는 것을 확인해 보는 예제입니다.

 

 

 

 

2. 실습 준비

예제를 실습하기 위해서 아래와 같은 개발환경이 필요합니다.

 

 


A. 실습 장비
1) CCSv6 가 설치된 PC
2) Defino 개발보드 + TMS320F28377D-377 모듈 + 전용 어댑터
3) 미니 5P USB 케이블

4) JTAG 에뮬레이터

 

B. 실습 예제
1) TI의 ControlSUITE가 PC에 설치되어 있어야 합니다.
    >> ControlSUITE (다운로드하러 가기) ← Click


2) 실습예제를 PC에설치합니다..
    >> F28377D_ADC06_CCSv6.zip (다운로드)← Click

 


3) 예제 설치경로
    >> CCSv6용 : C:\SyncWorks\DELFINO_EVM_28377D\Example_V600_Cpu1

 

 

3. 실습해 보기

Delfino EVM의 Potentiometer P2200 노브를 좌우로 조절하면, 각각 ADCINB0 채널에 0.0V ~ 3.0V 사이의 가변 DC 전압 신호를 입력할 수 있습니다. 여기서 ADCINB0 채널만을 순차적으로 2회 ADC 합니다.

 

 

 

예제를 실행시키지 전에 P2200 Potentiometer를 시계 반대방향으로 최대한 돌려놓아 최대 전압이 ADC에 입력되게 합니다.

 

이제 CCS에서 예제를 실행하고, Expressions 창을  통해서 ADC_value01, ADC_value01_OffCorr, ADC_value01_error, PPB1ZERO_cnt,  PPB1TRIPHI_cnt, PPB1TRIPLO_cnt변수를 Continuous refresh 기능을 켜고 관찰합니다.

 

 

 

 

처음에는 위그림과 같이 PPB1TRIPHI_cnt 값만 계속 변하는 것을 볼 수 있습니다.(그림상에서 노란색으로 표시된 값들은 실시간으로 계속 값이 바뀌는 상태임) 이 상태에서 P2200 Potentiometer를 시계 방향으로 천천히 돌려서 ADC_value01_error 값이 1000에서 2000 사이의 값이 나오게 만들어 봅니다.

 

 

 

 

그러면 위 그림과 같이 PPB1ZERO_cnt,  PPB1TRIPHI_cnt, PPB1TRIPLO_cnt 변수들이 아무런 변화가 없음을 알 수 있습니다. 다시 이상태에서  P2200 Potentiometer를 계속 시계 방향으로 천천히 돌려서 ADC_value01_error 값이 1000 이하의 값이 나오게 만들어 봅니다.

 

 

 

 

그러면 이번엔 위 그림과 같이 PPB1TRIPLO_cnt 값만이 계속 변하는 것을 볼 수 있습니다. 다시 이상태에서  P2200 Potentiometer를 계속 시계 방향으로 천천히 돌려서 ADC_value01_error 값이 0  값 근처가 나오게 만들어 봅니다.

 

 

 

 

그러면 이번엔 위 그림과 같이 PPB1ZERO_cnt,  PPB1TRIPHI_cnt, PPB1TRIPLO_cnt 값이 모두 계속 변하는 것을 볼 수 있습니다. 왜 그럴까요? 이 부분은 스스로 원인을 찾아보시기 바랍니다. 그리고 다시 이상태에서  P2200 Potentiometer를 계속 시계 방향으로 천천히 돌려서 ADC_value01_error 값이  마이너스 값이 나오게 만들어 봅니다.

 

 

 

 

그러면 이번엔 위 그림과 같이 PPB1TRIPHI_cnt 값만이 계속 변하는 것을 볼 수 있습니다. 이건 또 왜 그럴까요? 이문제도 앞서의 0값 근처에서 모든 값이 계속 변하는 것과 같은 원인을 가지고 있습니다. 스스로 찾아보시기 바랍니다.

 

 

 

 

4. 퀴즈!!

소스코드상에서 다음과 같이 코드를 변경하고, 다시 한번 위와 같이 실습을 진행해 보고 어떠한 현상이 발생하는지 확인해보세요.

 

변경전

115 line :  AdcbRegs.ADCPPB1TRIPHI.bit.LIMITHI = 2000;

116 line :  AdcbRegs.ADCPPB1TRIPHI.bit.LIMITLO= 1000;

 

변경후

115 line :  AdcbRegs.ADCPPB1TRIPHI.bit.LIMITHI = 1000;

116 line :  AdcbRegs.ADCPPB1TRIPHI.bit.LIMITLO= -1000;

 

 

 

 

Posted by syncworks

댓글을 달아 주세요

  1. Favicon of http://onebestturn.tistory.com BlogIcon ::리뷰::

    정보 감사합니다. ^^

티스토리 툴바