2013-04-08 56 views
0

我目前正在工作的atmel微控制器,EVK1104s,其中UC32 Data Sheet房子。我們實際上已經在定製的PCB上植入了這塊芯片,並且正在寫更多的固件。設置ADC採樣率。故障閱讀datasheet

目前,我需要告訴微控制器單元(MCU)上的ADC以8k採樣/秒進行採樣。實際上這是爲了採樣麥克風。無論哪種方式,文件是不清楚的,我正在尋找一些澄清。

我知道要改變採樣率,我需要改變所謂的模式寄存器,即用來配置ADC使用的寄存器(上面鏈接中的第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位,正如我之前所說的那樣,這看起來是不可能的,因爲最大值爲255。

我覺得我在這裏做錯了什麼,或者不瞭解數據表要的是什麼。任何人都可以證實我剛纔談到的或幫助指導我?

+4

更適合http://electronics.stackexchange.com。 – 2013-04-08 16:47:54

+0

8k sps就夠了嗎?這隻適用於演講嗎? – 2013-04-08 16:51:48

+0

這不是題外話題。他問的是使用微控制器的功能。這是一個編程問題,而不是電子問題。 – UncleO 2013-04-08 21:00:28

回答

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寄存器的值更改爲,假設CPU運行在12MHz,將ADCClock設置爲必要的8KHz。我不確定8位數字是如何讓ADCClock達到8KHz的。你明白我的意思嗎? – Recurrsion 2013-04-08 20:20:37

+0

@Recurrsion我說的是,你絕對不希望ADC時鐘爲8kHz。這是您想要觸發樣本的速率。您希望儘可能快地運行ADC時鐘,並仍能獲得可靠的採樣。信號在變化。理想情況下,您需要一個瞬時值,但ADC無法做到這一點,所以儘可能靠近。對於一個不變的信號(不是你所擁有的),較慢的ADC時鐘會給出更好的精度,但這不適用於你的情況。 (如果你真的想做一些濾波到8kHz,然後採取很多樣本,並在每個時間間隔取平均值。) – UncleO 2013-04-08 20:33:32

+0

好吧,我明白你的意思了,謝謝你的迴應。如果我正確收集,我將不得不在adc上每隔1/8000秒設置一次中斷,將其值寫入某個內存中? – Recurrsion 2013-04-08 20:40:32