DSP學習筆記----片內ADC

一. DSP5509A片內ADC簡介

DSP內部的ADC轉換速率比較低, 採樣頻率21.5kHz,所以只能採樣一些頻率較低的信號。DSP5509A內部集成10位連續逼近模式模/數轉換器.

//文檔: 5509 DSP Analog-to-Digital Converter (ADC) Reference Guide.pdf

 根據ADC的結構圖,可以看見,ADC由時鐘電路通道選擇電路採樣保持電路還有電子電容電路組成。

ADC 時鐘 = (CPU Clock) / (CPUCLKDIV + 1)
ADC 轉換時鐘 = (ADC Clock) / (2 * (CONVRATEDIV + 1))     [must be less than or equal to 2 MHz]
ADC 採樣保持時間 = (1 / (ADC Clock)) / (2  * (CONVRATEDIV + 1 + SAMPTIMEDIV))  [must be greater than or equal to 40 µs]
ADC 總轉換時間 = (ADC 採樣保持時間 ) + (13 * (ADC 轉換時鐘 ))

二. 相關寄存器

  • 控制寄存器(ADCCTL) 

 

15位是ADC轉換開始位:0,無效; 1,開始

14~12位是模擬通道選擇:000~011分別選擇AIN0~AIN3,100~111表示所有通道關閉。

  • 數據寄存器(ADCDATA)

 

 15位是ADC轉換標誌位:0,採樣數據已存在;1,正在轉換中

14~12位是ADC數據選擇通道:同上寄存器

11~10是保留未:0

9~0位:存放10位ADC轉換結果

  • 時鐘分頻寄存器(ADCCLKDIV)

 

 

15~8位:0~255,採樣和保持時間 分頻字段

7~4位:保留

3~0位:0000~1111轉換時鐘分頻字段

  • 時鐘控制寄存器(ADCCLKCTL)

 

15~9位保留

8位是ADC的Idle(低功耗)使能位:0,ADC不能進入Idle狀態;1,ADC進入Idle狀態,時鐘停止

7~0位是CPUCLKDIV:0~255,系統時鐘分頻字段

三. 使用例子

使用ADC需要進行兩步配置:設置ADC採樣時鐘讀數據

  • 設置ADC採樣時鐘

 ADC 時鐘 = (CPU Clock) / (CPUCLKDIV + 1)
ADC 轉換時鐘 = (ADC Clock) / (2 * (CONVRATEDIV + 1))     [must be less than or equal to 2 MHz]
ADC 採樣保持時間 = (1 / (ADC Clock)) / (2  * (CONVRATEDIV + 1 + SAMPTIMEDIV))  [must be greater than or equal to 40 µs]
ADC 總轉換時間 = (ADC 採樣保持時間 ) + (13 * (ADC 轉換時鐘 ))

  • 讀數據操作

使用CSL函數ADC_setFreq()ADC_read()

 ADC_setFreq(sysclkdiv,convratediv,sampletimediv);設置系統時鐘,轉換時鐘,採樣保持時鐘
 ADC_read(channel,samplestoraage,samplenumber);設置ADC轉換通道,轉存地址(可以用數組),轉換後數據長度

#include<csl.h>
#include<csl_adc.h>
#include<stdio.h>

Uint16 samplestoraage[2]={0,0};
int sysclkdiv=2,convratediv=0,sampletimediv=79;
int counter=0,index=0;
int channel=1,samplenumber=2;
main()
{
	printf("samplestoraage[0]:%d\n",samplestoraage[0]);
	printf("samplestoraage[1]:%d\n",samplestoraage[1]);
	CSL_init();
	ADC_setFreq(sysclkdiv,convratediv,sampletimediv);
	ADC_read(channel,samplestoraage,samplenumber);
	printf("ADCDATA:%d\n",ADCDATA);
	printf("samplestoraage[0]:%d\n",samplestoraage[0]);
	printf("samplestoraage[1]:%d\n",samplestoraage[1]);
	printf("\n====================\n");
}

====================
samplestoraage[0]:0
samplestoraage[1]:0
ADCDATA:4608
samplestoraage[0]:512
samplestoraage[1]:512

====================

PS:通道對應芯片的引腳,我的芯片只有AIN0,和AIN1. 爲什麼沒AIN2,AIN3?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章