Проекты



eXTReMe Tracker

PSK-31 маяк

   Маяк был разработан с целью изучения возможностей цифровых методов связи. Поиск в Интернете выявил дефицит конструкций на современной элементной базе с подробными описаниями и исходниками программ микроконтроллеров. Единственной внятной на мой взгляд конструкцией, с достаточно полным описанием принципа работы, была конструкция Сергея Макаркина (RX3AKT). Эта конструкция и была принята за основу моей разработки, т.к. радиочасть была проста и широкополосна. Однако теоретическая части статьи Сергея Макаркина имеет существенные ошибки и неточности в части принципов формирования сигнала, которые я и попытаюсь осветить. Ибо уклон в паяльник и осциллограф, наблюдающийся у некоторых радиолюбителей, приводит к игнорированию теории, что в результате может порождать коварные заблуждения.

   Несмотря на то что на первый взгляд формирование сигнала PSK31 не вызывает вопросов, нюансы есть, причем совершенно неочевидные, которые видны только после осмысления теории. Нюансы видны при анализе формул описывающих явление модуляции, но по собственному опыту могу сказать, что чтение формул требует некоторой базы и привычки к ним, что есть далеко не у каждого. Желающих изучить формулы, отсылаю к прекрасному сайту www.dsplib.ru, я же попытаюсь объяснить суть процессов совсем без формул, хотя это и чревато возможностью "понять не так". Все графики - результат вычислений в программе Excel.

   Итак, рассмотрим принцип двукратной (т.е. только два дискретных положения) фазовой манипуляции однотонального сигнала прямоугольным цифровым сигналом.

   На рисунке ниже два колебания - красное - несущая, синее - модулирующий сигнал.

   Если принять что модулирующий сигнал имеет только два дискретных значения либо 1 либо -1, перемножение (да да, знакомая с первого класса операция умножения это балансный модулятор!!! Тот который на кольцевых диодах, ключах и прочие реализации в железе - это простое банальное умножение!!!) этих колебаний даст фазоманипулированное колебание. Обратите внимание, в момент перехода синего колебания в противоположное значение, красная несущая меняет знак и как бы смещается на полпериода. Это смещение и есть фазовая манипуляция несущей. Еще раз - мы умножили несущую на прямоугольный сигнал. Помним, что спектр прямоугольного колебания богат гармониками и если не предпринять никаких действий, то все эти гармоники будут перенесены на частоту несущей - мы же пропустили через смеситель два колебания - прямоугольное модулирующее и несущую. Что бы уменьшить ширину сигнала, нужно сгладить фронты модулирующего сигнала, т.е. пропустить модулирующее прямоугольное колебание через фильтр имеющий вот такую АЧХ вида приподнятого косинуса:

   В результате фронты прямоугольного модулирующего колебания будут сглажены:

  Соответственно, сглаженный сигнал смешанный в балансном модуляторе с несущей примет вот такой вид:

  

   Важно понимать, что информация находится в месте изменения фазы, а эти места - в месте изменения знака модулирующего сигнала, т.е. в месте пересечения оси Х. И фаза меняется не плавно (как пишет Сергей Макаркин), а резко, скачком на 180*, но т.к. амплитуда сигнала в этот момент равна нулю, то расширения спектра от гармоник прямоугольного сигнала не происходит, т.к. они подавлены формирующим фильтром (читай - фронты сглажены). Сглаженные фронты - это результат работы формирующего фильтра, а не мифическая "косинусоидальная модуляция".

   В реальных конструкциях сигнал прошедший через фильтр получает некоторую задержку и выглядит вот так:

   Для формирования модулирующего колебания с разрешением по амплитуде 210 требуется КИХ фильтр 1024 порядка. Т.е. каждый отсчет сглаженного колебания будет приходиться 1024 умножения с накоплением. Для этого требуется существенная вычислительная мощность. Однако, ввиду того, что сигнал на каждом битовом интервале можно аппроксимировать четырьмя случаями (переход из 0 в 1, переход из 1 в 0, неизменная 1 и неизменный 0), гораздо рациональнее формировать сигнал табличным методом, сохраняя в памяти контроллера только форму кривой перехода из 1 в 0.  Именно такой метод и применяется в моей конструкции. 

   Внимательный читатель, сразу задаст вопрос, а как быть с абсолютным значением фазы? Какой ее скачек считать логической единицей, а какой нулем? Для устранения этой неопределенности применяется дифференциальное кодирование. В результате дифференциального кодирования логический ноль вызывает постоянную смену фазы на каждом битовом интервале, а логическая единица оставляет фазу неизменной. Обратите внимание, что в качестве логического нуля в данном примере использовано значение "минус 1", тогда дифференциальный кодер работает правильно.

   В частном случае PSK31 применяется специальный алфавит "варикод", суть которого заключается в том, что в информационном символе не может содержаться более двух нулей подряд. Два и более нулей подряд разделяют символы. Т.е. все символы ASCII закодированы в варикоде так, что бы имитировать дифференциальную передачу. Символ всегда начинается с логической 1 и заканчивается логической 1. В середине может быть сколько угодно нулей, но не подряд, а чередуясь с единицами. Логично, что следует избегать длительной передачи логической 1, что может вызвать рассинхронизацию приемника, т.к. приемник детектирует ИЗМЕНЕНИЯ фазы. В оригинальном варикоде наиболее часто употребительные буквы латинского алфавита закодированы самыми короткими последовательностями. Так например буква "е" - это "11", а буква "Z" - это "1010101101".

 

   Особенности схемотехнических решений.

   Основной функционал маяка реализован на четырех микросхемах: гетеродин на основе DDS AD9834, смеситель на мультиплексоре ADG774, операционный усилитель AD8534 и микроконтроллер stm32f100с4t6. В результате получилось недорогое одноплатное решение.

 



   Ввиду того, что изначально от гетеродина не требовался синусоидальный сигнал, микросхема DDS выбиралась без учета разрядности ЦАП. Это позволило использовать относительно недорогую и доступную микросхему. Для упрощения конструкции тактирование микросхемы DDS осуществляется от кварцевого генератора микроконтроллера, для чего сигнал от внутреннего генератора контроллера выведен на специальный вывод. Использовать для тактирования DDS встроенный в микроконтроллер умножитель частоты не получилось, т.к. он дает "грязный" сигнал - фильтр ФАПЧ там имеет широкую полосу удержания. Маяк изначально предполагалось использовать на диапазонах 160 и 80 м, поэтому тактовой частоты DDS в 20 МГц вполне хватало. Уже в процессе настройки маяка подумалось - а чего бы весь КВ диапазон не захватить? Для этого на обратной стороне платы маяка был припаян тактовый генератор Epson на частоту 80 МГц. Это превышает заявленные для DDS максимальные 75МГц тактовой частоты, но тем не менее DDS работает отлично. С таким тактовым генератором перекрывается весь КВ диапазон. ЦАП DDS не используется, тактовый сигнал берется от знакового разряда фазового аккумулятора, который и управляет смесителем.

   Мощный операционный усилитель включен усилителем, а не повторителем, как в конструкции Сергея. Это вызвано  возможностью контроллера выдать со своего ЦАП только 3,3 вольта. Мощность же маяка напрямую зависит от напряжения на выходе операционного усилителя. На фото видны перемычки - исправления в разводке платы.

   Трансформаторы все одинаковые, намотаны на кольцах К10х6х4 проницаемости 1000 или 2000 (в случае ШПТЛ это не очень важно), тремя скрученными проводами в лаковой изоляции. Края колец скруглены, однако после того как все трансформаторы были готовы, пришла идея мотать трансформаторы проводом в ПВХ изоляции из компьютерной "витой пары". Это будет давать меньшую вероятность повреждения изоляции и образования межвиткового КЗ.

  

   На выходе всех трансформаторов получается сигнал с уровнем 26 вольт без нагрузки и 8,3 вольт на нагрузке 50 Ом.

     

   Микроконтроллер с помощью ЦАП формирует огибающую PSK сигнала с помощью 12 битного ЦАП. Так же микроконтроллер выдает управляющие команды на DDS, устанавливая его рабочую частоту. Схемой предусмотрено подключение к микроконтроллеру делителя напряжения внешнего сигнала, термометра DALLAS DS18B20, барометра MPL115A1, кнопок, светодиодов и микросхемы конвертера уровней RS-232. Этот функционал пока не поддержан программно.

 

   Питание маяка осуществляется от стабилизированного источника 5В. Напряжение питания 3,3В для DDS и микроконтроллера формируется LDO стабилизатором LP2952 в стандартном включении.

