第三章 学习CC3200的ADC

现在介绍CC3200ADC功能,CC3200ADC8个通道,四个用于外部输入,4个用于内部,单次采样时间是16us,可以设置成8个通道的轮流采样,8个通道轮流采样花费的总时间16us,模拟输入的管脚是固定的,支持DMAFIFO,目前我只了解FIFO,列出几张图

ADC总框架图:只有一个adc转化器:

第三章 学习CC3200的ADC_第1张图片

采样过程:可以看出每个通道花2us,8个通道花16us.

第三章 学习CC3200的ADC_第2张图片

通道介绍:

看一下pin58的配置寄存器:

注意:当PIN58作为模拟量输入口时,最大能承受电压的1.8V,一般最好不要超过1.467V。作为数字量IO口时,最大可承受电压为3.6V

介绍一下CC3200ADC比较特别的地方,第一:有FIFO,第二:有计数器(记录的应该是采样的时间)。

datasheet有以下内容:

第三章 学习CC3200的ADC_第3张图片

按照上面的来我们就能完成简单的采样。

参考电压:

http://processors.wiki.ti.com/index.php/CC32xx_ADC_Appnote中有

The reference voltage however is specified as 1.4V in the example SDK. It has to be corrected to 1.467V. The corrected lines are given below

File path : \\CC3200SDK_1.1.0\cc3200-sdk\example\adc
File : main.c
Lines 286 to 293 are modified as below

       while(uiIndex < NO_OF_SAMPLES)

       {

           UART_PRINT("\n\rVoltage is %f\n\r",(((float)((pulAdcSamples[4+uiIndex] >> 2 ) & 0x0FFF))*1.467)/4096);

           uiIndex++;

       }

       //UART_PRINT("\n\rVoltage is %f\n\r",((pulAdcSamples[4] >> 2 ) & 0x0FFF)*1.467/4096);

参考电压是1.467V

程序:

if(!ReadFromUser(&uiAdcInputPin))

        {

          UART_PRINT("\n\rInvalid Input. Please try again. \n\r");

          continue;

        }

#ifdef CC3200_ES_1_2_1

        //

        // Enable ADC clocks.###IMPORTANT###Need to be removed for PG 1.32

        //

        HWREG(GPRCM_BASE + GPRCM_O_ADC_CLK_CONFIG) = 0x00000043;

        HWREG(ADC_BASE + ADC_O_ADC_CTRL) = 0x00000004;

        HWREG(ADC_BASE + ADC_O_ADC_SPARE0) = 0x00000100;

        HWREG(ADC_BASE + ADC_O_ADC_SPARE1) = 0x0355AA00;

#endif

        //

        // Pinmux for the selected ADC input pin

        //

        MAP_PinTypeADC(uiAdcInputPin,PIN_MODE_255);

        //

        // Convert pin number to channel number

        //

        switch(uiAdcInputPin)

        {

            case PIN_58:

                uiChannel = ADC_CH_1;

                break;

            case PIN_59:

                uiChannel = ADC_CH_2;

                break;

            case PIN_60:

                uiChannel = ADC_CH_3;

                break;

            default:

                break;

        }

        //

        // Configure ADC timer which is used to timestamp the ADC data samples

        //

        MAP_ADCTimerConfig(ADC_BASE,2^17);

        //

        // Enable ADC timer which is used to timestamp the ADC data samples

        //

        MAP_ADCTimerEnable(ADC_BASE);

        //

        // Enable ADC module

        //

        MAP_ADCEnable(ADC_BASE);

        //

        // Enable ADC channel

        //

        MAP_ADCChannelEnable(ADC_BASE, uiChannel);

        while(uiIndex < NO_OF_SAMPLES + 4)

        {

            if(MAP_ADCFIFOLvlGet(ADC_BASE, uiChannel))

            {

                ulSample = MAP_ADCFIFORead(ADC_BASE, uiChannel);

                pulAdcSamples[uiIndex++] = ulSample;

            }

        }

        MAP_ADCChannelDisable(ADC_BASE, uiChannel);

        uiIndex = 0;

        //UART_PRINT("\n\rTotal no of 32 bit ADC data printed :4096 \n\r");

        //UART_PRINT("\n\rADC data format:\n\r");

        //UART_PRINT("\n\rbits[13:2] : ADC sample\n\r");

        //UART_PRINT("\n\rbits[31:14]: Time stamp of ADC sample \n\r");

        //

        // Print out ADC samples

        //

        while(uiIndex < NO_OF_SAMPLES)

        {

         //   UART_PRINT("\n\rVoltage is %f\n\r",(((float)((pulAdcSamples[4+uiIndex] >> 2 ) & 0x0FFF))*1.467)/4096);

        UART_PRINT("\n\r%f\n\r",(((float)((pulAdcSamples[4+uiIndex] >> 2 ) & 0x0FFF))*20000/(4096-((pulAdcSamples[4+uiIndex] >> 2 ) & 0x0FFF))));

            uiIndex++;

        }

        //UART_PRINT("\n\rVoltage is %f\n\r",((pulAdcSamples[4] >> 2 ) & 0x0FFF)*1.4/4096);

       // UART_PRINT("\n\r");

    }

}

