返回列表 发新帖我要提问本帖赏金: 105.00元(功能说明)

[RISC-V MCU 应用开发] 借助ClockBuilder Pro生成配置,在ESP32-C3上使用Si5351

[复制链接]
 楼主| gaoyang9992006 发表于 2023-6-5 17:02 | 显示全部楼层 |阅读模式
<
本帖最后由 gaoyang9992006 于 2023-6-5 17:26 编辑

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

图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。
20344647d8e3a5f634.png


图2

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

图3

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

图4


38478647d8fb3af397.png

图5

继续下一步

29689647d8fd3716a5.png

图6

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

46879647d9007380bc.png

图7

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

37496647d903a978c3.png

图8

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

62663647d90a90e910.png

图9

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

9532647d91a4b8fcd.png

图10

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

69167647d92137912b.png

图11


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

59544647d92e94dc57.png

图12

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

34164647d93526f156.png

图13

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

96656647d93ad43c39.png 74416647d93f078528.png

图14

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

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

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


54374647d9555cef1a.png

图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. void setup()
  9. {
  10.   // put your setup code here, to run once:
  11.   Serial.begin(115200);
  12.   Wire.begin();

  13.   for(unsigned char i=0;i<255;i++)
  14.   {
  15.     SI5351_WR_Byte(0,i) ;
  16.   }


  17.   for(int i=0;i<SI5351A_REVB_REG_CONFIG_NUM_REGS;i++)
  18.   {
  19.     SI5351_WR_Byte(si5351a_revb_registers[i].value, si5351a_revb_registers[i].address) ;
  20.   }

  21. }

  22. void loop()
  23. {
  24.   // put your main code here, to run repeatedly:

  25. }

  26. void SI5351_WR_Byte(unsigned char dat, unsigned char reg_addr)
  27. {
  28.   Wire.beginTransmission(SI5351A_ADDRESS);  // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
  29.   Wire.write((unsigned char)reg_addr);      // 发送地址字节,注意有效位为低8位,自动生成的地址为16BIT的。
  30.   Wire.write(dat);              // 发送数据字节
  31.   Wire.endTransmission();       // 结束传输
  32. }
我没观察一下生成的头文件的主要内容

26346647d95c94c580.png

图16

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

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

001.png

002.png

003.png



打赏榜单

zhuomuniao110 打赏了 5.00 元 2023-07-28
理由:全面,终于知道得到这个数据怎么用了。

21小跑堂 打赏了 100.00 元 2023-06-15
理由:恭喜通过原创审核!期待您更多的原创作品~

评论

非常全面  发表于 2023-6-28 08:42
借助ClockBuilder Pro工具,助力Si5351芯片的开发使用,软件配置过程详细有条理,实现效果较好。  发表于 2023-6-15 13:38
幸福小强 发表于 2023-6-17 23:29 | 显示全部楼层
方法不错,也学会了怎么用Arduino 的I2C底层函数。
caizhiwei 发表于 2023-6-24 13:59 | 显示全部楼层
羔羊哥又出新作啦,支持支持
forgot 发表于 2023-6-26 14:06 | 显示全部楼层
楼主写的非常全面,来学习一下啊
无语无语无语 发表于 2024-5-7 08:46 | 显示全部楼层
感谢大佬,小白刚入职正好不会用这个芯片,手册又太复杂了
 楼主| gaoyang9992006 发表于 2024-5-7 11:54 | 显示全部楼层
无语无语无语 发表于 2024-5-7 08:46
感谢大佬,小白刚入职正好不会用这个芯片,手册又太复杂了

如果是生成固定频率或者有限的频率可以用这个工具。如果是生成任意频率需要根据手册研究寄存器的配置方法。
小小蚂蚁举千斤 发表于 2024-5-22 17:34 | 显示全部楼层
学会了I2C底层函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

221

粉丝
快速回复 在线客服 返回列表 返回顶部