TI中文支持网
TI专业的中文技术问题搜集分享网站

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);

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

感谢!

Kailyn Chen:

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

,

la Ni:

感谢回复!

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

寄存器要如何配置呢?

,

Kailyn Chen:

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

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

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

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

,

la Ni:

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模式),以便排除其它的问题。

感谢!

,

Kailyn Chen:

la Ni 说:Decimation Bypass, 1-wire, 16bit模式

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

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

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

,

la Ni:

感谢回复!

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

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

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

,

Kailyn Chen:

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

,

Kailyn Chen:

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

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

,

la Ni:

Hi Kailyn:

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

有个疑点请教:

如果CLKP/M是输入20MHz,

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

感谢!

,

Kailyn Chen:

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

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

la Ni 说:

如果CLKP/M是输入20MHz,

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

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

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

,

Kailyn Chen:

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

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

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

,

la Ni:

感谢Kailyn!

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

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

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » ADC3683: FCLK输出占空比异常
分享到: 更多 (0)