msp430工作笔记二

发布者:Heavenly999最新更新时间:2016-08-23 来源: eefocus关键字:msp430  工作笔记 手机看文章 扫描二维码
随时随地手机看文章
(四),ADC10

 1,ADC10是十位的AD,在g2553上有A0~A7八个可以外接的AD通道,A10接到片上的温度传感器上,其他的通道都接在内部的VCC或GND上。因为是10为的AD所以计算公式如下:

 

2 ,ADC参考电压的选择:ADC的参考电压可以为:

 

由ADC控制寄存器0 ADC10CTL0控制。但是要提高ADC的精度的话,尽量不要用内部的参考电压,最好外接一个比较稳定的电压作为参考电压,因为内部的产生的参考电压不是特别稳定或精度不是特别的高。例如我在使用时遇到的情况如下:

Vref设为2.5V  但实际的值大概为2.475V, 选择VCC  VSS作为参考,用电压表测得大概为3.58V  还是不小的偏差的。

另外,在有可能的情况下,尽量采用较大的VR+和VR-,以减小纹波对采样结果的影响。

    3,ADC10的采样方式有:单通道单次采样,单通道多次采样,多通道单次采样,多通道多次采样。

4,DTC:因为ADC10只有一个采样结果存储寄存器ADC10MEM,所以除了在单通道单次采样的模式下,其他的三个模式都必须使用DCT,否则转换结果会不停地被新的结果给覆盖。

DTC是转换结果传送控制,也就是转换结果可以不用CPU的干预,就可以自动地存储在指定的存储空间内。使用这种方式转换速度快,访问方便,适用于高速采样模式中。DTC的使用可以从下面的例子中很容易看明白:

#include

#include "ser_12864.h"


uchar s1[]={"DTC:"};

uchar s2[]={"2_cha_2_time_DTC"};


void ADC_init()

{

 ADC10CTL1 = CONSEQ_3 + INCH_1;     // 2通道多次转换, 最大转换通道为A1


  ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE; // ADC10ON, interrupt enabl  参考电压选默认值VCC和VSS

  //采样保持时间为16 x ADC10CLKs,ADC内核开,中断使能   MSC多次转换选择开

  //如果MSC置位,则第一次开始转换时需要触发源触发一次,以后的转换会自动进行  中断使能

  //使用DTC时,当一个块传送结束,产生中断


  //数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止

  ADC10DTC1 = 0x04; //数据传送控制寄存器1 4 conversions  定义在每块的传送数目  一共采样4次 所以单块传送4次

  //以后就停止了传送 因为是两通道的,所以是每个通道采样数据传送2次


  ADC10AE0 |= BIT0+BIT1;         // P1.0 P1.1 ADC option select 使能模拟输入脚A0 A1

     //不知道为什么,当P10 P11都悬空时,采样值不同,用电压表测得悬空电压不同,但是当都接上采样源的时候,

  //采样是相同的

}

 

void main(void)

