DSP

DSP学习笔记----片内ADC

2019-07-13 10:07发布

一. 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 #include #include 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 ",samplestoraage[0]); printf("samplestoraage[1]:%d ",samplestoraage[1]); CSL_init(); ADC_setFreq(sysclkdiv,convratediv,sampletimediv); ADC_read(channel,samplestoraage,samplenumber); printf("ADCDATA:%d ",ADCDATA); printf("samplestoraage[0]:%d ",samplestoraage[0]); printf("samplestoraage[1]:%d ",samplestoraage[1]); printf(" ==================== "); } ====================
samplestoraage[0]:0
samplestoraage[1]:0
ADCDATA:4608
samplestoraage[0]:512
samplestoraage[1]:512 ==================== PS:通道对应芯片的引脚,我的芯片只有AIN0,和AIN1. 为什么没AIN2,AIN3?