Долго-долго я ходил вокруг темы синтезатора и вот, наконец, решился. Синтезатор решил делать на дешевой плате si5351 под управлением Ардуино. Интернет пестрит схемами синтезаторов на этой плате разной сложности и функциональности с готовыми программами. Но мне хотелось самому разобраться в этой теме.
Я поставил себе задачу сделать генератор, частоту которого я мог бы, для начала, устанавливать программно. Кто-то скажет: - "И для чего такая фигня?". Все просто: частенько нужно иметь кварц с нестандартной частотой, а пилить его не из чего. Можно сделать на заказ, но удовольствие не из дешевых. Вот здесь и поможет программируемый генератор. тем более, что заказать ему можно сразу несколько частот.
В прошлом году, летом, когда ко мне приезжал сын, он буквально за час набросал схему с переключением частот кнопкой и перестройкой с помощью резистора. Показал как это делается :) : берешь вот этот скетч, убираешь отсюда это, открываешь пример, копируешь то, и вставляешь сюда. Все это с мельканием рук и движением мышкой :). Программу я записал, даже в два места :). Но ... за год соединительные проводки выпали из гнезд и нужно было разбираться.
Но начнем с платы si5351. На Али ее сейчас можно купить рублей за 250 (вместе с доставкой).
В пакете сама плата (обратите внимание на частоту встроенного генератора - 25 МГц - это важно). Лучше бы купить с кварцем на 27 МГц, но это редкость. В комплекте три разъема SMA и контактная гребеночка. Если плату перевернуть, то видны некоторые ее характеристики.
Эта чудо-плата может генерировать одновременно три независимых частоты на трех выходах. Эти частоты могут быть фиксированными или изменяться. Питание от источников 3 - 5 В, но сам генератор 3-х вольтовый. Такое питание очень удобно, так как его можно взять от Ардуино. Управляются генераторы по последовательному интерфейсу I2C, который я применял уже для управления цифровым жк-индикатором.
Управлять нужно с помощью микропроцессора, например, каким-нибудь PICом или ATMEGA 328P. Но именно такой процессор в моей Ардуино Нано. Так что, не стал я мудрствовать.
Подключение очень простое.
Теперь о программировании. Конечно, используем уже готовые библиотеки. А их, к сожалению, несколько. И команды одной не очень-то подходят для другой. Есть библиотеки на официальном сайте Ардуино. Много библиотек здесь. Я скачал и установил библиотеку Etherkit_Si5351-2.1.3.zip. После ее установки появляются примеры с ее использованием.
Но с этой библиотекой мне не повезло - что-то было не так, скорее всего с моей головой :). Но я ее непременно освою. Потом. А пока нашлась другая библиотека si5351msu. Вы ее видите в самом низу списка. Ссылка на нее есть в статье кубинского (!!!) радиолюбителя, которая была переведена на русский нашим RA3TOX.
Самое главное, что в статье было описано, как с ней работать. К сожалению, библиотека si5351msu позволяет получать толь две независимые частоты, причем одна - обязательно на выходе clk0, а другая - на одном из оставшихся. Но все окупается понятной логикой работы.
Почему-то за стандарт во всех библиотеках берется частота кварца 27 мГц, а в продаже - чаще всего 25 МГц. Но библиотеки позволяют программно использовать устанавливать и другие частоты.
Другим фактором, связанным с частотой используемого кварца, является точность ее соответствия необходимой. Здесь дядюшка Ху может мал-мал подшаманить, и отличие частоты кварца от необходимой может составлять килогерц и более. Для того, чтобы компенсировать художества дядюшки Ху, имеется возможность ввести поправочный коэффициент. Мне удалось скомпенсировать неточность так, что ошибка составляла десятки герц на частоте более 10 МГц. Для меня это вполне, а желающие могут откалибровать частоту по эталонным частотам в эфире.
Достоинством библиотеки si5351mcu.h является то, что она уже содержит в себе библиотеку Wire.h для передачи данных по I2C, и инициировать эту библиотеку нет надобности.
Скетч получился очень компактным.
// Генератор двух независимых частот.
// библиотеку si5351mcu можноскачать здесь:
//http://ra3tox.qrz.ru/s25/pavelmc_Si5351mcu.html
#include "si5351mcu.h" // подключаем библиотеку для управления модулем Si5351
// библиотека si5351mcu.h уже содержит в себе библиотеку Wire.h для передачи данных по I2C
Si5351mcu Si; // объявляем объект библиотеки как "Si"
long F1 = 14000000; // частота на выходе CLK0
long F2 = 10000000; // частота на выходе CLK0
void setup() {
// инициализация библиотеки Si5351 lib
Si.init(25000000);// инициализация библиотеки для кварца 25 МГц ( для 27 МГц просто ())
// если частота кварца отличается от 25000000 Гц, то вводим поправочный коэффициент
Si.correction(1000); //устанавливаем, необходимый поправочный коэффициент( у меня получилось +1000 Гц)
// Установить максимальную мощность на оба выхода (2, 4, 6 или 8 мА)
Si.setPower(0, SIOUT_4mA);
Si.setPower(1, SIOUT_4mA);
Si.setFreq(0, F1); // устанавливаем частоту выхода clk0
Si.setFreq(1, F2); // устанавливаем частоту выхода clk1
Si.reset(); // перезагрузка
}
void loop() {
// этот цикл пока совсем пустой :):
}
Помним, что скетч можно проверить перед загрузкой.
И каков результат?
Я не стал припаивать SMA, а просто припаял к выходам конденсаторы, а к ним подключил входы осциллографа и индикатор ВЧ.
Как видите частоты отличаются на 10 МГц на 800 Гц, а на 14 Мгц - 1,1 кГц. Я попробовал +1000 Гц. А почему не - 1000? Практически выяснил, что если минус, то частота идет вверх, а если +, то вниз.
Так вот 1000 оказалось мало. Методом последовательных приближений определил поправку +2800. Результат налицо:
Теперь 10 МГц точно, а на 35 МГц ошибка 400 Гц. Есть простор для экспериментов :)
Теперь о диапазоне генерируемых частот. Хотя в статье RA3TOX и говориться о нижнем пределе 4 кГц, у меня ниже 8 кГц не получалось никак.
Отметьте точность: на 100 кГц - 1 Гц, а на 8 кГц -0,07 Гц.
А вот верхний предел оказался выше, чем обещал дядюшка Ху (160 МГц), аж на целых 60 МГц, но нормальный спектр только до 200 МГц. Так как такие частоты мой "ослик" не тянет, то обратился к tinySA/
Вот так выглядит спектр частоты 144 МГц.
А это 200 МГц.
Теперь о форме сигнала. Это меандр. В моем осциллографе на высоких частотах он превращается в подобие синусоиды. Но спектр с нечетными гармониками указывает именно на меандр.
И о фазе сигнала. Глядя на рис. 10 ясно, что они синфазны.
Ну а теперь то, для чего это делалось. Вам нужен кварц на частоту 2496,1кГц ? Получите :)!
А 20 Гц лишних - это подарочек от дядюшки Ху. :)
Все здоровья и успехов!