拿通道59,使用ADCFIFO一次采样的几组数据:

标准值

48.490K

48.49K

27.65K

16.32K

9.95K

5K

6.24K

4.02K

采样值

49130.8

49072.51

27766.76

16360.41

9996.338

5021.38

6264.829

4058.737

采样值

49130.8

48956.23

27766.76

16344.28

10018.32

5036.675

6256.41

4037.559

采样值

48956.23

49130.8

27711.13

16360.41

10007.33

5036.675

6256.41

4051.674

采样值

49014.32

48840.34

27711.13

16376.55

10007.33

5029.025

6273.252

4072.877

采样值

48956.23

48898.23

27738.93

16344.28

10007.33

5044.329

6273.252

4037.559

采样值

48782.54

48898.23

27655.61

16376.55

10018.32

5036.675

6256.41

4065.805

采样值

48724.83

48898.23

27683.35

16376.55

10018.32

5036.675

6290.116

4065.805

采样值

48782.54

48840.34

27655.61

16392.71

10029.33

5059.651

6290.116

4072.877

采样值

48724.83

48782.54

27711.13

16344.28

9996.338

5036.675

6273.252

4079.953

采样值

48782.54

48840.34

27738.93

16360.41

10007.33

5059.651

6290.116

4065.805

采样值

48724.83

48724.83

27655.61

16360.41

10018.32

5044.329

6273.252

4079.953

采样值

48609.71

48840.34

27600.23

16328.16

10040.34

5059.651

6281.681

4058.737

采样值

48667.23

48724.83

27627.91

16312.06

10007.33

5067.319

6307

4087.033

采样值

48552.3

48667.23

27627.91

16312.06

10018.32

5051.988

6298.555

4101.206

采样值

48609.71

48667.23

27572.59

16279.89

9996.338

5059.651

6298.555

4087.033

采样值

48552.3

48609.71

27627.91

16328.16

10040.34

5059.651

6290.116

4079.953

可以发现:随着时间的推移,采样值会逐渐减小。

第三章 学习CC3200的ADC_第4张图片

减小这种趋势可以对电路图进行改进,会有很大的改观。

一般电路图

第三章 学习CC3200的ADC_第5张图片

改进电路图

上面加一个电容,这样对多次采样会有很大的改,下面一组数据很能说明问题:

未加

未加

1pf

1pf

0.1uf

0.1uf

0.1uf

0.1uf

167.86

             

172300.5

170511.6

177397.6

170955.7

176923.1

171401.9

170511.6

179804.9

172300.5

167889.9

175513.1

169629.6

177397.6

171850.1

171850.1

178835

171850.1

168321.8

174584.3

168755.8

177874.4

170511.6

170511.6

177874.4

170069.6

167889.9

174123.2

168755.8

177874.4

171401.9

170511.6

176923.1

169629.6

166605.9

173207.5

167889.9

176923.1

171401.9

170511.6

177397.6

168755.8

166605.9

172752.9

166605.9

177397.6

168755.8

170069.6

176923.1

168321.8

164921

171850.1

165759.6

175513.1

168321.8

169191.7

176923.1

168321.8

166181.8

169629.6

164921

175980.9

168755.8

169629.6

176923.1

167032

164089.9

169191.7

164089.9

175980.9

169629.6

170511.6

176923.1

166605.9

163677.1

168755.8

164089.9

175047.6

170511.6

169629.6

176450.8

166181.8

163266.2

167889.9

162857.1

175513.1

169629.6

171850.1

175047.6

165339.4

162044.4

167460

162449.9

176450.8

169191.7

169629.6

177397.6

164921

163266.2

167032

161640.8

175980.9

168755.8

168755.8

176450.8

164921

162857.1

166605.9

160838.9

175980.9

168321.8

168321.8

175980.9

164504.5

161640.8

165759.6

160440.5

175980.9

168321.8

167460

174123.2

163677.1

161640.8

164921

159649.1

174584.3

167889.9

168321.8

175047.6

结论:利用ADCFIFO采样时,上面加或不加电容,对采样的128个值总体表现是采样的值越来越小,加电容后,这种情况会有所减缓。电容大点会好很多。

你可能感兴趣的:(第三章 学习CC3200的ADC)