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.

[参考译文] TLV5636:在基准选择写入之后立即对 DAC 寄存器进行写入

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/608244/tlv5636-dac-register-write-immediately-following-a-reference-select-write

器件型号:TLV5636
主题中讨论的其他器件: MSP432P401RTLV5606

我使用的是 TLV5636 12位 DAC。 我注意到、通过调试器单步执行、基准选择控制寄存器写入之后立即写入的第一个 DAC 寄存器将被忽略。 接受第二次 DAC 写入(立即)、输出遵循 DAC 写入值。 有什么想法吗? 有关此器件和正确的写入过程的任何未编写/未发布的勘误表?

_TLV56xx_Write.ucResolution = RES_UNKNOWN;
_TLV56xx_Write.ucReferenceBitMap = REF2048;
_TLV56xx_Write.wDataValue = 0;
_TLV56xx_Write.bPowerDown = RSC_false;

//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//步骤1.
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//打开发送器
TX_Enable_ON ();
暂停(10);

// 12位 DAC 也必须指定其基准源
//从 REF2048开始
_TLV56xx_Write.ucWriteMode = CONTRAL_WRITE;
_TLV56xx_Write.ucReferenceBitMap = REF2048;
TLV56xx_SPI_Write (&_TLV56xx_Write);

//将接近于零的负载电流放入 DAC 中
_TLV56xx_Write.ucResolution = RES_12位;
_TLV56xx_Write.ucWriteMode = DAC_WRITE;
对于10位或12位、//应接近中点、使用 TLV56xx_SPI_Write
_TLV56xx_Write.wDataValue = 0x07FC;
//出于我不完全理解的原因,control_write 后的第一个 DAC_WRITE 将被忽略!!
TLV56xx_SPI_Write (&_TLV56xx_Write);
//重复
TLV56xx_SPI_Write (&_TLV56xx_Write);

void TLV56xx_SPI_Write (TLV56xx_write_assist * pTLV56xx_Write_Assist)

易失性字 wData;

