【CC2530入门教程-06】CC2530的ADC工作原理与应用

第6课  CC2530的ADC工作原理与应用

广东职业技术学院  欧浩源

一、A/D转换的基本工作原理

将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是ADC

ADC:数模转换器,将时间和幅值连续的模拟量转化为时间和幅值离散的数字量,A/D转换一般要经过采样保持量化编码4个过程。

二、CC2530的A/D转换模块

CC2530的ADC模块支持最高14位二进制的模拟数字转换,具有12位的有效数据位,它包括一个模拟多路转换器,具有8个各自可配置的通道,以及一个参考电压发生器。

该ADC模块有如下主要特征:

<1> 可选取的抽取率,设置分辨率(7~12位)。

<2> 8个独立的输入通道,可接收单端或差分信号。

<3> 参考电压可选为内部单端、外部单端、外部差分或AVDD5。

<4> 单通道转换结束可产生中断请求。

<5> 序列转换结束可发出DMA触发。

<6> 可将片内温度传感器作为输入。

<7> 电池电压测量功能。

三、ADC模块的信号输入

端口0引脚可以配置为ADC输入端,依次为AIN0~AIN7

<1> 可以把输入配置为单端输入或差分输入。

<2> 差分输入对:AIN0~AIN1、AIN2~AIN3、AIN4~AIN5、AIN6~AIN7。

<3> 片上温度传感器的输出也可以作为ADC的输入用于测量芯片的温度。

<4> 可以将一个对应AVDD5/3的电压作为ADC输入,实现电池电压监测。

<5> 负电压和大于VDD的电压都不能用于这些引脚。

<6> 单端电压输入AIN0~AIN7,以通道号码0~7表示;四个差分输入对则以 通道号码8~11表示;温度传感器的通道号码为14AVDD5/3电压输入的通道号码为15

四、ADC相关的几个概念

<1> 序列ADC转换:可以按序列进行多通道的ADC转换,并把结果通过DMA传送到存储器,而不需要CPU任何参与。

<2> 单通道ADC转换:在程序设计中,通过写ADCCON3寄存器触发单通道ADC转换,一旦寄存器被写入,转换立即开始。

<3> 参考电压:内部生成的电压、AVDD5引脚、适用于AIN7输入引脚的外部电压,或者 适用于AIN6~AIN7输入引脚的差分电压。

<4> 转换结果:数字转换结果以2的补码形式表示。对于单端,结果总是正的。对于差分配置,两个引脚之间的差分被转换,可以是负数。 当ADCCON1.EOC设置为1时,数字转换结果可以获得,且结果总是驻留在ADCH和ADCL寄存器组合的MSB段中。

<5> 中断请求:通过写ADCCON3触发一个单通道转换完成时,将产生一个中断,而完成 一个序列转换时,是不产生中断的。当每完成一个序列转换,ADC将产生 一个DMA触发。

<6> 寄存器:ADC有两个数据寄存器:ADCLADCH;三个控制寄存器:ADCCON1ADCCON2ADCCON3;分别用来配置ADC并返回转换结果。

五、实训项目:定时采集电压数据发送到上位机

【1】配置APCFG寄存器

当使用ADC时,端口0的引脚必须配置为ADC模拟输入。要配置一个端口0引脚为一个ADC输入,APCFG寄存器中相应的位必须设置为1。这个寄存器的默认值是0,选择端口0为非模拟输入,即作为数字I/O端口。

  注意:APCFG寄存器的设置将覆盖P0SEL的设置。

【2】配置ADCCON3寄存器

单通道的ADC转换,只需将控制字写入ADCCON3寄存器即可。

【3】ADC初始化

主要对端口的功能进行选择,设置其传输方向,并将端口设置为模拟输入。

【4】ADC数据采集

首先将ADCIF标志位清0,接着对ADCCON3寄存器设置,该寄存器一旦被写入,转换立即开启;然后等待ADCIF置1,这时候转换完成,读取数据即可。

【5】实训项目源代码

