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.

[参考译文] MSP432P401R:从浮点型转换为无符号 interger-16

Guru**** 2511415 points
Other Parts Discussed in Thread: DAC161S055

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/762651/msp432p401r-conversion-from-float-to-unsigned-interger-16

主题中讨论的其他器件:MSP432P401RDAC161S055

工具/软件:Code Composer Studio

因为、我正在为 MSP432P401R 工作 CCS V_8版本和开发代码。 我正面临一个有关溢出的奇怪问题。 由于我在整个项目中有项目链(ADC-DSP-DAC)、我正在使用控制器的浮点功能在 MSP432上实施大约46倍的数字带通滤波器。 ADC 输入范围为(0-2.5V)、我希望 DAC 的输出范围相同、但问题是当我将输入值增加到大于2.38V 时、会导致溢出问题。 通过改变信号发生器上的偏移量、这个问题可以得到解决、但这不是一个专业的解决方案。 通过谷歌搜索、我阅读了一些有关数据类型转换的文章、并遵循了给定的过程(即 int (float+0.5))、但这对我没有帮助。 因为、我的问题更多地涉及到 C 编程、但我认为它也与 CCS 相关。

当某些值小于零时,由于输出的最后一个值而导致溢出。您能帮助我消除此溢出问题吗??

注意:我也在 代码的特定部分附加了具有溢出和不溢出的输出图片。 我们高度赞赏所有可能的建议。

这两张图显示了滤波器阶跃响应的输入。

AdcInputVoltage = AdcValueDigits *2.5f/16384.0f;
    filteredf_output = SincFilter (AdcInputVoltage);
   /* if (filteredf_output<0){DacValueDigits =(uint16_t)(((filteredf_output* 65536.0f/4.096f)+0.5);
    }
    else{DacValueDigits=(uint16_t)((filteredf_output* 65536.0f/4.096f));
   }*/
    DacValueDigits =(uint16_t)((filteredf_output* 65536.0f/4.096f)+.5);
    //DacValueDigits =((uint16_t)((filteredf_output* 65536.0f/4.096f)+32678.5)-32677;

此致、

Hasan Nawaz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哈桑
    导致错误结果的变量值是多少? AdcValueDigits、filteredf_output、DacValueDigits?

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

    早上好、Chris、

    当我使用 MSP432P401R 的浮点功能时、我将对上述定义的参数使用以下值:

    filteredf_output 是浮点 值、这些值来自滤波器系数和输入的乘法。

    AdcValueDigits: 这些值是来自 ADC 输出的数字值的整数值。

    DacValueDigits:在我的项目中,我使用 DAC161S055作为 DAC,它没有浮点功能,因此我需要将该浮点值转换为无符号的 interger-16位。 由于 DAC 为16位、因此我只能对 DAC 使用无符号整数-16。  

    根据我的理解、由于数据从浮点(32位)转换为无符号整数(16位)、数据丢失会发生、并导致此溢出问题。

    注意:请检查已定义变量的数据类型

    浮点 AdcInputVoltage
    float filteredf_output
    uint16_t AdcValueDigits

    uint16_t DacValueDigits

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    那么、如果 ADC 结果为0x0003、那么其他值会产生什么结果? 什么值导致溢出? 在您在上面共享的代码片段中、某些部分会被注释掉。 哪个代码产生了溢出、哪个代码阻止了溢出?

    谢谢、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    我已经解决了这个问题。 这是由于从浮点型转换为整数型而发生的。 当滤波器输出具有负值时、由于转换规则、每个负值都有浮点数据类型中的最大值。 我已经修整了负值、这对于我的项目来说已经足够了。