【MSP430入门例程】:ADC12模块
- 格式:pdf
- 大小:395.19 KB
- 文档页数:8
一张图看懂MSP430单片机之ADC原创一,基础知识ADC即Analog to Digital Converter模数转换,把模拟信号进行量化,转换为数字量。
对于软件工程师来说,ADC内部的转换原理可以忽略,只需要了解其对外呈现的接口。
AD输入与输出之间的关系为:MSP430的ADC12内核模块是12位的,其最大输出为2^12 – 1 = 4095。
以VR-为参考点,当VIN小于或者等于VR-时得到的AD码值为0,当VIN大于或者等于VR+时,得到的AD码值为4095,当VIN处于VR-和VR+之间时,按线性比例转换。
这样,从MCU中读出AD码值,即可根据公式倒推回去计算出输入的模拟量电压。
二,ADC总体框图再补一张中文版的:三,分块解释1,ADC内核先来看看ADC最核心的部分。
当然少不了电压参考源VR+和VR-,以及模拟量输入部分。
模拟量输入部分是和“采样保持”电路连在一起的,这一部分后面再细说。
除此之外,与ADC内核相关的,还有以下几个信号:1,ADC12CLK。
在MCU中,任何模块都少不了时钟,ADC模块也不例外,必须有时钟信号它才能工作。
它有4个时钟源可以选择,并且可以1~8分频。
2,ADC12ON,这个是ADC内核的总开关,只有当ADC12ON这一位为1时,ADC内核模块才工作。
如果想要关闭ADC内核以降低功耗,可以将ADC12ON置为0.3,SAMPCON,采样控制信号。
该信号接至Convert,当SAMPCON为低电平时,ADC内核进行AD转换。
4,BUSY,用于指示内核模块是否正处于AD转换过程中。
2,采样保持。
12-Bit ADC Core:ADC CORE将一个模拟量转化为12位的数字量,并且将数字量存储到ADC12存储器中。
ADC CORE需要软件编程选择V R-和V R+的参考输入源,作为转换的上限值和下限值。
当模拟量输入等于或大于V R+时,转换结果N ADC =0FFFH;当模拟量输入等于或小于V R-时,转换结果N ADC =0H。
ADC12ON位用于打开ADC Core,ENC位:在每次转化之前都要置1.Conversion Clock SelectionADC12CLK用做转换时钟;或者当SHP=1()时,用于生成采样周期。
采样的时钟源有多个。
ADC12OSC大约5M Hz左右,但是与设备,供电电压,温度相关,具体参照规格书而定。
ADC12 Inputs and MultiplexerADC12模块模拟量输入源有16个,通过INCHx控制。
16个输入元分别是A0-A7(P6口),Ve REF+(Pin10), Ve REF-(Pin11)和4个内部输入源。
Voltage Reference GeneratorREFON=1,打开参考电压发生器。
REF2_5V = 1,参考电压为2.5V; REF2_5V = 0,参考电压为1.5V;INCHX=0AH,是模拟量输入源是温度传感器。
为了去耦,在参考电压输出引脚VREF+,接10uF和0.1uF的电容到A VSS.Auto Power-Down为了低功耗的应用。
ADC Core当不使用时自动关闭,在使用时,可以自动恢复打开;首次需软件打开。
ADC12OSC 用时自动打开,不用自动关闭。
参考电源需软件打开和关闭,不具有自动功能。
Sample and Conversion TimingSHI上升沿时An analog-to-digital conversion is initiated。
SAMPCON控制采样周期和启动转换:SAMPCON高电平时,采样。
MSP430程序库之ADC12模块msp430内部含有ADC12模块,可以完成12位的模数转换,当对精度或其他指标要求不高时,可以选用430单片机内部的ADC12完成模数转换工作。
这里主要实现了一个比较通用的ADC12模块初始化程序,具体的数据存储和处理需要自己在中断处理函数中添加。
1.硬件介绍:msp430单片机内的ADC12模块的特点如下:12位转换精度,1位非线形误差,1位非线形积分误差;多种时钟源给ADC12模块,切本身自带时钟发生器;内置温度传感器;TimerA/TimerB硬件触发器;8路外部通道和4路内部通道;内置参考电压源和6种参考电压组合;4种模式的模数转换;16bit的转换缓存;ADC12关闭支持超低功耗;采用速度快,最高200Kbps;自动扫描和DMA使能。
430内部的ADC12功能还是蛮强大的,可以有定时器触发模数转换开始,还可以和内部的DMA模块共同使用,完成高速的采样转储等高级功能。
这个AD的转化公式如下,可以根据它计算采样的模拟电压值:使用AD是还要注意采样时间,430单片机的模数ADC12模块的等效模拟电压输入电路如下:其中V S是信号源电压,R S是信号源内阻,V I在Ax(ADC12模块模拟输入端)上的电压,R I单片机内多路开关等效电阻,V C是保持电容上的电压(ADC12模块采样的电压),C I 是电容的值。
需要根据这些值计算采样时间:代入单片机上的参数后公式如下:我的程序中采样时间设的是4us,可以算出如果用我的程序(不更改采样时间)的话,最大信号源内阻可以是6.8k,当信号源内阻更大时,可以自己按要求设采样时间(在程序的初始化函数内的寄存器设置部分)。
还有,ADC模数转换时要求参考电压等很稳定,为了达到这个要求,德州仪器要求这部分的电路如下:即:所有参考源和电源均并联一组0.1uF和10uF的电容。
硬件部分就说这么多了;如果需要更详细的说明,参考用户指南。
MSP430ADC12转换模块总结MSP430ADC12转换模块是德州仪器(Texas Instruments)公司推出的一种12位模数转换器。
它主要应用于MSP430系列微控制器中,是一种用于模拟信号转换为数字信号的重要模块。
本文将对MSP430ADC12转换模块的原理、特点、应用和优缺点进行详细的总结。
一、原理1.设置输入通道和转换时钟。
2.开始转换,模块将自动切换到所选通道,并从该通道读取模拟输入信号。
3.模块以逐位的方式逼近比较,从最高有效位(MSB)开始,通过与DAC比较来确定该位是0还是14.继续逼近,直至得到完整的12位数字输出。
5.完成转换后,可以读取数字输出值,并根据需要进行后续处理。
二、特点1.高精度:MSP430ADC12转换模块具有12位分辨率,可以实现高精度的模拟信号转换。
2.快速转换:该模块支持多种转换速度选项,可根据应用需求选择合适的速度,实现快速转换。
3.多通道输入:MSP430ADC12模块支持多达16个输入通道,可以实现多种模拟信号的并行转换。
4.内部参考电压:模块内置了参考电压源,可以提供稳定的参考电压,减少外部硬件成本。
5.中断功能:该模块支持转换完成中断,当转换完成时,可以通过中断方式通知主控制器进行相应的处理。
6.低功耗:该模块工作时具有低功耗特性,可以在需要的时候进入低功耗模式,从而节省系统能量消耗。
三、应用1.传感器信号处理:可以将各种传感器(如温度、压力、湿度传感器)的模拟信号转换为数字信号,从而实现对传感器的精确测量和控制。
2.电力系统监测:可以对电力系统中的各种参数(如电压、电流、功率)进行模拟信号转换,实现对电力系统的实时监测和控制。
3.仪器仪表:可以将各种测量仪器(如多米表、示波器)的模拟信号转换为数字信号,提高仪器仪表的测量精度和稳定性。
4.通信系统:可以将通信系统中的模拟信号(如音频信号)转换为数字信号,实现通信数据的处理和传输。
四、优缺点1.高精度:具有12位分辨率,可以实现高精度的信号转换。
MSP430教程之十二ADC(下)上次我们讲了相关的ADC知识,那么这次我们将这些知识实际应用于我们的实际使用中。
同样的建立工程和添加库的步骤我们就不在说明了,两份文档,数据手册和我们的库文件使用手册也是必不可少的了,有时候我们还会需要用到我们的Launchpad的开发板原理图来查看某些引脚,这些步骤也都是我们之前一直说到的,希望可以给大家一些学习方法上面的参考。
今天这一讲我们将进入代码的书写上面,同样我们还是以库函数的形式来进行编写,后续我们会更新寄存器的编写方式,同时大家可以进行参考MSP430Ware的示例代码来自行编写寄存器的配置代码。
Ksps的意思是每秒转换次数为多少。
这里插播一个细节的东西,德州仪器(TI)的官网不管对于库函数还是寄存器都给出了示例代码,我们通过我们CCS环境下面的TI Resource Explorer下面查看到的示例代码都是基于寄存器的形式进行编写的,那么这里我们将和大家说一下要如何查看官方的库函数参考例程。
首先我们需要确认你有安装了MSP430Ware,如果你可以打开上面的界面,那毫无疑问是已经安装好了。
然后我们需要找到这个MSP430Ware的存放位置。
一个方法就是通过windows的搜索,直接搜索MSPWare(注意这里是搜索MSPWare而不是MSP430Ware)。
其他方法没找到,需要你知道安装在哪里。
不过一般情况下都会在软件的安装目录附近,自己稍微找一下应该就可以找到。
(如图下面长这样的文件夹)进去之后会有很多分支,红色方框里面的是我们的库函数的集合,而黑色方框对应的example就是我们上面TI Resource Explorer里面呈现的寄存器C参考例程了。
进入driverlib这个文件夹之后我们得到下面这么多文件,很显然例程就在我们的example里面,而这里面的driverlib对应就是我们器件的库函数源代码。
其他的大家自己琢磨去看看了。
不在说明了。
MSP430单片机ADC12模块的总结在MSP430单片机系列中,很多都有12通道12位的ADC(简称ADC12模块)。
如MSP430F13X、MSP430F14X、MSP430F15X、MSP430F16X、MSP430F43X、MSP430F44X 等系列。
较其它带A/D转换的单片机,MSP430的ADC精度高,设计灵活巧妙,给数据采集系统的设计带来了全新的思路。
一、ADC模块的常用性能指标1、分辨率表示输出数字量变化一个相邻数码所需输入模拟电压的变化量,它定义为转换器的满刻度电压与2n的比值,其中n为ADC的位数。
如:一个12位的ADC模块的分辨率为满电压刻度的1/4096 。
2、量化误差是由于有限数字对模拟数值进行离散取值(量化)而引起的误差。
其理论值为一个单位分辨率,即±1/2LSB 。
3、转换精度其反映的是ADC模块在量化上与理想的ADC模块进行AD转换的差值。
4、转换时间指ADC模块完成一次AD转换所需的时间,转换时间越短越能适应输入信号的变化。
此外还应考虑所使用的电压范围、工作温度、接口特性以及输出形式等性能。
二、ADC12主要特点1、12位转换精度,1位非线性微分误差,1位非线性积分误差;2、有多种时钟源提供给ADC12模块,而且模块本身内置时钟发生器;3、内置温度传感器;4、Timer_A/Timer_B硬件触发器;5、拥有8 个可配置的外部模拟信号采样通道,拥有4 个内部通道,用于Vcc 电压值、温度、外部正负电压参考的测量;6、内置参考电源,并且参考电压有6种组合;7、模数转换有4种模式;8、16字转换缓存;9、ADC12可关断内核支持超低功耗应用;10、采样速度快,最高可达200ksps;11、自动扫描;12、DMA使能;进行AD 转换通常需要设置的内容有:转换通道、采样保持、参考电压、转换时钟、转换模式、结果缓存。
三、ADC12的功能模块Msp430单片机ADC12模块有以下五个部分组成:(1)参考电压发生器;(2)模拟多路器;(3)具有采样和保持功能的12为转换内核;(4)采样及转换所需的时序控制;(5)转存结果缓存。
F5529-ADC12F5529的ADC12在配置的时候要配置时钟啊,参考电压啊,什么的,一般默认就好了ADC的寄存器我个人认为分位两种一种是对全局进行配置的一种是对每一个通道进行配置的,ADC12一共有4个全局的寄存器,有16个对每个通道进行配置的寄存器,这3个全局的寄存器是ADC12CTL0,ADC12CTL1,ADC12CTL2,ADC12CTL3,对他们进行配置的话可以从对ADC的总体进行配置,还有16个单独的寄存器可以对每个通道进行配置,ADC12MCTLx, X=0~15,一共16个这个寄存器主要是配置输入通道的顺序和写入的寄存器的位置,还有每个输入通道的参考电压本人在一开始配置ADC为单通道输入的时候配置如下:voidADC_init(void ){chari=0;P6SEL |= 0x01; // Enable A/D channel A0ADC12CTL0 &=~ADC12ENC;ADC12CTL0 |= ADC12ON+ ADC12SHT01+ADC12SHT00+ADC12MSC;ADC12CTL1 |= ADC12SHP+ADC12CONSEQ_2;ADC12MCTL0 |= ADC12INCH_0; // ref+=Ve, channel = A0ADC12MCTL0 |= ADC12SREF_2;ADC12IE |=ADC12IE0; //关闭ADC中断for ( i=0; i<0x30; i++); // Delay for reference start-upADC12CTL0 |= ADC12ENC; // Enable conversions}没啥好说的,就是每次开始ADC的转换的时候用ADC12CTL0 |= ADC12SC; 就可以了在写多通道的输入的时候我一开始没有配置ADC12MSC这个,然后发现每次用这个语句ADC12CTL0 |= ADC12SC;开始ADC转化后,每次只有设置的第一个输入通道开始采样转换,每次也只有第一个通道的的中断位会置1,其他的输入通道位没有开始转换,然后参考了官方的例程,发现官方的例程里面配置了ADC12MSC这个寄存器,然后发现,这个寄存器的这个位表示在系类转换的时候才有效,配置了之后会在ADC在每次上一个通道输入转换完成之后自动进行下一个输入通道的转换。
MSP430教程14MSP430单片机ADC12模块MSP430单片机的ADC12模块是一个12位的模数转换器,用于将模拟电压转换为数字值,以供单片机内部处理。
ADC12模块是MSP430单片机中最常用的外设之一,可以用于各种应用,如模拟传感器读取、电量计算等。
ADC12模块的主要特点包括:1.12位的精度,可以将电压精确转换为4096个不同的数字值。
2.可以配置为单通道或多通道模式,允许同时转换多个模拟通道的电压。
3.支持多种转换触发方式,如手动触发、定时触发、比较触发等。
4.可以配置不同的参考电压源,以适应不同的应用场景。
5.内置温度传感器和内部参考电压源,方便温度和电压的测量。
在使用ADC12模块之前,需要进行一些初始化配置。
首先,需要设置参考电压源,可以选择使用外部引脚输入的参考电压,或者使用内部参考电压。
其次,需要选择转换触发源,可以选择手动触发或定时触发等。
还可以选择转换结果的存储位置,可以存储在内存中,也可以存储在DMA传输缓冲区中。
在实际使用中,可以通过编程设置ADC12的参数并启动转换。
转换完成后,可以通过查询标志位或中断方式来获取转换结果。
获取结果后,可以进行进一步的处理,如计算实际电压值或进行比较判断等。
以下是一个简单的示例代码,演示了如何使用ADC12模块进行模拟电压转换:```c#include <msp430.h>void init_ADC12//设置参考电压为内部2.5V参考源REFCTL0=REFMSTR,REFVSEL_2,REFON;//设置为单通道模式,使用A0通道ADC12CTL0=ADC12ON,ADC12SHT0_8,ADC12MSC;ADC12CTL1=ADC12SHP;//使用采样保持模式ADC12MCTL0=ADC12INCH_0,ADC12VRSEL_1;//设置输入通道为A0,使用2.5V参考电压//选择转换触发源为软件触发ADC12CTL0,=ADC12ENC,ADC12SC;void main(void)WDTCTL=WDTPW,WDTHOLD;//停用看门狗定时器while (1)while (ADC12CTL1 & ADC12BUSY);//等待转换完成unsigned int result = ADC12MEM0; // 获取转换结果//进一步处理转换结果,如计算实际电压值float voltage = (result / 4096.0) * 2.5;//处理完成后进行下一次转换ADC12CTL0,=ADC12SC;}```以上代码中,首先调用`init_ADC12(`函数进行ADC12模块的初始化配置,然后在主循环中进行转换和结果处理。
MPS430头文件摘要及注释一.ADC121..定义采样保持时间(ADC12CTL0)#define SHT0_0 (0*0x100u) //定义ADC12MEM0——ADC12MEM7采样#define SHT0_1 (1*0x100u) //保持时间为ADCCLK的多少个周期 eg:#define SHT0_2 (2*0x100u) //SHT0_0 代表采样保持时间为4个ADCCLK#define SHT0_3 (3*0x100u) //周期同理 SHT0_1为8个周期#define SHT0_4 (4*0x100u)#define SHT0_5 (5*0x100u)#define SHT0_6 (6*0x100u)#define SHT0_7 (7*0x100u)#define SHT0_8 (8*0x100u)#define SHT0_9 (9*0x100u)#define SHT0_10 (10*0x100u)#define SHT0_11 (11*0x100u)#define SHT0_12 (12*0x100u)#define SHT0_13 (13*0x100u)#define SHT0_14 (14*0x100u)#define SHT0_15 (15*0x100u)#define SHT1_0 (0*0x1000u) //定义ADC12MEM8——ADC12MEM15采样#define SHT1_1 (1*0x1000u) //保持时间为ADCCLK的多少个周期#define SHT1_2 (2*0x1000u) //使用方法同SHT0_x#define SHT1_3 (3*0x1000u)#define SHT1_4 (4*0x1000u)#define SHT1_5 (5*0x1000u)#define SHT1_6 (6*0x1000u)#define SHT1_7 (7*0x1000u)#define SHT1_8 (8*0x1000u)#define SHT1_9 (9*0x1000u)#define SHT1_10 (10*0x1000u)#define SHT1_11 (11*0x1000u)#define SHT1_12 (12*0x1000u)#define SHT1_13 (13*0x1000u)#define SHT1_14 (14*0x1000u)#define SHT1_15 (15*0x1000u)2.转换模式选择(ADC12CTL1)#define CONSEQ_0 (0*2u) //单通道单次转换#define CONSEQ_1 (1*2u) //多通道单次转换#define CONSEQ_2 (2*2u) //单通道多次转换#define CONSEQ_3 (3*2u) //多通道多次转换3..ADC12内核时钟源选择(ADC12CTL1)#define ADC12SSEL_0 (0*8u) //ADC内部时钟源 ADC12OSC #define ADC12SSEL_1 (1*8u) //ACLK#define ADC12SSEL_2 (2*8u) //MCLK#define ADC12SSEL_3 (3*8u) //SMCLK4.ADC时钟分频选择(ADC12CTL1)//分频数=三位二进制数加#define ADC12DIV_0 (0*0x20u) //1分频即不分频#define ADC12DIV_1 (1*0x20u) //2分频#define ADC12DIV_2 (2*0x20u)#define ADC12DIV_3 (3*0x20u)#define ADC12DIV_4 (4*0x20u)#define ADC12DIV_5 (5*0x20u)#define ADC12DIV_6 (6*0x20u)#define ADC12DIV_7 (7*0x20u) //8分频5..采样触发输入源选择(ADC12CTL1)#define SHS_0 (0*0x400u) //ADC12SC 位#define SHS_1 (1*0x400u) //TimerA_OUT1#define SHS_2 (2*0x400u) //TImerB_OUT0#define SHS_3 (3*0x400u) //TimerB_OUT16.转换结果数据存储寄存器选择(ADC12CTL1)#define CSTARTADD_0 (0*0x1000u) //结果存在ADC12MEM0 #define CSTARTADD_1 (1*0x1000u)#define CSTARTADD_2 (2*0x1000u)#define CSTARTADD_3 (3*0x1000u)#define CSTARTADD_4 (4*0x1000u)#define CSTARTADD_5 (5*0x1000u)#define CSTARTADD_6 (6*0x1000u)#define CSTARTADD_7 (7*0x1000u)#define CSTARTADD_8 (8*0x1000u)#define CSTARTADD_9 (9*0x1000u)#define CSTARTADD_10 (10*0x1000u)#define CSTARTADD_11 (11*0x1000u)#define CSTARTADD_12 (12*0x1000u)#define CSTARTADD_13 (13*0x1000u)#define CSTARTADD_14 (14*0x1000u)#define CSTARTADD_15 (15*0x1000u)注:在单通道单次转换情况下,转换结果存储寄存器的选择与ADC转换通道选择并没有必然联系,即从不同转换通道进入的数据经转换后,其结果在不引起错误的前提下,可存入任一个转换结果存储寄存器。
msp430的一些常用的C语言控制程序---ADC12(1)说说关于AD 的程序吧:就写一下最简单的单通道单次采集吧://查询方式获取AD 值#include //我们的系统板子是msp430f149,所以得用这个头文件~void ADC_Init(void);unsigned ADC_Result;void main(void){ WDTCTL = WDTPW + WDTHOLD; ADC_Init(); while(1){ ADC12CTL0 |= ADC12SC;//ADC12SC 是当SAMPCON 由采样定时器产生,ADC12SC 由0 改为1 启动转换while(ADC12CTL1 & BIT0 == 1);//当ADC12BUSY == 1 时等待ADC_Result = ADC12MEM0;//这块可单步运行时在IAR 中观察到,或者有LED,可能对它处理一下显示~ }}//void ADC_Init(void) //初始化时钟{ P6DIR &= ~BIT6;//设置p6.6为输入,这个口和板子上的接口有关.对了,149 内置的是12 位AD,精度足够一般用了P6SEL |= BIT6; //选择P6.6 的第二功能口ADC12CTL0 = ADC12ON + REFON + SHT0_6 ;//AD 电源打开、参考电压打开、采样时间分频设置,一般6 或8 ADC12CTL0 &= ~REF2_5V; //选择1.5V 参考电压,这个因为采集到的电压值变化有关ADC12CTL1 |= SHP + CONSEQ_0+ SHS_0; //使用采样时钟,单通道单次采样ADC12MCTL0 = SREF_1 + INCH_6; //选择AD 参考电压和输入通道ADC12CTL0 |= ENC; //ADC 转化使能,此处一定得放在后面,要不结果容易出错} 这就是最简单的AD 采集了,430 还有另外三种模式,原理都差不多,就是多寄存器中的各位操作,这里我没有用中断模式,另外的三中模式得用中断方式来获得数据tips:感谢大家的阅读,本文由我司收集整编。
微控网 >> 微控论坛 >> MSP430单片机专版 >> MSP430学习专区 >> 【MSP430入门例程】:ADC12模块【MSP430入门例程】:ADC12模块DC,2006-12-05 12:13:13作者:DC 微控技术论坛原创 MSP430单片机入门基础例程若想了解MSP430单片机常用模块应用原理,请下载<<MSP430F常用模块应用原理>>/datasheet/msp430/msp430base/MSP430register_guide.pdf最近有网友向我们反映,建议我们建立一个模块专题用于讲述MSP430单片机的某模块的原理与应用的。
为此,我先以ADC12模块建立此贴。
贴子内容有待整理中...,如下是我整理的图文资料。
如果发现有错误请及时通知我更正。
下图是ADC12模块结构图在还有没讲述ADC12模块中组成之前,我想着重讲述ADC12的采样与转换这部分。
后面在再作其它部分讲述。
【采样与转换】ADC12完成对一个模拟信号模数转换过程由两部分组成:采样保持和转换.完成采样转换周期时间= 采样保持时间 +转换时间完成采样转换周期时间:ADC12完成对一个模拟信号模数转换所需要时间,这部分由采样保持时间和转换时间组成。
采样保持时间:由产生SAMPCON信号开始到结束所需时间,这期间ADC进行对模拟信号采样保持。
在脉冲采样模式时(SHP=1),采样时间: Tsample = 4 x ADC12CLK x N式中,Tsample为采样保持时间,ADC12CLK为ADC12内核时钟周期,N则由SHT1(SHT0)的4位二进制码决定。
采样保持时间与ADC12模块的等效输入电路有关。
从ADC12模块输入看ADC内部等效为一个电阻(2K)与一个电容(30pf)相串联.这个内部RC常数直接影响着最小的采样保持时间参数.所以,在采样转换中有一个最小采样保持时间值概念.这个最小采样保持时间值从上式中可以看出是由ADC12CLK时间周期决定(N=1时),也就是说ADC12CLK的最高频率;这个频率不能超出MSP430芯片手册中所指定的最高频率(最小采样保持时间值)。
关于脉冲采样模式(SHP=1)这个最小采样保持时间值因芯片不同,详情可以查看相应的芯片手册。
转换时间:ADC12核将采样保持的模拟信号转换成数字所需要的时间,这个转换时间在脉冲采样模式和扩展采样模式都是相同的。
转换时间=13 x (ADC12CLK/Fadc12clk)在脉冲采样模式时完成一个模拟信号采样转换周期时间计数公式为:= (4 x ADC12CLK x N) + ( 13 x (ADC12CLK/Fadc12clk))【采样保持触发信号】采样保持触发信号有4信号源:ADC12SC、Timer_A、Timer_B.OUT0、Timer_B.OUT1。
这4种信号源由ADC12CTL1控制寄存器的SHSx两位二进制码设置。
ISSH设置信号源的相位。
ENC是采样转换允许位,某一时刻当使ENC=1时,此时ENC可能不能同步与触发信号源,所以SHI信号并未马上产生。
但硬件逻辑可以在ENC置位后的第一个触发信号的上升沿实现SHI信号的产生。
ENC 采样转换允许位:0 ADC12为初始状态,不能启动AD转换。
1 首次转换由SAMPCON上升沿启动。
只有在该位为高电平时,用户可以用软件或外部触发信号启动采样转换。
在ADC12CTLx控制寄存器中大部分的位只有在ENC复位才能对这些位进行设置操作。
用软件启动一次AD转换,要用一条指令来完成ADC12SC与ENC的设置。
在“单通路单次采样模式 CONSEQ等于0”中:且ADC12还处于采样或转换工作中BUSY=1),若此时使ENC位从高电平变为低电平。
则当前ADC12采样转换马上结束,且得不到正确的转换值。
在“单通路单次采样模式 CONSEQ不等于0”中:若此时使ENC位从高电平变为低电平。
则当前转换正常结束,且转换结果是正确的。
在当前转换结束时停止操作。
【脉冲采样模式】ADC12脉冲采样模式示意图脉冲采样模式(SHP=1),触发信号SHI直接触发采样定时器生产采样转换信号SAMPCON。
其转换时序可参考下图。
在脉冲采样模式中,且ENC=1(表示采样转换允许)。
ADC12SC由0变为1启动一次AD采样转换,要用一条指令来完成ADC12SC与ENC的设置。
当AD采样转换完成(BUSY=0)后ADC12SC标志自动复位。
在编写脉冲采样模式程序中,ADC12SC、ENC应按以上的时序方式使用。
ADC12脉冲采样模式时序图【扩展采样模式】ADC12扩展采样模式示意图扩展采样模式(SHP=0),采样转换直接由SHI信号(或者说ADC12SC或其它外部采样转换触发信号)控制。
ADC12SC由0变为1启动一次AD采样转换,要用一条指令来完成ADC12SC与ENC的设置。
此时ADC12SC保持为高电平时采样,在采样后下降沿时开始进行转换。
当转换完成后ADC12SC标志自动复位,此后又可以进行新一次转换操作。
其转换时序可参考下图。
ADC12扩展采样模式时序图参考文献Texas Instruments MSP430 slau049e.pdf<<MSP430系列16位超低功耗单片机原理与应用>> 杨艳琴 骁曙 清大社<<MSP430系列FLASH型超低功耗16位单片机>> 胡大可 北航社DC,2006-12-05 14:04:36为大家补充一些关于ADC数据手册中所提及到的术语解释。
ksps:每秒千次(每秒采样一千次)。
Msps:每秒兆次(每秒采样百万次)。
Samples per Second ---- 每秒采样率: SPS每秒采样次数。
数据转换器中,模拟信号被转换成数字流,表示某一瞬间模拟信号的幅度。
每转换一次数据流称为一次“采样”,每秒钟的采样次数称为采样率,以每秒采样数为单位。
[同步学习例程]DC,2006-12-05 14:05:06微控技术论坛原创 作者:DC以下例子是用微控技术论坛的MC430F14开发板实现ADC实验,通过实验的调试和结合ADC的原理分析,希望初学者能有效地理解ADC12的应用。
MC430开发板用户只需要将此贴程序内容更新到“MC430F14开发板实例[1]-ADC与显示”实验中的main.c文件即可。
ADC12程序描述:单路单次(A7口),设置ADC12模块为脉冲采样模式,由Timer_A.out1提供一个触发采样转换频率,此频率将触发采样定时器产生SAMPCOM采样转换信号。
在此例程,Timer_A.out1提供的采样频率约为20HZ。
也就是每秒钟采样转换20次样点。
在控制ADC12启动时要使ENC位置位,此时表示允许转换。
同时,每次启动转换时要使ADC12SC由低电平变为高电平。
当完成一次采样转换后,ADC12SC自动复位。
接着可以将ENC位安全地关闭(不允许转换动作)。
接下来就重新地等待下一轮新的采样转换。
Timer_A.out1输出的设置,Timer_A设置工作模式为增计数模式,以CCR0为产生输出信号周期,CCR1为产生信号的有效占空时间。
在此例中,Timer_A的时钟为ACLK=32768HZ,周期约为30us。
要生产20HZ的采样触发频率(周期时间为50ms),则CCR0=1666x30us=50ms。
CCR1可以取半周期形成方波输出,当然这CCR1的值可以由用户自由改变。
以下是我用虚拟示波器测量到Timer_A.out1输出引脚信号和P1.1(LED)引脚信号波形。
从P1.1波形可以推出ADC12是按Timer_A.out1信号进行采样转换的。
MC430F14的用户有空的话可以在这上面做不同的修改为体验和理原ADC12模块的原理,如果发我有不对之处可以指出,大家交流学习。
//****************************************************//说明:单片机初始化void init(void){ initlcm(); //LCD初始化char_string (title,LCD_L11); //发送本实验标题1send_title(); //发送本实验标题2sendCMD(off_cursor); //关光标//ADC12初始化----------------------//单通道,单次采样模式P6SEL |= 0x80; //使能A/D通道 A7P1SEL |= 0x40; //Timer_A.OUT1,从P1.6引脚输出(可选)P1DIR = 0x02+0x40; //P1.1&P1.6输出ADC12CTL0 = ADC12ON + SHT0_2; //开ADC12内核和设置SHIT0=2(N=4)ADC12CTL1 |= SHP+CSTARTADD_7+SHS_1;//SAMPCON信号为采样定时器,定义单次转换地址//采样定时器触发源为timer_A.out1ADC12MCTL7 |= INCH_7;//ADC12MCTL0 = SREF_2; // 使用外部参考电压 Vr+ = VeREF+//Timer_A初始化--------------------TACTL = TASSEL_1+MC_1; //timerA CLK=ACLK,增计数模式TACCTL1 |= OUTMOD_2; //timer_A.out1输出为PWM翻位/复位模式TACCR0 = 1666; //选择ACLK约30us,CCR0在增计数模式,周期约50msTACCR1 = 833; //半方周期约25ms.//_EINT(); //开总中断*/}//****************************************************void main(void){ WDTCTL=WDTPW+WDTHOLD; //停止WDTinit();while(1){ ADC12CTL0 |= ENC + ADC12SC; //ADC转换允许,开始转换 while((ADC12IFG & BIT7)==0);_NOP();ADC12CTL0 &= ~ENC; //ADC转换允许,开始转换P1OUT ^= BIT1; //反转 P1.1value=ADC12MEM7; // 读取结果conv(value,ADVAL); //数据转换调用char_string (ADVAL,LCD_L25); //发送本实验标题1}}//****************************************************DC,2006-12-10 02:58:39再占三楼,同步学习例程待续....again,2006-12-12 22:04:59写的好详细哦!谢谢斑竹!!w1904y,2006-12-15 08:39:05厉害,谢了!okyiz,2006-12-29 18:18:39呵呵 版主真好!可有女朋友啊?帮你介绍一个吧!dong007,2006-12-29 22:56:44谢谢版主,虽然我还看不懂。