360 likes | 604 Views
DSP TMS320F2812. ROBOTICS LAB. http://cafe.naver.com/roboticslab. Contents. 1. TMS320F2812 ADC 특징. 2. TMS320F2812 ADC 구조. 3. TMS320F2812 ADC 관련 레지스터. TMS320F2812 ADC 구조. 281x ADC 의 특징 (1) 두 개의 S/H 가 탑재된 , 파이프라인 방식 (4 Stage) 의 12-bit ADC
E N D
DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab
Contents 1. TMS320F2812 ADC 특징 2. TMS320F2812 ADC 구조 3. TMS320F2812 ADC 관련 레지스터
TMS320F2812 ADC 구조 • 281x ADC의 특징(1) • 두 개의 S/H가 탑재된, 파이프라인 방식(4 Stage)의 12-bit ADC • Simultaneous sampling, Sequential sampling modes • 입력 허용 전압: 0V ~ 3V • 최대 12.5 MSPS • 샘플/홀드의 신호 획득 시간(S/H acquisition time window) 조절용 클럭 분주 회로 탑재 • 아날로그 먹스가 탑재된 16 채널 입력 • 16개의 결과 저장용 버퍼(ADCRESULT0~15) • 두 가지 인터럽트 모드 제공 • every end of sequence(EOS): 시퀀서 동작 매 완료 시 마다 • every other EOS: 시퀀서 동작 매 두 번째 완료 시 마다
TMS320F2812 ADC 구조 • 281x ADC의 특징(2) • 오토 시퀀서 탑재 • 최대 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
TMS320F2812 ADC 구조 • 파이프라인 방식 ADC의 특징 • 각 단(Stage)의 일괄(Concurrent)동작으로 고속 변환 가능 • 고주파 신호에 대한 광범위한 Dynamic Range 제공 가능 • 파이프라인이 꽉 차기 전의 데이터는 의미 없음 • 지연발생: 프로그래밍 시 주의 필요 • 각 스테이지의 ADC방식은 연속근사방식(Successive Approximation Register ADC)
TMS320F2812 ADC • ADC를 사용하기 위해서 • 몇 개 채널? • 어떤 순서? • 변환 시간? • 추가해서 • ADC를 어떻게 시작할 것인지? • 샘플링 주기는 어떻게? • ADC 상태는 어떠한지? • ADC 결과를 어떤 방식으로 읽을 것인지? • Dual Sample/Hold 회로를 어떻게 운영할 것인지? • ADC 결과 저장용 버퍼를 어떻게 운용할 것인지?
TMS320F2812 ADC • ADC의 MMR 변환 채널 수 및 변환 순서 설정 결과 저장용 버퍼
TMS320F2812 ADC • ADCMAXCONV • Cascaded mode • ADCMAXCONV[3..0]; MAXCONV1_X, X=0, 1, 2, 3 • ex) SEQ에서 15채널 변환한다면? • 답: ADCMAXCONV = 0X000E • Dual Sequencer mode • SEQ1 = ADCMAXCONV[2..0]; MAXCONV1_X, X=0, 1, 2 • SEQ2 = ADCMAXCONV[6..4]; MAXCONV2_X, X=0, 1, 2 • ex) SEQ1에 3채널 변환, SEQ2에서 6채널 변환한다면? • 답: ADCMAXCONV = 0X0052
TMS320F2812 ADC • ADCCHSELSEQ1~4 • 각각 4비트로 구분 채널 지정: CONVnn • 채널 변환 순서: • CONV00 > CONV01 > CONV02 > … > CONV15 ex) Cascaded 모드로 다음과 같이 순서로 채널을 변환하고자 한다. ADCINA7 → ADCINA6 → ADCINA0 → ADCINA1 → ADCINA0 → ADCINA2 → ADCINA0 → ADCINA1 → ADCINA0 → ADCINA2 ADCMAXCONV 레지스터와 ADCCHSELSEQx 레지스터 값을 설정하시오. • ADCMAXCONV = 0x0009 • ADCCHSELSEQ1 = 0x1067 • ADCCHSELSEQ2 = 0x9820 • ADCCHSELSEQ1 = 0xXXA8
TMS320F2812 ADC • 샘플링 주기: SOC(Start of Conversion)의 주기적 발생 • ADC의변환 시간과 상관없음. • 단, Continuous Run Mode 에서는 ADC 자체 변환 시간이 샘플링 주기 결정 • 예1) 10KHz로 샘플링 • Event Manager의 주기 이벤트를 이용해서 10KHz 주기로 SOC 발생 • 예2) ADCTRL1.6의 CONT_RUN 비트 설정 • ADC 변환 시간(시퀀서 한 세트): 샘플링 주기
TMS320F2812 ADC • 변환 시간(속도) • ADC 모듈이 S/H에 샘플링된 아날로그 신호를 디지털 신호(PCM 데이터)로 변환하는 시간 • ADC회로 구동 클럭이 변환 시간 결정 SYSCLKOUT HISCLK OSCCLK CLKIN High-Speed Peripheral clock Prescaler HISPCP[2:0] OSC 30MHz PLL PLLCR[3:0] 28x CPU SOC pulse Generator (ACQ_PS[3:0]) ADCRL[11:8] CPS (x1/2 when 1, x1 when 0) ADCTRL[7] 4-bit Clock Divider ADCTRL[4:1] 4bit divided clock S/H Clock pulse ADCCLK
TMS320F2812 ADC • 변환 속도 계산 • 변환 속도가 7.5MHz로 설정되었다 하더라도,SOC의 발생 주기가 10KHz 이면, 샘플링 주기(rate)는? 10KHz
TMS320F2812 ADC • ADC 구동 클럭을 높이면 • Aliasing이 줄어든다. • 채널간 오차(cross-talk)가 커진다. • 이 오차는 샘플링 윈도우를 키운다고 줄어드는 성질의 것이 아니다. • ADC 구동 클럭을 낮추면 • Aperture Error가 커진다. 주의 1: 구동 클럭과 샘플링 rate은 별개 • 1KHz로 샘플링을 하더라도, ADC 구동 클럭은 25MHz가 가능하다. 주의 2: 281x ADC의 최고 구동 클럭은 25MHz • 분주 부주의로 25MHz이상의 클럭이 공급되면, 결과는 엉망이다.
TMS320F2812 ADC • 시퀀서란? • 개발자와 ADC를 연결하는 매개체 • 채널 변환 순차 설정이 주된 동작 • 개발자가 시퀀서에 기동 신호를 전달하면, 시퀀서가 ADC회로를 적절히 기동 • 시퀀서 설정 완료 인터럽트 발생 가능 • 다채널 조작 용기 • 8채널 조작 시퀀서가 2개 • SEQ1: ADCINA0~7 → S/H-A • SEQ1: ADCINB0~7 → S/H-B • 16채널 조작 단일 시퀀서로도 운용 가능(Cascaded 모드)
TMS320F2812 ADC • 시퀀서의 잇점 • Multi-rate System 구현 용이 • 로봇과 같은 Multi Sensors System 구현 용이 • 고속 샘플링 지원 용이 • 12.5MHz 샘플링: 샘플링당 12개의 명령어 처리 • 블록 샘플링: • 최고 16회 혹은 16채널 변환을 1블록으로 • 시퀀서 완료 주기는 약 780KHz(12.5MHz/16) • 인터럽트 처리 가능 / 알고리즘 처리 여유 • 주변 회로 연계 구동 능력 • 초기 설정만으로 ADC 구동 가능 • 타이머 주기 이벤트를 이용한 ADC 기동 • 유연한 ADC 기동과 결과 처리 가능
TMS320F2812 ADC • 시퀀서: Cascaded(직렬) 모드
TMS320F2812 ADC • 시퀀서: Dual Sequencers(병렬) 모드
TMS320F2812 ADC • 281x ADC의 내부 레퍼런스 회로 이용법
TMS320F2812 ADC • DSP281x_Adc.c의 전원 관련 코드 #define ADC_usDELAY 8000L #define ADC_usDELAY2 20L //--------------------------------------------------------------------------- // 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 }
TMS320F2812 ADC • ADCTRL3 레지스터의 이해(1) • ADCTRL3.8: EXTREF • 0: 내부 레퍼런스 회로 사용 • Power 시퀀스 • ADCBGRFDN[1:0]: Bandgap & Reference Power Down(=0)
TMS320F2812 ADC • 파워 레벨에 따른 ADC 운영 팁 • 칩 리셋 후 상태 – ADC Power Down 모드 • ADC를 구동하기 위해서는, • reference와 bandgap회로에 전원을 먼저 인가(ADCBGRFDN[1:0] = 11) • 최소 7msec 이후에, ADC의 기타 회로에 전원인가(ADCPWDN = 1) • 최소 20us이후에, 첫 변환 시작 • Pipeline 방식의 ADC이기에 초기 몇 샘플은 버릴 것 • 참고: ADCTRL3의 POWER 모드 비트에 따른 파워 레벨
TMS320F2812 ADC • ADC 상태: ADCST • INT SEQx: SEQx 인터럽트 플래그 비트 • SEQx BSY: SEQx의 동작여부 표시 비트(1=in progress) • INT SEQx CLR: 인터럽트 플래그 클리어 비트 • 1을 쓰면 플래그가 클리어 • 언제나 0으로 읽힘 • EOS BUFx • 인터럽트 모드0에서는 미사용 비트 • 인터럽트 모드1에서는 매 EOS 마다 토글
TMS320F2812 ADC • 시퀀서 상태: ADCASEQSR • 읽기 전용 비트로 구성 • 오토 시퀀서의 상태 표시 • SEQ CNTR3~0 : • ADCMAXCONV 레지스터에 정의된 내용을 수행하기 위해서 • SOC 접수 후, MAX CONV 값이 로딩됨 • SEQx STATEx : TI 내부 테스트용
TMS320F2812 ADC • ADCTRL1 • Reset : ADC 모듈 reset • 1을 쓰면 리셋, reset후 이 bit를 읽으면 0(self cleared) • ADC 모듈 reset작업에는 3 사이클 소요 → ADC 관련 레지스터 조작은 reset 후 3사이클 뒤에 • reset 후 ADCTRL1에 값을 대입하기 위해서는 총 12사이클의 NOP등이 필요 • SUSMOD1-0 : 에뮬레이션을 중지했을 때, • 0 0 Mode 0 : 계속해서 동작. • 0 1 Mode 1 : 현재 진행중인 시퀀서 동작 완료 후 정지 • 1 0 Mode 2 : 현재 변환중인 채널을 완료한 후 중지 • 1 1 Mode 3 : 곧바로 중지
TMS320F2812 ADC • ADCTRL1 – 계속 • 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채널을 시퀀스 할 수 있다.
TMS320F2812 ADC • 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 상태로 초기화
TMS320F2812 ADC • 인터럽트 모드 - 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은 낭비 [EVA가 Underflow 일때, Period Matching 때 SOC 생성]
TMS320F2812 ADC • 인터럽트 모드 - 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) 제거 [EVA가 Underflow 일때, Period Matching 때 SOC 생성]
TMS320F2812 ADC • 12비트 결과 저장 MSB LSB • 입력 전압(V) 12비트 ADC Result 버퍼 저장 내용 • 3.0 0x0FFF 1111|1111|1111|0000 • 1.5 0x07FF 1111|1111|1111|0000 • 0.00073 0x0001 1111|1111|1111|0000 • 0 0x0000 1111|1111|1111|0000 • ADC의 분해능이 증가하면 결과 표현 비트 수가 증가 • 10비트 ADC에 비해 12비트 ADC는 하위 2비트가 증가 • 16비트 레지스터의 최상위 비트부터 채워나가는 것은 • Q number의 자리값 • Q math 이용 시, 자리 이동 필요 없음
TMS320F2812 ADC • 결과 저장 순서 [ Override Mode ] 결과 저장용 버퍼 저장 내용 [ Non-Override Mode ] ADCRESULT0 0 결과 저장용 버퍼 저장 내용 ADCRESULT0 1 ADCRESULT0 0 ADCRESULT0 2 ADCRESULT0 1 ADCRESULT0 3 ADCRESULT0 2 ADCRESULT0 0 ADCRESULT0 3 ADCRESULT0 1 ADCRESULT0 - ADCRESULT0 2 ADCRESULT0 - ADCRESULT0 3 ADCRESULT0 - ADCRESULT0 0 - - ADCRESULT0 1 - - ADCRESULT0 2 - - ADCRESULT0 3 ADCRESULT0 0 ADCRESULT0 1 ADCRESULT0 2 AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; 오버 샘플링시 유리 ADCRESULT0 3
TMS320F2812 ADC • Sequential Sampling Mode
TMS320F2812 ADC • Simultaneous Sampling Mode
Thank You ! www.themegallery.com