历史上的今天
返回首页

历史上的今天

今天是:2025年01月19日(星期日)

正在发生

2021年01月19日 | MSP430G2553ADC要点总结

2021-01-19 来源:eefocus

一、 ADC10的结构

①10位ADC内核

ADC10内核是一个10位的模/数转换器,并能够将结果存放在转换存储器中。该内核使用两个可编程的参考电压(VR+和VR-)定义转换的最大值和最小值。**当输入模拟电压等于或者高于VR+时, ADC10输出满量程值03FFH,当输入电压等于或小于VR-时, ADC10输出0。**输入通道和参考电压定义在转换控制存储器中。转换结果可以是直接的二进制或者是补码格式。当使用二进制时转换公式是:
N_ADC=1023×(V_IN-V_(R-))/(V_(R+)-V_(R-) )

  • 控制寄存器 : ADC10CTL0和ADC10CTL1来配置

  • 开关控制 : ADC10ON

  • 除少数例外,ADC10的控制位只有在ENC=0的条件下才能被修改。在任何转换开始之前必须把ENC置位。

  • ADC10CLK既是转换时序,又是采样时钟。通过控制位ADC10SSELx来选择ADC10的时钟源,ADC10DIVx位可以将时钟进行1到8分频。 ADC10CLK的时钟源有SMCLK、MCLK、 ACLK和内部振荡器ADC10OSC。ADC10OSC是内部生成的频率约5MHz的时钟,受芯片本身及供电电压、温度等因素的影响。


②ADC10模拟多路器

ADC10只有一个内核,当对多个模拟信号进行采样并进行A/D转换时,需要用到多路选择器分时接通每一个模拟信号,完成一次采样和转换。 ADC10配置有8路外部通道和4路内部通道,通过A0~A7实现外部8路模拟信号输入, 4路内部通道可以将VeREF+、VREF-/VeREF-、(AVcc-AVss) /2以及片内温度传感器的输出作为待转换模拟输入信号。内部通道的测量可以用于监控有关ADC10的自检、校验和诊断功能以及芯片内的温度。
ADC10外部输入Ax, VREF+和VREF-共用I/O端口,这些数字CMOS门电路在模拟信号通过时易产生寄生电流,禁止端口管脚的缓冲功能可以减少寄生电路并降低整体能耗。关闭这些I/O的输入输出寄存器可以使用控制位ADC10AEx。

③参考电压发生器

ADC10模块内部有两个可选择的参考电压,设置REFON=1时,内部参考电压可用。控制位REF2_5V=1,内部参考电压是2.5V; REF2_5V=0,参考电压1.5V。内部参考电压既可用在模块内部(REFOUT=0),也可以在器件具备管脚VREF+和VREF-的前提下,通过管脚VREF+输出(REFOUT=1)。
外部参考电压可以分别通过管脚A4和A3给VR+和VR-使用。当使用外部参考电压或使用Vcc作为参考电压时,内部参考电压可以关闭以节省能耗。
外部正参考电压VeREF+可以通过控制位SREF0=1、SREF1=1来进行缓存设置,这样在使用外部参考电压时具有大的内阻,从而降低了电流消耗。当REFBURST=1时增加的电流消耗仅限于采样和转换过程。ADC10内部参考电压发生器的设计上考虑了低功耗应用,在使用中可以参考用户说明的设置,将不使用的部分关闭掉以最大限度地节省能耗。
④采样与转换时序
*采样输入信号SHI的上升沿触发一次模/数转换。*控制位SHSx来设定SHI的源,这些源包括:
• ADC10SC位
• Timer_A输出单元1
• Timer_A输出单元0
• Timer_A输出单元2
SHI信号源的极性可以通过ISSH位的设置而翻转。控制位SHTx的设定选择采样时间tsample分别为4、 8、 16、 64个ADC10CLK周期。采样定时器在设定采样时间后置位SAMPCON,并与ADC10CLK同步,所以采样时间应该是tsample与tsync之和。当SAMPCON由高变低时触发模/数转换开始,模/数转换需要13个ADC10CLK周期。
时序图

二、 ADC10转换模式

ADC10有四种转换模式,控制位CONSEQx设定不同工作模式,如下

CONSEQx模式操作描述
00单通道单次转换一个模拟信号通道,只转换一次
01序列通道单次转换多个模拟信号通道,每个通道转换一次
10单通道重复转换一个模拟信号通道,重复模/数转换
11序列通道重复转换多个模拟信号通道,顺次重复模/数转换

