Позднее Ctrl + ↑

Исследование TEF6686. Часть 3. Set_RFAGC

Часть 1. Исследование возможностей TEF6686
Часть 2. IF Bandwidth
Часть 3. Set_RFAGC
Часть 4. Патчи
Часть 5. Set_MphSuppression
Часть 6. Set_ChannelEqualizer
Часть 7. Set_LevelStep
Часть 8. Set_LevelOffset
Часть 9. Set_Bandwidth_Options
Часть 10. Get_AGC
Часть 11. Get_Processing_Status
Исследование TEF6686. Выводы

Переходим к экспериментами с настройкой Set_RFAGC.

Параметр start в команде Set_RFAGC определяет пороговый уровень входного сигнала (в дБмкВ), при котором внутренний AGC тюнера включает аттенюатор, чтобы не перегрузить входной каскад.

Первые неудачные тесты

Исследования Set_RFAGC начались с интересной проблемы.
Я двое суток просидел над разными экспериментами, которые давали странные, противоречащие друг другу результаты.
По итогу в начальной версии этой заметки я тут с графиками доказывал, что ТЕФ, видимо, использует некие хитрые алгоритмы, работа которых не поддаётся адекватному анализу. И что настройка Set_RFAGC в целом не особо полезна.
Но закрались сомнения — явно что-то было не так.

В какой-то момент я вспомнил, что документация на ТЕФ настойчиво предписывает перед запуском приёмника загружать некий патч, исправляющий разные проблемы.
В описании исправлений я обратил внимание на

Resolved critical issue of muted FM radio after temperature change

А что, если температура влияет и на RFAGC? Проверяем!
Я поставил кулер рядом с модулем ТЕФа, и неожиданно всё заработало как надо!

Итак, проблема заключается в том, что при температуре внутри модуля >27 градусов (проверял термопарой) ТЕФ с каждым градусом всё дольше реагирует на команду снижения порога RFAGC. А после 33 градусов перестаёт реагировать совсем. При этом на команду увеличения порога RFAGC всегда реагирует нормально.
При охлаждении модуля ТЕФ снова начинает реагировать на команду снижения порога RFAGC.
Температуру самого чипа измерить не удалось, так как для этого нужно было снимать и распаивать модуль. Решил сделать это как-нибудь в другой раз.

Исправляет ли патч эту проблему? Проверим чуть позже. А пока исследуем Set_RFAGC с включенным кулером!

Как обычно строим панораму с минимальным и максимальным значениями порога AGC.

Порог 84 дБмкВ:

Порог 92 дБмкВ:

Что видим?
1) При пороге RFAGC = 92 дБмкВ Level выше на 5 дБ, чем при 84 дБмкВ.
2) При 92 дБмкВ на графике IF Bandwidth проявляются пики на 100.7 и 103.7 мГц.
Из предыдущих экспериментов мы знаем, что это означает, что ТЕФ детектировал на этих частотах станции.
3) При 92 дБмкВ на 103.1 мГц ТЕФ расширил полосу фильтра ПЧ. Кстати, у меня для этой станции ТЕФ почему-то всегда ставит более узкую полосу, чем для остальных станций. При том, что станция не самая слабая.

Посмотрим теперь графики двух разных слабых станций:

Что видим?
1) При пороге RFAGC = 92 дБмкВ Level выше на 5 дБмкВ, чем при 84 дБмкВ.
2) На первом графике вместе с увеличением порога RFAGC расширяется полоса фильтра ПЧ, а за ней и показатель шума USN. При прослушивании появляются помехи.
3) На втором графике USN не зависит от полосы.

Ну а что с патчем?

Вероятно, патч имело смысл поставить ещё в начале экспериментов.
Но я намеренно не загружал его изначально — было интересно, будет ли что-то работать не так, как указано в даташите. И если да, то что?
Итак, я пробовал загружать 2 известных патча:
Tuner_Patch_Lithio_V102_p209.h
Tuner_Patch_Lithio_V102_p224.h

К сожалению, это не исправило проблему — регулировка RFAGC всё так же работает некорректно.

Вывод

При увеличении порога RFAGC чувствительность приёмника возрастает. При этом, в зависимости от частоты, могут проявляться интермодуляционные помехи.
При уменьшении порога RFAGC чувствительность падает. Слабые станции слышно хуже, но снижаются интермодуляционные помехи.
Опция работает как и должна: позволяет выбрать компромисс между чувствительностью и устойчивостью к перегрузке/интермодуляции.
Во всех тестах дальние станции было слышно лучше при RFAGC = 92 дБмкВ. Это значение является дефолтным для TEF6686 и, вероятно, оптимально для большинства условий.
Опция непосредственно влияет на приём и вполне может использоваться для ручного DX.