{

uint adc_sample[8]={0};    //存储ADC序列采样结果

WDTCTL = WDTPW+WDTHOLD;


    BCSCTL1 = CALBC1_12MHZ;  //设定cpu时钟DCO频率为12MHz

    DCOCTL = CALDCO_12MHZ;


    P2DIR |=BIT3+BIT4;      //液晶的两条线


    init_lcd();

    ADC_init();


    wr_string(0,0,s1);

    wr_string(0,3,s2);


    for (;;)

      {

     ADC10CTL0 &= ~ENC;   //ADC不使能  其实这句话可以放在紧接着CPU唤醒之后的,因为CPU唤醒了,说明我们想要的

     //转换数据传送完成了,如果ADC继续转换,那么转换结果也不再传输,是无用的。所以紧接着放在CPU唤醒之后

     //计时关闭ADC,有利于降低功耗

        while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active  等待忙

        ADC10SA = (unsigned int)adc_sample;   //数据传送开始地址寄存器  设置DTC的开始地址  Data buffer start

        //设置数据开始传送的地址为数组adc_sample[]的首地址,因为寄存器ADC10SA和转换结果都是16位的,所以要把

        //地址强制转换为16位的int或unsigned int

        //应该也可以用指针直接访问DTC的存储区,还没试过


        //例如:前面定义了单块传送4次数据,所以每次传送完成了一个块,也就是4次,就会把中断标志位置位,产生中断

        //因为上面设置的地址为数组adc_sample[]的首地址,所以每次转换的结果就会传送到该数组的前4位上,所以如果

        //一切正常的话,数组里应该是前4位为转换的结果,后4位为初始值0  通过下面的显示,验证转换是正确的

        //一次触发首先对A1、A0采样,放入a[0]和a[1]中,再对A1、A0采样,放入a[2]和a[3]中。如此循环下去。

        //验证得知,当多通道采样时,先采高的通道,再采低的通道。如上面每次采样时,先采A1 再A0

        //因为一共采样传送4次,所以数组的后4位为初始值0

 

        ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start   ADC使能,开始转换 ADC10SC为采样触发源

        //不需要cpu的干预,DTC就可以把采样结果存储到指定的存储区中

        __bis_SR_register(CPUOFF + GIE);    // LPM0, ADC10_ISR will force exit  如果转换结果传送完成,

        //就会进入中断,CPU唤醒 继续往下运行


        wr_int(2,0,adc_sample[0]);   //显示转换结果  A1

        wr_int(6,0,adc_sample[1]);   //A0

        wr_int(0,1,adc_sample[2]);   //A1

        wr_int(3,1,adc_sample[3]);   //A0

        wr_int(6,1,adc_sample[4]);

        wr_int(0,2,adc_sample[5]);

        wr_int(3,2,adc_sample[6]);

        wr_int(6,2,adc_sample[7]);


      }

}

 

// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)  //中断响应以后,中断标志位自动清零

{

  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)

}

上面的例子是把存储结果存储在了uint型的数组中。也可以用指针直接指定要存放的地址,然后再用指针进行访问(理论上可以,但还没有试过)。也可以把存储结果直接存放在一个16位的寄存器中,如:

ADC10SA = (unsigned int)&TACCR1;        // Data transfer location  把转换结果存储在TACCR1所在的

    //位置处,就相当于存储在TACCR1中 因为ADC转换结果和寄存器TACCR1都是16位的,所以要把地址强制转换为16位的

    //int 或 unsigned int型


 5,ADC采样注意事项:用片上的ADC10进行采样,如果外部分压电路的电阻过大(比如几K以上),AD引脚会把电压拉高,使采样结果发生很大的偏差。应换成小电阻(几十~几百欧),如果要求更精确的话,要加运放进行电压跟随。

  6,AD采样交流信号:

一般是50Hz,100Hz,1000Hz。方法是在交流信号的一个周期内采样多次(如40次,30次等),然后利用公式可以求出交流信号的有效值,平均值等。

  7,片上温度传感器

ADC的A10通道接片上的温度传感器,MSP430内嵌的温度传感器实际上就是一个输出电压随环境温度而变化的温度二极管。

当使用片上温度传感器时,采样周期必须大于30us    片上温度传感器的偏移很大,所以精确测量需要

进行校准。选择片上温度传感器INCH_10,ADC其他的设置都和外部通道的设置相同,包括参考电压源的选择和转换存储的选择

选择了片上温度传感器,会自动地打开片上参考电压源发生器作为温度传感器的电压源,但是这并不会时能VREF+输出,也不会

影响AD转换参考源的选择,转换参考源的选择和其他通道的选择相同

公式为:VTEMP=0.00355(TEMPC)+0.986


片上温度传感器的校准,可以参见我的温度传感器校准程序,也可以参考其他的论文。下面只给出程序的一部分:

void ADC_init()

{

ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled 参考电压选默认值VCC和VSS

//采样保持时间为16 x ADC10CLKs,ADC开,中断使能

ADC10CTL1 = INCH_10;       // ADC输入通道选择A10,为内部的温度传感器

//其他是默认,采样触发输入源选择为ADC10SC,采样输入信号不翻转,转换时钟选择内部时钟源:ADC10OSC,3.7~6.3MHz

//不分频,单通道单次转换

//ADC10AE0 |= 0x02;                         // PA.1 ADC option select 使能模拟输入脚A1

//P1DIR |= 0x01;                            // Set P1.0 to output direction


  //所以是P11为ADC输入脚,P10控制led

}

 

 

