风筝
发表于: 2024-10-30 15:48:44 | 显示全部楼层

在处理电子信号时,通常我们会遇到各种类型的波形,如方波、矩形波、正弦波、三角波等。方波是一种周期性的波形,常用于数字电路、时钟信号和触发电路中。方波信号发生器作为一种重要的电子测试设备,在电子工程、通信、科研及教育等领域具有广泛的应用。它能够产生特定频率和幅度的方波信号,为各种电子设备的测试和测量提供了有力的支持。本篇文章将详细介绍如何使用Arduino开发板和SI5351波形发生器产生特定频率的方波信号。


所需的组件

●    Arduino Uno R3开发板

●    SI5351方波信号发生器模块

●    跳线

●    I2C字符型LCD显示模块2004(绿色背光)

Required-Materials-6.jpg


SI5351方波信号发生器模块

SI5351方波信号发生器模块是您轻松制作精确且可定制的方波信号的首选工具。这款精巧的模块旨在让信号生成变得轻而易举,为业余爱好者和电子爱好者提供简单且用户友好的解决方案。SI5351的与众不同之处在于它能够在宽频率范围内产生高精度方波信号,非常适合业余无线电项目以及制作DIY电子乐器等各种应用。该模块设计紧凑,界面直观,适合初学者和经验丰富的创客。SI5351是一款多功能且可靠的信号发生器,可为您的电子实验带来简单性和精确性,让您的项目更上一层楼。

1-6.jpg


SI5351方波信号发生器引脚排列

该模块有7个引脚,包含I2C通讯和波形输出引脚。下图是该模块详细的引脚排列:

pin-5.jpg

●    VIN:SI5351 模块的电源输入(5V)。

●    GND:电源地,确保稳定的电气连接。

●    SCL:用于与微控制器通信的串行时钟线。

●    SDA:用于与微控制器通信的串行数据线。

●    D0-D2:可自定义方波信号的输出引脚。


SI5351方波信号发生器与Arduino开发板的硬件连接

SI5351方波信号发生器通过I2C接口连接至Arduino开发板,请参考以下图片进行连接:

fritzing_bb-2.jpg

将SI5351模块的I2C引脚分别连接至Arduino开发板的A4(SDA)和A5(SCL)引脚,VIN引脚连接至+5V,GND引脚连接至Arduino开发板的任意GND。


代码

首先我们需要在Arduino IDE中安装Adafruit_Si5351_Library库,该文件可以在Github下载:Adafruit_Si5351_Library

然后复制以下代码,进行编译上传至Arduino开发板。

  1. /*
  2. Create on January 27, 2024
  3. */
  4. #include <Arduino.h>
  5. #include <SPI.h>
  6. #include <Adafruit_SI5351.h>
  7. #include <myLCD.h>

  8. Adafruit_SI5351 clockgen = Adafruit_SI5351();

  9. void setup()
  10. {
  11.   Serial.begin(115200);
  12.   beginLCD("Adafruit Si5351");
  13.   while (!Serial)
  14.     ;
  15.   Serial.println("Si5351 Clockgen Test");

  16.   /* Initialise the sensor */
  17.   if (clockgen.begin() != ERROR_NONE)
  18.   {
  19.     /* There was a problem detecting the IC ... check your connections */
  20.     Serial.print("Ooops, no Si5351 detected ... Check your wiring or I2C ADDR!");
  21.     fail();
  22.     while (1)
  23.       ;
  24.   }

  25.   Serial.println("OK!");
  26.   success();
  27.   printLCD("Si5351 Example", 0, true);
  28.   printLCD("#0 to 112.5MHz", 1);
  29.   printLCD("#1 to 13.553115MHz", 2);
  30.   printLCD("#2 to 10.706 KHz", 3);

  31.   /* INTEGER ONLY MODE --> most accurate output */
  32.   /* Setup PLLA to integer only mode @ 900MHz (must be 600..900MHz) */
  33.   /* Set Multisynth 0 to 112.5MHz using integer only mode (div by 4/6/8) */
  34.   /* 25MHz * 36 = 900 MHz, then 900 MHz / 8 = 112.5 MHz */
  35.   Serial.println("Set PLLA to 900MHz");
  36.   clockgen.setupPLLInt(SI5351_PLL_A, 36);
  37.   Serial.println("Set Output #0 to 112.5MHz");
  38.   clockgen.setupMultisynthInt(0, SI5351_PLL_A, SI5351_MULTISYNTH_DIV_8);

  39.   /* FRACTIONAL MODE --> More flexible but introduce clock jitter */
  40.   /* Setup PLLB to fractional mode @616.66667MHz (XTAL * 24 + 2/3) */
  41.   /* Setup Multisynth 1 to 13.55311MHz (PLLB/45.5) */
  42.   clockgen.setupPLL(SI5351_PLL_B, 24, 2, 3);
  43.   Serial.println("Set Output #1 to 13.553115MHz");
  44.   clockgen.setupMultisynth(1, SI5351_PLL_B, 45, 1, 2);

  45.   /* Multisynth 2 is not yet used and won't be enabled, but can be */
  46.   /* Use PLLB @ 616.66667MHz, then divide by 900 -> 685.185 KHz */
  47.   /* then divide by 64 for 10.706 KHz */
  48.   /* configured using either PLL in either integer or fractional mode */

  49.   Serial.println("Set Output #2 to 10.706 KHz");
  50.   clockgen.setupMultisynth(2, SI5351_PLL_B, 900, 0, 1);
  51.   clockgen.setupRdiv(2, SI5351_R_DIV_64);

  52.   /* Enable the clocks */
  53.   clockgen.enableOutputs(true);
  54. }

  55. void loop()
  56. {
  57. }
复制代码

上传代码后,我们可以在示波器上查看该模块的输出信号,测量信号的频率,查看和预期的是否一致。

output.jpg

以上就是本篇文章的全部内容,如果有任何问题,欢迎在本帖下面进行回复。


跳转到指定楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-12-11 23:48 , Processed in 0.171768 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表