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.
工具与软件:
您好!
我们在项目中使用了 LMX2592芯片、我们希望能够在100 MHz 和2.5GHz 之间设置每个频率(精度为~1Hz)。 我们根据在 Github (未经测试)上找到的 C++实现、数据表中的信息以及 TICS Pro 提供的信息、在 Python 中编写了自己的驱动程序。 在对电路板进行下电上电后、似乎一切都在相应地工作、我们可以 一次性设置所需的每个频率。 但是、如果我们不对电路板进行下电上电(例如、我们重新启动电路板、重新启动应用、或者我们只是尝试在运行时设置新频率)、我们只能 得到少量频率的有效输出、对于大多数频率、我们根本不会得到输出。 每次启动应用时、我们都要遵循以下启动过程:
1.我们依次向寄存器0的"RESET"字段写入0和1、对芯片进行软复位
2.我们写入的默认寄存器值似乎按降序排列有效:
(第一个值是地址、第二个值是值)
64:0x0077
62:0x0000
61:0x0001
59:0x0000
48:0x03FC
47:0x08CF
46:0x0FE3
45:0x0000
44:0x0000
43:0x0000
42:0x0000
41:0x03E8
40:0x0000
39:0x8204
38:0x0036
37:0x4000
36:0x0011
35:0x021F
34:0xC3EA
33:0x2A0A
32:0x210A
31:0x0601
30:0x0034
29:0x0084
28:0x2924
25:0x0000
24:0x0509
23:0x8842
22:0x2300
20:0x012C
19:0x0965
14:0x018C
13:0x4000
12:0x7001
11:0x0018
10:0x10D8
9:0x0302
8:0x1084
7:0x28B2
4:0x3F43
2:0x0500
1:0x0808
0:0x221C
3.我们读回所有寄存器
4.我们 先写入0、然后再写入1到寄存器0的'FCAL_EN'字段
5.我们再次读回所有寄存器
如果我们要更改输出频率、 首先确定所有所需的值、然后将所有寄存器(仅更改了的寄存器)中的新值按降序写入、然后再次运行校准序列。 更改输出频率时、以下值可能会发生变化:
您好、Roy:
由于您具有 TICS Pro 的相关经验、最好能以 TICS Pro 格式提供配置。
Noel、您好!
我们不使用 TICS Pro、我们仅使用它一次、以获取寄存器的默认设置。
此致、
罗伊
Noel、您好!
我尝试通过在 TICS Pro 导出的十六进制寄存器值中提供寄存器值来说明一切。 我希望这是明确的。
Fosc = 625 MHz
在应用的初始启动期间、我们首先写入此地址以复位芯片:
R0 0x00221E
R64 0x400077 R62 0x3E0000 R61 0x3D0001 R59 0x3B0000 R48 0x3003FC R47 0x2F08CF R46 0x2E0FE3 R45 0x2D0000 R44 0x2C0000 R43 0x2B0000 R42 0x2A0000 R41 0x2903E8 R40 0x280000 R39 0x278204 R38 0x260036 R37 0x254000 R36 0x240011 R35 0x23021F R34 0x22C3EA R33 0x212A0A R32 0x20210A R31 0x1F0601 R30 0x1E0034 R29 0x1D0084 R28 0x1C2924 R25 0x190000 R24 0x180509 R23 0x178842 R22 0x162300 R20 0x14012C R19 0x130965 R14 0x0E018C R13 0x0D4000 R12 0x0C7001 R11 0x0B0018 R10 0x0A10D8 R9 0x090302 R8 0x081084 R7 0x0728B2 R4 0x043F43 R2 0x020500 R1 0x010808 R0 0x00221C
之后、我们首先编写这个来进行校准:
R0 0x000000
然后出现以下问题:
R0 0x000008
R47 0x2F00CF R46 0x2E0F23 R45 0x2D2815 R44 0x2C007F R41 0x29EA15 R40 0x280C6A R38 0x26002E R36 0x240C20 R35 0x23109F R12 0x0C7009 R11 0x0B0028 R10 0x0A11D8 R0 0x000088
R0 0x000080
随后说明:
R0 0x000088
现在启动序列已完成、输出时钟为200 MHz。
我们可以更改时钟频率、例如201 MHz。 为此、我们首先重新计算所有值、然后写入以下寄存器值:
R45 0x2D5E15 R44 0x2C01ED
然后、使用以下内容进行校准:
R0 0x000080
随后说明:
R0 0x000088
现在、我们想把频率改回200 MHz。 我们首先编写这样的代码:
R45 0x2D2815 R44 0x2C007F
然后、使用以下内容进行校准:
R0 0x000080
随后说明:
R0 0x000088
R45 0x2DB340 R44 0x2C09D5 R38 0x260042 R36 0x240C42 R35 0x23119B
然后、使用以下内容进行校准:
R0 0x000080
随后说明:
R0 0x000088
这将产生一个110 MHz 的输出时钟。 有时这也会导致没有输出时钟。
问题是:为什么 200 MHz 和110 MHz 可以工作(大多数情况下)、但201 MHz 不能工作? 如果我们对电路板进行下电上电、并从头开始对201 MHz 进行编程、则201 MHz 可以正常工作、但我们无法再设置200 MHz。 为什么会出现这种情况、我们能解决它吗?
您好、Roy:
在 TICS Pro 中使用初始寄存器值 WTIH Fosc = 625MHz 时、表明存在错误。 您是否要再次检查您的寄存器设置?
尊敬的 Noel:
谢谢您、我们对初始寄存器值和频率校准过程进行了一些更改、因为它现在更加频繁(但不是每次)地工作。 这是我们新的初始化过程:
首先、我们通过写入以下内容来复位芯片:
R0 0x000292
然后、我们写入以下初始值:
R64 0x400077 R62 0x3E0000 R61 0x3D0001 R59 0x3B0000 R48 0x3003FC R47 0x2F08CF R46 0x2E0FE3 R45 0x2D0000 R44 0x2C0000 R43 0x2B0000 R42 0x2A0000 R41 0x2903E8 R40 0x280000 R39 0x278204 R38 0x260036 R37 0x254000 R36 0x240011 R35 0x23021F R34 0x22C3EA R33 0x212A0A R32 0x20210A R31 0x1F0601 R30 0x1E0034 R29 0x1D0084 R28 0x1C2924 R25 0x190000 R24 0x180509 R23 0x178842 R22 0x162300 R20 0x14012C R19 0x130965 R14 0x0E018D R13 0x0D4000 R12 0x0C7009 R11 0x0B0028 R10 0x0A11D8 R9 0x090302 R8 0x081084 R7 0x0728B2 R4 0x041943 R2 0x020500 R1 0x01080B R0 0x000290
R47 0x2F00CF R46 0x2E0F23 R45 0x2D2815 R44 0x2C007F R41 0x29EA15 R40 0x280C6A R38 0x26002E R36 0x240C20 R35 0x23109F
然后、我们启用频率校准:
R0 0x000298
然后等待1秒、然后我们禁用频率校准:
R0 0x000290
如果我们要将频率更改为其他频率、我们首先写入更改后的寄存器值、然后按照上述方法进行校准。 它似乎适用于大多数频率。 但是、如果我们专门将其更改为110 MHz、则输出频率变为~87 MHz。 我们以这种方式编写110 MHz:
首先、写入这些寄存器:
R45 0x2DB340 R44 0x2C09D5 R38 0x260042 R36 0x240C42 R35 0x23119B
然后、我们通过首先写入此函数来启用校准、从而进行校准:
R0 0x000298
然后等待1秒钟、然后写入该值以禁用校准:
R0 0x000290
我们试图将启用和禁用频率校准的间隔时间从1秒增加到10秒、但这没用。 如果我们在 TICS Pro 中导入寄存器值、输出频率似乎正确、但当我们用示波器测量时、不正确。 您是否知道问题可能出在哪里?
您好、Roy:
首先、请勿使用 CP_ICOARSE、否则锁定检测可能无法正常工作、请参阅最新版本数据表中的建议。
这是您当前的配置:
将其更改为以下值会在不启用 CP_ICOARSE 的情况下产生相同的电荷泵电流。
其次、除非您不使用、否则 R0位13应设置为=1以启用锁定检测。
事实上、初始化和200MHz 时钟生成可以同时包含在一个序列中。 将 R64编程为 R0 (FCAL_EN = 0)、等待10ms、然后对 R0编程(FCAL_EN=1)。 您可以始终保持 FCAL_EN = 1。 10ms 等待时间仅适用于初始化。
对于110Mhz 的输出、您的 VCO 超过7GHz、这是无效配置。
要获得110Mhz、VCO 应在3564MHz 到3996MHz 的范围内、有关详细信息、请参阅最新版本的数据表。