(五),通用串行通信接口(USCI)

   1,USCI_A:支持UART,  IrDA,  SPI

      USCI_B:支持I2C, SPI

   2,UART   这个模块没什么好说的,和其他的一写处理器如S12,ARM等差不多。只要设置好几个控制寄存器,波特率,写几个收发函数就可以了。下面就给出msp430g2553于PC用UART通信的基本程序:

#include  "msp430g2553.h"


unsigned char rev;

char *string1="Helloworld!";

char string2[]="Get it!\n";    //\n是换行符


void putchar(unsigned char c)    //发送字符函数

{

while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 等待TX buffer为空

UCA0TXBUF = c;                    // TX -> RXed character  发送字符c

}


void putstr(char *s)   //发送字符串函数

{

IE2 &= ~UCA0RXIE;   //发送时先关闭接收中断,不接收

while((*s)!='\0')    //如果没有发完,就继续循环发送

{

putchar(*s);

// putchar('\n');     //发送换行符

s++;

}

IE2 |= UCA0RXIE;    //发送完了打开接收中断

}


void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT


  P1DIR=BIT0;


  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO 为1MHz

  DCOCTL = CALDCO_1MHZ;


  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

  P1SEL2 = BIT1 + BIT2;     //第二外围模式选择


//  UCA0CTL1 |= UCSSEL_2;           // SMCLK 其他默认:软件复位使能 USCI逻辑保持在复位状态,用于设置串口

  //UCA0CTL0全部为默认状态:无奇偶校验,LSB first,8bit_data,一位停止位,UART模式,异步模式


//  UCA0BR0 = 8;                              // SMCLK 1MHz 115200    8

//  UCA0BR1 = 0;                              // 1MHz 115200

//  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5


  //下面是选择ACLK,波特率设置为固定的

  UCA0CTL1 |= UCSSEL_1;      //ACLK

  UCA0BR0 = 3;                              // ACLK 32768Hz 9600   32768Hz/9600 = 3.41

  UCA0BR1 = 0;                              // 32768Hz 9600

  UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3


  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  初始化释放,可以操作

  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  接收中断使能


  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

}


// Echo back RXed character, confirm TX buffer is ready first

#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR(void)

{

  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 等待TX buffer为空

  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character  发送接收到是数据


  rev=UCA0RXBUF;

  if(rev&0x01)

  {

  P1OUT |= BIT0;

  putstr(string1);

  putstr(string2);

  }

  else

  P1OUT &= ~BIT0;

}


注意:关于波特率的设置这一块还没有看懂,但上面的例子总的设置是对的

值得说明的是:可以用定时器来实现串口通信功能,例子还没有看。


   3,对于SPI和I2C,有时有可能会用于g2553和其他的一些芯片、设备的通信用,还没没仔细看。

 


(六),比较器A   Comparator_A+

  1,是一个模拟电压比较器,主要功能是指出两个输入电压CA0和CA1的大小关系,然后由输出信号CAOUT输出。

  2,输出:如果正端输入电压大于负端输入电压,输入为1。如果负端输入电压大于正端输入电压,输出为0;

  3,最终输出信号的上升沿或下降沿可以设置为具有中断能力,中断响应后,硬件会自动清除中断标志位CAIFG,也可以被软件清除。

  4,Comparator_A+支持精密的斜坡AD转换,供电电压检测和监视外部模拟信号。

  5,比较器的其中一路可以接参考电压,有0.25VCC, 0.5VCC, 三极管的阀值电压0.55V

也可以两路信号都接外部的模拟信号。

  6,更详细的内容,参见用户只能,下面的例子是简单的用比较器A比较两个输入模拟电压的高低,有CAOUT输出:

//主要功能是比较两个输入信号的大小关系

#include  


void delay(void);                           // Software delay


