博客
关于我
【CC2530入门教程-06】CC2530的ADC工作原理与应用
阅读量:398 次
发布时间:2019-03-05

本文共 2042 字,大约阅读时间需要 6 分钟。

A/D转换与CC2530 ADC模块应用实训

A/D转换是一种将模拟电信号转换为数字信号的技术,其核心在于通过采样、保持、量化和编码等过程,将连续变化的模拟量转化为离散的数字量。A/D转换器(ADC)是实现数字化的关键设备,而CC2530芯片中的ADC模块则以其高性能和灵活配置,成为很多嵌入式应用的首选。

CC2530 ADC模块概述

CC2530的ADC模块支持14位二进制转换,提供12位有效数据位,内置模拟多路转换器和参考电压发生器。该模块具有以下主要特点:

  • 可选抽取率:支持7~12位分辨率。
  • 多通道输入:8个独立输入通道,可接收单端或差分信号。
  • 灵活参考电压配置:支持内部单端、外部单端、外部差分或AVDD5电压。
  • 中断和DMA触发:单通道转换结束可触发中断,序列转换完成可发出DMA触发。
  • 扩展功能:可选用片内温度传感器或电池电压作为输入。
  • ADC模块信号输入配置

    CC2530的ADC输入端口0引脚(AIN0~AIN7)支持单端或差分配置,具体通道信息如下:

  • 单端输入:AIN0~AIN7,通道号为0~7。
  • 差分输入:AIN0~AIN1、AIN2~AIN3、AIN4~AIN5、AIN6~AIN7,通道号为8~11。
  • 温度传感器:通道号为14。
  • 电压测量:通道号为15,测量AVDD5/3电压。
  • ADC转换相关概念

  • 序列转换:通过ADCIF标志位控制多通道转换,结果可通过DMA传送至存储器,无需CPU干预。
  • 单通道转换:通过ADCCON3寄存器触发立即开始,完成后可设置中断或DMA触发。
  • 参考电压:可选内部、外部单端或差分电压,转换结果以2的补码形式存储。
  • 数据寄存:ADCL和ADCH寄存器存储低位和高位数据。
  • 中断和触发:单通道完成可触发中断,序列完成可触发DMA。
  • 实训项目:定时采集电压数据发送到上位机

  • 配置APCFG寄存器:设置端口0引脚为ADC输入,覆盖P0SEL设置。
  • ADCCON3配置:设置采样率、端点和其他参数,触发单通道转换。
  • ADC初始化:设置端口功能和方向,确保模拟输入。
  • 数据采集:通过ADCCON3触发转换,等待ADCIF标志位后读取数据。
  • 数据发送:将采集数据通过UART发送至上位机。
  • #include "ioCC2530.h"void Init_Timer1() {    T1CC0L = 0xd4;    T1CC0H = 0x30;    T1CCTL0 |= 0x04;    T1IE = 1;    T1OVFIM = 1;    EA = 1;    T1CTL = 0x0e;}unsigned char count = 0;unsigned char F_time = 0;#pragma vector = T1_VECTOR__interrupt void Timer1_Sevice() {    T1STAT &= ~0x01;    count++;    if (count == 10) {        F_time = 1;        count = 0;    }}void Init_Uart0() {    PERCFG = 0x00;    P0SEL = 0x0C;    U0BAUD = 59;    U0GCR = 9;    U0UCR |= 0x80;    U0CSR |= 0xC0;    UTX0IF = 0;    URX0IE = 1;    EA = 1;}void UR0SendString(unsigned char *str, unsigned char count) {    while (count--) {        U0DBUF = *str++;        while (!UTX0IF);        UTX0IF = 0;    }}void Init_ADC0() {    P0SEL |= 0x01;    P0DIR &= ~0x01;    APCFG |= 0x01;}void Get_ADC0_Value() {    ADCIF = 0;    ADCCON3 = (0x80 | 0x10 | 0x00);    while (!ADCIF);    dat[0] = 0xaf;    dat[1] = ADCH;    dat[2] = ADCL;    dat[3] = 0xfa;}void main() {    Init_Uart0();    Init_Timer1();    Init_ADC0();    while (1) {        if (F_time == 1) {            Get_ADC0_Value();            UR0SendString(dat, 4);            F_time = 0;        }    }}

    转载地址:http://elszz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现LBP特征提取(附完整源码)
    查看>>
    Objective-C实现LDPC码(附完整源码)
    查看>>
    Objective-C实现least common multiple最小公倍数算法(附完整源码)
    查看>>
    Objective-C实现Lempel-Ziv压缩算法(附完整源码)
    查看>>
    Objective-C实现Length conversion长度转换算法(附完整源码)
    查看>>
    Objective-C实现Levenshtein 距离算法(附完整源码)
    查看>>
    Objective-C实现levenshteinDistance字符串编辑距离算法(附完整源码)
    查看>>
    Objective-C实现lfu cache缓存算法(附完整源码)
    查看>>
    Objective-C实现LFU缓存算法(附完整源码)
    查看>>
    Objective-C实现linear algebra线性代数算法(附完整源码)
    查看>>
    Objective-C实现linear congruential generator线性同余发生器算法(附完整源码)
    查看>>
    Objective-C实现linear discriminant analysis线性判别分析算法(附完整源码)
    查看>>
    Objective-C实现linear regression线性回归算法(附完整源码)
    查看>>
    Objective-C实现linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现Linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现LinearSieve线性素数筛选算法 (附完整源码)
    查看>>
    Objective-C实现LinkedListNode链表节点类算法(附完整源码)
    查看>>
    Objective-C实现LinkedList链表算法(附完整源码)
    查看>>
    Objective-C实现local weighted learning局部加权学习算法(附完整源码)
    查看>>
    Objective-C实现logistic regression逻辑回归算法(附完整源码)
    查看>>