Друзья, привет!
Я упорно и с неимоверным наслаждением продолжаю эпопею по постройке современного но несложного SDR-приемника. К сожалению, интернет-публикации не успевают за моей оффлайн-продуктивностью. На самом деле приемник уже готов и отлично работает! А вот материала к этому моменту накопилось очень много, поэтому разобью его на 2...3 статьи, обладающие самостоятельной ценностью.
Если помните, то все началось с моего желания послушать эфир на современном уровне. Для меня это значит - видеть на компьютере панораму участка диапазона, который я слушаю. То есть, речь шла о постройке SDR-приемника. Начал я его с изготовления синтезатора.
После того, как синтезатор был изготовлен и настроен я приступил к разработке, изготовлению и испытанию приемной части.
Так вот, поскольку направление SDR-радиоприема для меня совсем новое, то вполне естественно, что в ходе конструкторско-технологической деятельности я делаю много открытий. Эти открытия подчас заставляют критически взглянуть на решения, которые казались раньше безупречными. Не то чтобы речь шла о серьезных - так сказать, концептуальных просчетах, но некоторые инженерные решения все же приходится пересматривать. Сегодня речь пойдет о доработке синтезатора частоты. По-сути, о второй итерации этого важнейшего узла.
Итак, вторая статья (про приемник) закончилась на не слишком оптимистичной ноте. У меня сломался энкодер...
Заменяем энкодер на кнопки
Признаюсь откровенно, у меня небольшой опыт эксплуатации энкодеров. В основном, для каких-то модельных или экспериментальных задач. И задней мысли не было, что такая штука может поломаться. В принципе, не беда - в ящике еще 4 штуки лежат из заказанной партии. Заменить - дело 20 минут! Но зародыш инженера-перфекциониста, который иногда нети, да и проснется в глубине моей души, начал нашептывать, что неплохо бы в начале разобраться с причинами. Вдруг, это системная проблема. И решил я энкодер разобрать, чтобы лучше понять внутреннее устройство и решить - стоит оно того (в смысле, заменить на другой) или нет.
Выкусил я сломанный энкодер с платы, отогнул два крепежных лепестка и посмотрел внутрь.
Справа - основание. Видны два контакта энкодера по краям и мембрана кнопки в центре.
Снимаю колесо прерывателя.
Ага, думаю, пластмасса! Наверняка с ней проблема! Но на вид вроде бы все нормально. Копаю дальше. Вынимаю пластмассовую профильную втулку.
Дальше я попытался извлечь ручку. Сначала тянул руками - не поддается. Затем взялся пассатижами и... Хрясь!
Оказалось, что это все пресс-порошок не лучшего качества. Я даже не раскачивал. Просто тянул! Ладно, зато теперь можно будет попробовать выбить вал в другую сторону. Тут дела пошли проще. С первым же ударом по керну вс выскочило!
Это оставшийся кусок ручки и вал, на который насаживалась пластмассовая втулка. Обратите внимание, на валу установлено стопорное кольцо и оно установлено как-то неправильно, криво. В этом и была проблема. Изучая под увеличением сам вал и стенки канала в корпусе, я обнаружил следы, которые оставила это самое стопорное кольцо.
На фото плохо видно, но вокруг центрального отверстия металл был как-бы изгрызан. Именно по этой причине энкодер с трудом проворачивался. Судя по тому, что сначала энкодер работал нормально, существует риск смещения стопорного кольца при нажатии на кнопку. Особенно, если нажатие направлено не строго вдоль оси энкодера. Кольцо стальное, а металл вокруг - порошковый, способный разрушаться при контакте со сталью. Этому способствуют острые кромки стопорного кольца.
Мне конструкция показалась не внушающей доверия и я решил повторно с энкодером не экспериментировать.
Кроме того, в ходе тестовой эксплуатации стало ясно, что управление частотой при помощи энкодера не является наилучшим вариантом, как мне казалось ранее! Назову основные причины.
- Предполагалось, что энкодер позволит точно настраиваться на радиостанцию, но по факту в SDR-приемнике этого не требуется. Нужно просто установить участок наблюдаемого диапазона, а настраиваться на станцию мышкой.
- Кнопка энкодера позволяла менять шаг настройки циклически - по кругу перебирая все варианты (10 Гц - 100 - 1К - 10К - 100К - 1М). Это неудобно, особенно когда нужно отщелкнуть шаг назад. Приходится перебирать все шаги.
- Чтобы настроится на нужный диапазон нужно совершить множество манипуляций - последовательно установить Мегагерцы, сотни килогерц и т.п.
В результате пришло понимание, что возможностей энкодера катастрофически не хватает! Нужны кнопки. И кнопок нужно много - шесть штук. Две - Изменение шага перестройки частоты вверх-вниз. Две - изменение частоты с заданным шагом вверх-вниз. Две перестройка по заданным (радиолюбительским: 1,6 - 3,5 - 7 - 14 - 21 - 27 МГц) диапазонам вверх-вниз. Итак, переделываем синтезатор на кнопки. Возможности нашей Arduino Pro Micro это легко позволяют. Если кто-то уже собрал синтезатор на энкодере, можно не переделывать пока не почувствуете необходимость. А если кто-то еще не собирал - крайне рекомендую.
Итак, начальное положение. Энкодер выпаян, все провода, шедшие к нему отведены в сторону. Большая их часть снова будет использована с кнопками.
Дальше, берем обычные кнопки 5,5x5,5 с высотой толкателя либо 6...7 мм, если на них планируется надевать декоративные колпачки, либо 9...10 мм, если без колпачков и запаиваем их вот так.
Нижний ряд кнопок отстоит от двух верхних на одну линию пинов. Это сделано умышленно. Обратите внимание, что нижние контакты кнопок соединены между собой металлическими перемычками, к которым подпаян бывший провод "земли". Он выполняет такую же функцию.
Снизу это выглядит так.
Дальше я приведу схему распайки, а пока побольше фотографий, для тех, кто схемы не любит!
Шесть кнопок - шесть проводов. Цвета проводов чередуются. Оранжевые - крайняя колонка кнопок, белые - средняя. Дальний белый провод - это питание на OLED-дисплей. Его не трогаем!
Видно, что два проводника огибают гребенку контактов модуля SI5351 с другой стороны.
А теперь схема соединений.
Кнопки, как и на фото соединяются проводами разных цветов. Только вместо белого я использовал голубой. По-большому счету нет особой разницы какие контакты использовать для подключения кнопок, поскольку в коде программы их можно переопределить.
По окончании распайки проводов плата плата модуля SI5351 отгибается обратно. Вот так получилось у меня.
Дорабатываем OLED-дисплей
Необходимость этой доработки возникла уже в ходе настройки приемника, когда я всеми силами и средствами пытался снизить уровень фоновых шумов. Я же в городе живу, а тут источники помех почти в каждой розетке! И тут мне несказанно повезло! Один из подписчиков канала, с ником "12345", в комментариях указал на характерные проблемы, связанные с использованием дисплея на контроллере SD1306. Спасибо ему большое! Дело в том, что контроллер этот питается от низковольтного источника питания 3...6 Вольт. В то же время дисплею для нормальной работы требуется 7...12 Вольт. Для того, чтобы обеспечить его напряжением необходимого уровня в контроллере аппаратно реализована так называемая "зарядная помпа" (charge pump). Это ни что иное, как повышающий преобразователь напряжения на конденсаторах, который склонен создавать высокочастотные помехи. Я, предвидя влияние цифровой части на аналоговую, постарался это влияние снизить, использовав определенный подход при общей компоновке конструкции. Тем не менее, определенная доработка дисплея позволила выиграть еще пару децибел фонового шума.
Итак задача - сделать так, чтобы дисплей работал без использования зарядной помпы. Доработка известная. В комментарии к прошлой статье вы найдете ссылку на нее. Я же приведу здесь ее основные этапы. Чтобы доработка стала возможной, нужно запитать матрицу светодиодов дисплея от отдельного источника напряжения 7...12 Вольт. У меня такой источник есть, поскольку я собираюсь для питания приемника использовать два последовательно включенных литиевых аккумулятора. Это дает нам требуемое напряжение: 6,4... 8,4 вольта. Это напряжение я собирался подавать на вход RAW платы Arduino. Вот именно его я использую и для зарядной помпы дисплея.
Прежде всего дисплей нужно отпаять. Можно и не отпаивать, просто отогнуть - так будет не совсем удобно, но можно. Я решил отпаять. Удобно делать это паяльником с ножевым жалом. Тут, я полагаю, проблем не возникнет. Сами контакты от платы выпаивать не нужно - только дисплей. Дальше, выпаиваем два конденсатора (С3 и С4) зарядной помпы. На большинстве плат они расположены справа и имеют одинаковую маркировку.
Кроме того, к нижнему выводу конденсатора C6 подпаивается проводок длиной примерно 4...5 сантиметров (на фото - 5 сантиметров). Я использовал МГТФ. После этих манипуляций дисплей можно установить назад, а проводок подпаять к выводу RAW микроконтроллера Arduino. Вот так должно получиться.
Кстати, левую боковую гребенку контактов (на фото штырьки торчат влево) я все-таки демонтировал. Уж очень она мешалась при разработке конструктива, а зачем мне нужен ее функционал я так и не придумал.
На этом доработка завершена. Теперь зарядная помпа не будет создавать лишние шумы.
Новое программное обеспечение
Конечно под вариант с кнопками пришлось переделывать и скетч для Ардуино. А попутно внести в него очередную порцию усовершенствований. И чтобы на меня не обиделись те, кто уже сделал вариант с энкодером я решил оставить в новом скетче поддержку энкодера. С этой целью в начале программы можно найти константу условной компиляции "ENCODER".
Для того, чтобы вернуть поддержку энкодера достаточно раскомментировать определение этой константы. Ссылка на новый скетч синтезатора будет внизу статьи.
Теперь, что позволяют делать кнопки.
- Верхний ряд кнопок - изменение частоты гетеродина. Левая - вниз, Правая - вверх. Изменение происходит на величину текущего шага. Важно! Синтезатор генерирует частоту в 4 раза выше чем частота приема, поскольку в схеме приемника используется счетчик Джонсона для получения сигналов гетеродина, сдвинутых по фазе на 90 градусов. Этот счетчик снижает частоту, подаваемую на смеситель в 4 раза. Крупными цифрами, как и раньше, на экране отображается частота сигнала, поступающего на смеситель (то есть реальная частота приема). Чуть ниже и мельче отображается реальная частота, генерируемая синтезатором SI5351. Мне эта величина ни разу не понадобилась, но решил оставить на всякий случай. Длительное нажатие на правую или левую кнопку (не важно) приводит к запоминанию текущей частоты.
- Средний ряд кнопок - изменение шага перестройки частоты. Лавая кнопка - уменьшение, правая - увеличение. Каждое нажатие увеличивает/уменьшает шаг в 10 раз. Длительное нажатие позволяет запомнить текущий шаг.
- Нижний ряд кнопок - изменение диапазона. Диапазоны зашиты в скетч. Это стандартная линейка: 1800, 3500, 7000, 14000, 18060, 21000, 24890, 28000 кГц. Левая кнопка - переход на диапазон ниже, правая - на диапазон выше. Запоминания диапазона нет. Для этого достаточно запомнить частоту.
Помимо нового функционала я очень сильно почистил программный код, убрав из него лишнюю функциональность и применив более эффективные программные решения, хотя бы с точки зрения компактности и универсальности. Код стал занимать меньше места в области программ - около 16 килобайт. Убрал я и лишнюю функциональность. Поскольку я делаю только приемник, я убрал генерацию частот, необходимых для трансивера. Заодно и уровень излучения снизится. Сейчас генерируется только один сигнал с выхода канала CLK0 - сигнал гетеродина. CLK1 и CLK2 - не задействованы.
Для обработки кнопок использована библиотека от Алекса Гайвера: GyverButton. Библиотека есть в архиве.
Ссылка на скачивание новой версии ПО синтезатора частоты на SI5351: https://disk.yandex.ru/d/DWHjm_ABCw-SeQ
А в следующей статье приемник приобретет вид законченной конструкции.
Спасибо, что читаете-смотрите Terrabyte! Подписывайтесь, если вам интересна радиолюбительская тематика, микроконтроллеры, мини-ПК, необычные компьютерные решения и инновационные разработки! Спасибо всем, кто поддерживает меня своими комментариями и лайками!
Группа ВК: https://vk.com/terrabyte
Канал на VK-Video: https://vk.com/video/@terrabyte/all
Интересные самоделки: