历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2020年01月12日 | MSP430F5529 ADC参考

2020-01-12 来源:eefocus

1.ADC12_A初始化参数

typedef struct ADC_MemMap

{

  union

  {

    uint16_t CTL0;

    struct

    {

      uint16_t SC             :1;  /* ADC12 Start Conversion */

      uint16_t ENC            :1;  /* ADC12 Enable Conversion */

      uint16_t TOVIE          :1;  /* ADC12 Timer Overflow interrupt enable */

      uint16_t OVIE           :1;  /* ADC12 Overflow interrupt enable */

      uint16_t ON             :1;  /* ADC12 On/enable */

      uint16_t ADCREFON       :1;  /* ADC12 Reference on */

      uint16_t REF2_5V        :1;  /* ADC12 Ref 0:1.5V / 1:2.5V */

      uint16_t MSC            :1;  /* ADC12 Multiple SampleConversion */

      uint16_t SHT0           :4;  /* ADC12 Sample Hold 0 Select  */

      uint16_t SHT1           :4;  /* ADC12 Sample Hold 1 Select  */

    };

  };

  union

  {

    uint16_t CTL1;

    struct

    {

      uint16_t ADBUSY         :1;    /* ADC12 Busy */

      uint16_t CONSEQ         :2;    /* ADC12 Conversion Sequence Select  */

      uint16_t SSEL           :2;    /* ADC12 Clock Source Select  */

      uint16_t DIV            :3;    /* ADC12 Clock Divider Select  */

      uint16_t ISSH           :1;    /* ADC12 Invert Sample Hold Signal */

      uint16_t SHP            :1;    /* ADC12 Sample/Hold Pulse Mode */

      uint16_t SHS            :2;    /* ADC12 Sample/Hold Source  */

      uint16_t CSTARTADD      :4;    /* ADC12 Conversion Start Address  */

    };

  };

  union

  {

    uint16_t CTL2;

    struct

    {

      uint16_t REFBURST       :1;    /* ADC12+ Reference Burst */

      uint16_t ADCREFOUT      :1;    /* ADC12+ Reference Out */

      uint16_t SR             :1;    /* ADC12+ Sampling Rate */

      uint16_t DF             :1;    /* ADC12+ Data Format */

      uint16_t RES            :2;    /* ADC12+ Resolution  */

      uint16_t TCOFF          :1;    /* ADC12+ Temperature Sensor Off */

      uint16_t PDIV           :1;    /* ADC12+ predivider 0:/1   1:/4 */

    };

  };

  uint16_t RESERVED_1[2];

  uint16_t IFG;

  uint16_t IE;

  uint16_t IV;

  struct

  {

      uint8_t INCH            :4;     /* ADC12 Input Channel Select*/

      uint8_t REF             :3;     /* ADC12 Select Reference  */

      uint8_t EOS             :1;     /* ADC12 End of Sequence */

  }MCTL[16];

  uint16_t MEM[16];

}volatile * ADC_MemMapPtr;


#define ADC12_SSEL_ADC12OSC       0

#define ADC12_SSEL_ACLK           1                   

#define ADC12_SSEL_MCLK           2

#define ADC12_SSEL_SMCLK          3   


#define ADC12_SREF_0            0

#define ADC12_SREF_1            1

#define ADC12_SREF_2            2

#define ADC12_SREF_3            3

#define ADC12_SREF_4            4

#define ADC12_SREF_5            5

#define ADC12_SREF_6            6

#define ADC12_SREF_7            7


#define ADC_BASE_PTR                     ((ADC_MemMapPtr)__MSP430_BASEADDRESS_ADC12_PLUS__)


1.1 初始化的通道及引脚

typedef enum

{

  ADC_CH0        =BIT0,  //P6.0

  ADC_CH1        =BIT1,  //P6.1

  ADC_CH2        =BIT2,  //P6.2

  ADC_CH3        =BIT3,  //P6.3

  ADC_CH4        =BIT4,  //P6.4

  ADC_CH5        =BIT5,  //P6.5

  ADC_CH6        =BIT6,  //P6.6

  ADC_CH7        =BIT7,  //P6.7

  ADC_CH8        =BIT8,  //VeREF+    //外部正基准

  ADC_CH9        =BIT9,  //VeREF-    //外部负基准

  ADC_CH10       =BITA,  //片内温度传感器

  ADC_CH11       =BITB,  //(AVCC-AVSS)/2

  ADC_CH12       =BITC,  //P7.0

  ADC_CH13       =BITD,  //P7.1

  ADC_CH14       =BITE,  //P7.2

  ADC_CH15       =BITF,  //P7.3

  ADC_CH_NUM     =16u,   //通道数量

}ADC_CHn;       //通道


1.2 参考电压

typedef enum

