打印
[DSP编程]

C2000 LaunchPad ADC使用技巧

[复制链接]
1011|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangmangui|  楼主 | 2015-5-18 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC使用技巧
TMS320x2802x, 2803x使用同样的ADC模块,它们有以下功能:
ü      内建双采样保持电路的12位ADC
ü      同时采样及连续采样
ü      从0 V到3.3V的输入范围,或按VREFHI/VREFLO比例
ü      与系统时钟一致,不需要分频
ü      F28027 LaunchPad 有13个通道,多路复用输入
ü      16个SOC可对ADC灵活配置
ü      16个可单独寻址的转换结果寄存器
ü      多种转换触发源(软件触发、PWM触发、外部中断触发、定时
器触发、ADCINT1/2触发)
ü      9个中断处理入口
一、SOC原理
F28027的ADC与其它基于序列的ADC不一样,它是基于SOC的。SOC
的配置灵活多样,它可以单独地配置通道、触发源、采样时间等,多个SOC
也可以配置到同一个通道、同一源触发、同一采样时间等;它可单个通道的
单次采样,可连续采样、双通道同时采样。ADC的触发也可以由软件实现。
如果在有CLA的芯片(如F2803x)中使用时,由于SOCCLATASK
联系,因此需要注意CLA的程序的入口问题。
SOC的配置是通过ADCSOCxCTL寄存器完成的。
二、ADC寄存器配置关系
由于F28系列的CPUADC配置非常灵活,带来了方便的同时,也容易
产生混淆。下图是对容易搞混淆的几个寄存器的关系所作的说明:
SOCx

l         Software
l         Timers interrupts
l         XINT2 SOC
l         ePWM1-8 SOCA、B

AD转换

EOCx

ADCSOCxCTL配置SOCx

SOCx与EOCx是对应的

ADCRESULTx

INTSELxNy

ADCRESULTn
与ADCINTn对应


三、优先级问题
1、由SOCPRIORITY设置的优先级,为高优先级。
2、优先循环(Round Robin
在一系列的SOC中,它们首尾相接,形成一个圆,并朝着SOC0SOC
……的固定方向循环,与正在转换的SOC最近的下一个SOC的优先级最高。
这种方法很适用于电源、电机控制,因为需要有次序地处理。
四、同时采样
同时采样是在AB通道中进行的。由硬件结构可见,只能设置一个A
道及一个B通道同时采样。
F28系列的ADC的也规定,偶数SOC及下一个奇数SOC可以同时采样。
如,SOC0SOC1可以同时采样,SOC6SOC7可以同时采样。
同时采样对的触发源的任意一个均可以触发同时采样偶。
同时采样后,A通道先转换,B通道后转换。
五、ADC校准
一般使用TI提供的(*Device_cal)();,将TI预先存储在OTP中的ADC校准数
据拷贝到ADCREFSELADCOFFTRIM寄存器中。
六、ADC的参考源
F28027提供了内部的带隙参考源,也可以由VREFHI/VREFLO引脚接入
外部的参考源。由ADCCTL1寄存器的内外部参考选择位选择。
七、示例
1、打开ADC时钟:
   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;       // ADC
2、初始化ADC
       (*Device_cal)();
   
AdcRegs.ADCCTL1.bit.ADCBGPWD  = 1;      // Power ADC BG
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;      // Power reference
    AdcRegs.ADCCTL1.bit.ADCPWDN   = 1;      // Power ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1;      // Enable ADC
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;      // Select interal BG
3、配置中断
    AdcRegs.INTSEL3N4.bit.INT3E     = 1;       // for PWM2A
    AdcRegs.INTSEL3N4.bit.INT3SEL   = 3;       // EOC3
    AdcRegs.INTSEL3N4.bit.INT3CONT  = 1;
4、配置SOC
    AdcRegs.SOCPRICTL.all       = 0;       // SOC0 is first SOC
    AdcRegs.ADCSAMPLEMODE.all   = 0x1B;    // Simultaneous sampling enable For SOC0,2,6,8
    AdcRegs.ADCINTSOCSEL1.all   = 0;       // Determined by the ADCSOCxCTL
    AdcRegs.ADCINTSOCSEL2.all   = 0;       // Determined by the ADCSOCxCTL
   
    AdcRegs.ADCSOCFRC1.all      = 0;
   
    //   trigger source
    AdcRegs.ADCSOC0CTL.bit.ACQPS    = 6;   // Sample window is 7 cycles
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 0x0d;    // ePWM5A, ADCSOCA
    AdcRegs.ADCSOC0CTL.bit.CHSEL    = 2;   // ADCINA2  -- current

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入【TI DSP 论坛】 & 【DSP 技术】           TI忠诚粉丝!

935

主题

26376

帖子

588

粉丝