void main (void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT


  CACTL2 = P2CA4;    // CA1/P1.1 = +comp 正输入端信号选择CA1,负输入端信号不连接外部输入信号

  //其他位的设置为默认:比较器输出不滤波 , CAOUT为比较器的输出结果


  CCTL0 = CCIE;                             // CCR0 interrupt enabled

  TACTL = TASSEL_2 + ID_3 + MC_2;           // SMCLK/8, cont-mode


  _EINT();                                  // enable interrupts


  while (1)                                 // Loop

  {

//比较器A控制寄存器1 CACTL1采用的是默认设置:参考电压源VCAREF加到比较器的正输入端,内部参考源关,比较器关,

//中断不使能

    CACTL1 = 0x00;                          // No reference voltage

    _BIS_SR(LPM0_bits);                     // Enter LPM0


    CACTL1 = CAREF0 + CAON;                 // 参考源为0.25*Vcc, Comp. on

    _BIS_SR(LPM0_bits);                     // Enter LPM0


    CACTL1 = CAREF1 + CAON;                 // 参考源为0.5*Vcc, Comp. on

    _BIS_SR(LPM0_bits);                     // Enter LPM0


    CACTL1 = CAREF1 + CAREF0 + CAON;        //参考源为三极管的阀值电压 0.55V, Comp. on

    _BIS_SR(LPM0_bits);                     // Enter LPM0

  }

}


// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR

__interrupt void Timer_A (void)

{

    _BIC_SR_IRQ(LPM0_bits);                 // Clear LPM0 bits from 0(SR)

}

 

   7,也可以用比较器A监视供电电压,用0.25VCC和三极管的阀值电压0.55V进行比较,从而监视供电电压的高低,如果电压低于某个值时,可以做某种动作比如报警电池电量过低等。

 

(七),低功耗模式

1,TI msp430单片机是一个特别强调超低功耗的单片机系列。对于低功耗的实现,丰富的中断和合理的时钟系统是必须的,另外相对独立的外设,可以不在CPU的干预下独立地工作,这样减小了CPU的工作时间,也大幅降低了系统功耗。

2,msp430能够用中断迅速把CPU从低功耗模式中唤醒,唤醒时间小于1us。这就保证了系统的低功耗。让CPU工作在脉冲状态,最大限度地让CPU处于休眠状态,只有在一些需要CPU干预的操作或计算时,才把CPU唤醒。另外,把一些无关的外围模块也都关闭,使一些需要的模块尽量单独工作,从而可以把CPU休眠。合理地利用中断,在需要的时间唤醒cpu。

    3,msp430应用系统价格和电流消耗等因素会影响CPU与外围模块对时钟的需求,所以系统使用不同的时钟信号:ACLK, MCLK, SMCLK。用户通过程序可以选择低频或高频,这样可以根据实际需要来选择合适的系统时钟频率,这3种不同的频率的时钟输出给出不同的模块,从而更合理地利用系统的电源,实现整个系统的超低功耗。

4,单片机的工作模式有:活动模式是(AM),低功耗模式0(LPM0)~低功耗模式4(LPM4)。不同的低功耗模式禁止不同的模块,适应不同的需求。

5,各种低功耗模式的配置有控制位:SCG1,SCG2,OscOff, CPUOff由软件来配置。而各种低功耗模式又可通过中断的方式会到活动模式。

在CCS的编译系统中,已经做好了各种低功耗模式的宏定义,在软件中直接调用就可以了,宏定义如下:


#ifdef __ASM_HEADER__

#define LPM0                   (CPUOFF)

#define LPM1                   (SCG0+CPUOFF)

#define LPM2                   (SCG1+CPUOFF)

#define LPM3                   (SCG1+SCG0+CPUOFF)

#define LPM4                   (SCG1+SCG0+OSCOFF+CPUOFF)


#else

#define LPM0_bits              (CPUOFF)

#define LPM1_bits              (SCG0+CPUOFF)

#define LPM2_bits              (SCG1+CPUOFF)

#define LPM3_bits              (SCG1+SCG0+CPUOFF)

#define LPM4_bits              (SCG1+SCG0+OSCOFF+CPUOFF)


#include "in430.h"


#define LPM0         _bis_SR_register(LPM0_bits)        

#define LPM0_EXIT    _bic_SR_register_on_exit(LPM0_bits)

#define LPM1         _bis_SR_register(LPM1_bits)        

#define LPM1_EXIT    _bic_SR_register_on_exit(LPM1_bits)

#define LPM2         _bis_SR_register(LPM2_bits)        

