This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430g2332用内部时钟时,批量生产时每个板上的频率都不同,与设定的频点会差几十HZ,怎么办?

Other Parts Discussed in Thread: MSP430G2332

msp430g2332用内部时钟时,批量生产时每个板上的频率都不同,与设定的频点会差几十赫兹,怎么办?

  • 您现在是否有进行过校准?
  • 没有,不知道怎样校准啊!!!
  • 楼主说的内部时钟是dco还是VLO?

    配置的频率是多少?

    如果是配置较高的频率,差几十Hz也是正产的。

  • 用的是内部DCO,时钟为默认设置,工作在1M上。有什么办法来减小误差呢,论坛上都说的DCO校准,是怎样用呢。

  • 大部分msp430内部都存储有ti出厂时校准dco的参数,msp430g2332也有。

    在初始化的时候添加上相关代码就能校准dco,代码见如下例程

     *******************************************************************************
     * 
     *                       MSP430 CODE EXAMPLE DISCLAIMER
     *
     * MSP430 code examples are self-contained low-level programs that typically
     * demonstrate a single peripheral function or device feature in a highly
     * concise manner. For this the code may rely on the device's power-on default
     * register values and settings such as the clock configuration and care must
     * be taken when combining code from several examples to avoid potential side
     * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware
     * for an API functional library-approach to peripheral configuration.
     *
     * --/COPYRIGHT--*/
    //******************************************************************************
    //  MSP430G2xx2 Demo - Basic Clock, Output Buffered clocks with preloaded DCO
    //                     calibration constants for BCSCTL1 and DCOCTL.
    //  
    //  Description: Buffer ACLK on P1.0, default SMCLK(DCO) on P1.4 and MCLK/10 on
    //  P1.1. DCO is software selectable to 1, 8, 12, or 16Mhz using calibration
    //  contstants in INFOA.
    //
    //  ACLK = LFXT1 = 32768, MCLK = SMCLK = Selectable at 1, 8, 12 or 16Mhz
    //  //* External watch crystal installed on XIN XOUT is required for ACLK *//	
    //	//* By default, the MSP430 uses XT1 to source ACLK; P2.6/7 configured 
    //  //* automatically.
    //               MSP430G2xx2
    //             -----------------
    //         /|\|         P2.6/XIN|-
    //          | |                 | 32kHz
    //          --|RST     P2.7/XOUT|-
    //            |                 |
    //            |       P1.4/SMCLK|-->SMCLK = Default DCO
    //            |             P1.1|-->MCLK/10 = DCO/10
    //            |        P1.0/ACLK|-->ACLK = 32kHz
    //  D. Dang
    //  Texas Instruments Inc.
    //  December 2010
    //  Built with IAR Embedded Workbench Version: 3.42A
    //******************************************************************************
    
    #include <msp430.h>
    
    int main(void)
    {
      WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer
    
     //1Mhz
      if (CALBC1_1MHZ==0xFF)					// If calibration constants erased
      {											
        while(1);                               // do not load, trap CPU!!	
      }
      DCOCTL = 0;                               // Select lowest DCOx and MODx settings
      BCSCTL1 = CALBC1_1MHZ;                    // Set range
      DCOCTL = CALDCO_1MHZ;                     // Set DCO step + modulation */
    
    /* //8Mhz
      if (CALBC1_8MHZ==0xFF)					// If calibration constants erased
      {											
        while(1);                               // do not load, trap CPU!!	
      }
      DCOCTL = 0;                               // Select lowest DCOx and MODx settings
      BCSCTL1 = CALBC1_8MHZ;                    // Set range
      DCOCTL = CALDCO_8MHZ;                     // Set DCO step + modulation */
    
    /* //12Mhz
      if (CALBC1_12MHZ==0xFF)					// If calibration constants erased
      {											
        while(1);                               // do not load, trap CPU!!	
      }
      DCOCTL = 0;                               // Select lowest DCOx and MODx settings
      BCSCTL1 = CALBC1_12MHZ;                   // Set range
      DCOCTL = CALDCO_12MHZ;                    // Set DCO step + modulation*/
    
    /* //16Mhz
      if (CALBC1_16MHZ==0xFF)					// If calibration constants erased
      {											
        while(1);                               // do not load, trap CPU!!	
      }
      DCOCTL = 0;                               // Select lowest DCOx and MODx settings
      BCSCTL1 = CALBC1_16MHZ;                   // Set range
      DCOCTL = CALDCO_16MHZ;                    // Set DCO step + modulation*/
    
      P1DIR |= 0x13;                            // P1.0,1 and P1.4 outputs
      P1SEL |= 0x11;                            // P1.0,4 ACLK, SMCLK output
    
      while(1)
      {
        P1OUT |= 0x02;    	                    // P1.1 = 1
        P1OUT &= ~0x02;                         // P1.1 = 0
      }
    }

  • 不好意思,我还想问一下,它校准的原理是怎样的呢?是不是我用的是1M的DCO,就只用校准1M就行了呢?其它的频率都不用去校准。

  • 1、原理就是配置dco相关寄存器到合适的参数

    dco的工作原理可以参考数据手册的Digitally-Controlled Oscillator (DCO)部分。
    2、是的。使用哪个频率就校准哪个频率。
    ti出厂时一般给出1MHz、8MHz、16MHz等几个频率的参数(不同msp430型号可能会不同),如果使用未提供校准参数的频率,就只能自己校准了。
  • 谢谢!!!解了我多时的疑问。