wData =(0x0FFF &(pTLV56xx_Write_Assist->wDataValue);
if (pTLV56xx_Write_Assist->bPowerDown)

// DAC 寄存器写入
pTLV56xx_Write_Assist->ucHighByte = POWER_DOWN_BIT;
pTLV56xx_Write_Assist->ucLowByte = 0x00;

否则、如果(pTLV56xx_Write_Assist->ucWriteMode = CONTRAL_WRITE)

//仅适用于带有基准控制寄存器的 TLV56xx 器件
//控制寄存器写入、POWER_DOWN_BIT 被强制为 RSC_FALSE
pTLV56xx_Write_Assist->ucHighByte = REG_SEL_bit_MAP;
pTLV56xx_Write_Assist->ucLowByte = pTLV56xx_Write_Assist->ucReferenceBitMap;

否则、如果(pTLV56xx_Write_Assist->ucWriteMode = DAC_WRITE)

// DAC 寄存器写入
if (pTLV56xx_Write_Assist->ucResolution =RES_10BIT)

//将10位数据值移位到正确的位位置
wData = wData << 2;
wData &= 0x0FFC;

pTLV56xx_Write_Assist->ucHighByte =(UCHAR)(wData >> 8);
pTLV56xx_Write_Assist->ucLowByte =(UCHAR)(wData & 0x00FF);

pTLV56xx_Write_Assist->ucHighByte |= FAST_BIT;

B2_SPI_ASSERT_CS ();

b2_spi_assert_fs ();

b2_spi_DataPut (pTLV56xx_Write_Assist->ucHighByte);
b2_spi_WaitOnTransmit();

b2_spi_DataPut (pTLV56xx_Write_Assist->ucLowByte);
b2_spi_WaitOnTransmit();

B2_SPI_WaitOnBusy ();

B2_SPI_DEASBERT_FS ();

B2_SPI_DEASBERT_CS ();

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

    感谢您的查询。 我假设您在控制写入后仅使用一次写入来测试系统。 如果是、那么您能否发送波形的示波器捕获?

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

    您好 Uttam、

    首先是更新:对于任何类型的写入(控制和 DAC)、问题现在仍然存在。 它不限于控制写入后的 DAC 写入。

    为了使硬件每次都能正常工作、我被迫重复所有写入操作。 问题是间歇性的、也就是说、一次写入有时会起作用。 因此、我认为这是一个设置问题、或者可能与再次使用 SOMI 作为 TLV5636上的帧同步引脚有关。

    第二: 让我们确保正确配置 SPI 外设(MSP432)、以便与 TLV5636连接。

    SPI 初始化

    // SPI 主配置参数

    const eUSCI_SPI_MasterConfig spiB2_Config =

    EUSCI_B_SPI_CLOCKSOURCE_SMCLK、// 12MHz SMCLK 时钟源

    12000000、// SMCLK = 12MHz

    12000000、// SPICLK = 12MHz ->对于 TLV56XX DAC

    EUSCI_B_SPI_MSB_FIRST、// MSB 优先

    EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_Captured_On_Next、//相位

    EUSCI_B_SPI_CLOCKPOLARITY_INACTION_LOW、//低极性

    EUSCI_B_SPI_3引脚// 3线 SPI 模式:SOMI、SIMO、CLK:请注意、SOMI 后来被配置为 GPIO 以用作 DAC 帧同步

    };

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //描述:

    //

    //假设时钟具有

    //之前已配置。

    //

    //如果成功,则返回 true,否则返回 false

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    bool BP2_Slave_Transmiter_SPI_B2_Init ()

    bool bReturnVal;

    b 返回值= RSC_true;

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //特定于 MSP432P401R Launch Pad 开发平台

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //配置 EUSCI_B2_SPI 引脚和 GPIO 引脚以与 EUSCI_B2_SPI 接口配合使用

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    // P3.5:SPI_B2 -> CLK

    MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function);

    // P3.6:SPI_B2 <- SIMO

    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //在3线主控模式下配置 SPI_B2

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    bReturnVal &= MAP_SPI_initMaster (EUSCI_B2_base、&spiB2_Config);

    // P3.7:主机 MCU 输出-> DAC 帧同步

    MAP_GPIO_setAsOutputPin (GPIO_PORT_P3、FSYNC_GPIO_BIT);

    // P5.5:SPI_B2 ->芯片选择

    MAP_GPIO_setAsOutputPin (GPIO_PORT_P5、B2_SPI_CS_BIT);

    B2_SPI_DEASBERT_CS ();

    B2_SPI_DEASBERT_FS ();

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    //启用 SPI_B2模块

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    MAP_SPI_enableModule (EUSCI_B2_base);

    MAP_SPI_clearInterruptFlag (EUSCI_B2_base、(EUSCI_SPI_Receive_interrupt | EUSCI_SPI_Transmit 中断));

    MAP_SPI_DisableInterrupt (EUSCI_B2_base、(EUSCI_SPI_Receive_interrupt | EUSCI_SPI_Transmit 中断));

    返回 bReturnVal;

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

    正如您指出的、CS 信号可能是一个问题。 您的代码似乎正常。 通常、这些类型的问题是由于与设置/保持时序相关的问题或信号完整性水平问题而发生的。 因此、最好查看波形。 请附上示波器捕获吗?

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

    顶行(黄色)= SPI SIMO

    下一行(绿色)= SPI CLK

    下一行(蓝色)= SPI CS

    下一行(红色)= DAC 帧同步

    在每个时间分段1uec 时、满足所有设置和保持时序要求

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

    高电平波形看起来不错。 您是否可以放大时钟和数据线并进行连接。 这将让我们知道是否有任何东西在边缘。

    另一个疑问-您的信号电平是3.3V 还是接近2.5V。 我无法从波形中清楚地确定。 由于5V VDD 的 VIH 为2.4V、因此我希望确保我们不会在任何地方违反此条件。

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

    数据线的缩放视图。

    MSP432的工作电压为3V

    TLV5636的工作电压为5.5V

    MSP432 SPI 线路在 TLV5636达到>2.8V 时必须满足 V-in 要求。

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

    进一步的证据。 2系列示波器捕捉:一个用于 TLV5606 (10位 DAC)、一个用于 TLV5636 (12位 DAC)。

    主机 MCU 是一款运行电压为3.0V 的 MSP432。 在这两种情况下、DAC 电源均为3.6V。 所有 DAC 信号线路都超过2.8V 逻辑高电平。 这两种情况都表明、只有其他 DAC 写入会导致 DAC 输出发生变化。 DAC 更新速率为100kHz。 对于每个 DAC 数据写入、FAST 位被置位。

    示波器捕获解码:

    通道1 (黄色)是 SPI 主 器件数据输出

    通道2 (绿色)是 SPI 主时钟

    通道3 (蓝色)为 TLV56xx DAC 帧同步

    通道4 (红色)是 DAC 输出。

    TLV5606系列:

    DAC 写入序列:

    0x44FC -输出更改
    0x46F8 -输出不变
    0x48F4 -输出变化
    0x4AF0 -输出不变

    写入0x44FC 且输出发生变化。

    写入0x46F8、DAC 输出无变化。

    TLV5636系列:

    DAC 写入序列:

    0x44FF -输出改变
    0x46FE -输出不变
    0x48FD -输出变化
    0x4AFC -输出不变

    0x44FF 被写入 DAC、输出发生变化。

    0x46FE 被写入 DAC、并且输出没有变化。

    这一点看起来好像 MSP432 SPI 外设和 TLV56xx 系列 DAC 之间存在固有的不兼容性。

    请告知、我获得一个高速、快速稳定 DAC 以连接 MSP432 SPI 外设至关重要。

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

    对于 TI、

    请确认我的上一篇帖子!

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

    很抱歉耽误你的时间。 我有点被一些事情所困住了。 我目前正在研究您的波形。 很快就会回来。

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

    显然、MSP432 SPI 外设必须设置为:

    // SPI 主配置参数
    const eUSCI_SPI_MasterConfig spiB2_Config =

    EUSCI_B_SPI_CLOCKSOURCE_SMCLK
    12000000
    12000000
    EUSCI_B_SPI_MSB_FIRST
    EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next
    EUSCI_B_SPI_CLOCKPOLARITY_INACTION_HIGH、//没有意义、但 TLV56xx 器件需要此设置
    //EUSCI_B_SPI_CLOCKPOLARITY_INACTION_LOW
    EUSCI_B_SPI_3引脚// 3线 SPI 模式:SOMI、SIMO、CLK
    };

    现在一切正常。

    谢谢

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

    很高兴知道它已经解决。 感谢您提供相关信息。

    我怀疑一些会随着时钟相位变化而得到纠正的时序违规。 此时、我无法找出根本原因。 很抱歉、我们无法提供合适的解决方案。 如果您将来遇到任何问题、请告知我们。 我们一定会尽量提供最佳支持。

    此致、
    Uttam