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.

[参考译文] MSP430F6779:关于 SD24 SD3

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/976374/msp430f6779-about-sd24-sd3

器件型号:MSP430F6779
主题中讨论的其他器件:MSP430F6733AMSP-TS430PEU128

各位专家、您好!

我的客户使用 MSP430F67719A 和 MSP430F6733A 创建了两个定制传感器板。 由于电路板的原因、在 SD24输入-VFS (大约-1.2V 或更高)的情况下、会发生 SD3问题、因为结果是以两个补码模式输出。 这种现象是、结果值+VFS (高于约+1.2V)和-VFS (高于约-1.2V)是相同的。 我的客户和我已经阅读了勘误表、知道没有权变措施、并且在使用偏移二进制模式时不会出现问题。

但是、根据客户的研究、当+VFS 和-VFS 结果相差很远时、例如当 OSR=120时、这个问题似乎不会发生。 再加一点、当+VFS 和-VFS 数据结果之间的差值为"1"时、例如当 OSR=128或256时、似乎会出现问题。 我已经使用 MSP-TS430PEU128和 F67791A 自行确认了上述情况。

问题1:在使用双补码模式时、如果我将 OSR 值设置为+VFS 和-VFS 之间的差值大于1 (例如 OSR=120)、我是否可以认为它有效?
勘误表指出、无论所有 OSR 值和对齐方式如何、输出结果都不正确。

我知道我首先输入的电压范围超过±920mV、但如果您能告诉我这是否是一种对策以及它是否有效、那将是很棒的。

此致、
还不错

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

    您好!

    您能否在此处添加测试代码以便我查看更多详细信息?

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

    李霍肯、您好!

    感谢你的答复。

    以下是我们检查时的源代码。 我们已将数据格式和 OSR 设置添加到 MSP430F677x_SD24B_01.c 中
    https://dev.ti.com/tirex/explore/node?node=AA22Oqmq-UUWVa7lCSsBuQ__IOGqZri__LATEST

    #include 
    
    /*要存储的转换结果数*/
    #define Num_for_Results 8
    
    //要存储 SD24_B 转换结果的数组*/
    unsigned int Ch0Results[Num_for_Results];
    unsigned int Ch1Results[Num_for_Results];
    unsigned int Ch2Results[Num_for_Results];
    
    void main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    SD24BCTL0 = SD24REFS | SD24SSEL_1; //选择内部 REF
    //选择 SMCLK 作为 SD24_B 时钟源
    
    // SD24BCCTL0 = SD24ALGN | SD24SCS_4; //左对齐,组0
    //添加
    SD24BCCTL0 = SD24ALGN | SD24DF_1 | SD24SCS_4; //左对齐,组0
    //
    SD24BCCTL1 = SD24ALGN | SD24SCS_4; //左对齐,组0
    SD24BCCTL2 = SD24ALGN | SD24SCS_4; //左对齐,组0
    
    //添加 OSR
    // SD24BOSR0 = 127;//错误
    SD24BOSR0 = 119;//无错误
    //
    
    SD24BIE = SD24IE2; //启用通道2中断
    
    _DELAY_CYCLES (0x3600); 1.5V REF 启动的//延迟
    
    SD24BCTL1 |= SD24GRP0SC; //将位设置为开始转换
    _bis_SR_register (LPM0_bits | GIE); //输入带中断
    的 LPM0 #if
    
    defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=SD24B_vector
    __interrupt void SD24BISR (void)
    #Elif Defined (__GNU__)
    void __attribute__(interrupt (interrupt (SD24BISR (void)#SD24BISR
    
    (void))#vector (void Compiler)#else!#error!
    #endif
    {
    静态无符号 int 索引= 0;
    
    开关(SD24BIV)
    {
    案例 SD24BIV_SD24OVIFG: // SD24MEM 溢出
    中断;
    案例 SD24BIV_SD24TRGIFG: // SD24触发 IFG
    中断;
    案例 SD24BIV_SD24IFG0: // SD24MEM0 IFG
    中断;
    SD24BIV_SD24IFG1案例: // SD24MEM1 IFG
    中断;
    SD24BIV_SD24IFG2案例: // SD24MEM2 IFG
    Ch0Results[索引]= SD24BMEMH0;//保存 CH0结果(清除 IFG)
    Ch1Results[索引]= SD24BMEMH1;//保存 CH1结果(清除 IFG)
    Ch2Results[索引]= SD24BMEMH2;//保存 CH2结果(清除 IFG)
    如果(+index == Num_for_results)
    {
    索引= 0; //在此设置断点
    }
    中断;
    }
    } 

    OSR=128、+VFS (SD0N0=GND、SD0P0=+1.5V)=0x7FFFC000、-VFS (SD0N0=-1.5V、SD0P0=GND)=0x7FFFC000。
    我认为理论值为+VFS=0x7FFF FC00和-VFS=0x8000 0000。

    但是、当 OSR=120、+VFS (SD0N0=GND、SD0P0=+1.5V)=0x6978 0000、-VFS (SD0N0=-1.5V、 SD0P0=GND)=0x9688 0000。
    我认为理论值为+VFS=0x6978 0000、-VFS=0x9688 0000。

    图像质量可能较差、因此我连接了一个捕获屏幕。

    此致、
    还不错

    • OSR=128、+VFS

    • OSR=128、-VFS

    • OSR=120、+VFS

    • OSR=120、-VFS

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

    您好!  

    这似乎是一种对策。 我们将进行更多的内部检查并在稍后反馈给您。  

    稍后、我将通过消息向您介绍我们一方取得的进展。

    我现在将结束本课程。

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

    你(们)好  

    感谢您的支持。

    我希望这将是一项对策,并帮助其他人。

    此致、
    还不错