MSP430学习笔记(4)ADC12

  1. 几个术语:

a)        分辨率(LSB):表示输出数字量变化一个相邻数码所需要输入模拟电压的变化量,它定义为转换器的满刻度电压与2的n次幂,其中n为ADC的位数。

b)        量化误差:由于有限数字对模拟值进行离散取值(量化)而引起的误差。因此,量化误差理论上为一个单位分辨率。即正负1\2LSB。

c)        转换精度:反应实际的ADC模块在量化上与理想的ADC模块进行模数转换的差值。

d)        转换时间:指ADC完成一次模/数转换所需要的时间。

2.      结构:

3.      参考电压发生器:

a)        指需要的基准信号,通常为电压基准。MSP430 ADC12内置参考电源,有6种可编程选择。

b)        模拟多路器:当多个模拟信号进行采样并进行A/D转换时,为了公用一个转换内核,模拟多路需要分时地将多个模拟信号连通,每次连通一个信号采样并转换。

c)        MSP430 ADC12配置有8路外部通道和4路内部通道,通过A0~A7实现外部8路模拟信号输入,4路内部通道可以将多个基准电压和内部温度传感器的输出作为待转换模拟输入信号。

d)        具有采样与保持功能的12转化器内核:ADC12内核是一个12位的模数转换器,并能够将结果存放在转换器存储器中。该内核使用两个可编程的参考电压(Vr+和Vr-)定义转换的最大值和最小值。公式为:Nadc = 4095 * (Vin - Vr)/(Vr+ -Vr)

e)        采样转换所需的时序控制电路:提供采样及转换所需要的各种信号:ADC12CLK转换时钟,SAMPCON采样及转换信号、SHT控制的采样周期、SHS控制的采样触发来源选择、ADC12SSEL选择的内核时钟源及AC12DIV选择的分频系数。

4.      ADC12寄存器:

a)        转换控制寄存器ADC12CTL0

i.             ADC12SC采样/转换控制位:当ENC =1,ISSH = 0且SHP = 1时,ADC12SC由0到1启动A/D转换,A/D转换完成后ADC12SC自动复位,当SHP = 0时,ADC12SC保持高电平采样,ADC12SC复位时启动一次转换。

ii.             ENC转换允许位:0为初始状态,不能启动A/D转换;1为首次转换由SAMPCON上升沿启动。

iii.             ADC12TIVE转换时间溢出中断允许位:0:为没发生转换时间溢出,1为发生转换时间溢出。

iv.             ADC12OVIE溢出中断允许位:0为没有发生溢出,1为发生溢出。

v.             ADC12ON:ADC12内核控制位:0为关闭ADC12内核,1为打开。

vi.             REFON:参考电压控制位,0为内部参考电压发生器关闭,1为内部参考电压发生器打开。

vii.             2.5V内部参考电压的电压值选择位:0为选择1.5V,1为选择2.5V。

viii.             MSC多次采样/转换位:只有当SHP =1时才有效,0为每次转换需要SHI信号的上升沿触发采样定时器,1为仅首次转换由SHI信号的上升沿触发采样定时器,而后采样转换将在前一次转换完成后立即进行。

ix.             SHT1/SHT0采样保持定时器:定义了保存在转换结果寄存器ADC12MEM8_ADC12MEM15和ADC12MEM0~ADC12MEM7中的转换采样时序与采样时钟ADC12CLK的关系,采样周期时ADC12CLK周期乘4的n倍。N为2的SHITx次幂。

b)        转换控制寄存器ADC12CTL1

i.             CSStartAdd转换存储地址位,可以定义单次转换地址或序列转换的首地址。

ii.             SHS采样输入触发源选择:0为ADC12SC,1为Timer_A.OUT1,2为Timer_B.OUT0,3为Timer_B.OUT1。

iii.             SHP采样信号(SAMPCON)选择控制位:0为信号源来自采样触发输入信号,1为信号源来自采样定时器,由采样输入信号的上升沿触发采样定时器。

iv.             ISSH采样输入信号方向控制位:0为采样输入信号为同向输入,1为反向。

v.             ADC12DIV:ADC12时钟源分频因子选择为。

vi.             ADC12SSEL ADC12内核时钟源选择:0为ADC12内部时钟源ADC12OSC(默认)为1为ACLK,为2为MCLK,为3为SMCLK。

