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.

ADC3683: FCLK输出占空比异常

Part Number: ADC3683

工程师您好!

我们现在使用ADC3683,发现FCLK的输出占空比不是50/50:(黄色为DCLK,蓝色为FCLK)

我们使用如下模式:

Real Decimation, 1-wire,Decimation by 4

寄存器配置如下:

write_reg(fd, 0x07, 0x6c);

// load e-fuse
write_reg(fd, 0x13, 0x01);
usleep(2000);
write_reg(fd, 0x13, 0x00);
usleep(2000);

// configure FCLK
write_reg(fd, 0x19, 0x00);

write_reg(fd, 0x1B, 0x00);

// REAL DECIMATION, 18-bit, 1-WIRE, 0xFF800
write_reg(fd, 0x20, 0x00);
write_reg(fd, 0x21, 0xF8);
write_reg(fd, 0x22, 0x0F);


// Enable the decimation filter
write_reg(fd, 0x24, 0x06);

// Configure the decimation filter
// Decimation by 4, Real decimation
// 0 010 1 00 0
write_reg(fd, 0x25, 0x28);

// real decimation
write_reg(fd, 0x27, 0x00);
write_reg(fd, 0x2E, 0x00);

// no gain added
write_reg(fd, 0x26, 0x22);
write_reg(fd, 0x26, 0x00);

请问是不是哪里配置有误?

感谢!

  • 您好,我看您0x1B配置的18bit 的分辨率。根据0x21的描述,输出不同的分辨率FCLK的duty cycle不同,您将0x1B的输出配置为16bit的再看看是否duty cycle为50%。

  • 感谢回复!

    如果我们目标是18bit, 1-wire, bypass模式,

    寄存器要如何配置呢?

  • 如果我们目标是18bit, 1-wire, bypass模式,

    0x20~0x22 的寄存器配置是没问题的。

    我看0x1B 您配置的是00,配置为输出是18bit的话,需要将bit7 MAPPER_EN这里配置为1。

    所以需要0x1B改为0x80,您再验证下。

  • Hi,Kailyn,

    我们参照你的建议,现在配置为Decimation Bypass, 1-wire, 16bit模式,配置如下

    // 011 0 1 100 -- 0x6c -- 1-wire
    write_reg(fd, 0x07, 0x6c);
    printf("reg 0x%02x = 0x%02x\n", 0x07, read_reg(fd, 0x07));

    // load e-fuse
    write_reg(fd, 0x13, 0x01);
    usleep(2000);
    write_reg(fd, 0x13, 0x00);
    usleep(2000);

    // configure FCLK
    // Decimation Bypass
    // 0 00 0 000 0
    write_reg(fd, 0x19, 0x00);
    printf("reg 0x%02x = 0x%02x\n", 0x19, read_reg(fd, 0x19));

    // Decimation Bypass
    // 1 0 001 000 -- 0x88, 16bit
    write_reg(fd, 0x1B, 0x88);
    printf("reg 0x%02x = 0x%02x\n", 0x1B, read_reg(fd, 0x1B));

    // FCLK
    // 0x0FF000, 16bit
    write_reg(fd, 0x22, 0x0F);
    write_reg(fd, 0x21, 0xF0);
    write_reg(fd, 0x20, 0x00);

    printf("reg 0x%02x%02x%02x = 0x%02x%02x%02x\n", 0x22, 0x21, 0x20, read_reg(fd, 0x22), read_reg(fd, 0x21), read_reg(fd, 0x20));


    write_reg(fd, 0x24, 0x00);
    printf("reg 0x%02x = 0x%02x\n", 0x24, read_reg(fd, 0x24));

    write_reg(fd, 0x25, 0x00);
    printf("reg 0x%02x = 0x%02x\n", 0x25, read_reg(fd, 0x25));

    回读的值如下:

    但看到的FCLK信号还是不正常,如下:

    请帮忙看下寄存器值是否还是配置有误?

    最好可以提供一组确认可以正常的寄存器配置(我们想要的模式是:Decimation Bypass, 1-wire, 16bit模式),以便排除其它的问题。

    感谢!

  • Decimation Bypass, 1-wire, 16bit模式

    抱歉我看了下没有源程序可以参考。

    但是FCLK的配置这里是没有问题的。

    从FCLK的波形来看,信号幅值也不对。是使用示波器直接在FCLK的输出端测试的吗?

  • 感谢回复!

    是在ADC3683的引脚输出处测量的;

    是不是硬件设计上有问题,相关原理图如下:

    我们有点卡在这里了,请支支招,谢谢!

  • 好的,我看下您的硬件,然后再去确认下这个问题。

  • 您好,抱歉回复晚了,麻烦您验证下0x20~0x22的寄存器的值您这边使用默认值,不进行配置,看下FCLK的占空比是50%吗?

    另外,您是使用的自己的板子还是EVM板?

  • Hi Kailyn:

    试过用默认值,也是一样的占空比有误,我们是自己的板,不过基本上是参考EVM板来的。

    有个疑点请教:

    如果CLKP/M是输入20MHz,

    Decimation Bypass, 1-wire, 16bit模式的话,DCLKINP/M要输入多少频率呢?

    感谢!

  • 试过用默认值,也是一样的占空比有误,我们是自己的板,不过基本上是参考EVM板来的。

    默认值占空比有误的话,我需要再去确认下。

    如果CLKP/M是输入20MHz,

    Decimation Bypass, 1-wire, 16bit模式的话,DCLKINP/M要输入多少频率呢?

    可以参考Table8-6。Fs即为采样时钟CLK。

    所以16bit ,1 wire模式的话,DCLK=8*Fs=160Mhz.

  • 您好,使用您之前提供的寄存器配置,得到FCLK的占空比是50%,经复制现象是没问题的。

    所以不是您这边的配置问题。

    所以需要看下您使用的CLK和DCLK的频率。

  • 感谢Kailyn!

    确实是CLK和DCLK频率没有配对的问题。目前占空比正确了。

    不过又有新的情况,FCLK的P和N不同步,我另起一帖吧。

    谢谢!