Автоматическая передача данных через радиоканал

Схемы, идеи, практики узлов радиолюбительской техники
ru0aog
Сообщения: 48
Зарегистрирован: 25 ноя 2024, 13:52

Re: Автоматическая передача данных через радиоканал

Сообщение ru0aog »

Продолжаем.
На данный момент вырисовываются две платы:
- аналоговая плата предварительных фильтров с усилителем-ограничителем,
- цифровая плата с микроконтролером, модулем ЕЕПРОМ, часами реального времени, bluetooth-модулем и LCD дисплеем.

Блок фильтров:
Modem_FLT_v106 SCH.JPG
Modem_FLT_v106.rar
(724.97 КБ) 89 скачиваний
.
Трёхкаскадый блок фильтров выделяет частоты 1000...1170 Гц и подавляет остальные для уменьшения ошибок приёма.
Усилитель-ограничитель усиливает слабые RTTY-сигналы и обостряет переход через ноль, формируя чётко читаемую частоту.
Шум эфира содержит перемежающиеся случайным образом частоты, поэтому важно выделить нужную полосу. Тем не менее, аналоговые фильтры не могут чётко разграничить близкорасположенные частоты. Эту функцию выполняет цифровой фильтр - программная часть на микроконтроллере.
На передачу установлен один каскад фильтрации 1000...1170 Гц и предназначен для подавления гармоник, попадающих в полосу пропускания радиочастотного тракта.
.
Цифровой блок:
Modem_CPU_v106 SCH.JPG
Modem_CPU_v106.rar
(565.15 КБ) 90 скачиваний
.
Виртуальная клавиатура и дисплей обеспечиваются наличием bluetooth-модуля. Подключившись со смартфона можно вводить, принимать и сохранять текст.
Часы реального времени и ЕЕПРОМ позволяют вести автоматический приём без подключения смартфона. Ранее принятые сообщения с метками времени можно вывести по команде на смартфон.
LCD-дисплей отображает принимаемый текст.
Любой из модулей может быть исключён, кроме микроконтроллера :)
.
Логика работы скетча проста.
Приёмная часть состоит из высокоскоростного и точного детектора частоты на линии внешнего прерывания INT0.
При возникновении фронта сигнала (нарастание уровня) считывается текущее системное время в микросекундах (квант - 4 мкс).
При следующем фронте вычисляется период и определяется частота.
Ошибка в 4 мкс даёт разброс точности определения периода (для частоты 1170 Гц) - от 852 до 860 мкс или от 1162 до 1174 Гц (максимум +/- 6 Гц).
После детектора частот получаем три состояния: МАРК, СПЕЙС и нет сигнала.
Третье состояние обеспечивает отсутствие ошибок приёма. Детектор частот работает на обработке процедуры прерывания, поэтому не зависит от выполнения основной программы. Результатом работы обработчика является поднятие соответствующих флагов.

Приём символа на заранее заданной скорости осуществляется по тактам таймера2. Определяется расчётный период срабатывания таймера2 как период, мкс = округление(45455/скорость, бод).
Для скорости 45,45 бод период равен 45455/45,45 = 1000 мкс.
Устанавливается делитель тактовой частоты 64: тики таймера каждые 16М/64 = 4 мкс. Срабатывание таймера - по сравнению. 1000 мкс/4мкс = 250 (минус один тик). Каждые 1000 мкс запускается обработчик прерывания по таймеру2.
Приёмная часть обработчика определяет текущее состояние флагом rSq:
- если нет входного сигнала (нет ни МАРКа, ни СПЕЙСа), то устанавливается режим ожидания приёма rSq = 0,
- если в режиме ожидания появился сигнал МАРК, то начинаем отсчёт времени (тиков таймера) и устанавливаем режим приёма стоп-бита rSq = 1,
- если в режиме приёма стоп-бита прошло более 31 тиков (т.е. х1,45) и появился сигнал СПЕЙС, значит это - стартовый бит: начинаем отсчёт времени заново и устанавливаем режим приёма старт-бита rSq = 2,
- если в режиме приёма старт-бита на 10-ом тике всё ещё длится СПЕЙС, то считаем, что стартовый бит успешно принят: устанавливаем режим приёма символа rSq = 3 и перезапускаем счётчик тиков.

Такая сложная система определения начала передачи гарантирует минимальное количество ошибок.
Несовпадение в любом из шагов ведёт к сбросу в исходное состояние.

Приём символа состоит из приёма последовательности из 5 бит.
Каждый бит длится 22 мс (для скорости 45,45 бод), поэтому очень важно было синхронизироваться по стартовому биту.
На протяжении каждого бита состояние линий читается по 16 раз. Если прочитан МАРК, то счётчик марков увеличивается на 1. Если прочитан СПЕЙС, то увеличивается счётчик спейсов.
В конце чтения каждого бита проверяется достижение порога преодоления ошибки. Как правило, для сильного сигнала принять нужно не менее 14 одинаковых значений из 16-ти.
Порог можно устанавливать программно, но при значении ниже 5 будет приниматься много мусора.
По завершении приёма пятого бита цикл приёма считается завершённым, выставляется соответствующий флаг dsp = 1.

Передающая часть обработчика прерывания таймера2 организована похожим образом:
- по тикам таймера передаётся стартовый бит, 5 битов символа и стоповый бит. После чего передача считается оконченной.
Передача осуществляется поднятием соответствующих флагов и установкой частоты передачи (функция AFSKgenerator).
Изменение скорости протокола выполняется простым изменением периода срабатывания таймера2.

Генерация тона функцией AFSKgenerator состоит в установке числа, при сравнении с которым срабатывает таймер1.
Коэффициент деления таймера1 = 1. Частота устанавливается в границах от 150 до 3500 Гц.
16-битный таймер1 позволяет более точно выставить частоту генерации.
Обработчика прерывания таймера1 меняет состояние пина выходе частоты на противоположное, соответственно, за один период частоты должно быть два срабатывания таймера. Число сравнения в данном случае 16000000/(2*FrToneHz) минус один тик.

Тестовый вариант скетча
RTTY_s006b.rar
(17.49 КБ) 96 скачиваний
Ответить