#define LPM2_EXIT    _bic_SR_register_on_exit(LPM2_bits)

#define LPM3         _bis_SR_register(LPM3_bits)        

#define LPM3_EXIT    _bic_SR_register_on_exit(LPM3_bits)

#define LPM4         _bis_SR_register(LPM4_bits)        

#define LPM4_EXIT    _bic_SR_register_on_exit(LPM4_bits)

#endif


   6,具体的例子就不再举了,就是在CPU不需要工作的时候进入低功耗模式,在需要工作的时候,通过中断唤醒。

下面说说一般的低功耗的原则:

  (1),最大化LPM3的时间,用32KHz晶振作为ACLK时钟,DCO用于CPU激活后的突发短暂运行。

  (2),用接口模块代替软件驱动功能。

  (3),用中断控制程序运行。

  (4),用可计算的分支代替标志位测试产生的分支。

  (5),用快速查表代替冗长的软件计算。

  (6),在冗长的软件计算中使用单周的CPU寄存器。

  (7),避免频繁的子程序和函数调用。

  (8),尽可能直接用电池供电。

此外,在设计外设时还有一些常规原则:

  (1),将不用的FETI输入端连接到Vss。

  (2),JTAG端口TMS, TCK和TDI不要连接到Vss。

  (3),CMOS输入端不能有浮空节点,将所有输入端接适当的电平。

  (4),不论对于内核还是对于各外围模块,选择尽可能低的运行频率,如果不影响功能应设计自动关机。

 

 

(八),看门狗定时器

1,单片机的看门狗定时器的原始功能是防止程序出错跑飞,但是在系统的研发阶段,一般不使用看门狗的。

2,msp的看门狗可以工作在看门狗模式和间隔定时器模式,在间隔定时器模式下,就可以当一个普通的定时器使用。其中工作模式的宏定义如下:

#define __MSP430_HAS_WDT__                   


SFR_16BIT(WDTCTL);                           

#define WDTIS0                 (0x0001)

#define WDTIS1                 (0x0002)

#define WDTSSEL                (0x0004)

#define WDTCNTCL               (0x0008)

#define WDTTMSEL               (0x0010)

#define WDTNMI                 (0x0020)

#define WDTNMIES               (0x0040)

#define WDTHOLD                (0x0080)


#define WDTPW                  (0x5A00)

 

#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)                        

#define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)                 

#define WDT_MDLY_0_5        (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)                 

#define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0)          

#define WDT_ADLY_1000       (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL)                

#define WDT_ADLY_250        (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0)         

#define WDT_ADLY_16         (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)         

#define WDT_ADLY_1_9        (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)  

#define WDT_MRST_32         (WDTPW+WDTCNTCL)                                 

#define WDT_MRST_8          (WDTPW+WDTCNTCL+WDTIS0)                          

#define WDT_MRST_0_5        (WDTPW+WDTCNTCL+WDTIS1)                          

#define WDT_MRST_0_064      (WDTPW+WDTCNTCL+WDTIS1+WDTIS0)                   

#define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)                         

#define WDT_ARST_250        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0)                  

#define WDT_ARST_16         (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1)                  

#define WDT_ARST_1_9        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)           

 


下面举一个看门狗工作于间隔定时器模式下的例子:

#include


void main(void)

{

  WDTCTL = WDT_MDLY_32;                     // Set Watchdog Timer interval to ~30ms  SMCLK计时


  IE1 |= WDTIE;                             // Enable WDT interrupt 间隔定时器模式中断使能

  P1DIR |= 0x01;                            // Set P1.0 to output direction


  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

}


// Watchdog Timer interrupt service routine

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)   //WDTIFG中断标志自动清除

{

  P1OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR

}


   3,上电以后看门狗默认是打开的,如果不用的话就将其关闭:

WDTCTL = WDTPW + WDTHOLD;

   4,看门狗控制寄存器还控制着RST/NMI管脚的功能,可以选择它为复位管脚,也可以选择它产生不可屏蔽中断,例子如下:

//第16脚是RST/NMI/SBWTDIO  在本程序中,如果按下RESER键,会进入非可屏蔽中断,使P10 led闪烁

#include  


void main(void)

