疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)

(十二)AD转换器

ADC10是MSP430 单片机的片上模数转换器,其转换位数为10比特,该模块内部是一个SAR型的AD内核,可以在片内产生参考电压,并且具有数据传输控制器。数据传输控制器能够在CPU不参与的情况下,完成AD数据向内内存任意位置的传输。

ADC模块的常用性能指标

分辨率:与ADC的位数相关
量化误差:和分辨率是统一的,1/2LSB
转换精度:ADC实际转换的误差
转换时间:完成一次模数转换的时间
另外还有电压范围、工作温度、接口特性、输出形式等

ADC10 主要特点

  • 最大转换速率大于200ksps
  • 转换精度为10位
  • 采样保持器的采样周期可通过编程设置
  • 可利用软件或者TimerA 设置转换初始化
  • 编程选择片上电压参考源,选择1.5V或者2.5V
  • 编程选择内部或者外部电压参考源
  • 8个外部输入通道
  • 具备对内部温度传感器、供电电压VCC和外部参考源的转换通道
  • 转换时钟源可选择
  • 多种采样模式:单通道采样、序列通道采样、单通道重复采样、序列通道重复采样
  • 提供自动数据传输方法
  • ADC的内核和参考源可分别单独关

ADC10模块工作的核心是ADC10的核,即图中的10-bit SAR(逐次逼近模数转换器)。ADC10的核将模拟量转换成10位数字量转换成10位数字量并储存在ADC10MEM寄存器里。

这个核使用VR+和VR-来决定转换模拟值的高低门限。当输入电压超过VR+时它会停在03FFh,当输入门限低于VR-时它会停在0上。采样计算公式为

NADC=1023*(VIN-VR-)/(VR±VR-)

输入的电压不能超过VR+和VR-。而VR+和VR-是可选的,在控制寄存器ADCCCTL0中选择。

Regiter Short Form Register Type Address Initial state
ADC 10 input enable register 0 ADC10AE0 Read/Write 04Ah Reset with POR
ADC 10 input enable register 1 ADC10AE1 Read/Write 04Bh Reset with POR
ADC 10 control register 0 ADC10CTL0 Read/Write 01B0h Reset with POR
ADC 10 control register 1 ADC10CTL1 Read/Write 01B2h Reset with POR
ADC 10 memory ADC10MEM Read 01B4h Unchanged
ADC 10 data transfer control register 0 ADC10DTC0 Read/Write 048h Reset with POR
ADC 10 data transfer control register 1 ADC10DTC1 Read/Write 049h Reset with POR
ADC 10 data transfer start address ADC10SA Read/Write 01BCh 0200h with POR

控制寄存器:ADC10CTL0;ADC10CTL1
通道使能:ADC10AE0,ADC10AE1
转换结果寄存器:ADC10MEM

注意:ADC10 转换需要处理的问题

  • ADC10相应准备设置:时钟、参考电压、设置具体模式、通道选择等
  • 输入模拟信号
  • 选择启动信号
  • 关注转换结束信号
  • 存放转换数据以及采用何种方式获取数据

ADC模块开启:ADC10ON=1(ADC10CTL0中)

选择ADC时钟频率(时间):用于采样或是转换时间的时钟ADC10CLK。

ADC10CLK可通过ADC10SSELx位进行选择,通过ADC10DIVx进行分频。可供选择的ADC10CLK时钟源是SMCLK,MCLK,ACLK或者是内部晶振ADC10OSC(可在ADC10CTL1中选择)

采样和保持时间选择:

ADC10CTL0中的ADC10SHTx选择:
时间可以是4,8,16,64个ADC10CLK周期

ADC10CTL0

当ENC=0时 ADC10CTL0的内容才可以被修改
(11、12)、(4)

ADC10SHTx:ADC10采样和保持时间设置位
00 4个ADC10CLK周期:01 8个ADC10CLK周期
10 16个ADC10CLK周期:11 64个ADC10CLK周期

ADC10CTL1

当ENC=0时 ADC10CTL0的内容才可以被修改
(7、6、5、4、3)

ADC10SSELx:ADC10时钟源选择
00 ADC10OSC;01 ACLK;10 MCLK;11 SMCLK
ADC10DIVx:ADC10时钟分频选择

000 1分频;001 2分频;010 3分频;011 4分频
100 5分频;101 6分频;110 7分频;111 8分频

转换参考电压选择:VR+和VR-在控制寄存器ADCCTL0中选择


(15、14、13)(10、9、8)(6、5)

SREFx:基准源选择位
000 VR+=VCC VR-=VSS
001 VR+=VREF+ VR-=VSS
010 VR+=Veref+ VR-=VSS
011 VR+=Buffered VeREF+ VR-=VSS
100 VR+=VCC VR-=VREF-/VeREF-
101 VR+=VREF+ VR-=VREF-/VeREF-
110 VR+=VeREF+ VR-=VREF-/VeREF-
111 VR+=BufferedVeREF+ VR-=VREF-/VeREF-

ADC10参考电压有6种,可以编程选择,分别为VR+与VR-的组合,其中,VR+有AVCC、VREF+和VeREF+,VR-有AVSS、VREF-和VeREF

注意:

10位ADC,外部基准 (仅限MSP430G2*53)

  1. 在转换期间采用外部基准,以对电容阵列过行充电和放电。在转换期间,输入电容,即C1,是外部基准的动态负载,基准电源的动态阻抗也遵照有关模拟源阻抗的建议,以使充电稳定在10位准确度。
  2. 准确度限定了最小的正外部基准电压,对于较低的准确度要求,可以施加较低的基准电压电平。
  3. 在此条件下,外部基准在内部运行缓冲,基准缓冲器处于运行状态,并需要基准缓冲器电源电流IREFB,流耗可被限制为REBURST=1的采样及转换周期。
  4. 准确度限定了最大的负外部基准电压,对于较低的准确度要求,可以追加较高的基准电压电平。
  5. 准确度限定了最小的外部差分基准电压,对于较低的准确度要求,可以追加较低的差分基准电压电平。

REFOUT:参考源输出控制位
0 参考源输出关闭
1 参考源输出开启

REFBURST:可利用此位降低功耗
0 参考源一直开启
1 只有在采样和转换时开启参考源

REF2_5V:参考源电压选择位,更改时REFON必须开启
0 参考源电压1.5V
1 参考源电压2.5V

REFON:参考源开关
0 参考源关闭
1 参考源开启

ADC10SR:ADC10 采样率设置位
0 参考缓冲器支持高达200ksps的采样速度
1 参考缓冲器支持高达50 ksps的采样速度

选择通道:在寄存器ADC10CTL1中的INCHx进行选择
通道模式:在寄存器ADC10CTL1中的CONSEQx进行选择

INCHx:通道选择
0000 A0; 0001 A1;
0010 A2; 0011 A3;
0100 A4; 0101 A5;
0110 A6; 0111 A7;
1000 VeREF+
1001 VREF-/VeREF-;
1010 内部温度传感器
1011(VCC-VSS)/2

ADC10转换模式选择

CONSEQx 模式 操作
00 单通道单次采样 一个通道被采样转换一次
01 序列通道采样 多个通道被依次采样转换
10 单通道重复采样 一个通道被多次采样转换
11 序列通道重复采样 多个通道被重复采样转换

ISSH:输入采样信号反转
0 输入的采样信号不反转
1 输入的采样信号反转

通道打开:相应的通道使能
ADC10输入能使寄存器有ADC10AE0和ADC10AE1两个,ADC10AE0对应8个外部通道,ADC10AE1可对应使能A12到A15,ADC10AE1只存在于MSP430F22x中。

ADC10AEO寄存器结构如下图所示

从低位到高位分别对应使能通道A0到A7,只要对应的位置1,则对应的通道被使能

触发AD转换

当SHSx=0,ENC=1时,ADC10SC可触发采样开始。或者用TIMERA进行触发采样,当ENC的上升沿到来之后,他将等待TIMERA所产生的PWM波进行触发

SHSX:采样保持源选择
00 ADC10SC位; 01 Timer_A.OUT1
10 Timer_A.OUTo ; 11 Timer_A.OUT2

ENC:采样使能开关
0 ADC10使能关闭; 1ADC10使能开启

ADC10SC:采样开始
0停止采样,1开始采样

MSC:多重采样和转换。这一位只用于序列或重复采样模式。
0 SHI信号的上升沿触发每个采样和转换。
1 SHI信号的第一个上升沿触发采样定时器,但是进一步的采样和转换只有在前一次的转换完成时才进行。

四种工作模式

1、单通道单次采样模式

  • 单个被INCHx所选中的通道x被采样并转换一次。ADC结果被写入ADC10MEM寄存器。可用ADC10SC触发一次转换,当切换至其他触发源时,在两次转换之间,ENC需要被切换 。

  • 在采样模式0下,首先令ADC10ON=1即开启ADC10模
    块,接着确定采样通道x,然后等待触发。

  • 当SHS=0,ENC=1时,ADC10SC可触发采样开始。或者用TIMERA进行触发采样,当ENC的上升沿到来之后,它将等待TIMERA所产生的PWM波进行触发。

  • ADC10采样完成后,经过12个ADC10CLK的时钟周期进行采样结果转换,再经过1个ADC10CLK的时钟周期,ADC10将转换后的结果存入寄存器ADC10MEM,同时ADC10的中断标志位ADC10IFG被置1。

  • 在转换过程中的任意时刻,如果将ENC置0则会关闭ADC10模块。

