This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2.8335万:ADC转换可视化

Guru**** 2560390 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/635259/ccs-tms320f28335-adc-conversions-visualization

部件号:TMS320F2.8335万

工具/软件:Code Composer Studio

您好,TI朋友。 我从TMS320F2.8335万开始,我´m´m新的代码编写器。 我有两个问题:

1.我运行了C200Ware中可用的顺序模式测试示例,我认为运行良好。  如何´m存储ADCINA0输入模拟电压的ADCRESULT0的值。 我能以二进制方式看到它吗? 要将此值转换为十进制值,是否必须对此操作进行编码? 或者有一个函数可以用于此操作? 感谢你的帮助。

2.我需要1 mV的分辨率来读取输入电压,但ADC 只有12位,所以不可能。  是否可以通过使用此F2.8335万器件来提高ADC conversión的位数?

这是代码:

//包含的文件
//
#include "DSP28x_Project.h"//设备头文件和示例包括文件

//
//定义ADC启动参数
//
#IF (CPU_FRQ_150MHz)//默认值- 150 MHz SYSCLKOUT
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)= 25.0 MHz
//
#define ADC_MODCLK 0x3
#endif
#IF (CPU_FRQ_100MHz)
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =100/(2*2)= 25.0 MHz
//
#define ADC_MODCLK 0x2
#endif

//
// ADC模块时钟= HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2)= 12.5MHz
//
#define ADC_CKPS 0x1

#define ADC_SHCLK 0xF //在ADC模块周期中的S/H宽度=16 ADC时钟
#define AVG 1000 //平均样品限制
#define zOffset 0x00 //平均零偏移
#define BUF_SIZE 2048 //样本缓冲区大小

//
//全局
//
UINT16 SampleTable[BUF_SIZE];

//
//主菜单
//
Void主(void)

UINT16 I;

//
//步骤1. 初始化系统控制:
// PLL,看门狗,启用外设时钟
//此示例函数位于DSP2833x_sysctrl.c文件中。
//
InitSysCtrl();

//
//此示例的特定时钟设置
//
EALLOW;
SysCtrlRegs.HISPPCP.ALL = ADC_MODCLK;// HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;

//
//步骤2. 初始化GPIO:
//此示例函数可在DSP2833x_GPIO.c文件和中找到
//说明了如何将GPIO设置为其默认状态。
//
// InitGpio();//跳过此示例

//
//步骤3. 清除所有中断并初始化PIE矢量表:
//禁用CPU中断
//
色调;

//
//将PIE控件寄存器初始化为其默认状态。
//默认状态是禁用所有PIE中断和标志
//被清除。
//此函数位于DSP2833x_PIECTRL.c文件中。
//
InitPieCtrl();

//
//禁用CPU中断并清除所有CPU中断标志
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向外壳中断的指针初始化PIE矢量表
//服务例程(ISR)。
//这将填充整个表,即使中断也是如此
//在本例中不使用。 这对于调试非常有用。
// shell ISR例程可在DSP2833x_DefaultIsr.C.中找到
//此函数位于DSP2833x_PieVect.C.中
//
InitPieVectorTable();

//
//步骤4. 初始化所有设备外围设备:
//此函数位于DSP2833x_InitPeripherals.c中
//
// InitPeripherals();//本示例不需要
InitAdc();//在此示例中,初始化ADC

//
//此示例的特定ADC设置:
//
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;// 1级联模式
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCTRL1.bit.con_run =1;//设置连续运行

//
//步骤5. 用户特定代码,启用中断:
//

//
//清除SampleTable
//
对于(i=0;i<BUF_SIZE;i++)

SampleTable[i]= 0;
}

//
//启动SEQ1
//
AdcRegs.ADCTRL2.all = 0x2000;

//
//获取ADC数据并记录In SampleTable数组
//
对于(;;)

用于(i=0;i<AVG;i++)

//
//等待中断
//
while (AdcRegs.ADCST.bit.INT_SEQ1= 0)


}
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1;
SampleTable[i]=((AdcRegs.ADCRESULT0>>4));
}
}
}

//
//文件结束
//

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Juan Pablo,

    问题2的分辨率为3.0V / 2^12 = 732uV。 您可以通过过采样和平均来进一步提高分辨率...过采样的每增加4倍就会产生1位的分辨率。 F2.8335万 ADC的速度非常快,因此在许多情况下,可以进行适度的超采样以获得另一位或两位分辨率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    胡安

    您还可以浏览 F2.8335万 CCSv4 Workshop中的一些材料和实验。  它很好地向新开发人员介绍了设备和CCS调试工具。

    它使用旧版本的Code Composer,但大多数界面与当前版本相同或相似。

    汤米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢。 非常感谢您的帮助! 来自哥伦比亚的问候!