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.

[参考译文] DAC60508:DAC60508ZC:无法在输出引脚处获得任何值

Guru**** 2581345 points
Other Parts Discussed in Thread: AM6442, DAC60508

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1574180/dac60508-dac60508zc-unable-to-get-any-value-at-the-output-pin

部件号:DAC60508
主题中讨论的其他器件:AM6442

工具/软件:

您好:

我们使用连接到 MPU AM6442 SPI 总线的 DAC60508ZC 器件。 对于 SPI 线路、当我们开始在 SPI 总线上进行通信时、我们可以看到 CS 变为低电平、并且 SCK 和 MOSI 会相应地切换。 由于此芯片不支持 SDO 功能、我们无法确认写入是否成功、也无法读取器件 ID。

我们已确保在 GAIN 寄存器中为通道 0 至 3 和通道 4 至 7 写入 CLR-MSK 位、还确保在芯片的 REF 引脚中生成了 2.5V 的内部基准电压。

下面是我们要写入的寄存器序列  

1、将值 0x0 写入 CONFIG 寄存器

2.用 0xFF 写入增益寄存器

3.将数据写入 DAC 通道

4. 将 TRIGGER 寄存器的第 4 个引脚设为 1

借助所有这些寄存器设置、我们也无法看到生成的 Vout、它始终看起来为 0V。 还附加了代码片段以供您参考。

您能否确认写入寄存器的顺序是否正确、或者需要对序列进行任何更改。

如果您为此芯片提供任何 BareMetal 或 c 代码示例、将会很有帮助。

下面是我们应用的代码片段:

#include

#include

#include

#include

#include

#include

#define SPI_DEV“/dev/spidev2.0

#define SPI_MODE SPI_MODE_0

#define SPI_SPEED 1000000 // 1MHz

#define SPI_BITS8

// DAC60508 寄存器地址

#define REG_NOP 0x00

#define REG_DEVICE_CONFIG 0x01

#define REG_SHDN 0x02


#define REG_CONFIG 0x03

#define REG_GAIN 0x04

#define REG_TRIGGER 0x05

#define REG_STATUS 0x07

#define REG_DAC_BASE 0x08 // DAC0 = 0x08、DAC7 = 0x0F

//辅助函数:通过 SPI 写入 3 个字节

static int SPI_write_reg(int fd、uint8_t addr、uint16_t 值)

uint8_t tx[3];

t[0]= addr;

TX[1]=(值>> 8)和 0xFF;

TX[2]=值和 0xFF;

返回写入 (FD、TX、3);

}

内部 main (void)

INT FD = OPEN (SPI_DEV、O_RDWR);

if (FD < 0){

perror(“open spi_dev“);

返回 1;

}

uint8_t mode = SPI_mode;

uint32_t speed = spi_speed;

uint8_t bits = SPI_bits;

ioctl (fd、SPI_IOC_WR_MODE、&MODE);

ioctl (FD、SPI_IOC_WR_BITS_PER_WORD、&bits);

ioctl (fd、SPI_IOC_WR_MAX_SPEED_HZ、&SPEED);

printf(“Initializing DAC60508...\n“);

// 1。 启用内部基准  

//位 15 = REF_PWDWN(0 =启用)

SPI_WRITE_reg (FD、REG_CONFIG、0x0000);

uleep(10000);//以稳定为参考延迟 10 ms

// 2. 将所有通道的增益设置为×2  

//位[15:8]= DAC7–DAC0 的增益;0 =×1、1 =×2

//示例:所有 8 个通道为 0xFFFF→×2 增益

SPI_WRITE_reg (FD、REG_GAIN、0x0FFF);

// 3. 向所有 8 个 DAC 通道 (0x08–0x0F) 写入中量程 (0x8000)

uint16_t 中标度= 0x8000;

对于 (uint8_t ch = 0;ch < 8;ch++){

SPI_WRITE_reg(FD、REG_DAC_BASE + ch,中标度);

}