#include "ioCC2530.h"
/*===============定时器1初始化函数==================*/
void Init_Timer1()
{
  T1CC0L = 0xd4;        //设置最大计数值的低8位
  T1CC0H = 0x30;        //设置最大计数值的高8位
  T1CCTL0 |= 0x04;      //开启通道0的输出比较模式
  T1IE = 1;             //使能定时器1中断
  T1OVFIM = 1;          //使能定时器1溢出中断
  EA = 1;               //使能总中断
  T1CTL = 0x0e;         //分频系数是128,模模式
}
unsigned char count = 0;
unsigned char F_time = 0;
/*================定时器1服务函数====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
  T1STAT &= ~0x01;      //清除定时器1通道0中断标志
  count++;
  if(count == 10)       //定时1秒到
  {
    F_time = 1;
    count = 0;
  }
}
/*===================UR0初始化函数====================*/
void Init_Uart0()
{
  PERCFG = 0x00;    //串口0的引脚映射到位置1,即P0_2和P0_3
  P0SEL = 0x0C;     //将P0_2和P0_3端口设置成外设功能
  U0BAUD = 59;      //16MHz的系统时钟产生9600BPS的波特率
  U0GCR = 9;
  U0UCR |= 0x80;    //禁止流控,8位数据,清除缓冲器
  U0CSR |= 0xC0;    //选择UART模式,使能接收器
  UTX0IF = 0;       //清除TX发送中断标志
  URX0IF = 0;       //清除RX接收中断标志
  URX0IE = 1;       //使能URAT0的接收中断
  EA = 1;           //使能总中断
}
unsigned char dat[4];
/*===================UR0发送字符串函数==================*/
void UR0SendString(unsigned char *str, unsigned char count)
{
  while(count--)
  {
    U0DBUF = *str++;    //将要发送的1字节数据写入U0DBUF
    while(!UTX0IF);     //等待TX中断标志,即数据发送完成
    UTX0IF = 0;
  }
}
/*===================ADC初始化函数====================*/
void Init_ADC0()
{
  P0SEL |= 0x01;      //P0_0端口设置为外设功能
  P0DIR &= ~0x01;     //P0_0端口设置为输入端口
  APCFG |= 0x01;      //P0_0作为模拟I/O使用
}
/*===================读取ADC的数据====================*/
void Get_ADC0_Value()
{
  ADCIF = 0;
  //参考电压选择AVDD5引脚,256抽取率,AIN0通道0
  ADCCON3 = (0x80 | 0x10 | 0x00);
  while(!ADCIF);      //等待A/D转换完成,
  dat[0] = 0xaf;
  dat[1] = ADCH;      //读取ADC数据低位寄存器
  dat[2] = ADCL;      //读取ADC数据高位寄存器
  dat[3] = 0xfa;
}
/*=======================主函数======================*/
void main()
{
  Init_Uart0();
  Init_Timer1();
  Init_ADC0();
  while(1)
  {
    if(F_time == 1)           //定时1秒时间到
    {
      Get_ADC0_Value();       //进行A/D转换并读取数据
      UR0SendString(dat,4);   //向上位机发送数据
      F_time = 0;             //定时1秒标志清0
    }
  }
}

【结语】:

关于CC2530微控制器入门基础教程到此大功告成。

理解并能独立完成上述6个基本模块的应用,可以说基本上掌握了CC2530的基础应用,为日后学习Zigbee组网应用打下了良好的基础。

对于CC2530来说,进行低功耗无线组网应用才是它的真正使命。有了我们入门的基础,后面如果有时间,我会把OSAL操作系统z-Stack协议栈的应用再做两个系列的教材,让大家真正的掌握CC2530的应用精髓。

--------------------------------------------------------------------------------------------------------------------

时间: 2024-10-15 17:46:26

【CC2530入门教程-06】CC2530的ADC工作原理与应用的相关文章

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码

