×
单片机 > 单片机程序设计 > 详情

MSP430F4250 AD解读

发布时间:2020-06-18 发布时间:
|

1.关于MSP430F4250:

2.关于MSP430F4250 AD:


参考MSP430X4XXFamily User’s Guide:


关于16位AD采样有两种:


2.1 MSP430F4250选的是哪种?



其实并不是软件设置哪种,而是型号决定,由上述可知,MSP430F4250使用的是SD16_A



2.2 MSP430F4250 AD的输入电压范围是多少?


此时参考的手册需要更换为MSP430F42X0手册:


2.3 MSP430F4250 AD的转换结果在哪?数据格式是什么?


继续参考MSP430X4XX Family User’s Guide手册:



AD的转换结果就在SD16MEMx这个寄存器里保存,数据格式和设置有关:



其中SD16UNI和SD16DF都是SD16CCTLx(其中x是用户选择的通道编号)寄存器中的两位。


另外补充,关于FSR:


MSP430F4250 AD有内部参考电压1.2V,如果设置了选取内部参考电压,那么FSR = 1.2V/2/GAIN= 0.6V(当GAIN = 1时)。


如果没有选取内部参考电压,那么FSR = Vref/2/GAIN(想得到最大的输入范围,就把AVcc[3.3v]接到单片机的Vref引脚上)。(纯属个人理解和设置,最高只试过1.6V的,但是手册上的意思应该可以0-3.3V,暂时没有尝试)。


是否选择内部参考电压,在SD16CTL寄存器中的:



2.4 MSP430F4250 AD的转换速率?


参考MSP430X4XX Family User’s Guide手册,AD转换速率和单片机时钟配置有关:

可知如果使用32768-Hz的外部晶振,则CPU主时钟MCLK=外设时钟SMCLK=1MHz左右(默认值,如果想要改变则可以通过设置SCFQCTL和SCFI0进行倍频)。AD设置时钟源可以选择是ACLK(32768Hz)和SMCLK(1MHz),AD时钟选择上选择SMCLK(SMCLK=MCLK为最快)即可得到最快的转换速率,下面是一种设置下的转换速率的说明:


256的过采样率,并且每四次采样触发一次中断,那么约244us进行一次AD转换。


AD代码如下:


#include  



#define   Num_of_Results   80


/* Arrays to store SD16_A conversion results */

/* NOTE: arrays need to be global to       */

/*       prevent removal by compiler       */

static unsigned int results[Num_of_Results];


void main(void)

{

  volatile unsigned int i;                  // Use volatile to prevent removal

                                            // by compiler optimization


  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  FLL_CTL0 |= XCAP14PF;                     // Configure load caps

  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to

                                            // stabilize

  P1SEL = 0;                                //GPIO

  P1DIR = 0xff;                             //out

  

  SD16CTL = SD16REFON+SD16SSEL0;            // 1.2V ref, SMCLK

  SD16INCTL0 |= SD16INTDLY_0;               // Interrupt on 4th sample

  SD16CCTL0 |= SD16IE ;                     // Enable interrupt

  for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup


  _EINT();                                  // Enable general interrupts


  SD16CCTL0 |= SD16SC;                      // Set bit to start conversion

  _BIS_SR(LPM0_bits);                       // Enter LPM0

  

}


#pragma vector=SD16_VECTOR

__interrupt void SD16ISR(void)

{

  static unsigned int index = 0;


  switch (SD16IV)

  {

  case 2:                                   // SD16MEM Overflow

    break;

  case 4:                                   // SD16MEM0 IFG

    results[index] = SD16MEM0;              // Save CH0 results (clears IFG)

    P1OUT = 0x03;                           //Pin 0,1 out 1

    if (++index == Num_of_Results)

    {

      index = 0;                            // SET BREAKPOINT HERE

      //SD16CCTL0 &=~ SD16SC;

      P1OUT = 0x00;                         //Pin 0,1 out 0   

    }

    break;

  }

}


AD代码的示波器测试:(通过观察P1.0输出)


连续转换的每次转换时间为224us,转换80次为19.6ms。




以上纯属个人见解,初学者可以参考但一切以官方手册为准。


关键字:MSP430F4250  AD  转换时间

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会