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.

[参考译文] CDCEL913:输出频率精度

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1114071/cdcel913-output-frequency-accuracy

器件型号:CDCEL913
主题中讨论的其它部件:CDCE913、CLOCKPRO

大家好、

客户输入频率为12MHz、目标输出频率为1196kHz。

客户开发了以下代码、这是用于计算和设置 CDCE913部分频率的正确代码。  然而、设定的输出目标频率为1196kHz、实际示波器测量值为1160kHz。  

/** CDCEL913芯片外接晶振频率 单位:kHz*/
#define CLK_IN 12000

/**
*@说明:调整ad芯片的输入频率
*@param f_out 目标频率单位:百Hz
*@返回 NULL
*
void CDCE_Init_set (float f_out)


uint8_t i = 0;
uint32_t correctnum = 0;
uint32_t M、N、Q、R;
浮点 Pdiv;
uint8_t reg18、reg19、reg1A、reg1B;
int32_t P;
f_VCO = 0;
uint8_t f_ODR=1;
printf ("f_out:%f\r\n"、f_out);
//a =(float)(f_out /(float) 1000.0f);

f_out =(f_out / 1000.0f);
printf ("f_out:%f\r\n"、f_out);
开始:
I = 0;
f_VCO = f_out;
printf ("f_VCO:%f\r\n"、f_VCO);
f_ODR = f_VCO/1000;
bool 结果= false;
uint8_t f_range;

如果(f_out <= 0)返回;

if (f_ODR<8)

while (f_VCO < f_ODR*12 * 1000)

i++;
f_VCO = f_out * i;


其他

而(f_VCO < 84 * 1000)

i++;
f_VCO = f_out * i;


而(f_VCO < 231 * 1000)

对于(N = 4095;N > 0;N-)

对于(M = 511;M > 0;M--)

if (((uint32_t)(f_VCO * 1000)% 1000 = 0))

if ((uint32_t)((N *(CLK_IN)/M))==(uint32_t)(f_vco))


结果= true;
中断;


其他

if (((uint32_t)((float) N *(float)(clk_in)/(float) M)+ correctnum)=(uint32_t)(((f_VCO * 1000)/ 1000))))



结果= true;
中断;



IF (结果)

中断;

IF (结果)

中断;

其他

i++;
f_VCO = f_out * i;

printf ("M:%d\r\n"、M);
printf ("否:%d\r\n"、N);
printf ("f_VCO:%f\r\n"、f_VCO);

if (((M =0)&&(N =0))||(f_VCO > 231 * 1000))

if (correctnum < 11) correctnum++;
否则 correctnum = 1;

printf ("重新查找 M N\r\n");
转到开始;

P = 4 -(int)((log ((double) N /(double) M)/ log (2)));

如果(P < 0)

P = 0;

q =(int)((double) N * pow (2、(double) P)/(double) M);
R =(double) N * pow (2、(double) P)- M * Q;

如果(f_VCO < 125 * 1000)

f_range = 0;

否则、如果((f_VCO >= 125 * 1000)&&(f_VCO < 150 * 1000))

f_range = 1;

否则、如果((f_VCO >= 150 * 1000)&&(f_VCO < 175 * 1000))

f_range = 2;

其他

f_range = 3;


Pdiv =(uint32_t)(f_VCO)/(uint32_t)(f_out);
printf ("f_VCO:%f\r\n"、f_VCO);
printf ("pdiv:%d\r\n"、(uint8_t) pdiv);
CDCE913_I2C_WriteByte (0x02、0xB4);
CDCE913_I2C_WriteByte (0x03、(uint8_t) Pdiv);
CDCE913_I2C_WriteByte (0x04、0x02);
CDCE913_I2C_WriteByte (0x05、0x50);
CDCE913_I2C_WriteByte (0x06、0x40);

CDCE913_I2C_WriteByte (0x10、0x00);
CDCE913_I2C_WriteByte (0x11、0x00);
CDCE913_I2C_WriteByte (0x12、0x00);
CDCE913_I2C_WriteByte (0x13、0x00);
CDCE913_I2C_WriteByte (0x14、0x0d);//Y2、Y3开关控制,y1不是该引脚控制,固定有Y1
CDCE913_I2C_WriteByte (0x15、0x02);

CDCE913_I2C_WriteByte (0x16、0);
CDCE913_I2C_WriteByte (0x17、0);

reg18 =(N >> 4)& 0xFFF;
reg19 =(N & 0xF)<< 4 |(R & 0xf0)>> 5;
reg1A =(R & 0x1f)<< 3 |((Q >> 3)& 0x7);
reg1B =(Q & 0x7)<< 5 |(P & 0x07)<< 2 |(f_range & 0x03);


CDCE913_I2C_WriteByte (0x18、reg18);
CDCE913_I2C_WriteByte (0x19、reg19);
CDCE913_I2C_WriteByte (0x1A、reg1A);
CDCE913_I2C_WriteByte (0x1B、reg1B);

CDCE913_I2C_WriteByte (0x1C、N);
CDCE913_I2C_WriteByte (0x1D、((N & 0xF)<< 4)|(R & 0xf0));
CDCE913_I2C_WriteByte (0x1E、(R & 0x0F)|(Q & 0xf0));
CDCE913_I2C_WriteByte (0x1F、((Q & 0x07)<< 5)|((P & 0x07)<< 2)|(f_range & 0x03));
使能时钟输出*
HAL_GPIO_WritePin (CLK_CTRL_S0_GPIO_Port、CLK_CTRL_S0._引脚、GPIO_PIN_SET);


客户将 Pro-Clock 软件生成的 M、N、fvco 和 Pdiv1值直接放入寄存器中、软件显示输出1.196MHz、但实际测试输出大约为1.156MHz  

那么、我想知道这是否正常?
CDCEL913输出频率的精度是多少? 还是最大偏差?

此致、

罗美

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

    您好、Amy、  

    为了更好地帮助您、您能否向我提供注册文件? 这样、我就能更好地了解正在发生的情况。  

    此致、  

    维森特

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

    尊敬的  Vicente:

    以下是写入1.196MHz 目标输出的寄存器值。  

    地址:0x2---- >data:b4
    地址:0x3---- >data:0xb
    地址:0x4 ---- >数据:0x2
    地址:0x5--- >数据:0x50
    地址:0x6 ---- >数据:0x40
    地址:0x7---- >数据:0x40
    地址:0x8 ---- >数据:0x20
    地址:0x9--- >数据:0x20
    地址:0xA--- >数据:0x20
    地址:0xb--- >数据:0x20
    地址:0xc--- >数据:0x20
    地址:0xd-- >数据:0x20
    地址:0xe-- >数据:0x20
    地址:0xF--- >数据:0x20
    地址:0x10--- >数据:00
    地址:0x11 ---- >数据:00
    地址:0x12--- >数据:00
    地址:0x13--- >数据:00
    地址:0x14--- >data:0xd
    地址:0x15--- >数据:0x2
    地址:0x16--- >数据:00
    地址:0x17--- >数据:00
    地址:0x18--- >数据:0x20
    地址:0x19--- >数据:0x7
    地址:0x1a---- >数据:0xEA
    地址:0x1b--- >数据:0x30
    地址:0x1c--- >数据:0x20
    地址:0x1d-- >数据:0x7
    地址:0x1E--- >数据:0xEA
    地址:0x1f-- >数据:0x30

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

    很抱歉推送、这里有更新吗?

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

    您好、Amy、  

    我们没有为此器件放置任何 EVM、因此我需要订购一个 EVM 来复制客户输出、并在之后继续与您联系。   

    我有一个问题、客户在一个器件或多个器件上是否遇到此问题?  

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

    您好、Amy、  

    更新了:我找到了 EVM 并在我们的实验中测试了它们的设置。 我能够使用 ClocksPro 使用客户参数生成1.196Mhz 输出。 似乎客户的组件可能有故障、或者他们的示波器可能有故障。  

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

    尊敬的  Vicente:

    示波器应该没有问题、因为示波器测量晶体频率是正常的。

    客户希望向您确认您使用 EVM 测试的寄存器值是否与客户提供的寄存器值相同? PCB 设计或原理图是否可能导致这种现象?  客户在至少10块电路板上进行了测试,并遇到了相同的问题。

    此致、

    Amy  

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

    您好、Amy、  

    我的寄存器映射与客户不匹配。  

    我们的 EVM 原理图也与客户不匹配。 我需要一些时间来查看他们的原理图是否是问题的原因。 e2e.ti.com/.../CDCEL913-ClockPro-1.196Mhz-output-CSV-File.ISF.CSVe2e.ti.com/.../CDCEL913-ClockPro-1.196Mhz-output-HEX-Intel-File.ISF.CSV

    此致、  

    维森特

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

    尊敬的  Vicente:

    此客户想知道您所连接的寄存器值是通过专业时钟软件生成的? 您能否为配置提供特定的构建方法?  

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

    您好、Amy、  

    是的、我之前连接的寄存器值是通过 ClockPro 生成的。  
    具体构建方法的具体含义是什么? 我们使用 EVM。  

    此致、  

    维森特

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

    尊敬的  Vicente:

    客户对结果没有反馈、我想他的问题已经解决了。 感谢您的支持。