①单通道单次转换

INCHx选择单通道并采样和转换一次。模/数转换结果写到ADC10MEM中。如下图示是单通道单次模式的流程图。当ADC10SC触发模/数转换时(软件设置触发),控制位ADC10SC可以成功触发一次模/数转换。当使用其它触发源时, ENC必须在每次模/数转换之间进行状态切换。
在这里插入图片描述

② 序列通道单次转换

多个通道顺次被采样和转换一次。序列开始于选择位INCHx并递减到A0通道。每次模/数转换的结果被写入ADC10MEM中,当A0通道转换完成后停止工作。如下图示是序列通道单次转换流程图。当ADC10SC触发该序列模/数转换开始时,不需要ENC状态切换;当其它触发源用于触发序列转换开始时, ENC必须在每一个序列之间切换状态。
在这里插入图片描述

③ 单通道重复转换

由INCHx选定输入通道后,采样和模/数转换连续重复进行。每一次ADC转换结果被写入ADC10MEM中。如下图示是单通道重复转换流程图。
在这里插入图片描述

④ 序列通道重复转换

多个模拟通道被顺次采样和转换后重复前面的过程。通道序列从INCHx开始递减到通道A0。每一个ADC转换结果被写入ADC10MEM中。序列在通道A0完成转换后,有触发信号重新下一轮序列转换开始。此模式的转换流程图如下所示
在这里插入图片描述

⑤ 使用控制位MSC

在多次重复采样/转换时,可以使用控制位MSC将转换过程尽可能快地自动连续起来。具体设置如下表所示。

有效条件MSC具体操作内容
CONSEQx>00每次转换需要SHI信号的上升沿触发采样定时器
CONSEQx>01仅首次转换由SHI信号的上升沿触发采样定时器,而后采样转换将在前一次转换完成后立即进行

⑥停止ADC10的方法

如何停止ADC10取决于在哪种转换模式下,以下是推荐使用的方法,用来停止单次转换和序列转换:
• 在单通道单次转换模式下,复位ENC能够立刻停止模/数转换,但是结果是不可信的。若要获得正确的转换结果,可以查询ADC10BUSY位,直到该位复位后再清除ENC,这样得到的转换结果是可信的。
• 在单通道重复转换模式下,复位ENC将在当前模/数转换完成后ADC10停止工作。
• 在一个序列或者重复序列工作模式下,复位ENC将使得ADC10在当前序列完成后停止工作。
• 任何模式下,如果设定CONSEQx=0并复位ENC,则ADC10模块停止工作。得到转换数据是不可信的。

三、 ADC10数据传输控制器

ADC10模块有一个数据传输控制器(DTC), DTC自动传输模/数转换结果从ADC10MEM到片上其他内存单元。通过设定ADC10DTC1寄存器为非0值便使能了DTC。当DTC工作时,每次ADC10模块完成一次模/数转换并将结果写入ADC10MEM中,就将触发一次数据传输。在传输预定义数量数据完成之中,不允许有其他软件干预。每一次DTC传输需要一个CPU周期(MCLK)。在数据传送期间,为避免任何总线干扰,CPU除执行传输必须的那个机器周期外则时钟处于停止状态。
在ADC10模块处于工作状态时,无法初始化DTC传输。所以在配置DTC时需要保证没有处于模/数转换中或者队列转换中。

ADC10CTL0 &= ~ENC;while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active12

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、 ADC10中断系统

在这里插入图片描述
ADC10模块有一个中断向量,中断系统如上图示。当DTC不使用时(ADC10DTC1=0),每次模/数转换完成将结果写入ADC10MEM时ADC10IFG被置位;当DTC使用时,每次数据传输完毕或者内部传输计数器为0时, ADC10IFG被置位。在ADC10IE和GIE都使能的前提下, ADC10IFG将生成中断请求。在中断请求被响应后中断标志位ADC10IFG自动复位,或者可以软件清除中断标志位。

五、 ADC10寄存器

在这里插入图片描述
在这里插入图片描述


六、 ADC10程序实例

例一

#include "msp430g2553.h"

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON,

//interrupt enabled

ADC10CTL1 = INCH_1; // input A1

ADC10AE0 |= 0x02; // PA.1 ADC option select

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit

if (ADC10MEM < 0x1FF)

P1OUT &= ~0x01; // Clear P1.0 LED off

else

P1OUT |= 0x01; // Set P1.0 LED on

}

}


// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)

{

__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)

}


