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

Cirrus Logic CS2000 - Fractional-N Clock Synthesizer & Clock Multiplier

Features:

- Delta-Sigma Fractional-N Frequency Synthesis
  Generates a Low Jitter 6-75 MHz Clock from an 8-75 MHz Reference Clock
- Clock Multiplier / Jitter Reduction
  Generates a Low Jitter 6-75 MHz Clock from a Jittery or Intermittent 50 Hz to 30 MHz Clock Source
- Highly Accurate PLL Multiplication Factor
  Maximum Error Less Than 1 PPM in High-Resolution Mode
- I²C / SPI™ Control Port
- Configurable Auxiliary Output
- Flexible Sourcing of Reference Clock
  External Oscillator or Clock Source
  Supports Inexpensive Local Crystal
- Minimal Board Space Required
– No External Analog Loop-filter Components

CS2000 позволява SPI управление (по три проводника) или I2C (по 2 проводника):

SPI address = 0x9E
I2C address = 0x4E (AD0 свързан към GND) или 0x4F (AD0 свързан към VCC).

***

CS2000, SPI control:


CS2000 SPI - тестова схема

На тестовата монтажна платка дълго време управлявах CS2000 по SPI с помощта на Arduino, като за конвертиране на нивата 5V към 3,3V използвах само последователно свързани резистори 10 kΩ и разчитах на вътрешните ограничителни диоди в ИС [6].

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

Възможно е да се използва друг тип конвертор на нива, като предпочитам директно свързване към управляващия микроконтролер (напр. към 3,3V Arduinino Nano).

Библиотека за управление на CS2000 SPI под Arduino / CS2000 SPI Arduino Library:
cs2000_spi_lib_v0.2.zip

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

При избора си на коефициенти в делителите съм използвал режим, където възможната стъпка на изменение да е минимална. При необходимост кодът лесно може да се промени.

***

Library constructor:


cs2000_spi(uint8_t _cs, uint8_t _cclk, uint8_t _cdin);

Arduino изводи към CS, CCLK, CDIN на CS2000

***

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

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

xt - честота на опорния кварцов резонатор, в Hz (8 MHz ... 56 MHz). Reference Clock Input Divider (RefClkDiv[1:0], стр. 32 [1]) в reg 0x16 трябва да е съобразен с честотата на кварцовия резонатор.

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

frequency = 6 000 000 Hz ... 75 000 000 Hz (напр. при моя тестов модул -> frequency = 450 000 Hz ... 230 000 000 Hz)

void output_control(uint8_t state);
изходно състояние на CLK OUT

state = 0;
изходът е изключен

state = 1;
изходът е включен (по подразбиране)

***

CS2000, I2C control:

За привеждане на управлението на ИС CS2000 по I2C е необходимо преди инициализацията на извод 8 (AD0/CS) да се подаде "твърдо ниво" - "лог. 0" или "лог. 1". При "лог. 0" CS2000 отговаря на I2C адрес 0x4E, а при "лог. 1": на 0x4F.


CS2000 I2C  - тестова схема

За по-голяма универсалност при тестовете използвам 5 волтово Arduino (в случая: Arduino Nano), а на тестовия си модул към CS2000 съм добавил LDO стабилизатор AMS1117-ADJ на 3,3V и конвертор на ниво 5V/3,3V към I2C шината. Резисторът R2 и кондензаторите C1, C4 са за допълнителна филтрация на захранващото напрежение.


CS2000, I2C, "печатна платка" с прорязани островчета


LZ2WSG CS2000 I2C module

Библиотека за управление на CS2000 I2C под Arduino / CS2000 I2C Arduino Library:
cs2000_i2c_lib_v0.2.zip

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

При избора си на коефициенти в делителите съм използвал режим, където възможната стъпка на изменение да е минимална. При необходимост кодът лесно може да се промени.

***

Library constructor:

cs2000_i2c(uint8_t);

I2C address, в зависимост от лог. ниво на адресния извод AD0

I2C address = 0x4E (AD0 свързан към GND)
I2C address = 0x4F (AD0 свързан към VCC)

***

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

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

xt - честота на опорния кварцов резонатор, в Hz (8 MHz ... 56 MHz). Reference Clock Input Divider (RefClkDiv[1:0], стр. 32 [1]) в reg 0x16 трябва да е съобразен с честотата на кварцовия резонатор.

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

frequency = 6 000 000 Hz ... 75 000 000 Hz (напр. при моя тестов модул -> frequency = 450 000 Hz ... 230 000 000 Hz)

void output_control(uint8_t state);
изходно състояние на CLK OUT

state = 0;
изходът е изключен

state = 1;
изходът е включен (по подразбиране)

***

Консумацията на ток на ИС CS2000 е ниска (в моя случай: само 12 mA! при честота 25 MHz на опорния кварцов резонатор), като изходна честота по справочни данни е 6-75 MHz (в моя случай измерената изходна работна честотна лента е 450 kHz ... 230 MHz!).

Нямам възможност за измерване на параметрите на изходния сигнал, но намирам добра възможност за приложение на CS2000 в портативни/мобилни устройства, където консумацията на устройството е определяща.

Въпреки дробния си коефициент на делене (и предполагаеми негативи в спектъра на изходния сигнал?) няколко месеца тестово използвах CS2000 за VFO към любителски трансивер. Вероятните ефекти биха се проявили при сложна електромагнитна обстановка: "големи" антени, натоварени диапазони (при състезания), близко разположени станции, и др. С късовълнова антена към приемника и да има такива ефекти, то те са маскирани от ефирния шум.


Препратки и материали:
1. CS2000, Cirrus Logic - Fractional-N Clock Synthesizer & Clock Multiplier [pdf][1,2mb]
2. Clock Generation and Multiplication/Jitter Reduction Solution, www.www.cirrus.com
3. 40 meter Direct Conversion QRP Transceiver using 74AC240 Power amp, www.circuitsalad.com
4. Low Current Compact CS2000-based Signal Generator, www.zl2pd.com
5. CS2000-CP, www.ecaps.exblog.jp
6. How to interface a 5V output to a 3.3V input, www.next-hack.com
7. QKT-3225SMD, Kingtronics Quartz Crystal [pdf][225kb]
 

LZ2WSG, Силистра
24 ноември 2018 година