DSPF28335:ADC配置[DSP ADC]

本文详细介绍了DSPF28335芯片的12位ADC的配置,包括功能框图、时钟分配策略、级联与双排序模式、采样方式、触发源选择以及ADC_Cal()调用方法。重点讲解了代码示例和关键寄存器的使用。
摘要由CSDN通过智能技术生成


一、ADC介绍

1.1 ADC功能框图

简介:12位ADC,16路通道;
2个采样保持器,1个转换器,16路结果寄存器;
ADC 转换时钟频率最高可配置为 25MHz,采样带宽 12.5MHz
电压输入范围:0-3V;
触发源:软件触发、ePWM、GPIO XINT2。

ADC框图

1.2 ADC时钟分配

时钟分频

外设时钟 HSPCLK 还可以经过 ADCTRL3 寄存器的ADCCLKPS[3-0]位来分频,然后再经过寄存器ADCTRL1 中的 CPS 位来控制进行 2 分频或者不分频。此外,ADC 模块还通过延长采样获取周期调整信号源阻抗,这由 ADCTRL1 寄存器中的 ACQPS3-0位控制。这些位并不影响采样保持和转换过程,但通过延长转换脉冲(SOC)的长度可以增加采样时间的长度。

ADC模块具有若干预分频器级以产生任何期望的ADC操作时钟速度(下图是时钟树提供到ADC)
ADC模块时钟

ADC时钟分频举例:

系统时钟无法直接给ADC模块提供时钟源,因此需要经过分频得到HISPCLK,因此ADC时钟最大为25MHz
ADC时钟分频举例
*注:
Acquistion time 采集时间
MSPS:每秒百万次采样
kSPS:每秒千次采样

1.3 级联模式与双排序模式

  • 级联模式与双排序模式区别是:序列器是否合并使用,合并使用触发源只有一个,分开则各自独立触发源。

1.3.1 级联模式

级联模式将两个独立的8通道序列器(SEQ1 & SEQ2)组合成一个16通道序列器(SEQ),触发源是其中某一种触发方式。

级联模式

1.3.2 双排序模式

两个独立序列器(SEQ1、SEQ2),其触发源也是独立的。

双序列模式

1.4 顺序采样与同步采样

顺序采样可以理解为串行,即采样完n通道,再采样n+1通道;
同步采样可以理解为并行,即同时进行,值得注意的是一次只有两通道同步采样。

1.4.1 顺序采样(ADCTRL3.bit.SMODE_SEL = 0,默认)

从图中可以看出,S为采样时间,C1为从采样窗口到结果寄存器更新时间(可以理解为转换时间),通道n转换时,可以进行通道n+1的采样,因为二者寄存器工作互不影响。
顺序采样

1.4.2 同步采样(ADCTRL3.bit.SMODE_SEL = 1)

从图中可以看出,S为采样时间,C1为Ax通道采样到结果寄存器更新时间,C2为Bx通道采样到结果寄存器更新时间,由于转换器(Converter)只有一个,所以转换不能同时进行,但采样保持器(S/H-A & S/H-B)有两个,采样与保持可以同步进行,然后将结果对应保存到ADCRESULTn(S/H-A结果)和ADCRESULTn+1(S/H-B结果)。
同步采样
在同步采样模式下, 如果 CONVxx 寄存器的值是 0110b(对应选择ADCINA6 ),就由采样保持器 A 采样,ADCINB6 有采样保持器 B 采样,和 1110b (对应选择ADCINB6 )的效果是一样的。转换结果对应存放在如下图所示的寄存器中:
存储结果

1.5 触发源

各种模式下对应的触发源选择:
触发源

  1. 软件触发(software):软件执行ADC转换
  2. ePWMx SOCA & SOCB:设置PWM计数器,定时触发ADC转换(参考Example_2833xAdcSoc.c)
  3. 外部触发源(external pin):外部引脚触发

1.6 ADC_Cal()两种调用方法

