疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)----(十二)AD转换器
疯狂的大柚柚带你玩转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)
- 在转换期间采用外部基准,以对电容阵列过行充电和放电。在转换期间,输入电容,即C1,是外部基准的动态负载,基准电源的动态阻抗也遵照有关模拟源阻抗的建议,以使充电稳定在10位准确度。
- 准确度限定了最小的正外部基准电压,对于较低的准确度要求,可以施加较低的基准电压电平。
- 在此条件下,外部基准在内部运行缓冲,基准缓冲器处于运行状态,并需要基准缓冲器电源电流IREFB,流耗可被限制为REBURST=1的采样及转换周期。
- 准确度限定了最大的负外部基准电压,对于较低的准确度要求,可以追加较高的基准电压电平。
- 准确度限定了最小的外部差分基准电压,对于较低的准确度要求,可以追加较低的差分基准电压电平。
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转换器相关推荐
- java玩转区块链-基础篇-账户
java玩转区块链-基础篇--账户 java环境配置 基础概念 账户 maven包引用 创建账户代码 代码解释 (1) (2) (3) (4) 可以不让搞,但是不允许你不会 java环境配置 jdk版 ...
- java玩转区块链-基础篇-solidity语法-基础类型
java玩转区块链-基础篇-solidity语法-基础类型 java环境配置 代码准备 maven 完整solidity 执行步骤 基础类型 布尔类型 类型标识: 字面常量值: 运算符: 短路规则: ...
- 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)——(二)MSP-ESP430G2 语言
疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (二)MSP-ESP430G2 语言 关键字: if if-else for switch case while do-while break ...
- 【对讲机的那点事】带你玩转宝锋UV6R对讲机(二)
接上文小编继续带你玩转宝锋UV6R对讲机的恢复出厂设置及VFO复位: ●恢复出厂设置 如果由于误操作或设置错误导致本机出现故障现象,复位微处理器可能会解决问题.可以使用此功能操作,将本机的所有设置及信 ...
- 独立艺术家大谷spizher带你玩转PaddleGAN
一个曾被 "卷积网络之父"Yann LeCun(杨立昆)誉为「过去十年计算机科学领域最有趣的想法之一」,是近年来火遍全网,AI 研究者最为关注的深度学习算法方向之一,GAN--生成 ...
- 一篇文章带你玩转C语言基础语法5:条件判断 if else 语句与分支 。(千字总结)
我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位
- 一篇文章带你玩转C语言基础语法。2:数据类型。千字总结
我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位
- 稀土掘金首页沸点课程直播活动竞赛商城APP邀请有礼插件探索稀土掘金搜索创作者中心vip会员4Java查序的头像一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习
题目描述 解题思路 由题可知,要求输出是按照二叉树每层的元素来做输出 我使用队列来对二叉树每层元素进行存储和输出 根据队列的长度可以判断出当前层的元素个数并遍历 首先去判断入参是否为 null 如果为 ...
- 玩转RAW格——基础篇
一.什么是RAW文件? RAW文件主要是一种记录了数码相机传感器的原始信息,同时伴随着一些由相机所产生的一些元数据(metadata,诸如IS0的设置.快门速度.光圈值.白平衡等)的文件.不同的相机制 ...
- 【博学谷学习记录】超强总结,用心分享丨大数据超神之路(五):Hadooop基础篇
文章目录 前言 1.编译源码 1.1 官网下载编译后的包 1.2 手动编译 1.2.1 安装编译相关的依赖 1.2.2 手动安装cmake3.13.5 1.2.3 手动安装snappy1.1.3 1. ...
最新文章
- centos7 python3安装numpy_Centos7安装python3、numpy、scipy、matplotlib、pandas等
- oracle中treat函数,Oracle 函数概览
- Ubuntu快速截图
- int最大值java_Java 中一个int型数组的求最大值最小值 | 学步园
- python中面向对象_简述Python中的面向对象编程的概念
- codeforces 118A-C语言解题报告
- 2019年信息安全工程师备考经验
- MySQL中concat以及group_concat的使用
- 回击华为!高通:支持Sub-6GHz和毫米波双频段的5G基带才是真5G
- Ifc 人工解析——拿墙IfcWallStandardCase来举例说明
- 苹果手机有护眼模式吗_调节明暗度等于手机护眼模式?看完真懂了
- cisco ASA ios升级或恢复
- 使用CVXQUAD时出现,函数或变量 ‘op_rel_entr_epi_cone‘ 无法识别。
- 利用screen命令将程序挂在linux后台
- 中国首款前装L3自动驾驶卡车发布:一汽解放制造,京东车队运营
- 研究google搜索框代码
- js——浏览器缓存(http缓存)和本地存储
- 【百川云栖分享】孤星:移动网络体验的升级——手淘海量移动网络服务的探索...
- 2022定格 以史为鉴 擘画未来 砥砺2023
- C/C++开发,根据磁盘或网卡创建软件License约束(c++)
热门文章
- TestDirector概念
- 10大排序算法时间复杂度和空间复杂度总结
- matlab信号系统实验报告,信号与系统 MATLAB实验报告
- 计算机研究生就业方向之互联网安全
- elementui DateTimePicker组件 限制时间范围(包含时分秒)
- 服务器系统兼容性问题,微软表示因兼容性问题,部分用户无法升到Windows10最新版本...
- 三极管和MOS管驱动电路的正确用法
- 使用PyTorch+OpenCV进行人脸识别(附代码演练)
- 一张六西格玛证书,换取五十万年薪 -- 优思学院
- 脸打肿都不要忘了呀,Java 重写时应当遵守的 11 条规则!!