打印
[CC2640]

CC2640R2F学习笔记——ADC使用

[复制链接]
802|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
coshi|  楼主 | 2020-2-2 17:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、简介
CC2640R2F 的 ADC 是几位的、几个通道的?
12 位模数转换器 (ADC)、200MSPS、8 通道模拟多路复用器。

使用的是什么参考源?
参考源有两种,一种是内部的固定 4.3V 参考源,一种是内部的电池电压。
本文采用的 4.3V 固定参考源,因为如果参考源使用电池,一旦电池电量下降将影响 ADC 的准确性。

ADC 的 8 个通道分别为什么引脚?


假设读到的是 0XC00(十进制是 3072),代表 ADC 采集的是几 V 电压?

CC2640R2F 的 ADC 是 12 位的,也就是 4096,本文使用的是 4.3V 固定参考电压。
所以 4096/4.3=3072/x,则 x=3.225。
表示 ADC 采集的是 3.225V 电压。


使用特权

评论回复

相关帖子

沙发
coshi|  楼主 | 2020-2-2 17:30 | 只看该作者
二、硬件连接

5x5芯片


使用特权

评论回复
板凳
coshi|  楼主 | 2020-2-2 17:31 | 只看该作者
三、移植文件
链接:https://pan.baidu.com/s/1y1n-glWsh-Sl6yt-PZoX_A 提取码:b0z6
将 board_adc.c 、 board_adc.h 两个文件拖拽至CCS工程的Application文件夹下


添加文件过程中,选项选择如下




使用特权

评论回复
地板
coshi|  楼主 | 2020-2-2 17:31 | 只看该作者
3.1 board_adc.c
/*********************************************************************
* INCLUDES
*/
#include "_hal_types.h"
#include <ti/drivers/adc/ADCCC26XX.h>
#include <ti/drivers/pin/PINCC26XX.h>
#include <driverlib/aux_adc.h>
#include <driverlib/aux_wuc.h>

#include "board_adc.h"

/*********************************************************************
* LOCAL VARIABLES
*/
static ADCCC26XX_Object s_adcCC26XXObject[BOARD_ADCCOUNT];

static const ADCCC26XX_HWAttrs s_adcCC26XXHWAttrs[BOARD_ADCCOUNT] =
{
    {
         .adcDIO = BATTERY_ADC_IO,  // DIO_7
         .adcCompBInput = ADC_COMPB_IN_AUXIO7,
         .refSource = ADCCC26XX_FIXED_REFERENCE,
         .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
         .inputScalingEnabled = true,
         .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
         .returnAdjustedVal = 0
    },
    {
         .adcDIO = PIN_UNASSIGNED,
         .adcCompBInput = ADC_COMPB_IN_DCOUPL,
         .refSource = ADCCC26XX_FIXED_REFERENCE,
         .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
         .inputScalingEnabled = true,
         .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
         .returnAdjustedVal = 0
    },
    {
         .adcDIO = PIN_UNASSIGNED,
         .adcCompBInput = ADC_COMPB_IN_VSS,
         .refSource = ADCCC26XX_FIXED_REFERENCE,
         .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
         .inputScalingEnabled = true,
         .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
         .returnAdjustedVal = 0
    },
    {
         .adcDIO = PIN_UNASSIGNED,
         .adcCompBInput = ADC_COMPB_IN_VDDS,
         .refSource = ADCCC26XX_FIXED_REFERENCE,
         .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
         .inputScalingEnabled = true,
         .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
         .returnAdjustedVal = 0
    }
};

static const ADC_Config s_adcConfig[BOARD_ADCCOUNT] =
{
    {
         &ADCCC26XX_fxnTable,
         &s_adcCC26XXObject[BOARD_ADCCHANNEL7],
         &s_adcCC26XXHWAttrs[BOARD_ADCCHANNEL7]
    },
    {
         &ADCCC26XX_fxnTable,
         &s_adcCC26XXObject[BOARD_ADCDCOUPL],
         &s_adcCC26XXHWAttrs[BOARD_ADCDCOUPL]
    },
    {
         &ADCCC26XX_fxnTable,
         &s_adcCC26XXObject[BOARD_ADCVSS],
         &s_adcCC26XXHWAttrs[BOARD_ADCVSS]
    },
    {
         &ADCCC26XX_fxnTable,
         &s_adcCC26XXObject[BOARD_ADCVDDS],
         &s_adcCC26XXHWAttrs[BOARD_ADCVDDS]
    },
};

