Giter Site home page Giter Site logo

siggen4351's Introduction

siggen4351

Signal Generator using ADF4351 and Arduino

Introduction

This project is a wideband signal generator for frequencies from 35 MHz to 4.4 GHz. It was designed to be used as a bench or RF laboratory test equipment to provide a very wideband, and stable, and user controllable frequency reference source, suitible for use in RF circuit and testing activities. However, the techniques and circuits used can be adapted for other uses, including a VHF/UHF/microwave VFO or Local Oscillator for ham radio projects, or (with modified software) as a sweep generator or other test equipment.

The heart of the project is the SV1AFN ADF4351 PLL Synthesizer Module, a low cost PCB module built and designed by Makis Katsouris, SV1AFN. This board uses the Analog Devices ADF4351 Wideband PLL Frequency Synthesizer, which enables a very wide bandwidth (35 MHz - 4.4 GHz) output frequency using a programmable Fractional-N and Integer-N Phase-Locked Loop (PLL) and Voltage Controlled Oscillator (VCO) with an external loop filter and frequency reference. The SV1AFN module provides the loop filter and other components to make it easy to integrate the ADF into a new design. The SV1AFN module provides an SPI interface for setup and control of the ADF4351 chip, which is used by Arduino Nano to provide overall control and I/O for the signal generator.

The signal generator provides an LCD display that shows the current frequency and PLL status, and uses both a 16 key matrix keypad and a high resolution absolute encoder (ACE128) to receive the user input. These were used to provide mutliple methods to quickly set and change the current frequency.

The generated output (a sine wave) can be adjusted to one of four output levels, and is sent to an SMA output port. The project also provides for both an internal frequency reference sources (typically a Ovenized Crystal Oscillator (OCXO) in the range from 10MHz to 250MHz), and provides an SMA input port for using an external frequency reference. The project provides automatic switching between the internal and external frequency references, which was testing with a GPS Disiplined Oscillator (GPSDO) 10 MHz reference.

An Arduino Nano is used to control the ADF, and manage the I/O with the user, as well as provide a USB interface for controlling the frequency source.

Features

  • Frequency Range: 35 MHz to 4.4 GHz
  • Output Level: -4 dBm to 5 dBm (in 3 dB steps)
  • In-Band Phase Noise: -100 dBc/Hz (3 kHz from 2.1 Ghz carrier)
  • PLL Modes: Fraction-N and Integer-N (set automatically)
  • Step Frequency: 1 kHz to 100 MHz
  • 16 key Matrix Keypad Input and Control
  • Rotary Encoder for frequency stepping
  • Signal On/Off control
  • USB Interface for frequency setting and readout
  • LCD Display (frequency, PLL and Mode variables)
  • Timer for OCXO temperature stablization
  • Automated Switching for Internal/External Reference Source
  • Internal 100MHz frequency reference source
  • Software for supporting 25 MHz and 10 MHz ref frequencies.
  • Uses 12 volt DC 1.5A power supply

Hardware

ADF4351 Frequency Synthesizer

The SV1AFN ADF4351 Board, available from SV1AFN's website. The ADF4351 documentation is provided by Analog Devices through their website.

Reference Frequency

A Wenzel 100 MHz OCXO is used to provide an internal reference. This can be easily changed to another reference frequency, as long as a low phase noise, stable reference source is used. This OCXO was used as it was an excellent reference source with 12v power requirements, and provided an SMA interface for output. A TL431 voltage reference circuit was used to provide a stable voltage control reference for the OCXO voltage control inteface.

Schematics

  • Circuit Schematic Wiring for Arduino/SV1AFN modules, and the ref auto switching circuit.

Arduino Nano

An Arduino Nano is used for the microcontroller board. This board has a small footprint, and low power consumption, and provides the USB interface.

I/O

LCD Display

A basic 20x4 LCD display, with a PCF8574 interface (I2C). It uses the LiquidCrystal_PCF8574 arduino library (included), which has a smaller size and appears to be faster than the standard LCD libraries.

Matrix Keypad

A 16 key Matrix keypad, using a PCF8574 module to detect and decode key presses, plus reduces the Arduino interface to 2 wires (I2C). The PCF8574 module was one designed for interfacing with LCDs, but it was modified to remove the transistor switch and resistor on pin 8 (normally used by LCDs), to restore pin 8 a regular digital pin. This was done, as the keypad requires 8 digital pins from the PCF module (4x4 matrix).

The OneWireKey arduino library (included) provides the software API to detect key press, and distingish short, medium and long press times from the keypad.

The keypad is used for frequency settings, configuration and control settings. For this application, using a true keypad with nice tactile feedback allows for rapid entry of frequency and other settings.

High Precision Absolute Encoder (ACE128)

A great Tindie project created by RedHunter provides a precision rotary encoder for the Arduino. The encoder is used for stepping frequency, which provides for a useful alterative to the keypad entry. The ACE128 provides an Arduino library on their website.

Software

The Arduino software and specialized libaries are provided in the repository. An ADF4351 interface API is provided, which can be used as a stand-alone library for other projects.

In order to accurately perform the necessary double long (64 bit) integer math operations for the PLL and frequency generation, which is not provided by the native Arduino libraries, the fantastic BigNumber Arduino library by Nick Gammon was used. This library was modified in order to provide unsigned long integer interfaces, so use the one provided in the repository, rather than the one from Nick.

Other libaries include an EEPROM extension for reading and writing settings to the EEPROM (for maintaining settings between reboots), and the I/O libraries for the LCD, encoder and keypad.

Installation

Copy the src/ directory to your Arduino sketchbook directory (named the directory siggen4351), and install the libraries in your Arduino library directory.

References

Pics

siggen4351's People

Contributors

dfannin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.