您的位置:首页 > 其它

TMS320C5509A自带ADC配置参数计算

2016-04-05 21:07 253 查看
TMS320C5509A自带ADC使用起来比较方便,但是确定参数比较麻烦。作者尝试使用程序计算出来,方便DSP自带ADC的使用。设计的程序可 直接计算出TMS320C5509A自带ADC配置参数,以十六进制形式输出结果,方便可用。

[另外作者发现,TI的TMS320VC5509 DSP

Analog-to-Digital Converter (ADC)Reference Guide(2003年10月版,spru586a)中11页关于ADC Sample and Hold Period值的公式有错误之处。]

开发平台:VC++6.0、Visual Studio2010(均亲测可用)。

void calcu_ADCConfig(double fcpu,double fs)
{
/*
参数说明:
fcpu,CPU时钟频率(MHz);fs,要求的采样速率(Hz)。

*/
double Ts=0,fadc=0,fconv=0,Tconv=0,Th=0;
double samptimediv=0.0;
int cpuclkdiv,convratediv;
int i,count=0;

fcpu=fcpu*1000000;   // Hz
Ts=1/fs;          // 采样周期

for(cpuclkdiv=0;cpuclkdiv<256;cpuclkdiv++)
{
fadc=fcpu/(cpuclkdiv+1);         //计算ADC时钟频率
for(convratediv = 0; convratediv<16; convratediv++)
{
fconv=fadc/(2*(convratediv+1));   // ADC转换时钟频率
Tconv=1/fconv;                // ADC转换时钟周期
if(fconv<=2000000)            //ADC转换时钟频率不大于 2 MHz
{
Th=Ts-13*Tconv;   // 由采样速率计算采样保持时间
if(Th>=0.00004 && Th<=0.0004)    // 不得小于40us   && Th<=0.0004   不大于400us
{
samptimediv=fadc*Th/2-(convratediv+1);  //计算samptimediv
if(samptimediv>=0 && samptimediv <=255)
for (i=0;i<256;i++)
{
//if (fabs(i-samptimediv)<0.00000000002)  //0.0000000000001
//float 类型的samptimediv 不能直接和 int 型的i 比较
if (i==(int)samptimediv)                      //0.00000000000002
{
//printf("cpuclkdiv=%d ; convratediv=%d ; samptimediv=%.8f\n",cpuclkdiv,convratediv,samptimediv);
/*
cout<<"cpuclkdiv= "<<cpuclkdiv<<";  ";
cout<<"convratediv= "<<convratediv<<";  ";
cout<<"samptimediv= "<<samptimediv<<"\n";
*/
if( ((int)(samptimediv*1000000)) % (1000000*(int)samptimediv) ==0)   //比较大小,samptimediv=0~255
{
count=count+1;
printf("cpuclkdiv= %d ; convratediv= %d ; samptimediv= %.6f\n",cpuclkdiv,convratediv,samptimediv);
printf("cpuclkdiv=0x%X ; convratediv=0x%X ; samptimediv=0x%X\n",cpuclkdiv,convratediv,(int)samptimediv);
printf("ADCCLKCTL=0x00%X ; ADCCLKDIV=0x%X0%X\n\n",cpuclkdiv,(int)samptimediv,convratediv);
}
}
}
}
}
}
}
cout<<endl;
printf("总个数--------Count = %d \n\n",count);
}


TMS320C5509A ADC参数计算。

功能:直接在运行输出窗口以十六进制形式输出ADC配置参数(cpuclkdiv,convratediv,samptimediv,详见参考手册);也可以输出寄存器形式(ADCCLKCTL、ADCCLKDIV)。

------------------------------------------------------------------------------------------------

#include <iostream>

#include <math.h>

using namespace std;

void calcu_ADCConfig(double fcpu,double fs);

int main()

{
double fcpu=144;    //CPU时钟频率(MHz)
double fs=2000;     //要求的采样速率(Hz)

double fadc,fadc_conv,x;   // fadc:ADC时钟;  fadc_conv:ADC转换时钟  
double cpuclkdiv,convratediv,samptimediv;    

calcu_ADCConfig(fcpu,fs);

//--------------------------------------------------------------

//---------------结果验证---------------------------------------
cpuclkdiv= 143 ; convratediv= 8 ; samptimediv= 124.000000;
fcpu = fcpu*1000000;   //CPU时钟 144MHz
fadc=fcpu/(cpuclkdiv+1);    //ADC时钟
fadc_conv = fadc/(2*(convratediv + 1));     //ADC转换时钟  
x= 13/fadc_conv + 2*(convratediv+samptimediv+1)/fadc;   // 采样周期
//  ADC采样保持时间     +    采样保持时间
printf("采样周期: Ts=%.8f\n",x);
printf("采样速率: fs=%.4f\n",1/x);

//--------------------------------------------------------------

return 0;

}

运行结果截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DSP ADC VC2010