zrk787

【征文】+转载:ADuCM360的ADC部分

zrk787 在 2013-6-16 建立的討論區

ADuCM360的ADC部分

作者:EEWORLD的dontium

链接:http://bbs.eeworld.com.cn/viewthread.php?tid=373244&highlight=

1、设置ADCxCON选择相应的通道,以及是否缓冲。两个ADC模块可以设置对同一输入端采样。

2ADC增益控制PGAADC的增益可以设置为1248163264128。由ADCxMDE[7:4]寄存器设置。如果设置为1,代表不使用PGA,此时允许输入范围1~1.2V。如果使用PGAPGA的输出必须小于1V,如增益设置为16,输入最大允许1V / 16 = 62.5mV。对于PGA输出超过1V的情况,可以设置比较器来检测,并可以由中断来处理。

3、单/双极配置。双极性电压并不是说输入就可以小于地的电压,它只是说明双极性时,它可以高于或低于共模Vref,以及不超过绝对最大输入电压范围。

4、全差分及单端输入

两个ADC模块均支持双输入。全差分时,输入分别接于两个ADC模块。另外AIN7AIN11可以配置成共模输出脚,以给差分对提供偏置。

单端模式时,负输入端由ADCxCON [4:0]设置,如果设置为接地,PGA必须增益必须为1,且旁路掉缓冲器。

5ADC模块的典型操作

ADC可以工作在转换模式、校准模式、掉电模式。

转换模式:

可以使用固定采样率的连续模式,也可以使用软件触发的单次模式。

单次模式时,设置(ADCxMDE[2:0] = 010)。转换完成一次后即进入空闲状态。连续模式时,设置(ADCxMDE[2:0] = 001),数据存储在ADCxDAT中,它的更新率由ADCxFLT

在两种模式转换结束后, (ADCxSTA[0]) 中的ADCxRDY位置位,代表ADC0DATADC1DATSTEPDAT中的数据可以读取。

校准模式。进入校准时,ADC必须处于空闲模式(ADCxMDE[2:0] = 011)。寄存器ADCxOF ADCxGN的写入,只能在空闲模式。

 

内部零校准。使用内部产生的0V信号,在用户对ADC的设置下进行校准。在两到三个ADC转换周期里,将校准结果写入ADCxOF内并使ADCxSTA[5]置位以指示校准结束。当每次复位时,ADCxOF将装入工厂校准值。

内部满量程校准。(只能在PGA增益为1时),内部的满量程参考对增益进行校准,并写入增益校准寄存器,置位ADCxSTA[5]

系统零校准。使用ADC的外部输入引脚,并由零校准电压驱动。通常,将输入引脚短路,校准后的值自动写入各自的ADCxOF寄存器,并置位ADCxSTA[5]

系统满量程校准。使用满量程校准电压驱动ADC的输入引脚。

掉电模式。对于单次转换模式,结束后进入掉电模式,可以减小电源消耗。空闲模式时,ADC仍然供电但保持在复位状态,校准后及单次转换后即进入此模式。

6、其它ADC支持电路

参考源

内部参考源。芯片提供的内部参考源为1.2V精密参考源。

外部参考1。经VREF+ VREF输入的为外部参考1,此时芯片提供参考源的缓冲,

外部参考2。经AIN7/VBIAS0/IEXC/EXTREF2IN+AIN8/EXTREF2IN引脚输入。

AVDDAVDD也可以作为参考源。

参考源检测电路。

ADuCM360的ADC部分(续)

ADIADC例程分析

1int AdcGo(ADC_TypeDef
*pPort, int iStart)

此函数决定是否启动ADC,对ADCxCON的第19位,即ADC允许位控制,如果启动,则置1,否则清零。

 

此函数还对ADCxMDE的低3位,即ADCMD控制,可使其进入掉电、连续转换等8种模式。

2int AdcMski(ADC_TypeDef
*pPort, int iMski, int iWr)

此函数对ADCxMSKI操作,以允许相应的ADC中断

3int AdcFlt(ADC_TypeDef
*pPort, int iSF, int iAF, int iFltCfg)

ADCxFLT操作,所跟的参数决定具体的设置。

4int AdcRng(ADC_TypeDef
*pPort, int iRef, int iGain, int iCode)

设置ADC测量范围。参数iRef写入ADCxCONiGain写入ADCxMDEADCxPGA位,iCode用于判断是否对ADCCODE置位。

5int AdcBuf(ADC_TypeDef
*pPort, int iRBufCfg, int iBufCfg)

配置ADC缓冲区。iBufCfgADCxCON有关缓冲区的位作配置,   iRBufCfgADCxCFG[1:0]位配置,

6int AdcPin(ADC_TypeDef
*pPort, int iInN, int iInP)

设置同、反相输入引脚。

7int AdcDmaCon(int iChan,
int iEnable)

此函数对ADCDMACON寄存器操作,打开或关闭相应的DMA

8int AdcDmaReadSetup(int
iType, int iCfg, int iNumVals, int *pucRX_DMA)

iType用于选择DMA数据类型primary alternate data structure

iCfg

結果