{

  WDTCTL = WDTPW + WDTHOLD + WDTNMI + WDTNMIES;  // WDT off NMI hi/lo

  //WDTHOLD停止看门狗定时器  WDTNMI选择RST/NMI pin为NMI功能   WDTNMIES选择下降沿触发NMI


  P1DIR |= 0x01;                            // Set P1.0 to output direction

  P1OUT &= ~0x01;                           // Clear P1.0 LED off


  IE1 |= NMIIE;                             // Enable NMI  不可屏蔽中断使能


  _BIS_SR(LPM0_bits);                       // Enter LPM0    因为是非可屏蔽中断,所以不用打开总中断

}


#pragma vector=NMI_VECTOR

__interrupt void nmi_ (void)

{

  volatile unsigned int i;

  P1OUT |= 0x01;                            // Set P1.0 LED on

  for (i = 20000; i > 0; i--);              // Delay

  P1OUT &= ~0x01;                           // Clear P1.0 LED off


  IFG1 &= ~NMIIFG;                          // Reclear NMI flag in case bounce

  //NMI中断标志位必须要软件清除

  IE1 |= NMIIE;                             // Enable NMI

  //当非可屏蔽中断被相应,所有的NMI使能位都会自动地被复位,所以NMI相应之后,用户必须软件重新使能需要的NMI

}

关键字:msp430  工作笔记 引用地址:msp430工作笔记二

上一篇:msp430工作笔记3
下一篇:MSP430 工作笔记一(转)

推荐阅读最新更新时间:2024-03-16 15:06

MSP430教程:MSP430单片机ADC12模块
MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,他具有高速度,通用性等个性。大局部都内置了ADC模块.而有些不带ADC模块的片子,也可穿越利用内置的模仿比拟器来告终AD的转换。在系列产品中,我们能够穿越以下列表来容易地认识他们的ADC功能告终。 系列型号ADC功能告终转换精度 MSP430X1XX2比拟器告终10位 MSP430F13XADC模块12位 MSP430F14XADC模块12位 MSP430F43XADC模块12位 MSP430F44XADC模块12位 MSP430X32XADC模块14位 从以下ADC12构造图中能够看出,ADC12模块中是由以下局部构成:输入的16
[单片机]
用超低功耗MSP430单片机设计数据采集系统
1 MSP430单片机简介 MSP430 是TI公司近几年推出的16位系列单片机,其最早是面向于驱动LED显示的应用设计,由于极好的应用效果和很大的市场潜力,TI很快将其发展为通用单片机。现已有X1XX、X3XX、X4XX几个系列,并且还在不断的发展。MSP430作为一种新型的单片机,采用了TI公司最新的低功耗技术,使其在众多的单片机中独树一帜。MSP430工作在1.8~3.6V电压下,有正常工作模式(AM)和4种低功耗工作模式(LPM1、LPM2、LPM3、 LPM4),在电源电压为3V时,各种模式的工作电流分别为 AM:340uA、LPM1:70uA、LPM2:17uA、LPM3:2uA、LPM4:0.1uA。单片机可以方
[单片机]
用超低功耗<font color='red'>MSP430</font>单片机设计数据采集系统
解读MSP430F2274单片机设计的倒车雷达系统电路
  随着人们对汽车辅助驾驶系统智能化要求的提高和 汽车电子 系统的网络化发展,新型的倒车雷达应能够连续测距并显示障碍物距离,并具有通信功能,能够把数据发送到汽车总线上去。以往的倒车雷达设计使用的元器件较多,功能也较简单。本文介绍的基于新型高性能超低功耗单片机MSP430F2274的倒车雷达可以弥补以往产品的不足。   系统采用超声波测距原理。超声波测距仪器一般由发射器、接收器和信号处理器三部分组成。工作时,超声波发射器发出超声波脉冲,超声波接收器接收遇到障碍物反射回来的反射波,准确测量超声波从发射到遇到障碍物反射返回的时间,根据超声波的传播速度,可以计算出障碍物距离。作为一种非接触式的检测方式,超声波具有空气传播衰减小、反射能力和穿