{

  ADC_VREF_1_5V         ,  //内部1.5V

  ADC_VREF_2_5V         ,  //内部2.5V

  ADC_VREF_3_3V         ,  //供电电压作为参考电压

  ADC_VREF_External     ,  //使用外部提供参考电压

}ADC_VREF;         //参考电压


值得注意的是,参考手册里面解释如下 

3 

单片机的采样电压是不允许超过参考电压: 

image.png?imageView2/2/w/550


从参考公式来看,必须小于参考电压,如果超过参考电压,输出只能到最大参考电压,并且还会可能烧坏单片机。


1.3 转换精度

typedef enum

{

  ADC_8bit              ,  //8 位精度,最大值256-1

  ADC_10bit             ,  //10位精度,最大值1024-1

  ADC_12bit             ,  //12位精度,最大值4096-1

}ADC_Resolution;   //精度


2 初始化

/*******************************************************************************

*  函数名称:ADC_Init(uint16_t ch,ADC_VREF Vref,ADC_Resolution nBit)

*  功能说明:ADC初始化一个或多个ADC通道

*  参数说明:

            uint16_t ch     :要初始化的通道

            ADCVREF Vref    :参考电压

            ADC_Resolution nBit   :转换精度

*  函数返回:无

********************************************************************************/

void ADC_Init(uint16_t ch,ADC_VREF Vref,ADC_Resolution nBit)