Опция Set_RFAGC у меня работает корректно только на холодном модуле.
При этом, на заводских TEF6686 опция работает нормально. Вероятно, это связано либо с улучшенным теплоотводом, либо с тем, что у меня неудачный китайский клон ТЕФа.
Требуются дополнительные тесты.

Бонус

Во время одного из тестов я узнал о приёме слабой станции только по наличию этого пика на графике IF Bandwidth.
Запомним, что этот параметр может использоваться как вспомогательный критерий детектирования сигнала.

6 мес   DX   esp32   TEF6686   Радио

Исследование TEF6686. Часть 2. IF Bandwidth

Часть 1. Исследование возможностей TEF6686
Часть 2. IF Bandwidth
Часть 3. Set_RFAGC
Часть 4. Патчи
Часть 5. Set_MphSuppression
Часть 6. Set_ChannelEqualizer
Часть 7. Set_LevelStep
Часть 8. Set_LevelOffset
Часть 9. Set_Bandwidth_Options
Часть 10. Get_AGC
Часть 11. Get_Processing_Status
Исследование TEF6686. Выводы

Переходим к первому блоку настроек из даташита на ТЕФ: Set_Bandwidth.

IF Bandwidth

IF bandwidth — ширина полосы фильтра ПЧ.
По дефолту устанавливается автоматически (панорама с этим режимом есть в первой части).
Но можно устанавливать и вручную. Посмотрим, как это работает.

Дописываю прошивку на esp32 — получаем из регистра приёмника данные по i2c, отправляем по UART и выводим панораму для всего вещательного УКВ-диапазона.

Сначала с IF Bandwidth = 56 (минимальное значение):

Затем с IF Bandwidth = 311 (максимальное значение):

Что видим?
1) Сразу видно, насколько чётче при полосе фильтра ПЧ = 56 кГц видны «пики» станций.
2) По графику USN видно, насколько меньше шума пролезает при 56 кГц, чем при 311 кГц.
3) При ширине полосы 56 кГц измерение Offset становится более точным.

Второй тест!
Изменим код прошивки — теперь будем получать данные по одной станции.
Попробуем настроиться на слабую станцию, сегодня это 100.7 из Пелдожи. И поизменяем ширину полосы:

Что видим?
1) При расширении полосы ПЧ-фильтра начинает увеличиваться Level. Но это не приводит к улучшению приёма на слух. Появляется больше шумов.
2) Рост шумовой составляющей подтверждается увеличением показателя USN.
3) Уменьшается Multipath (WAM). Приём слабый, я считаю, что в данном случае этот показатель не отражает реальность.
4) Показатель модуляции увеличивается. Выглядит закономерно, поскольку расширение полосы пропускания позволяет принимать более широкий спектр сигнала.

Бонус-тест!
Во время одного из тестов заметил интересную картину на графике детектора многолучевого приёма (multipath, WAM):

Какие у вас идеи, что могло так влиять на изменение этого показателя?

control_sensitivity и low_level_sensitivity

Параметры control_sensitivity и low_level_sensitivity применяются только при автоматической настройке IF Bandwidth.
Я попробовал их покрутить, посмотрел графики, но не выявил адекватного поведения приёмника при их изменении.
На мой взгляд, при IF Bandwidth = Auto и с дефолтными настройками этих параметров ТЕФ работает весьма неплохо.

Вывод

Главный вывод: у ТЕФа прекрасно работает ПЧ-фильтр! Как-то даже не ожидаешь такого от весьма дешёвого чипа.

Далее прежде всего меня интересовало, как ширина полосы фильтра ПЧ влияет на level. Если зажать полосу до 56 кГц, не станет ли level колебаться около 0?
Если станет, то об автоматическом мониторинге частот не может быть и речи.
Но всё ОК, тесты показали, что даже на 56 кГц level может быть и 10, и 20, и вполне отражает наличие приёма на частоте.
А чем полоса шире, тем меньше level начинает отражать реальность, что логично.

Делаем вывод, что настройка IF Bandwidth непосредственно влияет как на показатель LEVEL, так и на реальную слышимость слабой станции.
Тесты показали, что для большинства случаев можно ставить ширину полосы ПЧ в районе 114-133 кГц. На «загруженных» участках диапазона — поуже, на свободных — пошире.
Этого, как правило, достаточно для обеспечения приёма и подавления близко расположенных радиостанций.

Автоматическая подстройка IF Bandwidth прекрасно работает для обычного приёма, но не всегда для DX.
Никакой «магических свойств» дополнительные параметры IF Bandwidth не имеют, менять их не вижу смысла.
При использовании режима «Авто» его параметры по умолчанию — control_sensitivity и low_level_sensitivity — обеспечивают вполне корректную работу.

Итог: в разделе настроек Set_Bandwidth для DX полезен только непосредственно IF Bandwidth, остальное можно не трогать. Судя по всему, так считают и разработчики других прошивок, так как я нигде не встречал настройки дополнительных параметров IF Bandwidth.