[单片机]
解读<font color='red'>MSP430</font>F2274单片机设计的倒车雷达系统电路
MSP430 定时器输出PWM波形
硬件介绍: MSP430系列单片机的TimerA结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。它给开发人员提供了较多灵活的选择余地。当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM,而不需利用中断维持PWM输出。 MSP430F16x和MSP430F14x单片机内部均含有两个定时器,TA和TB;TA有三个模块,CCR0-CCR2;TB含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM波形(只有三种输出模式可用);TA可以输出完整的2路PWM波形;TB可以输出6路完整的PWM波形。 定时器的PWM输出有有8种模式: 输出模式0 输出模式:输出信号OUTx由
[单片机]
<font color='red'>MSP430</font> 定时器输出PWM波形
CAN总线与MSP430红外检测系统电路
  本文介绍的是一种新的检测系统,选用红外CO传感器和MSP430单片机作为核心信号处理电路,结合数字滤波、温度补偿运算.具有检测浓度范围宽、使用寿命长等优点。   系统组成及硬件设计   该系统由红外CO气体传感器、MSP430单片机、CAN总线接口及远程监控系统组成。该系统在检测现场通过单片机处理检测的数据、控制 LCD显示、声光报警,同时还配备CAN总线控制器,可以轻松获取浓度、温度以及报警记录等相关信息,实现了智能化的工业现场、远程同时监控功能。系统的组成框图如图1所示。      CAN总线接口设计   该系统CAN接口由独立的CAN总线控制器SJA1000、CAN数据收发器TJA1050组成。SJA1000是独立
[单片机]
CAN总线与<font color='red'>MSP430</font>红外检测系统电路
MSP430F149的串口RS485接口
一、简述 RS485通信基本原理和使用方法同RS232,不同点如下。 RS232接口只能实现点对点的通信方式,但这种方式不能实现联网功能,便出现了RS485解决了这个问题。RS485采用差分信号负逻辑,+2V~+6V表示“1”,- 6V~- 2V表示“0”。双机通信时只需A-A,B-B连接。 硬件电路一般采用SN65176等RS485电平转换芯片。与MCU相连时有三个引脚:DE(RE同DE连在一起),DI(接受引脚),RO(发送引脚)。MCU发送一帧信号时,要先使能DE=1;接收信号前要先使能DE=0(即RE=0)。 二、实例 2.1 发送字符8.N.1.2400 #define DRE_out P3DIR
[单片机]
使用MSP430G2 LaunchPad开发板连接步进电机的方法
在本篇文章中,我们将介绍如何使用MSP430 LaunchPad开发板连接一个步进电机。 MSP-EXP430G2是德州仪器(TI)提供的开发工具,又名LaunchPad,用于学习和练习如何使用他们提供的微控制器。该开发板属于MSP430产品线,我们可以使用它对所有MSP430系列微控制器进行编程。如果您是MSP430的新手,请查看MSP430 LaunchPad的入门教程。 所需的材料 ● MSP430 LaunchPad开发板 ● 35BYJ46或28-BYJ48步进电机 ● ULN2003驱动芯片 ● 连接导线 ● 面包板 步进电机 步进电机是一种无刷直流电机,可将电脉冲转换为不同的机械运动。步进电机的轴以
[单片机]
使用<font color='red'>MSP430</font>G2 LaunchPad开发板连接步进电机的方法
基于MSP430F169的深海环境数据采集系统设计
海洋占地球表面的71%,是各国分别占有和世界共有的。世界海洋中有2.5亿平方千米公海和国际海底区域,其中有丰富的共有海洋资源。海洋是富饶而未充分开发的资源宝库。随着陆地战略资源的日益短缺,沿海各国不断加大向海洋索取资源的力度和强度。因此,开发一种可采集深海环境信息的设备,对深入开发海洋资源,具有极其重要的作用。已有的深海环境信息采集系统有采样精度低、功耗大等缺点,无法长期在水下工作,不适于深海勘探。本文提出的深海环境数据采集系统可用于4 000 m深海环境,不仅能对温度、压力、盐度等信息进行采集,还可以自动存储到Flash中,并上传到上位机进行显示、分析。该系统具有精度高、功耗低等优点,一次充电可工作一年左右,非常适合深海探测。
[测试测量]
基于<font color='red'>MSP430</font>F169的深海环境数据采集系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved