Project/Balancing 283352014. 8. 19. 14:18

#include "DSP2833x_device.h"

#include "DSP2833x_GlobalPrototypes.h"

#include "GlobalProtoypesLee.h"


void Init_ADC()

{


// 현재 ADC_CLK으로

InitAdc();


// ADC 설정

AdcRegs.ADCTRL3.bit.ADCCLKPS = 15;   // 재분주값 = HSPCLK  /(2*ADCCLKPS)

AdcRegs.ADCTRL1.bit.CPS = 1; // ADCCLK = ADCCLKPS / 2 (ADC의 구동 클럭을 결정 : ADCCLK = 1.25MHz)

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 시퀀스 직렬 모드

AdcRegs.ADCTRL1.bit.ACQ_PS = 7 ; // 샘플링 윈도우 size를 8 ADC_CLK 설정

AdcRegs.ADCMAXCONV.all = 0x0004;

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; // Murata [ Gyro ]

AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; // SA1 [ Tilt ] 4


AdcRegs.ADCTRL1.bit.CONT_RUN = 1;   // Cont. conv. mode

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // 시퀀스 시작


}


Part1

1. 현재 HSPCLK는 75MHz로 설정되어 있기에 분주된 값=2.5MHz로 설정되었다. : HSPCLK/(2*ADCCLKPS)

2. ADCCLK = Fclk/1 or 2로 CPS=1이므로 2분주이다.

3. SEQ_CASC = 1이면 시퀀스 직렬모드, 0이면 병렬모드이다.

4. SOC펄스의 길이는 ADCLK주기의 (ACQ_PS + 1)배이다. 즉, 여기서는 8배


Part2

5. MAXCONV.all = 0x0004로 인해, 최대 변환 채널수는 4개가 된다. 단, 직렬 시퀀서 모드는 두 시퀀서 1,2를 하나의 시퀀서처럼 사용하기 때문에 총 합쳐서 4개일 것이다.

6. ADCCHSELSEQ는 ADC변환의 순서와 관련된 것으로 위에서는 시퀀서1(1,2통합되있음)의 0번인 Gyro를 첫째로, 1번인 Tilt를 두번째 순서로 잡아줬다.

수정이 필요한 사항인것이, 현재 각각의 센서를 어느 핀에 연결했느냐에 따라 CONV0~15사이에서 선택해주어야 한다.

7.CONT_RUN = 1로 인해 Continus run mode로 설정하였다. 한번 변환이 끝나면 자동으로 다음 변환을 한다.

8.SOC_SEQ1에 1을 줌으로써 시퀀서 1에 변환시작신호를 전달하였다.

(굳이 줄 필요가 없다고 생각하는게, 이는 시퀀스에 대한 동작신호라기 보다는 변환강제신호로 볼 수 있다. 신호가 들어가면 0으로 클리어되고 끝나니 말이다.)



'Project > Balancing 28335' 카테고리의 다른 글

Init_Timer  (0) 2014.08.19
GpioInit  (0) 2014.08.18
Posted by 십자성군