本例中采用A1通道的单次采样,默认参考电压AVcc。使用软件设置ADC10SC启动采样和转换,转换完成后ADC10SC自动清除复位。通过设定ADC10SHTx控制采样和转换时间是16× ADC10CLKs。在主程序循环中,使用MSP430的低功耗模式LPM0,等待模/数转换完成,触发ADC10中断,在中断中退出LPM0,返回主程序判断A1通道的采样值,依据采样值的大小设定P1.0。


例二


#include "msp430g2553.h"

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

ADC10CTL1 = ADC10DF + INCH_1; // Conversion code singed format, input A1

ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled

ADC10AE0 |= 0x02; // P1.0 ADC option select

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit

if ((int)ADC10MEM < 0)

P1OUT &= ~0x01; // Clear P1.0 LED off

else

P1OUT |= 0x01; // Set P1.0 LED on

}

}


// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR (void)

{

__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)

}


这个例子中与上例不同的是采用的是带符号数表征ADC10的转换值。


例三


#include "msp430g2553.h"

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

ADC10CTL1 = INCH_11; // AVcc/2

ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON;

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

while (ADC10CTL1 & ADC10BUSY); // ADC10BUSY?

if (ADC10MEM < 0x311) // ADC10MEM = A11 > 0.65?

P1OUT |= 0x01; // Set P1.0 LED on

else

P1OUT &= ~0x01; // Clear P1.0 LED off

}

}


本例中使用A11通道,测量的是AVcc/2,参考电平选择内部参考电平VREF的1.5V。从而将该测量成为测定电池电压的应用。程序中使用了查询ADC10BUSY,以判断模/数转换是否完成。


例四


#include "msp430g2553.h“

unsigned short buf[0x20];

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

ADC10CTL1 = CONSEQ_2 + INCH_1; // Repeat single channel, A1

ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE; // ADC10ON, interrupt enabl

ADC10DTC1 = 0x20; // 32 conversions

ADC10AE0 |= 0x02; // P1.1 ADC option select

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

ADC10CTL0 &= ~ENC;

while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active

ADC10SA = (unsigned short)buf; // Data buffer start

P1OUT |= 0x01; // Set P1.0 LED on

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit

P1OUT &= ~0x01; // Clear P1.0 LED off

}

}


// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)

{

__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)

}


本例中涉及了ADC10模块的采样转换模式、数据传输模式,具体来讲选择单通道重复模式,数据传输次数为32次的one-block传输。参考电压是AVcc,软件置位ADC10SC触发采样开始,在模/数转换中让单片机工作在LPM0低功耗模式,并用P1.0的高低电平来表征转换开始与结束。


推荐阅读

史海拾趣

全智景(Allvision)公司的发展小趣事

在追求经济效益的同时,全智景公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,推出了多款绿色环保的产品。同时,全智景公司还积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。这些举措不仅彰显了公司的社会责任感,也为公司的可持续发展奠定了坚实的基础。

通过以上五个故事,我们可以看到全智景公司在电子行业里的发展历程。从技术突破引领市场,到跨界合作拓展应用;从持续创新引领潮流,到全球化战略助力发展;再到履行社会责任与可持续发展。全智景公司以其坚定的信念和不懈的努力,在电子行业中取得了显著的成就。

Daito Communication Apparatus Co Ltd公司的发展小趣事

随着微电子学的快速发展,电子设备对元器件的要求也越来越高。Daito公司敏锐地捕捉到了这一市场趋势,决定对保险丝进行进一步的创新。在1995年,他们成功开发出了适用于电路板安装的高精度小型报警保险丝。这一产品的推出,不仅满足了市场对小型化、高精度保险丝的需求,也进一步巩固了Daito公司在电子行业中的领先地位。

随后,Daito公司又针对微电子学的进一步发展,推出了可以连续自动安装的方形微型保险丝。这一产品的推出,大大提高了生产效率,降低了成本,同时也为客户提供了更加便捷的使用体验。近年来,随着面安装技术的兴起,Daito公司又迅速推出了适用于面安装技术的片状保险丝,再次展示了他们在电子行业中的创新实力。

请注意,由于篇幅限制,以上仅为两个故事示例。如果需要更多故事,可以进一步深入研究和探索Daito公司在电子行业中的发展历程和创新实践。

FCI / Amphenol公司的发展小趣事