vii.             CONSEQ转换模式选择位:0为单通道单次转换模式,1为序列通道单次转换模式,2为序列通道多次转换模式,3为序列通道多次转换模式。

viii.             ADC12BUSY ADC12忙标志位:0表示没有活动,1表示忙。

c)        ADC12MEM0~ADC12MEM15转换存储寄存器:16位寄存器,用来存放A/D转换结果,只用其中低12位。

d)        ADC12MCTLx转换存储器控制寄存器:

i.             EOS:序列结束控制位:0为序列没有结束,1为结束。

ii.             Sref参考电压源选择位:

iii.             INCH选择模拟输入通道:该4位表示的二进制数为所选的模拟输入通道:

e)        ADC12IFG中断标志寄存器:ADC12IFGx置位表示转换结束,并且转换结果已经装入转换存储寄存器;ADC12IFGx复位表示ADC12MEMx被访问。

f)         ADC12IE中断使能寄存器:1为允许响应的ADC12IFGx在置位时发生的中断请求服务,0为禁止ADC12IFGx在置位时发生的中断请求服务。

g)        ADC12IV中断向量寄存器。

5.初始化代码

[cpp] view plaincopyprint?

  1. /*************************************************************************
  2. //名称    :ADC12Init
  3. //参数    :uchar Times-0为单次转换,1为多次转换,
  4. uchar Tube-0为单通告转换,1为多通道转换
  5. uchar n-待转换的通道(只有在Tube为0的时候有用)
  6. uchar V-0为内部参考电压,1为外部参考电压
  7. //返回值:无
  8. //功能    :完成ADC12Init的初始化
  9. *************************************************************************/
  10. void ADC12Init(uchar Times,uchar Tube,uchar n,unsigned char v)
  11. {
  12. if(Tube ==0)                                                //单通道转换
  13. {
  14. if(v == 0)
  15. {
  16. ADC12CTL0 = ADC12ON + SHT0_8 + MSC + REFON + REF2_5V;   //使用内部电压,打开ADC12内核,8分频,内部参考电压2.5V
  17. ADC12MCTL0 = SREF_0;                                    //使用内部电压,参考位为AVCC和AVSS
  18. }
  19. if(v == 1)
  20. {
  21. ADC12CTL0 = ADC12ON + SHT0_8;               //使用外部电压,打开ADC12内核,8分频
  22. ADC12MCTL0 = SREF_2;                                //使用外部电压,参考为为VeREF+和AVSS
  23. }
  24. if(Times == 0)ADC12CTL1 = SHP + CONSEQ_0;           //单通道单次转换,采样信号来自采样定时器
  25. if(Times == 1)ADC12CTL1 = SHP + CONSEQ_2;           //单通道多次转换,采样信号来自采样定时器
  26. switch (n)                          //选择通道
  27. {
  28. case 0:ADC12MCTL0 |= INCH_0;break;
  29. case 1:ADC12MCTL0 |= INCH_1;break;
  30. case 2:ADC12MCTL0 |= INCH_2;break;
  31. case 3:ADC12MCTL0 |= INCH_3;break;
  32. case 4:ADC12MCTL0 |= INCH_4;break;
  33. case 5:ADC12MCTL0 |= INCH_5;break;
  34. case 6:ADC12MCTL0 |= INCH_6;break;
  35. case 7:ADC12MCTL0 |= INCH_7;break;
  36. }
  37. ADC12IE = n;                                //使能待转换通道的中断
  38. ADC12CTL0 |= ENC;                           //开启软件使能
  39. }
  40. if(Tube ==1)                                                //多通道转换
  41. {
  42. if(v == 0)
  43. {
  44. ADC12CTL0 = ADC12ON + SHT0_8 + MSC + REFON + REF2_5V;   //使用内部电压,打开ADC12内核,8分频,内部参考电压2.5V
  45. ADC12MCTL0 = SREF_0;                                    //使用内部电压,参考位为AVCC和AVSS
  46. }
  47. if(v == 1)
  48. {
  49. ADC12CTL0 = ADC12ON + SHT0_8;                   //使用外部电压,打开ADC12内核,8分频
  50. ADC12MCTL0 = SREF_2;                                //使用外部电压,参考为为VeREF+和AVSS
  51. }
  52. if(Times == 0)ADC12CTL1 = SHP + CONSEQ_1;           //多通道单次转换,采样信号来自采样定时器
  53. if(Times == 1)ADC12CTL1 = SHP + CONSEQ_3;           //多通道多次转换,采样信号来自采样定时器
  54. ADC12IE = 0xff;                             //使能待转换通道的中断
  55. ADC12CTL0 |= ENC;                           //开启软件使能
  56. }
  57. }