6 мес   esp32   TEF6686   Радио

Исследование возможностей TEF6686. Часть 1

Часть 1. Исследование возможностей TEF6686
Часть 2. IF Bandwidth
Часть 3. Set_RFAGC
Часть 4. Патчи
Часть 5. Set_MphSuppression
Часть 6. Set_ChannelEqualizer
Часть 7. Set_LevelStep
Часть 8. Set_LevelOffset
Часть 9. Set_Bandwidth_Options
Часть 10. Get_AGC
Часть 11. Get_Processing_Status
Исследование TEF6686. Выводы

Начинаю собственное исследование возможностей чипа TEF6686.

TEF6686 — популярная микросхема, на основе которой делают приёмники для приёма дальних радиостанций.
В интернете есть много проектов на основе этого чипа. Да и готовых приёмников у китайцев тоже много.

Я тоже увлекаюсь приёмом дальних FM-станций, поэтому готовые проекты у меня всегда вызывали вопросы:
1) Все ли возможности чипа используются в любительских прошивках?
2) Оптимальные ли используются настройки? Или дефолтные?
3) Что можно улучшить, чтобы приёмник принимал ещё более слабые станции?

Попробуем разобраться.
Уверен, эта информация будет полезна многим радиолюбителям.

Исследование решил проводить так. Буду менять настройки приёмника через регистры, а так же кое-что в схемотехнике всей сборки.
И оценивать изменения в приёме — как по показателям, которые отдаёт сам приёмник, так и просто на слух.
Меня интересует только «верхний» УКВ-диапазон (по-простому FM), поэтому работать буду с ним.

Если у вас есть вопросы, замечания или собственные наблюдения — буду рад обсудить их:
→ в Телеграме: https://t.me/amironoff_ru
→ по электронной почте: amironof@yandex.ru

Оборудование

Итак, для начала я собрал минимально рабочий приёмник на базе TEF6686, ESP32 и LCD 2004 и написал собственную прошивку на Си. Прошивка реализует управление тюнером по интерфейсу I²C, обработку полученных данных и вывод информации на дисплей, а также передачу диагностических данных по UART в терминал.

Внимательно изучил даташит на TEF и посмотрел, какие показатели приёма он умеет отдавать по i2c для УКВ-диапазона.

Если вкратце, команда Get_Quality_Status отдаёт:
status — статус детектора
level — уровень входного сигнала (дБмкВ)
usn — уровень ультразвукового шума
wam — детектор многолучевого приёма
offset — смещение частоты
bandwidth — полоса пропускания ПЧ
modulation — детектор уровня модуляции

Чтобы понять, как изменяются все эти показатели при приёме различных станций, я решил для начала получить данные по всему диапазону и посмотреть параметры в виде графиков. Настройки приёмника — дефолтные.

Для этого в бесконечном цикле я обхожу диапазон 87.5 — 108 мГц с шагом 50 кГц, получаю данные по каждой частоте 10 раз, усредняю и отправляю через UART в COM-порт винды. Далее эти данные получает скрипт на Python и рисует графики.

В результате получаем красивые графики с информацией о верхнем УКВ диапазоне Петрозаводска:

Исходник в большом разрешении.

Мне повезло, и в день тестов начался небольшой тропосферный проход из Финляндии, поэтому на панораму диапазона попали 3 слабых станции. Это выглядит так:

Исходник в большом разрешении.

Итак, что мы видим на графиках интересного и полезного?

  1. Для городских станций ТЕФ показывает уровень примерно от 50 до 75 дБмкВ. Я не думаю, что можно доверять абсолютным показаниям детектора уровня, но относительным — вполне. Передатчики некоторых станций находятся за городом, и на графиках явно видно, что уровень у них ниже.
    Ещё на графиках видны небольшие пики на частотах 102.9 и 103.7 мГц. В этот день на них был слабый проход — и он виден! Это при том, что эти станции находятся рядом с мощными городскими станциями.
  1. Level на пустых участках диапазона находится в районе 5-7 дБмкВ. Кстати, я смотрел код некоторых прошивок приёмников на ТЕФе и увидел, что некоторые разработчики вычитают из показаний level как раз 7 дБ. Судя по всему, чтобы при отсутствии сигнала станций показания уровня были около нуля.

Я задавал вопрос по поводу этой коррекции автору одной из прошивок. Он ответил:

So the actual display level is 7dB higher than it really is. This is due to poor design and unbalanced connection to the FM input of the chip.

