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.

[参考译文] MSP430FR5969:计时器脉冲抖动较大

Guru**** 2589300 points
Other Parts Discussed in Thread: MSP430FR5969

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/630428/msp430fr5969-timer-pulse-jitter-is-large

部件号:MSP430FR5969

我正在开发一款需要1毫秒低抖动定时脉冲的产品。 我正在比较模式下使用MSP430FR5969计时器生成脉冲,不涉及中断,计时器设置为脉冲捕获/比较reg关联输出位。 我不明白为什么我看到周期性脉冲中出现严重抖动。 我测量的前缘到后缘的抖动约为15ns,测量到的前缘到下一个脉冲前缘的抖动超过250ns,并伴有一些低频漂移。
我想知道为什么抖动如此之大? 在数据表中找到的唯一的Relavant SPEC I是2ns的DCO抖动。 我正在使用16MHz时的DCO作为MCLK和SMCLK的源,计时器源是SMCLK。

这是我的定时器初始化代码:

void tmrA0Init (void){
//将WFP 1.1 配置为与0.2 配合使用
P1DIR || BIT1;
P1SEL1 &=~BIL1;
P1SEL0 |= BIT1;

TA0CCR0 = 1024;// CCR0驱动器高(重置/设置模式)
TA0CCR2 = 2048;// 0.2 驱动器0低
// Cap/comp2
TA0CCTL2 = CM_0| CCIS_0| CLLD_0| OUTMOD_7;//重置/设置输出模式,无中断
TA0CTL = CNTL_0 | tassel__SMCLK | ID_0| MC__continuous;
}

如能深入了解此抖动,我们将不胜感激。

