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.

[参考译文] MSP430F5340:关于突发设备故障

Guru**** 2387350 points
Other Parts Discussed in Thread: MSP-TS430RGZ48B
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578778/msp430f5340-regarding-failure-of-device-on-burst

部件号:MSP430F5340
主题中讨论的其他部件:MSP-TS430RGZ48B

我在上述设备上进行了EFT,只有在连接了外部晶体时,它才在500V脉冲下失败,但如果我在4KV脉冲的设备(在内部晶体上工作)上运行测试,则设备运行正常。  

1)设备的PLL部分是否受到影响? 我看到在噪声脉冲期间晶体振荡出现故障,然后晶体振荡稳定下来(在没有噪声脉冲的情况下):此周期在噪声脉冲运行时重复,最终MSP被挂起。 是否有解决方案?

2)如果我使用 KC5032A16.000CM0E00作为3.3V的外部振荡器,而不是晶体,它能解决我的问题吗? 如果我要使用它,那么我如何为MSP配置外部时钟源?

3)如果上述振荡器也不能解决我的问题,如果我使用内部晶体(温度范围-20至80摄氏度),我应该如何补偿UART波特率上的温度漂移(因为DCO频率随着温度变化而漂移)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的晶体的频率是多少? Xt1是统一时钟系统(UCS)的一部分,故障安全操作在用户指南的第5.2 12节中介绍,如果XT1出现故障(如故障标志所示),正确的固件应该能够相应地处理时钟源。 同时确保使用的是最大默认驱动器强度(XT1DRIVE)。 正确的硬件设计有助于将ESD的影响降至最低,请参阅晶体振荡器应用报告(SLAA322): www.ti.com/.../slaa322c.pdf

    外部振荡器可能比晶体更可靠,它可以通过设置XT1BYPASS位来选择。 建议不要将refo用作UART的源,因为其频率在整个温度范围内变化+/- 3.5 %,只要波特率保持足够低,DCO就会足够稳定。 您可以评估给定温度下的DCO频率并相应地进行调整,或执行校验和以确保发送的字节按预期方式接收。

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

    我使用的是8或16MHz晶体。 所以,我使用的是XT2。 如果我继续使用我提到的外部振荡器,以下代码是否足以以16MHz运行器件(使用KC5032A16.000CM0E00):


    WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器

    P5SEL || BIT2+BIT3;//WFP 5.2 3= XT2 IN和OUT - X2IN连接到振荡器,XT2OUT保持打开状态

    UCSCTL6 &=~XT2OFF;//启用XT2

    UCSCTL3 |= SELREF_2;// FLLref = REFO

    //由于不使用LFXT1,
    //使用LFFT1采购FLL可能会导致这一问题
    //要设置的XT1OFFG标志

    UCSCTL4 |=拉美经济体系2;// ACLK=REFO,SMCLK=DCO,MCLK=DCO

    UCSCTL6 || XT2BYPASS;



    UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
    //清除XT2,XT1,DCO故障标志
    SFRIFG1 &=~OFIFG;//清除故障标志
    } While (SFRIFG1&OFIFG);//测试振荡器故障标志


    //UCSCTL6 |= XT2DRIVE0;//根据减少XT2驱动器
    //预期频率

    UCSCTL4 |=TELS_5 + SELM_5;// SMCLK=MCLK=XT2

    UCSCTL5 |= divs_1;//SMCLK = MCLK/2

     

    1)在这种情况下,我是否还应检查故障标志?? 例如,何时使用外部振荡器?

    2)是否有任何方法可以检查MSP430是否在外部振荡器上工作,而不是在内部振荡器上工作(如果MSP发现外部振荡器引脚上存在任何故障时,有任何方法可以自动切换到内部电源)。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于8至16 MHz的操作,应选择XT2DRIVE1。 如果在获取MCLK时检测到XT2故障,MCLK会自动切换到时钟源(DCOCLKDIV)的DCO。 因此,在出现这种情况时,应初始化DCO,您需要使用OFIFG检测此故障以确定要采取的措施。

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

    所以你说的是,即使我使用外部振荡器,我仍然需要使用XT2DRIVE位!!! 是吗??

    我在上一篇文章(代码)中提到的OFIFG的轮询机制是否足以确保我的设备在参考外部时钟源的情况下运行?

    我目前还没有使用驱动位(用于外部振荡器),我观察到该设备正在切换到1MHz的内部DCO (因为与使用8/16MHz的晶体相比,该设备运行缓慢)。 驱动器位是否是原因?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经忘记了,我们处理的是外部振荡器而不是晶体,在这种情况下,XT2DRIVE位设置并不重要。 故障标志循环将确保UCS初始化后不会发生故障标志,但是ISR对于评估正常操作期间可能发生的故障标志非常有用。

    设备何时从XT2切换到DCO? 此时是否设置了XT2OFFG? 您的数字方波输入是否遵循数据表的施密特触发器输入部分中定义的参数?

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我订购了上面提到的外部振荡器,看到了它的输出波形,令我惊讶的是,它发出的是锯齿波而不是方形波。 这样可以吗?? 还是只需要数据表中提到的方波? 如果是,您可以推荐一个外部振荡器,根据您的知识,该振荡器可提供方波输出!  
    这是我发现的备选方案:
    这种方法可能会给出一个方波,因为它被称为CMOS TTL。
    第二,如果在这段时间内(直至另一个选择到来),我想用DCO作为我的时钟(8MHz),我想实施一种机制,随着温度的变化改变波特率;有没有办法这样做? 如果我根据 MSP内部传感器的温度更改DCO频率会怎么样? DCO的运行时频率是否可以改变? 如果是,我该怎么做? 以下代码行是否足以用于运行时DCO频率更改:

    __bis_sr_register(SCG0);//禁用FLL控制回路
    UCSCTL2 = FLLD_1 + 254;
    __BIC_SR_REGISTER(SCG0);//启用FLL控制回路

    或者需要整个机构!!!

    谢谢,此致

    钦五月

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

    数据表指定必须使用数字方波,但只要正确遵循施密特触发器输入参数,它就可以工作。 如果您能够测量设备的内部温度,您如何知道改变UCSCTL2 FLLN位以校准8 MHz时的DCO的量是多少? TLV不包含任何DCO校准值,也没有稳定的外部参考可用于测量DCO频率。 如果您在XT1上提供了外部晶体振荡器,那么您将能够以类似于msp430g2xxS 3_DCO_flashcal.c示例中所示的方式校准DCO。 您可以评估几台设备的DCO偏移与温度,并通过查找表进行有经验的猜测,但DCO漂移因设备而异,因此您可能仍会在某些MCU上遇到UART错误。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先,我检查了锯齿振荡器作为外部源连接的设备,然后设备切换到默认DCO。 锯齿电压从600mV (最小值)到2.4V (最大值),锯齿的最小值非常接近数据表中指定的最小值750mV。 这是设备不接受锯齿信号的原因吗?
    然后,我从MSP Launchpad产生了4MHz的方波(0到3.3V),我观察到同样的情况。 设备仍在切换到内部源。 原因可能是什么?

    代码:

    WDTCTL = WDTPW+WDTHOLD; //停止看门狗计时器
    P5SEL || BIT2 + BIT3; //WFP 5.2 3 = XT2 IN和OUT
    UCSCTL6 &=~XT2OFF; //启用XT2
    UCSCTL3 |= SELREF_2; // FLLref =反向
    //由于不使用LFXT1,
    //使用LFFT1采购FLL可能会导致这一问题
    //要设置的XT1OFFG标志
    UCSCTL4 |=拉美经济体系2; // aclk=REFO,SMCLK=DCO,MCLK=DCO

    UCSCTL6 || XT2BYPASS;



    UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
    //清除XT2,XT1,DCO故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    }同时(SFRIFG1&OFIFG); //测试振荡器故障标志 // 如果我移除XTL1OFFG和DCOOFFG,则设备此时会卡住


    //UCSCTL6 |= XT2DRIVE0; //根据减小XT2驱动器
    //预期频率

    UCSCTL4 |=TELS_5 + SELM_5; // SMCLK=MCLK=XT2
    UCSCTL5 |= divs_1;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请提供您的调试工作,代码是否卡在故障标记环路内,还是进入主while环路? 您的LaunchPad连接是什么? 查看调试器内的UCS寄存器内容,并确认它们已按预期设置。

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

    1)当我使用以下行时,代码卡在故障环路内:



    UCSCTL7 &=~(XT2OFFG);
    //清除XT2,XT1,DCO故障标志
    SFRIFG1 &=~OFIFG;//清除故障标志
    } While (SFRIFG1&OFIFG);//测试振荡器故障标志\

     XT1LFOFFG + DCOFFG -当我添加这两行时,它将前进到main函数,但默认DCO已初始化。

    2)我已从启动板生成PWM,并已将其提供给DUT。 DTU的电源和GND分配给启动板,以便它们在相同的地面水平上运行。 当我在示波器上看到PWM时,我看到一个非常坏的脉冲。 这是否是设备(DUT)未在外部计时的原因!

     

    3)如果外部振荡器不能很好地工作,我是否有任何方法可以控制温度方面的波特率。 此外,是否可以在不使用UART重置位的情况下设置波特率寄存器运行时? 建议在数据表中使用RESET,但根据我的观察,当我使用RESET和重新启用RXIE (在主菜单中更改波特率运行时间时)时,MCU会错过接收到的字节。

    4)如果我通过更改乘数N来更改DCO频率运行时,则需要代码的哪个最小部分才能执行此操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)评估OFIFG时,您不能只清除XT2OFFG。 "默认DCO已初始化"的含义是什么?您如何知道MCLK和SMCLK不是XT2所提供的?
    2)如果为被测设备提供LaunchPad 3.3 V导轨,则脉冲最大值不应接近4 V。
    3)我们已经讨论了如何使用DCO作为温度变化的来源来可靠地控制波特率。 在更改波特率控制寄存器时,需要将UART保持在重置状态。
    4)这将需要禁用FLL控制循环,设置UCSCTL2的乘数(可能还有UCSCTL1中的DCORSEL范围)并重新启用。

    请提供DUT的示意图和布局图,如果可能,请使用MSP-TS430RGZ48B EVM测试您的系统。

    此致,
    Ryan