Запомним это на будущее.

  1. График USN — ultrasonic noise detector. Видно, что чем выше уровень сигнала, тем ниже значение USN, что указывает на уменьшение ультразвуковой шумовой составляющей. Пока не очень понятно, каким образом это можно использовать для поиска или анализа слабых станций, потому что на слабых сигналах этот показатель сильно скачет. Вероятно, разработчики автомагнитол используют эту характеристику для включения / отключения Soft noise и т. п.
  1. График multipath. ТЕФ якобы умеет определять наличие многолучевого приёма и отдаёт этот показатель в процентах от 0 до 100. По графикам видно, что этот показатель тоже тем ниже, чем выше уровень сигнала. Судя по всему, на слабых сигналах малополезен.
  1. Offset. При точной настройке на станцию стремится к нулю. Вероятно, можно использовать как дополнительный фактор оценки приёма реальной станции.
  1. IF Bandwidth — ширина фильтра ПЧ. На графиках видно, как ТЕФ настраивает полосу фильтра на дефолтных настройках. При хорошем городском уровне сигнала он держит полосу на уровне 236 кГц. При снижении уровня начинает сужать полосу.
    Например, при level = 20 (103.7 мГц) IF bandwidth = ~150 кГц.
    А при level = 10 (102.9 мГц) полоса уже 100 кГц.
    При отсутствии станций полоса = 56 кГц.
  1. Modulation. На мой взгляд, самый малоинформативный показатель. Может скакать от 0 до 80% как при наличии сигнала, так и при его отсутствии. Наверно, можно его использовать при анализе каких-то конкретных станций. Возможно, понятнее станет при дальнейших тестах.

Некоторые сырые данные

Приведу примеры некоторых данных, полученных из чипа через UART:

Оценка приёма на слух: 4 из 10
FREQ 93.4 MHz, LEVEL=5.2, USN=16.5, WAM=39.3, OFFSET=3.0, BW=57.6, MOD=41.0
FREQ 93.4 MHz, LEVEL=5.6, USN=16.1, WAM=39.1, OFFSET=3.0, BW=58.4, MOD=39.4
FREQ 93.4 MHz, LEVEL=5.3, USN=15.6, WAM=38.7, OFFSET=4.0, BW=59.2, MOD=41.4
FREQ 93.4 MHz, LEVEL=6.8, USN=18.8, WAM=45.3, OFFSET=3.3, BW=57.6, MOD=41.6
FREQ 93.4 MHz, LEVEL=6.2, USN=19.1, WAM=41.0, OFFSET=3.6, BW=58.4, MOD=39.8

Оценка приёма на слух: 6 из 10
FREQ 90.2 MHz, LEVEL=11.1, USN=21.3, WAM=38.5, OFFSET=5.8, BW=88.6, MOD=41.7
FREQ 90.2 MHz, LEVEL=11.4, USN=22.0, WAM=37.6, OFFSET=5.2, BW=86.9, MOD=40.0
FREQ 90.2 MHz, LEVEL=11.5, USN=17.7, WAM=32.4, OFFSET=4.0, BW=84.8, MOD=40.2
FREQ 90.2 MHz, LEVEL=10.8, USN=17.4, WAM=39.2, OFFSET=4.6, BW=70.4, MOD=36.1
FREQ 90.2 MHz, LEVEL=11.8, USN=21.8, WAM=36.0, OFFSET=5.0, BW=88.5, MOD=45.8

Оценка приёма на слух: 9 из 10
FREQ 102.9 MHz, LEVEL=20.3, USN=8.6, WAM=21.7, OFFSET=8.7, BW=98.4, MOD=35.0
FREQ 102.9 MHz, LEVEL=20.1, USN=10.7, WAM=23.7, OFFSET=10.2, BW=102.6, MOD=48.5
FREQ 102.9 MHz, LEVEL=20.1, USN=10.2, WAM=21.9, OFFSET=8.4, BW=103.9, MOD=48.5
FREQ 102.9 MHz, LEVEL=19.8, USN=9.2, WAM=21.7, OFFSET=9.0, BW=96.3, MOD=49.9
FREQ 102.9 MHz, LEVEL=20.1, USN=10.8, WAM=21.4, OFFSET=8.5, BW=104.2, MOD=46.5

Выводы

ТЕФ отдаёт неплохой массив данных о принимаемом сигнале. Вероятно, эти данные отчасти являются «попугаями», но если их рассматривать как относительные показатели, они вполне поддаются анализу и обработке.
Если сопоставить субъективную оценку приёма на слух с параметром Level, при среднем уровне шума на пустом участке диапазона около Level ≈ 5, можно условно выделить следующие зоны:

<5.0 — разборчивость отсутствует, приёма нет;
5.1—7.5 — разборчивость нестабильная: от полного отсутствия до едва различимого сигнала;
7.5+ — устойчивый приём, как правило соответствует реальной станции.

Таким образом, станция начинает восприниматься как адекватно слышимая при превышении среднего фонового уровня Level примерно на 3 пункта.

6 мес   esp32   TEF6686   Радио
Ранее Ctrl + ↓