谢谢!

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,John:

    由于计时器时钟的来源来自SMCLK,您是否尝试过将SMCLK输出到GPIO引脚并测量该信号的完整性? 如果您看到该时钟出现抖动,则这就是计时器出现类似行为的原因。 您必须查看数据表,以查看此时钟抖动是否在DCO操作规格范围内。 对于高精度应用,最好使用晶体。

    此致,

    Matt Calvo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Matt,您好!
    是的,我设置为在WFP 3.4 上输出SMCLK,我正在查看触发点后100US范围的时间抖动。 抖动约为20ns,忽略同时存在的慢漂移(温度影响?)。 我不确定如何将此类测量与数据表中的抖动规格或在1毫秒内计时器输出中看到的抖动相关联。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John,

    以下是有关时钟抖动和时钟稳定的两种不同线程,它们可以帮助您解决您所看到的问题。

    1- MSP430F2132内部振荡器抖动

    2- MSP430时钟稳定

    此致,

    Matt Calvo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Matt,您好!
    我已经看过这些帖子,但我不清楚它们是否适用于MSP430FR5969。 这些支柱是指DCO调制器和FLL,我看不到FR5969的这些模块。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John,

    请您提供您的代码,以便我尝试重新创建您在我的最后遇到的问题。如果我无法重新创建,则我们可以来回查看差异,但如果可以,我可以循环使用 可以提供进一步帮助的人员。

    -无光泽
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我之前发布了定时器初始化代码。   以下是main的剩余启动代码:

    这是main中的其余代码:
    
    int main(void){
    WDTCTL = WDTPW | WDTHOLD;	//停止看门狗计时器
    FRAMCtl_configureWaitStateControl(FRAMCTL_ACCESS_Time_Cycles_1); //为以16MHz运行的FR5969添加FRAM等待状态
    CS_setDCOFreq (CS_DCORSEL_1,CS_DCOFSEL_4);//将DCO设置为16MHz,FR5969的最大值参见DS表5-6
    cs_initClockSignal (CS_SMCLK,CS_DCOCLK_SELECT,CS_Clock_diver_1);// SMCLK为16 MHz
    CS_initClockSignal (CS_MCLK,CS_DCOCLK_SELECT,CS_CLock_diver_1);// MCLK为16 MHz:FRAM r/w限制为8 MHz,因此FRAM访问需要等待状态
    pm_unlockLPM5();
    //设置WFP 3.4 来监控SMCLK
    P3DIR |= BIT4;
    P3SEL1 |= BIT4;
    P3SEL0 &=~BIT4;
    tmrA0初始化();
    而(1){
    	__no_operation;
    }
    	返回0;}
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您建议将SMCLK路由到IO引脚非常有用。 我使用外部10MHz振荡器作为HFXIN的输入,并配置为将其用作源。 我测量到此外部10MHz输入的抖动很小,大约2ns。
    使用此外部时钟作为MCLK和SMCLK的源,我测量到SMCLK的抖动约为50 ns。

    对于SMCLK上的这种大抖动,是否有任何解释?  

       

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在看到示波器轨迹显示SMCLK大约为4.7MHz。 这意味着我切换到外部10MHz osc.的代码失败,并且故障安全时钟MODOSC正在用于SMCLK。 我现在需要弄清楚切换到外部osc.失败的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John,

    我使用示例代码已经有很长一段时间了,我想我找到了一些可能适用于您的实施的内容。 下面的代码设置为在WFP 1.1 上输出一个脉冲,周期为1毫秒(此示例来自 资源管理器 ,称为msp430fr59xx_ta0_16.c)。 我在WFP 1.1 上检查了该代码的输出,它应该满足您的抖动要求。 请告诉我这是否适合您。

    此致,

    Matt Calvo

    #include <MSP430-h>
    
    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止WDT
    
    //配置GPIO
    P1DIR || BIT0 | BIT1; // WFP 1.0 和WFP 1.1 输出
    P1SEL0 |= BIT0 | BIT1; // WFP 1.0 and WFP 1.1 options select
    
    // Disable the GPIO Power-On default high p阻 抗mode to activate
    // previously configured port settings
    PM5CTL0 &=~LOCKLPPM5;
    
    CSCTL0_H = CSKEY >> 8; //解锁CS寄存器
    CSCTL1 = DCOFSEL_6; // SET DCO = 8MHz
    CSCTL2 = LAST__VLOCLK | TELS__DCOCLK | SELM__DCOCLK;// SET ACLK=VLO SMCLK=DCO
    CSCTL3 = DIVA__8 | DIVVM__8; //设置所有分隔器
    CSCTL0_H = 0; //锁定CS寄存器
    
    //配置Timer0_A
    TA0CCR0 = 1000-1; // PWM周期
    TA0CCTL1 = OUTMOD_7; // CCR1重置/设置
    TA0CCR1 = 750; // CCR1 PWM占空比
    TA0CCTL2 = OUTMOD_7; // CCR2重置/设置
    TA0CCR2 =250; // CCR2 PWM占空比
    TA0CTL = tassel__SMCLK | MC__UP | TCLR;// SMCLK,UP模式,清除TAR
    
    __bis_sr_register (LPM0_bits); //输入LPM0
    __no_operation(); //用于调试器
    } 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Matt,

    我实施了您提供的代码来生成1毫秒的周期脉冲。   我看到的此代码抖动大约为100ns, 这是您所期望的,因为时钟源DCO上的抖动规格是2ns?   在此示波器轨迹中,我在1ms脉冲的边缘触发,并在以下边缘显示抖动。  您的示例中的抖动与计时器时钟使用的频率是否成比例?  我提出这个问题是因为我使用的是由DCO提供的SMCLK,频率为16MHz,并且在4ms内看到大约500ns的抖动。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John,

    我刚刚去实验室检查了计时器和SMCLK信号,但是不能再现您看到的内容。 对于以1ms时间运行的计时器信号,我测量的抖动值大约为600ps;对于以1MHz运行的SMCLK,我测量的抖动值大约为1.2ns。 这两个测量值均在数据表中列出的规格范围内。

    您是否正在使用启动板测试您的设备? 示波器上的触发器设置是否正确?

    此致,

    Matt Calvo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John,

    您是否确定此帖子有任何新内容? 如果您已解决问题或认为我的支持帮助您确定了解决方案,请选择我的上述帖子已解决您的问题,以便我们可以关闭此线程。 谢谢!

    此致,

    Matt Calvo