Arduino UNO驱动 Si3531A三通道时钟信号发生器

Posted 优信电子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino UNO驱动 Si3531A三通道时钟信号发生器相关的知识,希望对你有一定的参考价值。

Arduino UNO驱动 Si3531A三通道时钟信号发生器

Si3531A模块简介

Si3531A是一个IIC接口可编程时钟信号频率发生器,能够替代晶振、晶体振荡器、压控振荡器、锁相环。基于PLL/VCXO+分频器结构。可在每个输出口产生8KHz-150MHz之间的频率信号。
输出阻抗:50Ω
输出占空比:50%
IIC通信速率:100Kbps-400Kbps
IIC器件地址:0x60

模块引脚定义

SCL:IIC接口时钟信号线;SDA:IIC接口数据信号线;VIN:3.3-5V电源正极;GND:电源负极
0/CLK0:通道0信号输出 1/CLK1:通道1信号输出 2/CLK2:通道2信号输出

Arduino UNO与模块接线

Arduino UNOSi5351
A4SDA
A5SCL
VCCVCC
GNDGND

测试代码

在Arduino IDE库管理器搜索Si5351,并安装如图示所例程库

打开例程

#include <Adafruit_SI5351.h>

Adafruit_SI5351 clockgen = Adafruit_SI5351();

/**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void)

  Serial.begin(9600);
  Serial.println("Si5351 Clockgen Test"); Serial.println("");

  /* Initialise the sensor */
  if (clockgen.begin() != ERROR_NONE)
  
    /* There was a problem detecting the IC ... check your connections */
    Serial.print("Ooops, no Si5351 detected ... Check your wiring or I2C ADDR!");
    while(1);
  

  Serial.println("OK!");

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

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

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

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

  /* Enable the clocks */
  clockgen.enableOutputs(true);


/**************************************************************************/
/*
    Arduino loop function, called once 'setup' is complete (your own code
    should go here)
*/
/**************************************************************************/
void loop(void)


程序部分说明

1、设置PPL锁相环倍频器:三通道或两通道输出共用PLL_A或PLL_B。
设置PLL为整数模式,clockgen.setupPLLInt(SI5351_PLL_A or SI5351_PLL_B, m); 此函数将PLL_A或PLL_B设置成 25MHz * m频率值,m为整数取值范围15-90。
设置PLL为小数模式,clockgen.setupPLLInt(SI5351_PLL_A or SI5351_PLL_B, m, n, d); 此函数将PLL_A或PLL_B设置成 225MHz * (m + n/d)频率值,m为整数取值范围15-90,n取值范围0-1048575,d取值范围1-1048575。
PLL小数模式会有轻微的频率抖动,所以尽量用整数模式。

2、设置每一路输出的分频器
整数频率输出clockgen.setupMultisynthInt(output, SI5351_PLL_x, SI5351_MULTISYNTH_DIV_x); output取值0、1、2选择输出通道,SI5351_PLL_x取值倍频后的SI5351_PLL_A 或 SI5351_PLL_B,
SI5351_MULTISYNTH_DIV_x分频因子取值SI5351_MULTISYNTH_DIV_4, SI5351_MULTISYNTH_DIV_6, or SI5351_MULTISYNTH_DIV_8
小数频率输出clockgen.setupMultisynth(output, SI5351_PLL_x, div, n, d); output取值0、1、2选择输出通道,SI5351_PLL_x取值倍频后的SI5351_PLL_A 或 SI5351_PLL_B,div取值4-900,n取值0-1048575,d取值1-1048575。

3、附加R分频器固定频率值输出
clockgen.setupRdiv(output, SI5351_R_DIV_x); SI5351_R_DIV_x取值
SI5351_R_DIV_1
SI5351_R_DIV_2
SI5351_R_DIV_4
SI5351_R_DIV_8
SI5351_R_DIV_16
SI5351_R_DIV_32
SI5351_R_DIV_64
SI5351_R_DIV_128
通过ClockBuilder软件计算出倍频分频因子得到所要产生的频率值


实验结果

通过串口助手显示出各通道的信号频率

通过示波器观察每一通道输出的信号频率值,由于是小数输出模式会有频率抖动


Proteus仿真Arduino UNO驱动直流有刷电机转动实验

【Proteus仿真】Arduino UNO驱动直流有刷电机转动实验


  • Proteus仿真

  • 在Proteus软件里面 使用L273D驱动芯片替代带MX1508驱动芯片进行仿真。

  • MX1508双路马达驱动模块接脚图

  • mx1508原理图

示例代码

/*
  MX1508 四通道双路有刷直流马达驱动模块
  简易控制电机(MOTOR-A)连续正转,PWM设置为125

  1、安装库:// 点击这里会自动打开管理库页面: http://librarymanager/All#MX1508
  2、实验接线方法
  MX1508模块   Ardunio Uno
  GND---------GND接地线
  VCC---------5V 接电源
  IN1---------D9(PWM)
  IN2 ------- D10

以上是关于Arduino UNO驱动 Si3531A三通道时钟信号发生器的主要内容,如果未能解决你的问题,请参考以下文章

Proteus仿真Arduino UNO +74C922键盘解码驱动4X4矩阵键盘

Arduino UNO利用外部中断测量RC接收器PPM脉宽

我用arduino uno 运行simulink 模型的时候,发生以下错误:求大神求解,没有财富值,实在是抱歉

Proteus仿真Arduino UNO步进电机驱动示例

Proteus仿真Arduino UNO利用Stepper库实现uln2003驱动步进电机转动

舵机+16路舵机驱动板+Arduino UNO机械臂测试代码解析