2、序列通道采样模式ADC10在这种工作模式下,INCHx中值意义和在单通道单次采样模式下不同,INCHx写入的通道时序列通道中的最高通道,采样开始后采样通道从选中的通道依次转换到通道0,并且只完成一次序列通道采样。每一个ADC采样结果都会被存入ADC10MEM寄存器。当转换到通道零时,转换序列会停止。可以使用ADC10SC来触发一个序列的转换。当其他的触发源被使用时,ENC必须被复位。
3、单通道重复采样模式在这种模式下,一个被INCHx可以被选中通道x被
多次采样转换。每次转换结果,都将被存入ADC10MEM寄存器。若旧的值未被读取,则新的值将被旧的值所覆盖。
4、序列通道重复采样模式这种模式和序列通道采样模式基本相同,采样通道从INCHx所选中的通道开始依次转换到通道0,然而在这种工作模式下ADC10可进行重复序列通道采样。ADC10每次转换结果都会被写入ADC10MEM寄存器的值。每次采样完成之后,会自动将通道值重新置入INCHx。

例1:用单通道重复采样模式对A1进行采样,将采样结果20次求平均,然后将结果存在变量ADC10_Result内。假设选择2分频后的ACLK做采样时钟,选择内部参考源2.5V,ADC10SC触发采样,禁止ADC10中断,采样时间设置为64个采样时钟。

int ADC10_Result;
ADC10CTL1 |=CONSEQ_2;          //单通道重复采样模式ADC10CTL0 |=SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源ADC10CTL0 | =ADC10SHT_3+MSC: //过采样率设置为64个采样周期,打开AD转换ADC10CTL1 |= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2 分频为采样时钟,用ADC10SC 触发采集ADC10CTL1 |=INCH_1: //选择通道 A1ADC10CTL0 |= ADC100N; //开启 ADC10ADC10AE0 |= 0x02; //开启外部通道 Alfor(int i=0;i(20;i++){ADC10CTL0 =ENC+ADC10SC; //开始转换while((ADC10CTL0 &ADC10IFG)==0);//等待 ADC10IPG标志变高(转换完成)ADC10_Result+=ADC10MEM; //读取采样结果}ADC10_Result= ADC10_Result/20;

例2:用序列通道采样模式对通道A1、A5、A7采样,将采样结果在中断中读出,并将A1、A5、A7采样的结果分别存入ADC10_A1[ ]、ADC10_A5[ ]和ADC10_A7[ ]数组中。选择SMCLK无分频作为采样时钟,选择内部参考源1.5V,ADC10SC触发采样,采样时间设置为16个采样时钟周期。

unsigned int u=7;
unsigned int ADC_timers =0;
unsigned int ADC_Result[8];
unsigned int ADC10_A1[20];
unsigned int ADC10_A5[20]:
unsigned int ADC10_A7[20];void main (){
VDTCTL=WDTPW-WDTHOLD: //关闭看门狗
ADC10CTL1 |= CONSEQ_1;
ADC10CTL0 |=SREF_1+REFON+ADC10IE://选择内部参考源1.5V,开启AD允许中断
ADC10CTL0 |=ADC10SHT_2+MSC; //打开 AD 转换,过采样率设置为 16 个采样周期ADC10CTL1 = ADC10SSEL_3+SHS_0;//选择 SMCLK 无分作为采样时钟,ADC10SC触发采集ADC10CTL1 |=INCH_7; //最高通道设为通道 7
ADC10CTL0 | = ADC100N; //打开 ADC10 模块
ADC10AE0 l= 0xal; //开启通道 A1、A5、A7_bis_SR_register(GIE); //开总中断while(1)
{ADC10CTL0 |=ENC+ADC10SC; //开始转换for(int i=0;i<10000;i++); //加入延时等待 ADC10一轮序列通道采样完成
}}// AD采样中断,没完成一次采样中断一次,将采样值存入数组AD_Result[10]然后将想要的采样值读出#pragma vector=ADC10_VECTOR
_interrupt void ADC10_ISR (void)
{ADC_Result[u]=ADC10MEM;u--;if(u>8){u=7;ADC10_A7[AD_timers]=ADC_Result[7]:ADC10_A5[AD_timers]=ADC_Result[5];ADC10_A1[AD_timers]=ADC_Result[1];ADC_timers++;}
}

疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)----(十二)AD转换器相关推荐

  1. java玩转区块链-基础篇-账户

    java玩转区块链-基础篇--账户 java环境配置 基础概念 账户 maven包引用 创建账户代码 代码解释 (1) (2) (3) (4) 可以不让搞,但是不允许你不会 java环境配置 jdk版 ...

  2. java玩转区块链-基础篇-solidity语法-基础类型

    java玩转区块链-基础篇-solidity语法-基础类型 java环境配置 代码准备 maven 完整solidity 执行步骤 基础类型 布尔类型 类型标识: 字面常量值: 运算符: 短路规则: ...

  3. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)——(二)MSP-ESP430G2 语言

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (二)MSP-ESP430G2 语言 关键字: if if-else for switch case while do-while break ...

  4. 【对讲机的那点事】带你玩转宝锋UV6R对讲机(二)

    接上文小编继续带你玩转宝锋UV6R对讲机的恢复出厂设置及VFO复位: ●恢复出厂设置 如果由于误操作或设置错误导致本机出现故障现象,复位微处理器可能会解决问题.可以使用此功能操作,将本机的所有设置及信 ...

  5. 独立艺术家大谷spizher带你玩转PaddleGAN

    一个曾被 "卷积网络之父"Yann LeCun(杨立昆)誉为「过去十年计算机科学领域最有趣的想法之一」,是近年来火遍全网,AI 研究者最为关注的深度学习算法方向之一,GAN--生成 ...

  6. 一篇文章带你玩转C语言基础语法5:条件判断 if else 语句与分支 。(千字总结)

    我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位

  7. 一篇文章带你玩转C语言基础语法。2:数据类型。千字总结

    我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位

  8. 稀土掘金首页沸点课程直播活动竞赛商城APP邀请有礼插件探索稀土掘金搜索创作者中心vip会员4Java查序的头像一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习

    题目描述 解题思路 由题可知,要求输出是按照二叉树每层的元素来做输出 我使用队列来对二叉树每层元素进行存储和输出 根据队列的长度可以判断出当前层的元素个数并遍历 首先去判断入参是否为 null 如果为 ...

  9. 玩转RAW格——基础篇

    一.什么是RAW文件? RAW文件主要是一种记录了数码相机传感器的原始信息,同时伴随着一些由相机所产生的一些元数据(metadata,诸如IS0的设置.快门速度.光圈值.白平衡等)的文件.不同的相机制 ...

  10. 【博学谷学习记录】超强总结,用心分享丨大数据超神之路(五):Hadooop基础篇

    文章目录 前言 1.编译源码 1.1 官网下载编译后的包 1.2 手动编译 1.2.1 安装编译相关的依赖 1.2.2 手动安装cmake3.13.5 1.2.3 手动安装snappy1.1.3 1. ...

最新文章

  1. centos7 python3安装numpy_Centos7安装python3、numpy、scipy、matplotlib、pandas等
  2. oracle中treat函数,Oracle 函数概览
  3. Ubuntu快速截图
  4. int最大值java_Java 中一个int型数组的求最大值最小值 | 学步园
  5. python中面向对象_简述Python中的面向对象编程的概念
  6. codeforces 118A-C语言解题报告
  7. 2019年信息安全工程师备考经验
  8. MySQL中concat以及group_concat的使用
  9. 回击华为!高通:支持Sub-6GHz和毫米波双频段的5G基带才是真5G
  10. Ifc 人工解析——拿墙IfcWallStandardCase来举例说明
  11. 苹果手机有护眼模式吗_调节明暗度等于手机护眼模式?看完真懂了
  12. cisco ASA ios升级或恢复
  13. 使用CVXQUAD时出现,函数或变量 ‘op_rel_entr_epi_cone‘ 无法识别。
  14. 利用screen命令将程序挂在linux后台
  15. 中国首款前装L3自动驾驶卡车发布:一汽解放制造,京东车队运营
  16. 研究google搜索框代码
  17. js——浏览器缓存(http缓存)和本地存储
  18. 【百川云栖分享】孤星:移动网络体验的升级——手淘海量移动网络服务的探索...
  19. 2022定格 以史为鉴 擘画未来 砥砺2023
  20. C/C++开发,根据磁盘或网卡创建软件License约束(c++)

热门文章

  1. TestDirector概念
  2. 10大排序算法时间复杂度和空间复杂度总结
  3. matlab信号系统实验报告,信号与系统 MATLAB实验报告
  4. 计算机研究生就业方向之互联网安全
  5. elementui DateTimePicker组件 限制时间范围(包含时分秒)
  6. 服务器系统兼容性问题,微软表示因兼容性问题,部分用户无法升到Windows10最新版本...
  7. 三极管和MOS管驱动电路的正确用法
  8. 使用PyTorch+OpenCV进行人脸识别(附代码演练)
  9. 一张六西格玛证书,换取五十万年薪 -- 优思学院
  10. 脸打肿都不要忘了呀,Java 重写时应当遵守的 11 条规则!!