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 с помощта на 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.
За по-голяма универсалност при тестовете използвам 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 година