{

  ADC12->ENC = DISABLE; //先对该位复位,否则置位后有些寄存器不能再进行操作

  uint16_t SREF_RegValue = 0u;

  switch(Vref)           //选择参考电压

  {

  case ADC_VREF_1_5V:

    REFCTL0 &=~ REFMSTR;                //把REF参考电压控制权交给ADC

    ADC12->ADCREFON = BIT_SET;

    ADC12->REF2_5V = RESET;

    SREF_RegValue = ADC12_SREF_1;       //使用内部提供的参考电压

    break;

  case ADC_VREF_2_5V:

    REFCTL0 &=~ REFMSTR;

    ADC12->ADCREFON = BIT_SET;

    ADC12->REF2_5V = BIT_SET;

    SREF_RegValue = ADC12_SREF_1;       //使用内部提供的参考电压

    break;

  case ADC_VREF_External:      

    P5SEL |= BIT0;       //VeREF+

    P5SEL |= BIT1;       //VeREF-

    SREF_RegValue = ADC12_SREF_2;       //使用外部参考电压

  case ADC_VREF_3_3V:

    SREF_RegValue = ADC12_SREF_0;       //使用电源电压作为参考电压,

    break;

  default :break;

  }

  //初始化通道

  uint16_t CH_Mask = 0x01;

  for(uint8_t CH_Num=0; CH_Num < ADC_CH_NUM; CH_Num++)

  {

    if(ch & CH_Mask)   //要初始化的通道

    {

      if((CH_Mask & InitialedChannel_Bit) == 0)   //如果该通道未被初始化过               

      {

        ADC12->MCTL[InitialedChannel_Num].INCH = CH_Num;

        ADC12->MCTL[InitialedChannel_Num].REF  = SREF_RegValue;//参考电压选择,通道设置

        ADC_Channel_Bit[InitialedChannel_Num] = CH_Mask;//将该通道初始化标志置位                                                 InitialedChannel_Bit |= CH_Mask; //置位已初始化的通道标志位

        InitialedChannel_Num ++;//初始化的通道数加1

      }

      else //如果是之前已经初始化过的通道,则要在这里从新设置一下,只设置通道参考电压

      {

        ADC12->MCTL[ADC_GetChanelNum((ADC_CHn)CH_Mask)].REF = SREF_RegValue;//改变参考电压            

      }

    }

    CH_Mask <<= 1;

  }

  if(InitialedChannel_Num > 1)                 //有多个通道时要加上序列通道结束位

  {

    for(int i=0; i<(InitialedChannel_Num-1); i++)   //前面所有通道序列结束位清零

推荐阅读

史海拾趣

Dynachip Corp公司的发展小趣事

Dynachip Corp公司成立于21世纪初,最初是由几位在半导体领域有深厚背景的科学家和工程师共同创立的。他们在大学实验室里共同研发出了一种新型的芯片技术,这种技术具有更高的集成度和更低的能耗。凭借这一创新技术,Dynachip Corp公司正式成立,并开始了从实验室到市场的转化过程。他们积极与投资者接洽,筹集资金,并建立了生产线,将这一技术转化为实际产品。

Cornerstone Sensors公司的发展小趣事

品质是Cornerstone Sensors的生命线。公司建立了严格的质量管理体系,从原材料采购、生产制造到产品测试等各个环节都进行严格把控。同时,公司还注重品牌建设,通过参加行业活动、发布技术文章、提供专业培训等方式提升品牌影响力。Cornerstone Sensors的产品逐渐成为行业内公认的高品质代表,赢得了广泛的口碑和市场份额。

Hirosugi-Keiki公司的发展小趣事

Cornerstone Sensors一直致力于技术创新和产品升级。公司不断投入研发资源,探索传感器技术的新应用和新领域。例如,公司率先推出了具有自校准功能的智能传感器,大大提高了产品的使用便捷性和准确性。此外,Cornerstone Sensors还积极探索物联网、人工智能等新兴技术与传感器的结合点,为行业发展注入了新的活力。

Avasem公司的发展小趣事

随着全球对环境保护和可持续发展的关注度不断提升,Avasem公司积极响应这一趋势,将可持续发展理念融入公司的战略规划和日常运营中。公司采用环保材料和工艺生产电子产品,降低生产过程中的能源消耗和废弃物排放。同时,Avasem公司还积极参与社会公益事业,支持教育、环保等领域的项目。这些举措不仅提升了公司的社会形象,还为其赢得了更多消费者的支持和信任。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展路径和策略。在实际情况下,一个公司的成长会受到多种因素的影响,包括市场环境、技术发展趋势、公司战略选择等。因此,这些故事并不能完全代表任何真实存在的电子行业公司的发展历程。

Design Gateway公司的发展小趣事

随着Gateway业务的不断发展,公司开始寻求更多的市场曝光。1987年,Gateway在《Computer Shopper》杂志上投放了一版独特的广告,吸引了众多消费者的目光。1991年,公司推出了彰显其牧场起家背景的别具一格的奶牛花斑盒状商标,这一创新举措获得了全国消费者的认可,进一步提升了Gateway的品牌知名度和市场地位。

(请注意,由于篇幅限制,以上两个故事为简化版。在实际写作中,可以进一步扩展每个故事,包括更详细的背景信息、人物对话、市场反应等。)

由于篇幅所限,这里只提供了两个故事概要。如果需要更多关于Gateway或其他电子公司的发展故事,可以进一步研究和撰写。

DDP Engineered LED Solutions公司的发展小趣事

DDP Engineered LED Solutions公司自创立之初,便以技术创新作为公司发展的核心动力。在公司成立的早期,研发团队深入LED照明领域,通过不断实验和改进,成功开发出了一系列高效、稳定的LED照明产品。这些产品不仅具有出色的照明效果,而且具有较长的使用寿命和较低的能耗,迅速在市场上获得了认可。随着技术的不断迭代,DDP不断推出符合市场需求的创新产品,逐渐在电子行业LED照明领域崭露头角。

问答坊 | AI 解惑

7段显示

我是一个初学者。急需一个显示电路,请那位高手帮帮忙。单一个7段显示,第一次触控输入信号显示号码,等第二次触控时第一次触控的显示消除;显示第二次触控的号码《是触控不是开关》。请帮忙的高手能提供电路图 wuhukadn@hotmail.com…

查看全部问答>

40/45nm的功耗

At 40 and 45 nm process nodes, power has become the primary factor for FPGA selection. Spartan®-6 and Virtex®-6 FPGAs offer lower power, simpler power systems and PCB complexity, better reliability, and lower system cost. ...…

查看全部问答>

无线传感器分级休眠模型的研究

摘要:为了提高无线传感器的有效工作时间, 在无线传感器处于等待状态时, 令其休眠是重要的一种降低功耗策略。分析已 有的两种无线传感器分级休眠能耗模型的特点, 指出这两种模型是单部件无线传感器分级休眠模型, 它们不适用于多部件 组成的无线传 ...…

查看全部问答>

2440实验板,不通过JTAG如何烧写引导程序

大家好!2440的板子上不用JTAG,可以向flash里面烧写引导程序吗?通过USB、串口或者网口可以吗?…

查看全部问答>

用visual studio 2005 开发windows ce 的应用软件 需要哪些软件,如何配置?越详细越好!!主要是 sql ce 的配置 qq 5496

用visual studio 2005 开发windows ce 的应用软件 需要哪些软件,如何配置?越详细越好!!主要是 sql ce 的配置 qq 549602724…

查看全部问答>

请问Build菜单中Open Build Release Directory是连接哪个文件的。我想知道如何写一个.bat文件,让其自动编译驱动。

请问Build菜单中Open Build Release Directory是连接哪个文件的。我想知道如何写一个.bat文件,让其自动编译驱动。然后加载到nk.bin文件中。分别使用命令build、makeimg。 下面是我写的,我觉得是“call wince.bat ARMV4I CEBASE smdk2440”错误。 ...…

查看全部问答>

请教一个问题

msp430单片机中,如果执行  i << 1;请问被移出的位是直接被丢掉了还是存放在另一个寄存器中啊?找了一下特殊功能寄存器好像也没有。 …

查看全部问答>

好东西难求

好东西不好找,更不容易掌握!…

查看全部问答>