Microprocessor/DSP (TMS320F28x) DSP TMS320F281x ADC 분석
  • 728x90
    반응형

     

     

     

    목차

       

      TMS320F281x ADC 특징

       

      • 두개의 Sample/Hold (S/H) 탑제된 파이프란인 방식(4 Stage)의 12bit ADC

       

      • Simultaneous sampling, Sequential sampling modes 두가지 샘플링 모드 지원
      • 입력 허용 전압: 0V ~ 3V
      • 샘플/홀드의 신호 획득 시간(S/H acquisition time window) 조절용 클럭 분주 회로 탑재
      • 아날로그 먹스가 탑재된 16채널 입력
      • 16개의 결과 저장용 버퍼 (ADCRESULT0 ~ 15)
      • 두가지 인터럽트 모드 제공
        • every end of sequence(EOS) : 신퀀스 동작 매 완료시 마다
        • every other EOS : 시퀀스 동작 매 두 번째 완료 시 마다

       

      • 오토 시퀀스 탑재
        • 최대 16채널 순서 임의 조정 (cascaded mode : 직렬모드)
        • Event Manager A, B와 각각 연계 가능 (dual sequencer mode)
        • 연속 동작 모드
        • 단일 동작 (Start/Stop) 모드

       

      • Sequencer override mode enhancement
        • ADCRESULT 버퍼를 16레벨 FIFO로 사용

       

      • 다양한 트리거 모드 지원 : Start of Conversion (SOC)
        • S/W : software immediate start
        • EVA : Event manager A (multiple event sources within EVA)
        • EVB : Event manager B (multiple event sources within EVB)
        • External pin

       

      파이프라인 방식 ADC의 특징

      • 각 스테이지의 일괄 (Concurrent) 동작으로 고속 변환 가능
      • 고주파 신호에 대한 광범위한 Dynamic Range 제공 가능
      • 파이프라인이 꽉 차기 전의 데이터는 의미 없음
      • 지연 발생
      • 각 스테이지의 ADC 방식은 연속근사방식 (Successive Approximation Register ADC)

       

      ADC 블록 다이어그램

       

      F2810/F2811/F2812

       

      ADC Register 분석

       

      ADCMAXCONV

       

      • Cascaded mode (SEQ1 에서 직렬모드로 사용)

      예) SEQ1에서 15채널을 변환한다면 ?

      답 = ADCMAXCONV = 0x000E (14), 1을 더한 값 15채널로 설정 된다.

       

      • Dual Sequencer moder

      예) SEQ1에 3채널 변환, SEQ2에서 6채널 변환한다면 ?

      답 = ADCMAXCONV = 0x0052, 하위 비트(CONV1_x)에 2 설정 1을 더한 값 3채널로 설정 상위 비트(CONV2_x)에 5 설정 1을 더한 값 6채널로 설정 된다.

       

       

      ADCCHSELSEQ1~4

       

      • 각각 4비트로 구분 채널 지정 : CONVnn
      • 채널 변환 순서
        • CONV00 > CONV01 > CONV02 > ... CONV15

       

      예) Cascaded 모드로 다음과 같이 순서로 채널을 변환하고자 한다.

      ADCINA7 > ADCINA6 > ADCINA0 > ADCINA1 > ADCINA0 > ADCINA2 > ADCINA0 > ADCINA1 > ADCINA0 > ADCINA2

       

      답)

      ADCMAXCONV = 0x0009 (10채널)

      ADCCHSELSEQ1 = 0x1067 (7, 6, 0, 1)

      ADCCHSELSEQ2 = 0x9820 (0, 2, 8=0, 9=1)

      ADCCHSELSEQ3 = 0x00A8 (8=0, 10=2)

       

       

      ADCTRL3

      • ADCTRL3.8 : EXTREF
        • 0 : 내부 레퍼런스 회로 사용

       

      • Power 시퀀스
        • ADCBGRFDN[1:0] : Bandgap & Reference Power Down (=0)

       

      파워 레벨에 따른 ADC 운용

      • 칩 리셋 후 상태 - ADC Power Down 모드
      • ADC를 구동하기 
        • reference와 bandgap 회로에 전원을 먼저 인가 (ADCBGRFDN[1:0] = 11)
        • 최소 7msec 이후에, ADC의 기타 회로에 전원인가 (ADCPWDN = 1)
        • 최소 20us 이후에, 첫 변환 시작
        • Pipeline 방식의 ADC이기에 초기 몇 샘플은 버릴 것

       

      • 참고: ADCTRL3의 POWER모드 비트에 따른 파워 레벨

       

       

      ADCST (ADC 상태)

      • INT SEQx : SEQx 인터럽트 플래그 비트
      • SEQx BSY : SEQx의 동작여부 표시 비트 (1 = in progress)
      • INT SEQx CLR : 인터럽트 플래그 클리어 비트
        • 1을 쓰면 플래그 클리어
        • 언제나 0으로 읽힘

       

      • EOS BUFx
        • 인터럽트 모드 0에서는 미사용 비트
        • 인터럽트 모드1에서는 매 EOS 마다 토글

       

      ADCASEQSR (시퀀스 상태)

       

      • 읽기 전용 비트로 구성
      • 오토 시퀀스의 상태 표시
      • SEQ CNTR3~0 
        • ADCMAXCONV 레지스터에 정의된 내용을 수행하기 위해 SOC 접수 후, MAX CONV 값이 로딩됨

       

      • SEQx STATEx : TI 내부 테스트용

       

      ADCTRL1

       

      • Reset : ADC 모듈 reset
        • 1을 쓰면 리셋, reset 후 이 비트를 읽으면 0 (self cleared)
        • ADC 모듈 reset 작업에는 3 사이클 소요 (ADC 관련 레지스터 조작은 reset후 3사이클 뒤에)
        • reset 후 ADCTRL1에 값을 대입하기 위해서는 총 12사이클의 NOP등이 필요

       

      • SUMMOD1-0 : 에뮬레이션을 중지했을 때
        • 0 0 Mode 0 : 계속해서 동작
        • 0 1 Mode 1 : 현재 진행중인 시퀀스 동작 완료 후 정지
        • 1 0 Mode 2 : 현재 변환중인 채널을 완료한 후 중지
        • 1 1 Mode 3 : 즉시 중지

       

      • ACQ PS3 : 샘플/홀드 시간 설정
        • 설정 값 = 비트 + 1

       

      • CPS : ADC 구동 클럭 분주기
        • 0 : ADCCLK = HSPCLK/1
        • 1 : ADCCLK = HSPCLK/2

       

      • CONT RUN : ADC 의 연속/단일 변환 설정
        • 0 : 단일변환 (시퀀스 종료 후에 시퀀스는 정지한다.)
        • 1 : 연속변환 (시퀀스 종료 후에 다시 시퀀스를 시작한다.)

       

      • SEQ OVRD
        • 0 : Sequencer override 모드 비사용
        • 1 : Sequencer override 모드 사용

       

      • SEQ CASC
        • 0: Dual sequencer 모드
          • SEQ1과 SEQ2를 병렬로 사용하여 1개의 ADC를 2개처럼 사용할 수 있다.
          • 단, 각각의 시퀀스는 8채널씩 시퀀스 할 수 있다.
        • 1 : Cascaded 모드
          • SEQ1과 SEQ2를 직렬로 사용하여 하나의 시퀀스로 사용할 수 있음
          • 두 시퀀스를 합쳐 16채널을 시퀀스 할 수 있다.

       

      ADCTRL2

       

      • SOC : 시작하기, Start of Conversion
        • Evx SOC : Event Manager로 부터 SOC
        • SOC SEQx : 이 비트에 1을 쓰면 SEQ가 동작
        • EXT SOC SEQ1 : ADCSOC 핀 입력으로

       

      • EOS : 읽기, End of Conversion
        • INT ENA SEQx : ADC 결과를 인터럽트 방식으로 읽음
        • INT MOD SEQx : 매 EOS 마다 읽을 것인지, 매 두번째 EOS마다 읽을 것인지 결정

       

      • RST SEQx : 시퀀스를 리셋, CONV00과 CONV08 상태로 초기화

       

      인터럽트 모드

      모드 - 1

      • 인터럽트 모드 1설정
      • MAX CONV = 1로 시작
        • I1과 I2 변환

       

      • 인터럽트 서비스 루틴 'a' 에서 
        • I1, I2 저장
        • MAX CONV = 2로 변경

       

      • 인터럽트 서비스 루틴 'b'에서
        • V1, V2, V3 저장
        • MAX CONV = 1로 변경

       

      • 인터럽트 서비스 루틴 'c, d' 반복
      • if, 인터럽트 서비스 루틴 'b'에서 I1, I2, V1, V2, V3 값을 모두 처리한다면, 인터럽트 모드 1은 낭비됨

       

       

      모드 - 2

      • 인터럽트 모드 2 설정
      • MAX CONV = 2로 시작
        • I1과 I2 변환

       

      • EVA가 Underflow일 때
        • I1, I2, x(dummy 채널) 변환
        • MAX CONV = 2로 변경

       

      • EVA가 Period Matching일 때
        • V1, V2, V3 변환

       

      • 인터럽트 서비스 루틴 'b'에서 
        • I1, I2, V1, V2, V3 저장

       

      • 다음번 인터럽트 처리 'd'
      • dummy 채널 추가로 인터럽트 절제
        • 인터럽트 지연 (10Cycle) 제거

       

      ADCRESULTn (12비트 결과 저장)

      • ADC 분해능이 증가하면 결과 표현 비트 수가 증가
        • 10비트 ADC에 비해 12비트 ADC는 하위 2비트가 증가

       

      • 16비트 레지스터의 최상위 비트부터 채워 나감
        • Q number의 자리값
        • Q math 이용 시, 자리 이동 필요 없음

       

       

      샘플링

      • 샘플링 주기 : SOC (Start of Conversion)의 주기적 발생
      • ADC의 변환 시간과 관계 없음
        • 단, Continuous Run Mode 에서는 ADC 자체 변환 시간이 샘플링 주기 결정

       

      예1) 10KHz로 샘플링

      답 = Event Manager의 주기 이벤트를 이용해서 10KHz 주기로 SOC 발생

       

      예2) ADCTRL1.6의 CONT_RUN 비트 설정

      답 = ADC 변환 시간(시퀀스 한 세트) : 샘플링 주기

       

       

      변환 시간(속도)

       

      • ADC 모듈이 S/H에 샘플링된 아날로그 신호를 디지털 신호(PCM 데이터)로 변환하는 시간
      • ADC 회로 구동 클럭이 변환 시간 결정

       

      변환 속도 계산

       

      • 변환 속도가 7.5MHz로 설정되었다 하더라도, SOC의 발생 주기가 10KHz이면 샘플링 주기(rate)는 10KHz 이다.

       

      ADC 구동 클럭을 높이면

      • Aliasing이 줄어든다.
      • 채널간 오차(cross-talk)가 커진다.
        • 이 오차는 샘플링 윈도우를 키운다고 줄어드는 성질의 것이 아니다.

       

      ADC 구동 클럭을 낮추면

      • Aperture Error가 커진다.


      주의 1: 구동 클럭과 샘플링 rate은 별개
      - 1KHz로 샘플링을 하더라도, ADC 구동 클럭은 25MHz가 가능하다.

      주의 2: 281x ADC의 최고 구동 클럭은 25MHz
      - 분주 부주의로 25MHz이상의 클러이 공급되면, 결과가 맞지않다.

       

       

      시퀀스

       

      • 채널 변환 순차 설정이 주된 동작
      • 개발자가 시퀀스에 기동 신호를 전달하면, 시퀀스가 ADC 회로를 기동
      • 시퀀스 설정 완료 인터럽트 발생 가능
      • 다채널 조작 용이

       

      8채널 조작 시퀀스 2개 탑재

      • SEQ1: ADCINA0~7 > S/H-A
      • SEQ2: ADCINB0~7 > S/H-B
      • 16채널 조작 단일 시퀀스로 운용 가능(Cascaded 모드)

       

      시퀀스의 장점

      • Multi-rate System 구현 용이
      • 고속 샘플링 지원 용이
        • 12.5MHz 샘플링 : 샘플링당 12개의 명령어 처리
        • 블록 샘플링 : 
          • 최고 16회 혹은 16채널 변환을 1블록으로
          • 시퀀서 완료 주기는 약 780KHz(12.5MHz/16)
          • 인터럽트 처리 가능

       

      • 주변 회로 연계 구동 능력
        • 초기 설정만으로 ADC 구동 가능
          • 타이머 주기 이벤트를 이용한 ADC 기동
        • 유연한 ADC 기동과 결과 처리 가능

       

      시퀀스 : Cascaded(직렬) 모드

       

      시퀀스 : Dual Sequencers(병렬) 모드

       

      DSP281x_Adc.c 의 전원 관련 코드

      //---------------------------------------------------------------------------
      // InitAdc: 
      //---------------------------------------------------------------------------
      // This function initializes ADC to a known state.
      //
      void InitAdc(void)
      {
      	extern void DSP28x_usDelay(Uint32 Count);
      	
          // To powerup the ADC the ADCENCLK bit should be set first to enable
          // clocks, followed by powering up the bandgap and reference circuitry.
          // After a 5ms delay the rest of the ADC can be powered up. After ADC
          // powerup, another 20us delay is required before performing the first
          // ADC conversion. Please note that for the delay function below to
          // operate correctly the CPU_CLOCK_SPEED define statement in the
          // DSP28_Examples.h file must contain the correct CPU clock period in
          // nanoseconds. For example:
      
      	AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;	// Power up bandgap/reference circuitry
      	DELAY_US(ADC_usDELAY);                  // Delay before powering up rest of ADC
      	AdcRegs.ADCTRL3.bit.ADCPWDN = 1;		// Power up rest of ADC
      	DELAY_US(ADC_usDELAY2);                 // Delay after powering up ADC
      }

       

       

       

       

       

       

      728x90
      반응형
    상단으로