Arduino библиотека за управление на Si570 / Si570 Arduino Library
/kn34pc.com/справочник/...

Silicon Labs Si570 - 10 MHz to 1.4 GHz I2C programmable XO

Features:

- Any programmable output frequencies from 10 to 945 MHz and select frequencies to 1.4 GHz
- I2C serial interface
- 3rd generation DSPLL with superior jitter performance
- Internal fixed crystal frequency ensures high reliability and low aging
- Available LVPECL, CMOS, LVDS and CML outputs
- Industry-standard 5x7 mm package

I2C address = 0x55

SiLabs 570 CAC000141G


Si570, поглед отгоре

***


Si570 - тестова схема

За по-голяма универсалност при тестовете използвам 5 волтово Arduino (в случая: Arduino Nano), а на тестовата си платка към Si570 съм добавил LDO стабилизатор AMS1117-ADJ на 3,3V и конвертор на ниво 5V/3,3V към I2C шината. Резисторът R1 и кондензаторите C2, C4 са за допълнителна филтрация на захранващото напрежение. Входът ОЕ може да се използва за хардуерна манипулация (включено/изключено) на изходния сигнал (напр. за CW TX, CW Beacon и др.).

Si570, "печатна платка" с прорязани островчета LZ2WSG Si570 module

Библиотека за управление на Si570 под Arduino / Si570 Arduino Library:
si570_lib_v0.5.2.zip

Тестовият Arduino sketch е за една постоянна изходна честота: (напр. 10 000 000 Hz).

За избор на делителите HSDIV, HS_DIV_index, N1 и изчисление на съответните честоти на VCO използвам таблично представяне. Възможно е да се извърши допълнителна оптимизация на превключването им (напр. извън любителските диапазони, сметнато с или без IF). Затова споделям помощната си таблицата (в MS Excel). Дано е в полза:
wsg_6_OK.zip

При честотно отклонение, по-голямо от +/- 3500 ppm (според справочните данни), пресмятам новите коефициенти. Напр. на 28 MHz би трябвало да има пукот веднъж (пращене, прекъсване на изходния сигнал за време 10 mS) на всеки 98 000 Hz, на 1,8 MHz: на всеки 6 300 Hz, но практически в собствения си суперхетеродинен приемник (без антена) такова пропукване не чувам. С късовълнова антена към приемника и да има такъв негативен ефект, то той е здраво маскиран от ефирния шум, т.е. лично не намирам негативи при управлението на Si570.

При по-малко честотно отклонение от +/- 3500 ppm без преизчисление на коефициентите зареждам новия RFREQ, намерен като отношение: (нова честота / стара честота) * стар RFREQ.

Посоченото управление е за Si570 CMOS версия А. За другите по-високочестотни версии (B, C) коефициентите не са изчислени след 350 MHz, но при желание аналогично могат да се добавят в библиотеката.

***

Публични процедури:

void init(uint32_t fxtal);
инициализация на библиотеката

fxtal - честота на опорния кварцов резонатор, в Hz (~114 285 000 Hz, напр. за моята ИС Si570 -> Fxtal = 114 306 560 Hz)

void set_freq(uint32_t f);
установяване на изходната честота

f = 10 000 000 ... 160 000 000 Hz (напр. за моята ИС CMOS Si570 -> f = 4 300 000 ... 320 000 000 Hz)

void set_fxtal(uint8_t xt);
за калибрация: установяване на нова честота на опорния кварцов резонатор xt

Изходът CLK може да се управлява хардуерно (включен / изключен) с помощта на лог. ниво на външния извод ОЕ (лог.1: вкл. / лог. 0: изкл.). Състоянието по подразбиране е включено, установено с вътрешен pull-up резистор OE-Vcc.

***

Калибриране:
si570_calibration.zip

В справочните данни на Si570 е дадена честотата на вградения опорен кварцов резонатор: Internal Crystal Frequency = 114,285000 MHz, maximum variation = ±2000 ppm.

Предвид исканата точност на честотата на изходния сигнал, за много приложения (вкл. в радиолюбителски конструкции) е необходимо да се предприеме допълнително калибриране.

За целта е необходимо вписване на точната честота на вградения опорен кристал в библиотеката за управление: void init(uint32_t fxtal);

Измервайки изходния сигнал с предварително зададена честота (10 000 000 Hz) с прецизен лабораторен/любителски честотомер (с точност напр. 1 Hz) и изменение на числовата стойност, отговаряща за честотата на вградения опорен кварцов резонатор по начина, споделен в [7. Simple calibration routine for the Si5351 breakout board], промених Arduino sketch-a да е валиден за Silicon Labs Si570.

В серийния монитор (Serial Monitor), с помощта на следните бутони от комп. клавиатура:
Up: r, t, y, u, i, o, p
Down: f, g, h, j, k, l, ;

със съответното честотно изменение:
Hz: 1, 10, 100, 1K, 10K, 100K, 1M

следва да се измени изходната честота, като се стремим тя да е възможно по-близка или равна на 10 000 000 Hz (20оC).

Добре би било честотомерът да е предварително калибриран (напр. по Rubidium Frequency Standard или GPS-synchronized Frequency Standard), а за избягване на временната температурна нестабилност: честотомерът и измервателния модул Si570 да са "разгряти" в работно положение примерно поне 30 мин след включването.

При получена точна изходна честота 10 000 000 Hz за конкретния Si570 следва да получим съотв. fxtal. Получената стойност я записвам и за в бъдеще я прилагам навсякъде в програмите си с Arduino, където ще използвам модулчето с конкретния Si570 под управление на тази библиотека.

За друга ИС Si570 (дори ако е от същата партида) трябва да се направи ново калибриране.

Да се има предвид непрекъснатото дълговременно изменение на честотата на опорния кварцов резонатор (стареене), особено измеримо през първата година на експлоатация! При необходимост от точни изходни честоти следва да се извършват периодични калибровки, напр. през една година.

Например за моята Si570 изменението е такова:

#define SI570_FXTAL 114306590  // дата: 2.09.2018 год.
#define SI570_FXTAL 114306510  // дата: 2.07.2019 год.
 

Забележка: Програмният код (или части от него) е за некомерсиално използване!

Препратки и материали:
1. Si570, Si571, Silicon Labs - 10 MHz to 1.4 GHz I2C programmable XO/VCXO [pdf][369kb]
2. The Si-570 (SiLabs), Micromod RF Synthesizer: A 19.9 - 199.999 MHz (CMOS) I2C programmeable XO
3. Si570 revisited - flexible Arduino controller
4. WA0UWH Customization of the original Minima sketch
5. Универсальный синтезатор Si570/Si5351 от UR5FFR

6. Programmable PLL (Si570) Local Oscillator for HF Receivers, Transmitters, Transceivers [pdf][2mb]
7. Simple calibration routine for the Si5351 breakout board, Etherkit, NT7S, Si5351Arduino

LZ2WSG, Силистра
19 октомври 2018 година, доп. 23 август 2019 година, 9 септември 2019 година