配置msp432e401y的ADC采樣達(dá)到2M
配置msp432e401y的ADC采樣達(dá)到2M
電賽期間收到了TI公司提供的msp432e401y開發(fā)板。手冊上標(biāo)明ADC采樣率可以達(dá)到2M,但在TIDriver里好像最大開到500k的采樣率。在網(wǎng)上找了半天,沒有找到相關(guān)代碼的帖子,索性自己研究手冊,配置出2M采樣率。
例程代碼
在msp432e4的sdk文件中里找到.\examples\nortos\MSP_EXP432E401Y\demos\cmsis_msp432e4_dsp_example工程文件。
例程使用driverlib庫,開啟ADC與DMA傳輸,使用定時器作為ADC的trigger,結(jié)合ARM的DSP庫,實現(xiàn)DMA乒乓模式采集ADC數(shù)據(jù)&FFT操作。
通過修改cmsis_msp432e4_dsp_example.c中的
//cmsis_msp432e4_dsp_example.c
#define NUM_SAMPLES 1024
#define SAMP_FREQ 100000
來修改采樣點數(shù)與采樣速率。直接修改此代碼的參數(shù),可使ADC最大速率達(dá)到1M,SAMP_FREQ大于此速率時ADC采樣率也為1M。
ADC采樣率提高到2M
ADC采樣率
在官方參考手冊《MSP432E4 SimpleLink? Microcontrollers Technical Reference Manual》中
P707:
指出了采樣速率與ADC時鐘、采樣保持時間的關(guān)系??梢钥吹?,在fADC=16MHz時,ADC最大采樣率fCONV=1Msps(NSH默認(rèn)為4),想要達(dá)到fCONV=2Msps,須使fADC=32MHz。
ADC時鐘
在官方參考手冊《MSP432E4 SimpleLink? Microcontrollers Technical Reference Manual》中
P205
給出了ADC的三個時鐘源(也可見P206-4.1.5.2.1.1)。
其中
- MOSC為主晶振,連接到外部晶振,MSP432E401Y開發(fā)板上面的外部高速晶振Y3頻率為25MHz。
- PIOSC為內(nèi)部精密時鐘,頻率為16MHz。此時鐘為默認(rèn)ADC時鐘。
- PLL VCO為鎖相環(huán)輸出頻率,可設(shè)置為480MHz或320MHz(見P209-4.1.5.5.1)。此時鐘滿足我們的要求。
修改代碼
在例程中,PLL被設(shè)置到了480MHz,我們需要將其15分頻給ADC,由此產(chǎn)生36MHz的ADC時鐘。但是嘗試之后仍還是1Msps采樣率。經(jīng)過試驗,發(fā)現(xiàn)由于某些原因,由PLL到ADC經(jīng)過分頻之后會再2分頻。我沒有在手冊中找到說明,可能需要再研究一下手冊。
知道此信息之后,我們需要給ADC提供一個64MHz的頻率,480MHz不方便通過整數(shù)分頻得到64MHz,但是可以通過320MHz的時鐘進(jìn)行5分頻得到。
我們參考P209
首先將fVCO=480MHz,fSYSCLK=120MHz
修改為fVCO=320MHz,fSYSCLK=80MHz
代碼修改如下↓:
//cmsis_msp432e4_dsp_example.c
/* Configure the system clock for 120 MHz */
//systemClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
// SYSCTL_OSC_MAIN |
// SYSCTL_USE_PLL |
// SYSCTL_CFG_VCO_480), 120000000);
/* Configure the system clock for 80 MHz */
systemClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_320), 80000000);
同時,配置ADC的時鐘,使用PLL時鐘,進(jìn)行5分頻
在例程語句↓:
//cmsis_msp432e4_dsp_example.c
/* Enable the clock to ADC-0 and wait for it to be ready */
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
while(!(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)))
{
}
之后加上語句↓:
//cmsis_msp432e4_dsp_example.c
ADCClockConfigSet(ADC0_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 5);
最后修改采樣觸發(fā)速率參數(shù)↓:
//cmsis_msp432e4_dsp_example.c
#define NUM_SAMPLES 1024
#define SAMP_FREQ 2000001
此處SAMP_FREQ為2000001而不是2000000,是因為測試發(fā)現(xiàn)2000000時采樣率只能達(dá)到1.8Msps,而2000001就正好為2Msps了(1999999為1.8Msps,1900000為1.85Msps左右),很奇怪。
此外,可以選擇fVCO=480MHz,再進(jìn)行7分頻得到約68.5MHz的ADC時鐘,再修改相關(guān)參數(shù)可以達(dá)到更大的采樣速率,而且不會降低主頻(上述代碼將主頻從120M降低到80M),測試了一下發(fā)現(xiàn)ADC在2.5Msps速率下也是可以運(yùn)行的,但是不知道長時間使用會對ADC造成什么影響。
結(jié)果
測試信號使用8kHz的方波:在CCS中設(shè)置斷點查看采集的數(shù)據(jù)
可以看到方波一個周期采集了250個點,采樣率為250*8k=2Msps。文章來源:http://www.zghlxwxcb.cn/news/detail-568430.html
END
上文為配置msp432e401y的ADC采樣達(dá)到2M的方法,目前對這個板子的了解還不深,文中有什么錯誤請指出。也有一些疑惑比如為什么PLL到ADC會再2分頻,SAMP_FREQ為2000000與2000001為什么會相差較大,有沒有大神可以指點一下。文章來源地址http://www.zghlxwxcb.cn/news/detail-568430.html
到了這里,關(guān)于配置msp432e401y的ADC采樣達(dá)到2M的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!