1.6.1 添加汇编文件

  1. 工程内添加DSP2833x_ADC_cal.asm文件
  2. 使用ADC_Cal()进行调用

1.6.2 使用指针指向内部固化地址

如下图所示,定义函数指针,指向0x380080(不同芯片不同),使用(*ADC_Cal)()进行调用

ADC_Cal指针指向

二、代码讲解及寄存器介绍

官方例程:Example_2833xAdcSeqModeTest.c


2.1 配置时钟源

2.1.1 配置高速时钟源

// ADC start parameters
#if (CPU_FRQ_150MHZ)     // Default - 150 MHz SYSCLKOUT
  #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)   = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
  #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2)   = 25.0 MHz
#endif

// Specific clock setting for this example:
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;	// HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;

高速外围时钟预分频器定义如下:

高速外围时钟预分频器


2.1.2 ADCCLK配置

#define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz
#define ADC_SHCLK  0xf   // S/H width in ADC module periods                        = 16 ADC clocks

// Specific ADC setup for this example:
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;

ADCTRL1[11-8]:ACQ_PS
本例中,ACQ_PS = 0xF = 15,S/H width in ADC module periods = 16 ADC clocks
采样时间(Acquisition time)计算公式:A_t = (1 /25M) × (ACQ_PS + 1)
即1.4.1和1.4.2图中的SOC(采样时间大小)

采样时间计算
ACQ_PS


ADCTRL3[1-4]:ADCCLKPS
ADCCLK = HSPCLK / [n*(ADCTRL1[7]:CPS + 1)]
本例中:ADCCLKPS=0x01,CPS = 0
即:ADCCLK = HSPCLK / 2*1 = 25MHz / 2 = 12.5MHz

ADCCLKPS

2.1.3 其他配置

   InitAdc();  // 初始化ADC

   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode 级联配置
   AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0;    // 转换通道数
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;   // ADCINA0 通道设置
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;        // Setup continuous run 设置连续运行

	// Start SEQ1 级联模式只需要打开SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;

2.1.4 采样读取

该例程一直进行ADC转换,只需判断中断标志位INT_SEQ1,完成转换后进行读取。

     for (i=0; i<AVG; i++)
     {
        while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
        SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );
     }

三、代码

ADC软件触发和ePWM触发代码如下:
adc.c
adc.h


总结

DSP F28335芯片ADC配置的学习记录,结合官方例程作代码讲解。(个人学习记录分享,若侵权删)

28335 adc例程是指在Texas Instruments(TI)的28335数字信号处理器(DSP)上进行模拟到数字转换(ADC)的示例代码。 28335是一种基于固定点DSP架构的高性能处理器,广泛用于工业自动化、电力电子、医疗仪器和环境监测等领域。ADC是将连续的模拟信号转换为数字信号的关键组件之一,可用于数据采集和信号处理。 在28335 ADC例程中,通常会包含以下内容: 1. 初始化和配置ADC模块:包括设置采样率、精度、参考电压等参数。这些参数根据具体应用需求进行调整。 2. 设置IO口和引脚复用功能:将ADC输入引脚与外部信号连接,确保信号正常传输。 3. 中断处理和数据缓存:当ADC完成一次转换后,会触发中断,将转换结果存储到数据缓存中。通过中断处理程序,可以实现对转换结果的处理和分析。 4. 数据处理和转换:根据需求对ADC输出的数字信号进行处理,例如滤波、放大、数字调制等。 5. 数据传输和存储:将ADC转换结果传输到内存或外设,通常通过DMA(直接内存访问)实现高速数据传输和存储。 通过28335 ADC例程,用户可以了解和学习如何在DSP上进行ADC的初始化、配置和数据处理等操作。同时,用户可以根据自己的应用需求进行适当的修改和扩展。 总之,28335 ADC例程是帮助用户实现ADC功能的一个代码框架,通过理解和学习该例程,用户可以快速上手并定制适合自己应用的ADC模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值