2013-04-08 2 views
0

В настоящее время я работаю на микроконтроллере atmel, EVK1104s, в котором размещается UC32 Data Sheet. Мы на самом деле установили этот чип на пользовательскую печатную плату и в процессе написания более прошивки.Настройка частоты дискретизации АЦП. неисправность чтения данных

В настоящее время мне нужно сообщить АЦП на микроконтроллере (MCU) для отбора проб (8k образцов в секунду). На самом деле это выборка микрофона. В любом случае документация неясна, и я искал некоторые разъяснения.

Я знаю, что для изменения частоты дискретизации мне нужно изменить то, что называется Регистром режимов, регистром, используемым для настройки АЦП для использования (стр. 799 в ссылке выше). Это регистр, который позволяет мне изменить время выборки/времени удержания/время запуска и ADCclock.

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

Из того, что я понимаю, я нужно будет только изменить PRESCAL сделать ADCClock работать на 8KHZ. Проблема в том, что PRESCAL ограничивается 8 бит разрешения.

Например, если контроллер установлен в 12Mhz/x = 8Khz, тогда x должен быть равен 1500. Поскольку x ограничено 8 битами, как я сказал ранее, это будет невозможно, так как max 255.

Я чувствую, что здесь что-то не так, или не понимаю, что мне хочет. Может ли кто-нибудь подтвердить то, о чем я только что говорил, или помочь мне направить?

+4

лучше подходит для http://electronics.stackexchange.com. –

+0

8k sps достаточно? Это только для речи? –

+0

Это не вне темы. Он просит об использовании функции микроконтроллера. Это вопрос программирования, а не вопрос об электронике. – UncleO

ответ

2

Вы сбиты с толку относительно частоты дискретизации и скорости АЦП.

Регистры, на которые вы ссылаетесь в руководстве, управляют только взятием одного образца. Регистры позволяют вам контролировать, сколько времени требуется для измерения напряжения. Это может повлиять на вас в зависимости от схемы. То есть, вы не хотите, чтобы образец был слишком быстрым для вашей схемы. (Я не смотрел внимательно на данные, но некоторые микроконтроллеры берут несколько выборок и усредняют их. Это поведение также контролируется регистрами.)

Но частота дискретизации 8 кГц относится к частоте выборки. То есть, это частота, с которой вы хотите запускать отдельные образцы. Вы не упомянули реестры. Вам нужно использовать часы и обработчик прерываний, чтобы переместить данные из регистра в хранилище где-нибудь или что-то сделать с ним, а затем запустить следующий образец. Существует также обработчик прерываний, который может обрабатывать образец, как только он будет готов. В этой схеме вы используете обработчики: один для запуска образцов; другой - иметь дело с образцами, когда они будут готовы.

Edit:

Чтобы объяснить более, почему вы не хотите такой медленный темп АЦП, рассмотрим, как АЦП генерирует данные. Он отображает первый бит, ждет цикл, образцы для второго бита и т. Д. В течение 10 циклов. Точность результата зависит от того, что сигнал остается стабильным по всем этим образцам. Если сигнал меняется, то бит этого числа не имеет смысла. Вам необходимо установить прескаляр и частоту АЦП достаточно быстро, чтобы сигнал не изменялся, но достаточно медленный, чтобы сигнал опустился.

Так что да, вы хотите использовать обработчик часов и прерываний для чтения данных, а затем запустить следующее чтение. АЦП работает независимо от процессора и будет готов к моменту прерывания прерывания. (Первое чтение будет мусор, но вы можете установить флаг или что-то для защиты от этого.)

volatile int running = false 

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

Хорошо, я понимаю, что вы имеете в виду о времени выборки и удержания. Мой другой вопрос прямо сейчас заключается в том, что мне нужно будет изменить значение регистра PRESCALE, чтобы установить ADCClock на необходимую 8 кГц при условии, что процессор работает на частоте 12 МГц. Я не уверен, как 8-битное число позволит мне получить ADCClock до 8 кГц. Вы видите, что я имею в виду? – Recurrsion

+0

@Recurrsion Я говорю, что вы определенно не хотите, чтобы часы ADC составляли 8 кГц. Это скорость, с которой вы хотите запускать образцы. Вы хотите как можно быстрее запускать часы АЦП и получать надежные образцы. Сигнал меняется. В идеале вы хотите мгновенное значение, но ADC не может этого сделать, так что вы можете как можно ближе. Для неизменяющегося сигнала (не то, что у вас есть) более медленные часы АЦП будут давать лучшую точность, но это не применимо в вашем случае. (Если вы действительно хотите сделать некоторую фильтрацию до 8 кГц, тогда возьмите много образцов и усредните их по каждому интервалу.) – UncleO

+0

Хорошо, я понимаю, что вы имеете в виду, спасибо за ответ. Если я правильно собираюсь, мне придется установить прерывание каждые 1/8000 секунд на adc, чтобы записать его значение в некоторую память? – Recurrsion

Смежные вопросы