模/数转换模块(ADC 12)的设计与应用

一、实验目的

1、了解模/数转换(Analogue-to-Digital Conversion,简称ADC) 的基本原理、转换过程及性能指标;

2、熟练掌握ADC 12模块的四种工作模式;

3、熟练掌握ADC 12模块关键寄存器及其配置和应用方法;

4、掌握应用MSP430F 5529片内温度传感器的方法和编程实现方法;

5、了解PC设备的应用方法及片外温度传感器的编程实现方法;

6、掌握拨盘电位器工作原理、应用和编程实现方法。

二、实验内容

1、实验一

(1)实验题目及要求:编程实现并分析:采用单通道单次采样模式,选择A0通道作为输入通道,模拟转换参考电压组合选择ADC 12模块内部生成电压2.5V和AVss,转换结果存储在ADC12MEM 0缓冲寄存器中。

(2)具体代码如下:

1  #include "ad.h"
 2  
 3 void ioinit()
 4  {
 5      P6SEL |= BIT0;  
 6  }
 7  void AD_Init()
 8  {
 9      REFCTLO|=REFMSTR;
10      ADC12CTL0 |= ADC12MSC;                                                                            
11      ADC12CTL0 |= ADC12ON;                                                                                 
12      ADC12CTL0|=ADC12SHT02;
13      ADC12CTL0|=ADC12REFON;
14      ADC12CTL0|=ADC12REF2_5V;
15      ADC12MCTL0|=ADC12SREF_1;
16      ADC12CTL1|=ADC12SHP;
17      ADC12CTL0|=ADC12ENC;
18  }
19  
20  #include <msp430.h> 
21  #include "Paper_Display.h"
22  #include "ad.h"
23  #define TimesNewRoman 0
24  #define Arial 1
25  #define ArialBlack 2
26  #define size8 0
27  #define size16 1
28  volatile unsigned char DisBuffer[250*16];
29  void initClock()
30  {
31       UCSCTL6 &= ~XT1OFF; 
32       P5SEL |= BIT2 + BIT3; 
33       UCSCTL6 &= ~XT2OFF;         
34       __bis_SR_register(SCG0);
35       UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
36       UCSCTL1 = DCORSEL_4;       
37       UCSCTL2 = FLLD_5 + 1;      
38       UCSCTL3 = SELREF_5 + FLLREFDIV_3;   
39       UCSCTL4 = SELA_4 + SELS_3 +SELM_3;   
40       UCSCTL5 = DIVA_5 +DIVS_1;     
41  }
42  
43  int main(void) 
44  {
45      int i=180;
46      WDTCTL = WDTPW | WDTHOLD;  
47      P8DIR |= BIT1;
48      P8OUT &=~ BIT1;
49      initClock();
50      ioinit();
51      AD_Init();
52  volatile unsigned int value = 0;                                           
53      while(1)
54      {
55          ADC12CTL0 |= ADC12SC;                                                     
56          value = ADC12MEM0;                                                          
57          __delay_cycles(200000 );
58      }

(3)运行结果:

 

2、实验二

(1)实验题目及要求:采用单通道单次采样模式,模拟转换参考电压组合选择ADC 12模块内部生成电压1.5V和AVss,转换结果存储在ADC12MEM 0缓冲寄存器中,应用MSP430F 5529片内温度传感器编程实现。

(2)具体代码如下:

1  #include <msp430.h> 
 2  #include "ad.h"
 3  #define TimesNewRoman 0
 4  #define Arial 1
 5  #define ArialBlack 2
 6  #define size8 0
 7  #define size16 1
 8  volatile unsigned char DisBuffer[250*16];
 9  void initClock()
10  {
11       UCSCTL6 &= ~XT1OFF; 
12       P5SEL |= BIT2 + BIT3; 
13       UCSCTL6 &= ~XT2OFF;          
14       __bis_SR_register(SCG0);
15       UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
16       UCSCTL1 = DCORSEL_4;      
17       UCSCTL2 = FLLD_5 + 1;      
18       UCSCTL3 = SELREF_5 + FLLREFDIV_3;   
19       UCSCTL4 = SELA_4 + SELS_3 +SELM_3;    
20       UCSCTL5 = DIVA_5 +DIVS_1;      
21  }
22  
23  int main(void) 
24  {
25      int i=180;
26      WDTCTL = WDTPW | WDTHOLD;   
27      P8DIR |= BIT1;
28      P8OUT &=~ BIT1;
29      initClock();
30      ioinit();
31      AD_Init();
32      volatile unsigned int value = 0;                                                
33      while(1)
34      {
35          ADC12CTL0 |= ADC12SC;                                                       
36          value = ADC12MEM0;
37      }
38  
39  }

 (3)运行结果:

3、实验三:

(1)实验题目及要求:应用扩展板上拨盘齿轮电位器(R4)编程实现。

(2)具体代码如下:

1  #include <msp430.h> 
 2  #include "ad.h"
 3  #define TimesNewRoman 0
 4  #define Arial 1
 5  #define ArialBlack 2
 6  #define size8 0
 7  #define size16 1
 8  volatile unsigned char DisBuffer[250*16];
 9  void initClock()
10  {
11       UCSCTL6 &= ~XT1OFF; 
12       P5SEL |= BIT2 + BIT3; 
13       UCSCTL6 &= ~XT2OFF;         
14       __bis_SR_register(SCG0);
15       UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
16       UCSCTL1 = DCORSEL_4;      
17       UCSCTL2 = FLLD_5 + 1;       
18       UCSCTL3 = SELREF_5 + FLLREFDIV_3;    
19       UCSCTL4 = SELA_4 + SELS_3 +SELM_3;    
20       UCSCTL5 = DIVA_5 +DIVS_1;      
21  
22  int main(void) {
23      int i=180;
24      WDTCTL = WDTPW | WDTHOLD;   
25      P8DIR |= BIT1;
26      P8OUT &=~ BIT1;
27      initClock();
28      ioinit();
29      AD_Init();
30      volatile unsigned int value = 0;                                                
31      while(1)
32      {
33          ADC12CTL0 |= ADC12SC;                                                       
34          value = ADC12MEM0;
35         if(value > 5)                                                                 
36              P8OUT |= BIT1;
37          else
38              P8OUT &= ~BIT1;
39          if(value >= 800)
40              P3OUT |= BIT7;
41          else
42              P3OUT &= ~BIT7;
43          if(value >= 1600)
44              P7OUT |= BIT4;
45          else
46              P7OUT &= ~BIT4;
47          if(value >= 2400)
48              P6OUT |= BIT3;
49          else
50              P6OUT &= ~BIT3;
51          if(value >= 3200)
52              P6OUT |= BIT4;
53          else
54              P6OUT &= ~BIT4;
55          if(value >= 4000)
56              P3OUT |= BIT5;
57          else
58              P3OUT &= ~BIT5;
59          __delay_cycles(200000 );
60      }
61  }

 

(3)运行结果:

见视频;

三、实验中遇到的问题及分析

1、总结MSP430F5529芯片的ADC12模块有几种内部参考源?应该如何选择?

ADC12内部参考电压发生器产生两种电压:1.5V和2.5V。AD转换都需要一个基准信号,通常为电压基准。ADC12内置参考电源,而且参考电压有6种可编程选择,分别为VR+与VR-的组合。

2、写出模/数转换内核需要用采样保持电路的原因,有哪些转换方式及各自特点。

因为被取样的信号是动态,随时改变的,而A/D转换需要时间,在这个转换的过程中,信号是变化的,为了弥补A/D转换的时间差,所以需要采样保持。如果A/D转换很快,比信号本身的变化快10倍或者更高,则无需保持电路。

转换方式:低通采样、内插公式、带通采样、过采样。

3、总结模/数转换模块是如何支持低功耗特性的?

采用低功耗电源和快速启动方式,快速启动是作为低功耗内部首先启动,同时可选时钟源功耗低,以此来达到支持低功耗的目的。

4、叙述如何采集负电压信号?

(1)采用正负输入AD

(2)如果只有负电压、采用反向放大器转为真信号

(3)如果有正有负,加直流分量将其转为正信号

5、叙述如何对正弦波或三角波进行模/数转换实现计数功能?

对于正弦波,由于其对称性,因此应该使用增减计数模式。对于对称的三角波同样可以用增减计数,对于不对称的三角波,可以使用增计数模式,也可以用连续计数模式。

6、叙述如何编程实现将采集的信号波形在屏幕上显示。

可以通过传感器将现场物理量转化为电信号送给A/D转换器,再经过A/D转换器转换成数字量,之后MSP430F5529单片机通过命令字在规定的时序下读取A/D转换器输出的数据。将数据组号成波形,用波形显示控件就能显示,不组合也行,直接传给波形显示控件,就是横坐标显示的是数据点数。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值