锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2023-01-17 21:30:00 ad数模转换电位器ad值

一、实验目的

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

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

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

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

5、了解PC片外温度传感器的温度传感器的编程实现;

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

二、实验内容

1、实验一

(1)实验主题及要求:编程实现与分析:采用单通道单采样模式A0通道作为输入通道,模拟转换参考电压组合选择ADC 212模块内的生成电压.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   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    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    2  #include "ad.h"  3  #define TimesNewRoman 0  4  #define Arial 1  5  #define ArialBlac 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转换器输出的数据。将数据组号成波形,用波形显示控件就能显示,不组合也行,直接传给波形显示控件,就是横坐标显示的是数据点数。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章