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.

[参考译文] MSP430FR6047:MCU018

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1528592/msp430fr6047-mcu018

器件型号:MSP430FR6047
主题:EVM430-FR6047 中讨论的其他器件

工具/软件:

您好、

当 I SET 信号采样频率= 4MHz 时、MSP430FR6047 的

                              过采样率= 20

它就可以正常工作、还可以使用 USS 设计中心工具进行通信。 足够好。

但当我设置了时  

信号采样频率= 8MHz、

过采样率= 10。

它会停止使用 USS 设计中心工具进行通信。 点击 ADC capture(ADC 捕获)、但没有通信、也没有进行波形捕获。

也不能更新配置值。 为什么?

即使在断电板后也无法通信。 然后再次刷写固件并开始工作。

谢谢、

Anup Kumar。

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

    尊敬的 Kumar:

    让我在内部咨询专家并向您提供反馈。 谢谢。

    B.R.

    Sal

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

    您好、

    我可以在 EVM430-FR6047 板上使用 OSR 10 设置为 8MHz 信号采样频率、而不会出现问题。 硬件或软件方面是否都有任何修改? 并使用默认的 MSP430FR6047EVM_USS_MSP430FR6047 进行 Water_Demo 了编程、对吗?

    此致、

    现金好

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

    此外、将采样频率设置为 8MHz 和 OSR 10 时没有任何问题。 设置此设置后开始出现问题。

    不对硬件和软件进行任何修改。  

    是的、它使用默认演示工程进行编程。

    我想明确一点、只有在电路板上未连接超声波传感器时才会出现此问题。   

    将超声波传感器连接到电路板后、您可以进行任何配置更改、都可以正常工作。 但是、当您拆下超声波传感器并且配置了采样频率 8MHz 和 OSR 10 时、就会出现问题。  

    问题包括:-

    1) ADC 捕获停止工作。

    2) 信号捕获停止工作。

    3) 不能更新配置参数。

    再次刷写固件。

    谢谢。

    Anup Kumar

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

    您好、

    我想我已经在这里找到了根本原因。 当采样频率为 8MHz OSR = 10 时、则  

    1.)  object->deltaTOF.estimate.numSamplesPerCycle =(int16_t)(params->numSamplesPerCycle * 4096.0f);

    在此步数样本数= 8 * 4096 = 32768、但您有类型将其转换为 int16_t、因此它将为–32768

    因此、连接传感器后、由于突出显示的部分、它可以正常工作。 但未连接传感器时、它将复位。

    if (object->absTOF_DNS_Results->signalDetected)

    if(object->windowingMode == USS_WINDOWS_MODE_DYNAMIC_){
    winStartIndex = 0;
    }
    否则{
    //计算窗口起始索引
    if(object->windowingMode == USS_WINDOWS_MODE_Estimate){
    absTOFFromStartCapture =(int16_t)(((object->absTOF_DNS_Results->iq40TotalToF - object->iq40ADCStartCaptureInstant - object->iq40ADCAdditionalCaptureDelay)<< 4)/ object->iq44ADCSamplePeriod);//(54us-49us-0=0)/0.25us=0
    winStartIndex =(((int32_t) absTOFFromStartCapture << 12)-((int32_t)(object->numSamplePerCycle)*(int32_t)(object->winStartIndexBackOffNumCycles)))>> 12;//20-4*2=12
    }
    否则 if(object->windowingMode == USS_WINDOWS_MODE_STATIC){
    // USS_Alg_dToF_STATIC Window_Type_
    winStartIndex =((int32_t)(object->numSamplePerCycle)*(int32_t)(object->winStartIndexBackOffNumCycles))>> 12;
    }
    暴露

    winStartIndex = 0;
    }
    if (winStartIndex < 0){
    winStartIndex = 0;
    }
    }

    //计算窗口斜坡长度
    winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);//4*4
    如果 (winRampLength < 0){
    winRampLength = 0;
    }

    //计算窗口长度并生成一个偶数
    winLength = winRampLength +_Q12rmpy (object->numSamplePerCycle、object->winNumCycles)+ winRampLength;//16+4*28+16=144
    //确保它不超过总 arrayLength(考虑“winStartIndex")“)
    if (winLength >(object->arrayLength - winStartIndex)){
    winLength = object->arrayLength - winStartIndex;
    }
    winLength = winLength &~1;
    }
    否则{
    //设置默认窗口参数
    winStartIndex = 0;
    winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);
    winLength = object->arrayLength;
    }

    我想现在你会更清楚。 请解决此问题。

    谢谢、

    Anup Kumar。  

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

    您好、

    我想抓住的是这里,

    而不是:-  winRampLength =_Q12rmpy (object->numSamplesPerCycle, object->winTrapzRampOverNumCycles );

    它应该是:- winRampLength =_IQ12rmpy(object->numSamplesPerCycle, object->winTrapzRampOverNumCycles);

    谢谢、

    Anup Kumar。

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

    EMM、有趣的点。  

    感谢您 指出这一点。

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

    您好、

    我正在等待你们的解决。 我必须进一步着手我的发展。

    请尽快建议解决方案。

    谢谢、

    Anup Kumar。

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

    您好、

    哦、因此更改为 _IQ12rmpy 不能解决问题?

    此致、

    现金好

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

    您好、

    通过进行以下更改可以解决此问题:-

    1)  object->int16_t deltaTOF.estimate.numSamplesPerCycle(参数->numSamplesPerCycle * 4096.0f); 将 int16_t 更改为 int32_t

    2.)  而不是: —   winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);

      它应该是: —  winRampLength =_IQ12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);

    但我想问您是否会在 TI 网站上提供更新的 USS 库版本以及勘误表?

    此外、谁将确认我所做的更改完全没有其他影响。

    谢谢、

    Anup Kumar

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

    您好、

    嗯、USS 库上不会有更新。  

    我还尝试在不连接传感器的情况下将采样率更改为 8MHz。 我仍然没有注意到我方面的任何问题。 仍然可以从 MCU 收到消息。

    此致、

    现金好

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

    您好、

    根据 USS 库和我在上一个回复中显示的、它仅在以下情况下才起作用  

    1)  object->int16_t deltaTOF.estimate.numSamplesPerCycle (参数->numSamplesPerCycle * 4096.0f); 将 int16_t 更改为 int32_t

    2.)  而不是: —   winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);

      它应该是: —  winRampLength =_IQ12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);

    或者在红色突出显示部分下方、您可以在黄色部分突出显示的 IF 语句中添加。

    if (object->absTOF_DNS_Results->signalDetected)

    if(object->windowingMode == USS_WINDOWS_MODE_DYNAMIC_){
    winStartIndex = 0;
    }
    否则{
    //计算窗口起始索引
    if(object->windowingMode == USS_WINDOWS_MODE_Estimate){
    absTOFFromStartCapture =(int16_t)(((object->absTOF_DNS_Results->iq40TotalToF - object->iq40ADCStartCaptureInstant - object->iq40ADCAdditionalCaptureDelay)<< 4)/ object->iq44ADCSamplePeriod);//(54us-49us-0=0)/0.25us=0
    winStartIndex =(((int32_t) absTOFFromStartCapture << 12)-((int32_t)(object->numSamplePerCycle)*(int32_t)(object->winStartIndexBackOffNumCycles)))>> 12;//20-4*2=12
    }
    否则 if(object->windowingMode == USS_WINDOWS_MODE_STATIC){
    // USS_Alg_dToF_STATIC Window_Type_
    winStartIndex =((int32_t)(object->numSamplePerCycle)*(int32_t)(object->winStartIndexBackOffNumCycles))>> 12;
    }
    暴露

    winStartIndex = 0;
    }
    if (winStartIndex < 0){
    winStartIndex = 0;
    }
    }

    //计算窗口斜坡长度
    winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);//4*4
    如果 (winRampLength < 0){
    winRampLength = 0;
    }

    //计算窗口长度并生成一个偶数
    winLength = winRampLength +_Q12rmpy (object->numSamplePerCycle、object->winNumCycles)+ winRampLength;//16+4*28+16=144
    //确保它不超过总 arrayLength(考虑“winStartIndex")“)
    if (winLength >(object->arrayLength - winStartIndex)){
    winLength = object->arrayLength - winStartIndex;
    }
    winLength = winLength &~1;
    }
    否则{
    //设置默认窗口参数
    winStartIndex = 0;
    winRampLength =_Q12rmpy (object->numSamplePerCycle、object->winTrapzRampOverNumCycles);
    winLength = object->arrayLength;
    }

    可能在您的库代码中、您已在该部分中更改、否则我很确定它将不起作用。

    谢谢

    Anup Kumar。

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

    您好、

    我刚意识到这是 库源代码的一部分。 我不建议您在线共享代码。 作为协议的一部分、 TI 不提供 源代码支持。  

    此致、

    现金好

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

    您好、

    首先,我很抱歉,从现在起,我将处理这个问题,不在网上共享代码。 我的最后一个问题是:-

    我已经报告了关于 8MHz 采样频率的情况、这是否是代码中的问题?

    谢谢  

    Anu Kumar。

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

    您好、

    我仍然认为这不是代码中的问题。 因为我在使用默认工程时无法重现您的问题。  

    此致、

    现金好

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

    您好、

    如果在代码中将变量键入 int16 类型、且该变量的值大于 int16 类型、该怎么办? 而且、这不是问题。?

    当您使用输入变量为 int16 类型的函数时、当您为其提供 int32 类型变量时、这不是问题吗?

    谢谢、

    Anup Kumar。

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

    您好、

    您的陈述将导致问题。 但我看不到代码中的风险。  numSamplesPerCycle 通常为 4、4*4096 = 16384、这是 Int16 类型内的。 同样的 winRampLength ,没有办法它可以低于 0。  

    此致、

    现金好

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

    您好、

    很高兴听到您的声音。 现在  、当 numSamplesPerCycle =8 时、如果您选择了 8MHz 采样频率且 OSR =10。

    然后、 numSamplesPerCycle 为 8、8*4096 =  32768。超出 int16 限值。 因此、在这种情况下 numSamplePerCycle =–32768。

    因此,现在你的 winRampLength 将计算在 numSamplesPerCycle =–32768 的基础上。 这是错的。

    希望现在您已经掌握了要点。

    谢谢、

    Anup Kumar

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

    您好、

    这可能是个问题。 但您可以将采样频率设置为略低于 8MHz、如 7.2MHz。 就可以避免该问题。  

    此致、

    现金好

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

    您好、

    很高兴听到这个消息。 但我想要 8MHz 采样频率。 原因是在 4MHz 时、我观察到飞行时间差的标准偏差为 25ps 至 30ps。

    当我设置 8MHz 采样频率时、飞行时间差的这个标准偏差约为 15ps。

    谢谢

    Anup Kumar。

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

    您好、

    设置为 7.2MHz 后、仍然会得到与我的视图中的 8MHz 类似的结果。  

    此致、

    现金好