[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-终端源码 广东职业技术学院 欧浩源 一.关于硬件电路 关于这个综合实训案例,具体需求详见<[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-题目需求>. 我自己实在"全国职业院校技能大赛--物联网技术应用赛项"的Zigbee模块上实现的.该模块的电路应该和TI公司官方评估板的推荐电路差不多,我想现在市面上很多开发板也是参考这样的电路设计,只要您使用的开发板上有LED灯.按键输入.串口输出和一路A/

【CC2530入门教程-03】CC2530的中断系统及外部中断应用

第3课  CC2530的中断系统及外部中断应用 广东职业技术学院  欧浩源 一.中断相关的基础概念  内核与外设之间的主要交互方式有两种:轮询和中断. 轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件:中断系统使得内核具备了应对突发事件的能力. 在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行. 这种程序在执行过程中由于外界的原因而被中间打断的

【CC2530入门教程-05】CC2530的串行接口原理与应用

第5课  CC2530的串行接口原理与应用 广东职业技术学院  欧浩源 一.并行通信与串行通信 微控制器与外设之间的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信. 并行通信:指数据的各位同时发送或接收,每个数据位使用单独的一条导线.传输速度快.效率高,但需要的数据线较多,成本高. 串行通信:指数据一位接一位地顺 序发送或接收.需要的数据线少,成本低,但传输速度慢,效率低. 二.CC2530的串口通信模块 CC2530有两个串行通信接口USART0和USART1,它们能

【ENVI入门教程06】自定义RPC文件图像正射校正、正射校正部分利用CLASSIC

文章中涉及的是5.X版本里面的正射校正方法,这里我采用ENVI classic部分进行同样效果的操作,方便5.X以下版本的参考,方法中有不正确的部分请及时联系我纠正. (一)打开和关联DEM 打开完成了第一步的SPOT4(即有了RPC info的)影像,同时打开DEM数据. 在SPOT4.tif右键EDIT HEADER,在这里选择edit attributes->associate DEM file,选择existing的文件,即这里的DEM Layer-1,点击OK即可. (二)进行正射校正

一步步Cobol 400上手自学入门教程06 - 子程序调用

子程序的命名通常和普通程序的命名方式相同.但是需要注意的是,对于子程序而言,不可将其前缀命名为以下这几个名字. AFB           AFH           CBC          CEE          EDC IBM            IFY             IGY            IGZ            ILB 实际上,以上名字都属于IBM相关产品的名字.如果将子程序的前缀命名为以上名字,则在主程序中将不能对其进行调用.当在主程序中试图调用该子程序时,

ArcGIS教程:模糊叠加的工作原理

模糊叠加工具可以对多准则叠加分析过程中某个现象属于多个集合的可能性进行分析.模糊叠加不仅可以确定某个现象可能属于哪个集合,还可以分析多个集合的成员之间的关系. 叠加类型列出了适用于根据集合理论分析来合并数据的一些方法.每种方法都可以对属于各种输入准则的每个单元的成员进行探究.可用的方法有 Fuzzy And.Fuzzy Or.Fuzzy Product.Fuzzy Sum 以及 Fuzzy Gamma.每种方法都向多个输入准则提供了每个单元的成员的不同方面. Fuzzy And Fuzzy An

ArcGIS教程:模糊分类的工作原理

模糊分类工具基于属于指定集合的概率对输入数据进行重分类或转换至介于 0 到 1 的范围内.0 分配给确定不属于指定集合的位置,1 分配给确定属于指定集合那些值,0 到 1 之间整个范围的概率分配给某些等级的可能成员(值越大,概率越大). 可以使用 ArcGIS Spatial Analyst 扩展模块中任意数量的可用函数和运算符对输入值进行转换,将这些值重分类为 0 到 1范围内的概率范围.但是,模糊分类工具允许根据一系列适用于模糊化处理的特定函数对连续的输入数据进行转换.例如,模糊线性分类函数

ArcGIS教程:填挖的工作原理

汇(和峰)是由于数据的分辨率或将高程四舍五入到最近的整数值而产生的常见错误. 应对汇进行填充以确保盆地和河流得以正确划分.如果未对汇进行填充,则生成的水系网络可能会呈现不连续性. 填挖工具使用与焦点流.流向.汇.分水岭和区域填充等工具等效的功能来定位和填充汇.该工具的执行过程会进行迭代,直到指定 z 限制内的所有汇均填充完毕.在填充汇的同时,可能会在填充区域的边界处创建其他汇,这些汇将在下个迭代中移除. 该工具也可用于移除峰,峰是一种伪像元,其高程高于所预期的高程(以周围表面的趋势为基准). 对

Spring Boot入门教程大纲

Spring Boot教程之Spring基础 Spring Boot教程1--Spring概述 Spring Boot教程2--Spring项目快速搭建 Spring Boot教程3--Spring基础配置 Spring Boot教程之Spring常用配置 Spring Boot教程4--@Scope注解 Spring Boot教程5--Spring EL-Spring表达式语言 Spring Boot教程6--Bean的初始化和销毁 Spring Boot教程7--Profile Spring