// 4. 通过软件触发 LDAC 更新  

SPI_write_reg (fd、REG_TRIGGER、0x0010);//将寄存器 0x05 中的 LDAC 设置为 1 4 th 位

printf(“全部 8 个通道均更新为×2 增益的中标度 (0x8000)。\n“);

printf((“预期的 VOUT≈2.5V (用于 2.5V 内部基准)。(。\n“);

关闭 (FD);

返回 0;

}






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

    尊敬的 Anjana:

    您能否确认 DAC60508 的边沿时序正确? 请注意、DAC 在 SCLK 的下降沿锁存数据。  CLR 引脚的状态是什么?

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

    您好、Paul:

    感谢您的快速答复。

    澄清一下、我们在 CLR 引脚上设置了 10K 上拉电阻、以便芯片退出清除模式操作。

    今天、我们尝试了几种配置、如下所示:

    1. 使用值 0x0000 写入了配置寄存器
    2. 向 SYNC 寄存器写入值 0xFFFF
    3. 增益寄存器写入值 0x0700   
    4. BRDCST 寄存器用 0x0FFF 写入
    5. 向触发寄存器写入 0x0010

    在上述设置下、我们看到通道 0 具有 0.148V、通道 4 具有 0.313V、并且其他通道没有变化。

    您能告诉我们上述设置是否正确吗?

    此外、请共享要写入 DAC 寄存器的代码值?

    e2e.ti.com/.../dac60508ZC.c

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

    尊敬的 Anjana:

    您能否确认使用的 VDD 电压是多少?  

    确定是否正确通信的一个好方法是尝试打开和关闭基准。 如果您可以关闭基准、则可能意味着 SPI 命令没有问题。 获得 SPI 命令的示波器屏幕截图也会有所帮助、这样我们就可以知道您是否锁存在 SCLK 的下降沿。 有时、如果不锁存在下降沿、可能会出现这些奇怪的值。

    谢谢、
    Erin

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

    尊敬的 Erin:

    我们使用 3.3V 的 VDD 电压。

    通过软件控制写入寄存器 0x3、我们可以成功地打开和关闭基准电压。

    示波器测量是在对之前的 DAC60508ZC.c 进行以下修改的情况下进行的
    应用:

    • Config(配置)寄存器设置为 0x0000

    • 广播寄存器设置为 0x0FFF

    • 将中量程值 0x0800 写入所有 DAC 通道

    • 对 SYNC、GAIN 和 Trigger 寄存器的写入已被禁用

    • SPI 模式已从 SPI_MODE_0 更改为 SPI 模式 1

    通过这些修改、我们能够在所有 8 个通道上获得大约 0.079V 的输出、但无法实现所需的电压电平。

    如有任何更改或改进、请提出建议。

    对于示波器测量、探测了 SPI CLK 和数据引脚 (MOSI)。

    下面随附了随这些更改而捕获的 SPI 命令的示波器屏幕截图。







    谢谢。

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

    尊敬的 Anjana:

    我想这里看到的问题是:DAC-DATA 始终左对齐。  因此、中标度不是 0x0800、它是 0x8000!

    最右边的 4 个位是“无关“位。  如果写入 0x0FFF、则实际为 12 位寄存器写入值 0x0FF。  0x0FF/0xFFF*1.25V = 0.078V

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

    您好、

    我不清楚应该写入哪个 DAC 寄存器才能正确读取输入引脚上的电压。

    具体来说:如果我将 Broadcast 寄存器设置为0x0FFF、我应该保持原样、还是需要在 DAC 引脚上向 Broadcast 寄存器提供所需的电压?

    谢谢。

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

    您没有正确地将数据写入广播或 DAC-DATA 寄存器。  如果您希望 DAC 输出为中标度、要写入 DAC 输入寄存器或广播寄存器的正确值为 0x8000。  满量程将为 0xFFF0。  需要将数据左移 4 位。

    谢谢、

    Paul