时间: 2024-08-02 13:58:14

MSP430学习笔记(4)ADC12的相关文章

msp430学习笔记-msp430g2553

C语言例程:http://wenku.baidu.com/link?url=49JzNSvt3m0fRuf8SWTEM8yEw1yzqr4lBR-QbX8FddcmjTVYnDhuR97wB60HNf07lJmmXbYH6Z1TtleYAE7b1LH9gfvjEGjX01oXZM7CgRO 电设工作小结之——MSP430G2553学习笔记——1 http://blog.sina.com.cn/s/blog_6cd2030b01017x71.html 电设工作小结之——MSP430G2553学习笔

msp430学习笔记-ADC12

本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013748.HTM MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,它具有高速度,通用性等特点.从以下ADC12结构框图中可以看出,ADC12模块是由以下部分组成:输入的16路模拟开关,ADC内部参考电压源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等. ADC12模块的所有寄存器 ADC12CTL0: SHT1x:采样保持时间.定义了寄

msp430学习笔记-IO及低功耗

引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013511.HTM MSP430F149有6个8位的IO口,其中P1,P2口占两个中断向量,共可以接16个中断源.还可以直接利用P口的输入输出寄存器,直接对外进行通信.因为所有的IO口都是和其他外设复用的,因此在用端口前都要用功能选择寄存器选定所用的功能是外设还是P口,还要在方向寄存器中确定是输入还是输出 MSP430F149的端口功能 端口 功能 P1,P2 I/O,中断功能,其他片内外设功能 P3,P4,P5

msp430学习笔记-USART

本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013784.HTM MSP430F149有两个USART通讯端口,其性能完全一样,每个通讯口可通过RS232和RS485等芯片转换,与之相应的串行接口电路通讯.MSP430F149支持串行异步和同步通讯,每种方式都具有独立的帧格式和独立的控制寄存器. USART异步通信 MSP430串行异步通信模式通过两个引脚:接收引脚URXD和发送引脚UTXD与外界相连.异步帧格式由一个起始位,7或8个数据位,校验位(奇/

msp430学习笔记-实现开方log等计算及FFT算法(待续)

MSP430 FFT算法实现 http://bbs.21ic.com/icview-391532-1-1.html http://blog.sina.com.cn/s/blog_6cd2030b01018fp8.html FFT算法的物理意义 http://blog.csdn.net/hzn407487204/article/details/6249945 FFT算法的完整DSP实现 http://blog.csdn.net/xiahouzuoxin/article/details/979045

msp430学习笔记-时钟及延时函数

引用:http://blog.chinaunix.net/uid-24343357-id-3271380.html MCLK默认时钟源是DCOCLK,SMCLK默认时钟源也是DCOCLK,DCOCLK默认约为1.1MHZ(1126.4KHz),ACLK默认为32768HZ 系统复位后MCLK和SMCLK的频率在0.8MHz~1.5MHz,即819.2KHz~1536KHz.系统启动后,可以调整RSELx(基本时钟系统控制寄存器1BCSCTL1前3位).DCOx(DCO控制器DCOCTL前5位).

msp430学习笔记-TA

定时器,CCR2,CCR1三者共用一个中断向量 定时器A是一个16位的定时/计数器.它有3个捕获/比较寄存器:能支持多个时序控制.多个捕获/比较功能和多个PWM输出:有广泛的中断功能,中断可由计数器溢出产生,也可以由捕获/比较寄存器产生. TimerA的4种工作模式 1.停止模式 停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用.当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方 向计数.例如,停止模式前,Timer_A工作于增/减计数模式并且处于

msp430学习笔记-DAC12

MSP430F169 的DAC12 模块有2 个DAC 通道,并且可以用DAC12GRP控制位将多个DAC12通道组合起来,实现同步更新,硬件还能确保同步更新独立于任何中断或者NMI事件. DAC12模块特点:8位或12位分辨率可调.可编程时间对能量的损耗.可选内部或外部参考源.支持二进制原码和补码输入.具有自校验功能.可以多路DAC同步更新.还可用DMA等. 这里实现的是较为简化的版本,需要可以自己添加或改写功能,如:初始化函数内部调用自校验的函数,可以在每一次初始化时候均自校验. DAC12

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main