// ADC句柄及参数
static ADC_Handle s_adcHandle;
static ADC_Params s_adcParams;

/*********************************************************************
* PUBLIC FUNCTIONS
*/
/**
@brief ADC的初始化函数
@param 无
@return
*/
void ADC_Init(void)
{
    ADC_Params_init(&s_adcParams);
    s_adcParams.isProtected = TRUE;
    s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->closeFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7]);
    s_adcHandle = s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->openFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7],&s_adcParams);
}

/**
@brief ADC读取
@param 无
@return 读取电压值
*/
uint16 ADC_Read(void)
{
    uint16 adcResult;
    s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->convertFxn(s_adcHandle, &adcResult);
    return adcResult;
}

/**
@brief ADC短暂读取
@param 无
@return 读取电压值
*/
uint32 Adc_OneShotRead(void)
{
    AUXWUCClockEnable(AUX_WUC_MODCLKEN0_ANAIF_M | AUX_WUC_MODCLKEN0_AUX_ADI4_M);
    AUXADCSelectInput(ADC_COMPB_IN_AUXIO7);
    AUXADCEnableSync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL);
    AUXADCGenManualTrigger();
    uint32 adcValue = AUXADCReadFifo();
    AUXADCDisable();
    return adcValue;
}



使用特权

评论回复
5
coshi|  楼主 | 2020-2-2 17:31 | 只看该作者
3.2 board_adc.h
#ifndef _BOARD_ADC_H_
#define _BOARD_ADC_H_

/*********************************************************************
* INCLUDES
*/
#include "_hal_types.h"

/*********************************************************************
* DEFINITIONS
*/
#define BATTERY_ADC_IO              IOID_7
#define ADC_CHANNEL_IOID7           ADC_COMPB_IN_AUXIO7

typedef enum
{
    BOARD_ADCCHANNEL7 = 0,
    BOARD_ADCDCOUPL,
    BOARD_ADCVSS,
    BOARD_ADCVDDS,
    BOARD_ADCCOUNT
} Board_ADCName_t;

/*********************************************************************
* API FUNCTIONS
*/
void ADC_Init(void);
uint16 ADC_Read(void);
uint32 Adc_OneShotRead(void);

#endif /* _BOARD_ADC_H_ */


使用特权

评论回复
6
coshi|  楼主 | 2020-2-2 17:32 | 只看该作者
四、API调用

需包含头文件 board_adc.h


使用特权

评论回复
7
coshi|  楼主 | 2020-2-2 17:32 | 只看该作者
五、使用例子
1)添加头文件(例simple_peripheral.c中)

#include "board_adc.h"



2)添加初始化代码(simple_peripheral.c的SimplePeripheral_init函数末尾中)

ADC_Init();



3)在定时器回调或按键回调中 读取电压值(使用Adc_Read())

uint8 electricArr[2];
uint16 electricAdcValue = Adc_Read();
*(electricArr + 1) = (uint8)(0xFF & electricAdcValue);
*(electricArr) = (uint8)((0xFF00 & electricAdcValue) >> 8);


4)在定时器回调或按键回调中 读取电压值(使用Adc_OneShotRead())

uint8 electricArr[4];
uint32 electricAdcValue = Adc_Read();
*(electricArr + 3) = (uint8)(0xFF & electricAdcValue);
*(electricArr + 2) = (uint8)((0xFF00 & electricAdcValue) >> 8);
*(electricArr + 1) = (uint8)((0xFF0000 & electricAdcValue) >> 16);
*(electricArr) = (uint8)((0xFF000000 & electricAdcValue) >> 24);


使用特权

评论回复
8
tfqi| | 2020-3-1 12:20 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
wiba| | 2020-3-1 12:23 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
10
zljiu| | 2020-3-1 12:27 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
11
aoyi| | 2020-3-1 12:28 | 只看该作者
非常感谢楼主分享

使用特权

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

本版积分规则

95

主题

3308

帖子

4

粉丝