Общий вид маяка в корпусе

Плата маяка

Маяк с суперкомпактной
антенной диапазона 160м

Маяк с антенной
установлен на чердаке дома

  

 

    Программное обеспечение маяка.

   Основной цикл программы (файл main.c) содержит только три функции - инициализация периферии контроллера, настройка DDS и собственно вывод теста сообщения. Если закомментировать функцию вывода сообщения, маяк будет непрерывно передавать "0" в формате PSK-31.

	int main( void) {
	
	  InitAll();                                  // Инициализация периферии контроллера
	  DDS_init ();                                // Настройка параметров и установка частоты DDS
	
	  while( 1) { 
	     printf("vvv RA9MGK/RB Standalone QRPP beacon without computer. Only three chip. Super compact antenna (0,6 m)."
	        "PWR 0,5 Wt QTH MO65RA58 E-mail: ra9mgk@yandex.ru. More info: ra9mgk.narod.ru/beacon 73!\r");    
	  }
	}	
   Основные настройки заданы в самом начале файла:
                                          
	#define  HCE_20MHZ                            // Частота резонатора контроллера
	//#define  HCE_8MHZ
	                                          
	//#define  DDS_CLK       80000000
	#define  DDS_CLK       20000000               // Частота тактирования DDS
	                                          
	#define  DDS_OUT_FREQ  1838000                // Выходная частота DDS

   Следует обратить внимание, что произвольные числа можно подставлять только для выходной частоты DDS -  DDS_OUT_FREQ. При изменении частоты контроллера следует изменить настройки таймера TIM2 так, что бы прерывания происходили с частотой 32 кГц. Остальные "дефайны" применяются для условной компиляции.

   Формирование огибающей PSK-31 происходит в обработчике прерывания TIM2.

			
	void TIM2_IRQHandler(void) {                  // Обработчик прерываний от переполнения таймера 2
	u16 temp;
	 
	  temp = PSK_routine();			      // Получаем новое значение огибающей из таблицы	  
	  DAC->DHR12R1 = 2047 + temp;                 // Выдаем в ЦАП новое значение огибающей в фазе
	  DAC->DHR12R2 = 2047 - temp;                 // и противофазе
	
	  TIM2->SR &= ~TIM_SR_UIF;                    // Clear CC1 interrupt flag
	  NVIC_ClearPendingIRQ(TIM2_IRQn);            // Сбрасываем ожидание в контроллере прерываний
	}		
		

   Управление выборкой нового значения из таблицы происходит в функции u16 PSK_routine (void), которая находится в файле psk.c. Хоть я ее и написал, но как она работает я и сам уже не понимаю, хотя там всего 10 строчек кода :-).

   Таблица описывающая форму огибающей находится в массиве s16 cos_table_10 [1024] и имеет такой вид:

   Форма огибающей реализует фильтр "приподнятый косинус" для итогового модулированного PSK-31 сигнала.

 

   Формирование сигнала в передатчике построено по двухтактной схеме выглядит так: с выходов ЦАП в фазе и противофазе (на осциллограмме) подается на два двухтаткных балансных смесителя, предварительно усиливаясь мощным ОУ.

  

   На выходе смесителя получаются сигналы, сдвинутые по фазе на 180* которые подаются на суммирующий трансформатор, соответственно один канал, второй и два вместе:

           

   Обратите внимание на хорошо видимый момент смены фазы несущей в нуле огибающей. Именно это превращает сигнал в DSB. Если фаза не будет меняться, то получиться АМ сигнал со 100% глубиной модуляции.  

 

   При правильной сборке маяк не требует наладки и сразу после подачи питания начинает передачу запрограммированного сообщения. Светодиод VD1 мигает с частотой около 2Гц для индикации работоспособности.

   Файлы проекта:

   Полностью рабочая версия прошивки контроллера
   Файлы схемы и платы в формате P-CAD2002 В плате исправлены замеченный баги, на схеме уточнены номиналы элементов.

 


16.09.2012 г.   

Обновлено  23.09.2012 г.   

© Ю. Рыженко aka RA9MGK   



Используются технологии uCoz