首页 > 评测 > 借助ClockBuilder Pro生成配置,在ESP32-C3上使用Si5351

借助ClockBuilder Pro生成配置,在ESP32-C3上使用Si5351

  
  • 作者:
  • 来源:
  • [导读]
  • 本帖最后由 gaoyang9992006 于 2023-6-5 17:26 编辑 #申请原创# @21小跑堂 ClockBuilder Pro是一款用于配置和生成时钟信号的软件工具,而Si5351是一款常用的时钟发生器芯片。使用ClockBuilder Pro可以方便地

本帖最后由 gaoyang9992006 于 2023-6-5 17:26 编辑

#申请原创#

@21小跑堂
ClockBuilder Pro是一款用于配置和生成时钟信号的软件工具,而Si5351是一款常用的时钟发生器芯片。使用ClockBuilder Pro可以方便地配置和生成适合Si5351芯片的时钟信号。以下是使用ClockBuilder Pro配置Si5351的一般步骤:
1、下载和安装ClockBuilder Pro软件:您可以从搜索引擎找到官方网站下载并安装ClockBuilder Pro软件。

 

图1


2、连接硬件:将Si5351芯片连接到您的开发板或电路中。确保硬件连接正确,并且Si5351的电源和通信接口正常工作。
本次实验采用的是ESP32-C3,可以使用Arduino来完成测试工作,这里我采用的是Arduino默认的ESP32-C3的默认I2C接口,你也可以在程序里指定使用哪些IO作为I2C。
默认接口配置文件在以下目录可以找到
C:\Users\Mint\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\variants\esp32c3\pins_arduino.h
其中关于定义I2C的地址为

  1. static const uint8_t SDA = 8;
  2. static const uint8_t SCL = 9;
复制代码

下图是我使用的SI5351模块,该模块为SI5351A 10PIN的,支持3路生成时钟输出:CLK0、CLK1、CLK2。

 

图2


3、打开ClockBuilder Pro:启动ClockBuilder Pro软件,并选择与Si5351芯片兼容的设备和芯片型号。如果您的芯片型号不在列表中,您可能需要手动添加或选择类似型号进行配置。具体步骤如下:
(1)、启动软件后,如图1,选择Create New Project,创建新的工程
(2)、单击Clock Generators,选择时钟发生器

 

图3


(3)、然后会弹出一个元件选择列表,选择我们这次使用的SI5351A,然后单击下一步

 

图4

 

 

图5

 

继续下一步

 

 

图6

 

(4)、此处你可以输入一些设计笔记,如果没有什么要写的,可以直接下一步跳过。

 

 

图7

 

(5)、选择我们使用的封装型号,这里选择3输出的10PIN封装,然后单击下一步

 

 

图8

 

(6)、如图8所示,这时候我们可以看到默认的I2C地址,以及I2C的通信原理图。请记住该地址,或者在芯片手册查看该地址:0x60。

 

 

图9

 

(7)、如图9所示,这一步选择时钟源,即你使用的晶振是多大的,这里默认有两种选择27MHz,25MHz,我这里使用的是25MHz的。其他按照默认即可。继续下一步

 

 

图10

 

(8)、这一步,是设置输出使能以及配置输出的频率为多少,共3个输出通道可供配置,可以配置的范围是2.5KHz~200MHz。如图10所示。完成配置后单击下一步。

 

 

图11

 

(9)、图11为输出斜率设置,这里如果不需要可以默认,如果不知道什么意思可以在三个通道设置为相同的输出频率,然后在此处设置为不同的输出斜率,观察结果,以确认该参数的意义。单击下一步。

 

 

图12

 

(10)、如图12所示,该步骤为设置输出驱动能力配置,如果不清楚请查看该页面右半边的介绍。默认配置即可。然后下一步,完成了配置。

 

 

图13

 

(11)、接下来可以导出配置了,如图13,单击Export,进入导出菜单,我们选择选项卡Register File,寄存器配置文件。

 

 

图14

 

单击下边的Save to File,保存生成的配置头文件,如图14所示。完成时钟配置后,您可以使用ClockBuilder Pro生成一个配置文件,该文件包含了所有的时钟配置信息。将该文件保存到您的计算机上。

 

4、接下来使用生成的头文件,将配置信息通过I2C写入到Si5351A。

 

(1)、新建一个Arduino项目,并选择所用的主控芯片为ESP32-C3,选择芯片模块对应的烧录串口。设置如下图所示

 

 

图15

 

将wire.h与生成的Si5351A配置头文件都包含进来

 

完整代码如下所示

 

  1. #include <Wire.h>
  2. #include "Si5351A-RevB-Registers.h"
  3. /*
  4.   利用 Clock Builder Pro生成时钟芯片Si5351A的配置后,生成的文件默认位地址是16BIT,数据为8BIT。
  5.   如果直接使用需要注意这一点,因为Arduino的write(uint8_t),参数为8bit变量,注意转换。
  6. */
  7. #define SI5351A_ADDRESS            0x60
  8.  
  9.  
  10. void setup()
  11. {
  12.   // put your setup code here, to run once:
  13.   Serial.begin(115200);
  14.   Wire.begin();
  15.  
  16.   for(unsigned char i=0;i<255;i++)
  17.   {
  18.     SI5351_WR_Byte(0,i) ;
  19.   }
  20.  
  21.  
  22.   for(int i=0;i<SI5351A_REVB_REG_CONFIG_NUM_REGS;i++)
  23.   {
  24.     SI5351_WR_Byte(si5351a_revb_registers[i].value, si5351a_revb_registers[i].address) ;
  25.   }
  26.  
  27. }
  28.  
  29. void loop()
  30. {
  31.   // put your main code here, to run repeatedly:
  32.  
  33. }
  34.  
  35. void SI5351_WR_Byte(unsigned char dat, unsigned char reg_addr)
  36. {
  37.   Wire.beginTransmission(SI5351A_ADDRESS);  // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
  38.   Wire.write((unsigned char)reg_addr);      // 发送地址字节,注意有效位为低8位,自动生成的地址为16BIT的。
  39.   Wire.write(dat);              // 发送数据字节
  40.   Wire.endTransmission();       // 结束传输
  41. }
  42.  
复制代码
我没观察一下生成的头文件的主要内容

 

 

图16

 

可以看到配置代码放在一个结构体变量里,可以方便的访问到内存地址与对应的配置参数。另外主意到该生成的配置结构体种的地址为16BIT的,注意我们使用的I2C写入函数的操作参数为8BIT,这里应做强制转换,保证传入的参数与定义的参数类似是一致的。

 

完成代码后我们下载代码到芯片。并用示波器观察三路时钟信号。

 

 

 

 

  • 本文系21ic原创,未经许可禁止转载!

网友评论