FCI公司起源于1988年,当时由Framatome组建,其初衷是作为核能领域外的一个多样化经营项目。然而,随着市场的变化和公司的战略调整,FCI逐渐将重心转向连接器制造。经过20多次的精心收购和策略性扩张,FCI在短短20年内便成长为全球最大的连接器制造公司之一。这一转变不仅展现了FCI对市场敏锐的洞察力,也体现了其卓越的管理能力和执行力。

DMS Electronic Components, Inc公司的发展小趣事

DMS在追求经济效益的同时,也积极履行社会责任。公司注重环境保护和资源节约,采用环保材料和工艺进行生产。同时,DMS还积极参与公益事业和社会活动,为社会做出了积极贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上故事是基于对电子行业和DMS公司业务范围的推测和构想,并不代表DMS公司真实的发展历程。如需了解更多关于DMS公司的具体信息,建议查阅公司官方网站或相关新闻报道。

AdaptivEnergy公司的发展小趣事

DMS在追求经济效益的同时,也积极履行社会责任。公司注重环境保护和资源节约,采用环保材料和工艺进行生产。同时,DMS还积极参与公益事业和社会活动,为社会做出了积极贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上故事是基于对电子行业和DMS公司业务范围的推测和构想,并不代表DMS公司真实的发展历程。如需了解更多关于DMS公司的具体信息,建议查阅公司官方网站或相关新闻报道。

American Power Design Inc公司的发展小趣事

为了进一步增强自身实力,APDI积极寻求与其他公司的并购与合作机会。它成功收购了一家在半导体制造领域具有领先技术的公司,从而完善了自身的产品线和技术体系。同时,APDI还与多家行业巨头建立了战略合作关系,共同研发新技术和新产品,实现了资源共享和优势互补。

问答坊 | AI 解惑

征求升压板电路图

本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 现征求一个手机移动充内部的升压板电路图,其中输入为4.2V输出为6V的,希望各位大哥大姐,小弟小妹赞助一个原理图,毕业设计要用啊~紧急~谢谢啦 另外:我朋友叫我帮他问下谁可以帮忙做个逻辑分析仪,也是 ...…

查看全部问答>

建议大家上传资料的时候把资料内容写的尽量清楚些

如题,大家把自己的资料拿出来分享本来是一件很有意义的事情,但是好的资料并不是对每个人适用,我就下过好几次看题目好像是对我有用的东西,但是下来一看内容不太对口,浪费点芯币没什么,还浪费感情,不便于选择,以后希望大家能好人做到底把内容 ...…

查看全部问答>

【转】EC电磁学计算软件

1.有效的解决传输线的阻抗计算。 a.算法基于IPC b.可以解决所有PCB设计层叠及阻抗的计算 c.中、英文界面友好 2.解决电源载流设计方案 解决电源的走线、铜皮、过孔载流,温升,DC损耗问题。 3.趋肤效应分析 用于分析高速,射频传输线的 ...…

查看全部问答>

急啊!液晶的问题

我用八寸的液晶,网上好像没有专门的控制器啊!是不是用了驱动板就不要控制器了?? 那些用了控制器的是不是就不用驱动板了呢?…

查看全部问答>

谁没睡觉的,进来教我ISE的测试模块怎么操作吧~

文件编好了,可是不知道怎么操作,能不能教我下?用QQ远程控制帮我演示下,或者其它。拜托了!…

查看全部问答>

wm5 下 怎么获得另一个程序右软健的菜单句柄啊?

想自己编写程序控制 ppc上 activesync的菜单 CWnd* pWnd=FindWindowW(NULL,L\"ActiveSync\"); HWND hwndMB = SHFindMenuBar (pWnd->m_hWnd); 已经得到menubar的句柄了  下面该怎么写呢 查了MSDN 说是         ...…

查看全部问答>

关于FSMC时序时间计算ADDSTDATAST

关于这两个参数的计算 根据如上条件 是怎么算出来0x00 0x00 0x06的? 下面来掰一下小学计算: 1.( (ADDST + 1) + (DATAST + 1) )*HCLK =MAX(Trc ,Twc); 2.DATAST*HCLK = Twp; 3.DATAST = (Tavqv + Tv + Tsu)/HCLK - ADDST - 4 ;手册上写 ...…

查看全部问答>

旧耳机驱动小喇叭

请问诸位怎样用放大器做个功放去驱动小喇叭  我用的是就耳机做输入???小喇叭的电阻4欧、功率0.4瓦…

查看全部问答>

FPGA的问题

本帖最后由 paulhyde 于 2014-9-15 09:09 编辑 在国赛中,FPGA的应用属于哪个方面的多一点?(硬件还是软件)  …

查看全部问答>