2013-04-08 4 views
0

현재 atmel 마이크로 컨트롤러, EVK1104s, UC32 Data Sheet 집에서 일하고 있어요. 우리는 실제로이 칩을 사용자 정의 PCB에 심 었으며 더 많은 펌웨어를 작성하는 프로세스입니다.ADC 샘플 속도 설정. 문제가 데이터 시트를 읽는

현재 마이크로 컨트롤러 유닛 (MCU)의 ADC에 (8k 샘플/초)로 샘플을 보내야한다고 알려야합니다. 실제로는 마이크를 샘플링하기위한 것입니다. 어느 쪽이든, 설명서는 아주 명확하지 않으며 약간의 설명을 원했습니다.

샘플링 속도를 변경하려면 모드 레지스터라고하는 것을 변경해야한다는 것을 알고 있습니다. 레지스터를 사용하여 ADC를 구성하는 데 사용됩니다 (위 링크에서 799 페이지 참조). 이것은 샘플/홀드 시간/시작 시간과 ADCclock을 변경할 수있는 레지스터입니다.

EX(from pg 799): 
Sample & Hold Time = (SHTIM+3)/ADCClock 
ADCClock = CLK_ADC/((PRESCAL+1) * 2) 

내가 수집 한 것부터, ADCClock이 8Khz에서 작동하도록하려면 PRESCAL 만 변경하면됩니다. 문제는 PRESCAL이 8 비트의 해상도로 제한된다는 것입니다.

예를 들어 컨트롤러를 12Mhz/x = 8Khz로 설정하면 x는 1500이되어야합니다. x는 최대 8이기 때문에 x가 8 비트로 제한되기 때문에 불가능하기 때문에 최대 255입니다.

내가 뭔가 잘못하고 있거나 데이터 시트가 원하는 것을 이해하지 못한다고 생각합니다. 누구나 내가 방금 이야기 한 내용을 확인하거나 직접 지시 할 수 있습니까?

+4

http://electronics.stackexchange.com에 더 적합합니다. –

+0

8ksps이면 충분합니까? 연설에만 사용됩니까? –

+0

이것은 오프 주제가 아닙니다. 그는 마이크로 컨트롤러의 기능 사용에 대해 질문하고 있습니다. 전자 프로그래밍에 관한 질문이 아니라 프로그래밍 관련 질문입니다. – UncleO

답변

2

샘플링 속도와 ADC 속도가 혼란 스럽습니다.

매뉴얼에 언급 된 레지스터는 하나의 샘플을 가져 오는 것을 제어합니다. 레지스터를 사용하여 전압을 샘플링하는 기간을 제어 할 수 있습니다. 이것은 관련된 회로에 따라 당신에게 차이를 줄 수 있습니다. 즉, 회로에 샘플을 너무 빠르게 가져 가고 싶지 않습니다. (데이터 시트를 자세히 보지 않았지만 일부 마이크로 컨트롤러는 여러 샘플을 가져 와서 평균화합니다.이 동작은 레지스터에서도 제어됩니다.)

8 kHz 샘플링 속도는 샘플링 빈도를 나타냅니다. 즉, 개별 샘플을 트리거하려는 빈도입니다. 언급 한 레지스터는이 문제를 해결하지 못합니다. 레지스터에서 데이터를 어딘가에 저장 공간으로 옮기거나 무언가로 처리 한 다음 다음 샘플을 트리거하려면 클록 및 인터럽트 처리기를 사용해야합니다. 샘플이 준비되는 즉시 처리 할 수있는 인터럽트 처리기도 있습니다. 이 스킴에서 핸들러는 샘플을 트리거하는 핸들러를 사용합니다. 준비가되었을 때 샘플을 다루는 다른 사람.

편집 :

당신이 그런 느린 ADC 속도를 원하는 ADC는 데이터를 생성하는 방법을 고려하지 않는 이유를 더 설명하기 위해. 첫 번째 비트를 샘플링하고, 사이클을 기다리고, 두 번째 비트의 샘플을 10 사이클 반복합니다. 결과의 정확도는 모든 샘플에 대해 안정된 신호에 따라 달라집니다. 신호가 변경되면이 숫자의 비트는 의미가 없습니다. 신호가 변하지는 않지만 신호가 충분히 안정 될 수 있도록 프리 스케일 및 ADC 클럭을 충분히 빠르게 설정해야합니다.

그렇습니다. 클럭 및 인터럽트 처리기를 사용하여 데이터를 읽고 다음 읽기를 트리거하려고합니다. ADC는 프로세서와 독립적으로 실행되며 인터럽트가 다시 실행될 때까지 준비됩니다. (첫 번째 판독 값은 쓰레기가 될 수 있지만 플래그 또는 무언가를 설정할 수 있습니다.)

volatile int running = false 

Handler() 
    if(running) do something with data 
    running = true 
    trigger ADC 
    output compare += 1/8000 s 
+0

좋아요, 샘플 및 홀드 시간에 대한 의미를 이해합니다. 내 다른 질문은 지금 내가 PRESCALE 레지스터 값을 ADCClock을 필요한 8KHz로 설정하기 위해 CPU를 12MHz로 실행한다고 가정하면 어떻게 변경해야합니까? 8 비트 숫자로 인해 ADCClock을 8KHz로 가져올 수 있는지 확실하지 않습니다. 내가 무슨 뜻인지 안 보여? – Recurrsion

+0

@Recurrsion 내가 말한 것은 분명히 ADC 클록이 8kHz가되는 것을 원하지 않는다는 것이다. 그것은 샘플을 트리거하려는 비율입니다. 가능한 한 빨리 ADC 클럭을 실행하고 안정적인 샘플을 얻고 자합니다. 신호가 바뀌고 있습니다. 이상적으로는 순간 값을 원하지만 ADC는 그렇게 할 수 없으므로 가능한 한 가까이 가십시오. 변화가없는 신호 (당신이 가진 것이 아닌)의 경우 ADC 시계의 속도가 느릴수록 정확도는 좋아 지지만, 이는 귀하의 경우에는 적용되지 않습니다. (만약 8kHz까지 약간의 필터링을하고 싶다면, 많은 샘플을 취하여 각 간격에 걸쳐 평균을 구하십시오.) – UncleO

+0

좋아, 응답 해 주셔서 감사합니다. 내가 올바르게 모으는 경우, ADC에 1/8000 초마다 인터럽트를 설정하여 값을 메모리에 기록해야합니다. – Recurrsion