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:DAC 转换器

Guru**** 2506875 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/752329/msp432p401r-dac-converter

器件型号:MSP432P401R
主题中讨论的其他器件:DAC161S055DAC161S055EVM

您好!

我正在使用 MSP432P401R 和 DAC161S055EVM。 根据高级成员在这里给出的一些指导、我能够在 MSP432和 DAC161S055之间设置 SPI 通信。 如脚本中的时序图所示、我获得了完美的波形、但我目前面临一个非常奇怪的问题。

根据 DAC161数据表(第7页) 和 MSP 技术参考手册(第940页)、当 CS 和 CLK 正在运行时、MOSI 和 SOMI 的波形应该具有形状(对称)、并且我已经从 DAC 数据表中附加了下面的参考图像。

我的问题是,在我检查 SCLK、CS、MOSI 和 SIMO 的波形时。 如果存在 SCLK (如果我将测量探针连接到 CLK 引脚)、则 MOSI 和 SOMI 波形不再对称。 MOSI 具有完美的图、但 SOMI 具有不同的形状、然后 DAC 输出保持为零(空闲位置)。

但是、当我不测量 SCLK 时、SOMI 和 MOSI 具有对称形状、DAC 模拟输出也会根据给定的数字输入进行更新。 (我是如何观察到这一 CLK 问题的,只是意外地移除了 SCLK 探头,我发现了这一观察结果)。

我想、SPI 协议的时钟频率有问题、因为我要为 SPI 配置协议提供 SMCLK、它具有24MHz 频率、但 SPI 的位时钟发生器具有最大20M Hz 频率。
根据给定的 SPI 协议信息(方框图935和第939页),可以计算位时钟频率,但我不知道应在何处应用该位时钟频率,以及预分频器如何影响 SMCLK 频率。

请帮助我解决此问题。

非常感谢您的友好帮助和每一个惊喜。

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

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

    我假设这个问题来自您在信号线上添加的示波器探针负载。
    该负载会使信号速度变慢、并且由于您使用 SPI 协议以相当高的速度运行、因此与数据信号相比、该负载可能会延迟时钟、从而使数据不再正确。

    因此、您可以尝试:
    -降低 SPI 时钟速度
    -同时向 MOSI 信号添加探针
    -增加 SPI 信号的驱动强度,请检查以下函数:GPIO_setDrivestrengthHigh

    注意:看起来您的测量结果尚未附加。

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

    一如既往,你是我的助手和救世主:)

    我在 SCLK 上尝试了探头、现在它工作正常并获得了所需的结果。 非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还有一个问题。 因为我在 DAC 的输入上提供了一个特定的已知数据、只是为了确保其正常工作或不工作。 现在、DAC 工作正常。

    我想从 ADC 的输出为 DAC 提供输入。

    我对此有两个问题:

    1)根据 ADC 和 DAC 的给定数据表信息,它们分别具有 Vref 2.5V 和4.096V。 因此、在这里、我需要重新调整输出值、因为我最多只能提供2.5V 的输入电压、DAC 模拟输出上的输出电压应为2.5V。 (如果错误,请更正)。 我不知道如何缩放以及如何用 C 代码编写它。 我认为重新分频会涉及递减因子,因为它应该是模拟输入和模拟输出之间的一对一关系。您能告诉我重新调整 ADC 和 DAC 刻度的数学计算吗?

    2)因为 DAC 输出数据保存在 uint_fast16_t 缓冲器中,而 DAC 输入也采用3个缓冲寄存器的形式(根据 DAC 数据表的 p 7需要3个字节)。

    如何读取第一个 ADC 输出并将其写入 DAC 输入?

    您认为,指针可以帮助我吗??

    非常感谢您抽出宝贵的时间回答问题。

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

    我想我需要首先澄清一些典型的术语、以便正确对齐。
    在使用微控制器时、典型的视图是微控制器眼中看不出来的。
    这意味着在这种情况下、ADC 具有输入并提供数据、DAC 处于输出状态(即使是外部)、需要获取数据。

    是的,DAC 需要获得3个字节,但它是1个命令字节,然后是2个格式为 uint_fast16_t 的数据字节。 在处理此数据时、我还会在数据发送函数中保留拆分并仅"合并"、以便3个字节被发送出去。

    MSP432的 ADC 具有14位、而 DAC 具有16位。 具有相同的2.5V 基准电压
    因此、如果您希望同时保持电压范围、则需要将 ADC 值调整为(16-14)^2 = 2^2 = 4倍

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

    您好 Stefan、

    抱歉、我没有得到您关于缩放的最后一点。 如果 ADC 将按系数4缩放、则 ADC 值将进一步减小。 请提供更多的解释、或者在我可以找到这些基本信息的地方提及我。

    我尝试计算它的方法略有不同。 例如、ADC 范围[0至2.5v]和 DAC [0至4.096v]、我想为这两个值设置相同的比例、因此 DAC 值将乘以此[(2.5/4)=0.625 ]因子、但我认为这种方法也是错误的。

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

    一些 ADC 基础知识:
    ADC 输入值=模拟输入信号/基准电压* ADC 分辨率
    因此、在您的情况下(ADC 的分辨率为14位)
    ADC 的输入值=模拟输入信号/2.5V * 2^14
    -> ADC 输入信号可以是最大基准电压。
    -> ADC 最大值也可以只是 ADC 分辨率、即2^14 = 16384

    如果您希望测量的输入信号也设置为 DAC 上的输出(thid DAC 的分辨率为16位) 您需要将 ADC 的14个缩放到 DAC 的16位、因为如果您将16384作为一个值放置到 DAC 中、您只能得到该值
    16384/2^16 * 2.5 = 0.625、这是最大值的1/4

    此致、
    Stefan