Автор Тема: Синтезатор частоты от 0 до 12 МГц на базе микросхемы DDS AD9835  (Прочитано 13254 раз)

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Я, где-то лет 12 назад, делал синтезатор частоты от 0 до 12 МГц на базе микросхемы DDS (Direct Digital Synthesizer) AD9835 с разрешением в 0,01 Гц. Синтезатор предназначен для измерения параметров прецизионных кварцевых резонаторов, например типа РК187М с добротностью около 2,5 миллионов и РК335А с добротностью около 4-х миллионов. Отсюда требования к высокой стабильности, точности и высокой разрешающей способности по частоте. Установка частоты производилась либо набором частоты на клавиатуре, обычная от телефона, типа TF-0286-1 имеющей 16 клавиш (4х4), либо энкодером. Использовался оптический энкодер ENC1J-D28 L00128 имеющий разрешение 128 имп/оборот, что с учётом двух выходов и двух состояний на каждом выходе даёт 512 изменений состояния на оборот. Процессор использовался PIC18F258, опорный термостатированный кварцевый генератор - "Гладиолус" - т.е. делал из того, что, как говорится, под руку попалось.
Поскольку формирование управляющих слов для микросхемы синтезатора требовало приличных вычислительных ресурсов - 64-х разрядная целочисленная арифметика, и это на 8-ми разрядном процессоре, то энкодер работал по высокоприоритетному прерыванию, по низкоприоритетному прерыванию работал таймер для сканирования клавиатуры. Вот фрагмент программы обслуживания энкодера по прерыванию:
//----------------------------------------------------------------------------
// Процедура обслуживания высокоприоритетного прерывания
// Время обработки 4-5 мкс

#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()

{
unsigned char DataPortB;

  if (INTCONbits.RBIF)
    {                            // Проверить прерывание энкодера
      INTCONbits.RBIF = 0;          // Очистить флаг прерывания
  DataPortB = PORTB; // Считаем значение порта
  DataPortB = DataPortB & 0x30; // Выделим разряды энкодера
  DataPortB = DataPortB >> 4; // Поместим в младшие разряды
  NewEncod = DataPortB; // Новое значение энкодера
  DataPortB = DataPortB | OldEncod; // Получим код для вычисления
  OldEncod = NewEncod << 2; // Для последующей обработки

  switch( DataPortB )
      {
    case 1:                        // Поворот по часовой стрелке
        StepEncod ++;        // Добавим
        break;   
    case 2:                        // Поворот против часовой стрелки
          StepEncod --;        // Вычтем
          break;
    case 4:                        // Поворот против часовой стрелки
        StepEncod --;        // Вычтем
        break;
case 7: // Поворот по часовой стрелке
    StepEncod ++;        // Добавим
  break;
case 8: // Поворот по часовой стрелке
    StepEncod ++;        // Добавим
  break;
case 0xB:                        // Поворот против часовой стрелки
        StepEncod --;        // Вычтем
  break;
case 0xD:                        // Поворот против часовой стрелки
        StepEncod --;        // Вычтем
  break;
case 0xE: // Поворот по часовой стрелке
    StepEncod ++;        // Добавим
  break;
    default:                      // Другие комбинации
        break; // Ничего не делаем
      }
      intFlags.Bit.RotaryValcoder = 1; // Произошел поворот валкодера
    }
}

//----------------------------------------------------------------------------

Знаковая переменная StepEncod указывала число шагов и направление поворота энкодера, а установленный флаг intFlags.Bit.RotaryValcoder указывал на то, что произошёл поворот энкодера на величину, находящуюся в переменной StepEncod

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

Если это кому-то интересно, то я могу создать соответствующую тему (подскажи где, если нужно) и выложить туда как принципиальные схемы синтезатора, так и программу микропроцессора, она довольно неплохо откомментарена, да и пояснения необходимые тоже приведу. И конечно же, если у кого будут вопросы - то постараюсь ответить!

P.S. К сожалению, из-за несовместимости обработки табуляций в MPLAB и в теге "code" развалилось форматирование, особенно в комментариях.
« Последнее редактирование: Июня 18, 2020, 17:44:52 от john »

Оффлайн Мельников Тимур

  • Administrator
  • Member
  • *****
  • Сообщений: 24
  • Репутация: +1/-0
    • E-mail
    • Личное сообщение (Оффлайн)
Да, интересно, было бы неплохо перенести данное устройство на stm


Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Да, интересно, было бы неплохо перенести данное устройство на stm

Здравствуй Тимур!

Если есть интерес, то я готов выложить имеющуюся у меня информацию с необходимыми пояснениями. Только подскажи куда: в этой же теме, или лучше создать отдельную, может Евгений что подскажет.
Даже было бы удобней, если бы в нужном месте создали соответствующую тему и первое сообщение, поясняющее для чего она. А я потом начну потихоньку туда выкладывать все материалы с пояснениями.

Оффлайн john

  • Administrator
  • Hero
  • *****
  • Сообщений: 11751
  • Репутация: +26/-16
    • http://r9al.ru
    • E-mail
    • Личное сообщение (Оффлайн)
Разделил тему, если нужно название можно изменить.

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Разделил тему, если нужно название можно изменить.

Всё, понял! Дело не в названии, а в содержании. Так что в ближайшее время начну выкладывать сюда все материалы.

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Ну вот, пожалуй приступлю...

Предыстория

В процессе разработки высокостабильных кварцевых генераторов возникла необходимость точного измерения их параметров. Эти измерения производятся в двойной "П" цепи согласно международных стандартов IEC 444-1 и IEC 444-2. схема двойной "П" цепи следующая:



Такая схема обеспечивает сопротивление с обеих сторон измерительных приборов 50 Ом, а резонатора с каждой стороны - 12,5 Ом, т.е. общая нагрузка резонатора - 25 Ом. Поскольку у меня имелся древний аттенюатор (за 30 лет) с диапазоном частот от 0 до 1 ГГц от какого-то прибора, но с сопротивлением 75 Ом, то мне пришлось пересчитать сопротивления резисторов "П" цепи, чтобы затухание и сопротивление со стороны резонатора остались прежними, а со стороны приборов стало 75 Ом. Если это кого-то интересует, то номиналы двойной "П" цепи могу привести дополнительно.

Однако главное, что необходимо - это обеспечить высокую стабильность, точность и малый шаг перестройки, поскольку, например для резонатора РК187М на частоту 5 МГц при его добротности 2,5·106, полоса пропускания составляет всего 2 герца! А для резонатора РК335А на частоту 2,592 МГц и добротности 4·106, составляет всего лишь  0,648 герца. Поэтому было принято решение о создании синтезатора с разрешением в 0,01 герца и диапазоном перестройки от 0 до 12 МГц, поскольку большинство прецизионных резонаторов, обеспечивающих наивысшую стабильность, изготавливаются на частоты от 2,5 до 10 МГц. Причём с увеличением частоты и уменьшением размера кварцевой пластины добротность и долговременная стабильность таких резонаторов падает.

Строить синтезатор решено было на микросхеме прямого цифрового синтеза (DDS) AD9835. Эта микросхема поддерживает работу на входной тактовой частоте до 50 МГц, но имевшийся термостатированный высокостабильный генератор "Гладиолус" выдаёт частоту 10 МГц.



Поэтому был использован вспомогательный управляемый напряжением кварцевый генератор VCXO-250H на частоту 40 МГц, который с помощью цепи ФАПЧ синхронизировался с генератором "Гладиолус" (подробности - далее, при обсуждении схемы). Паспортная нестабильность "Гладиолуса" за сутки не более 5·10-9, однако реально его стабильность существенно выше, практически на порядок. Изменение частоты за год не превосходит 1,5·10-8. Частота его контролировалась по сигналам спутниковой навигационной системы GPS, что обеспечивает точность измерения менее 10-12 за сутки.

Собственно синтезатор

Поскольку это первый пост, то он будет по большей части обзорным, тем не менее, если возникают какие-либо вопросы - спрашивайте, постараюсь ответить. Пока желательно не спрашивать про схемотехнику и программное обеспечение - это будет в следующих постах.

Синтезатор собран в корпусе от вольтметра В7-16. Вот морда его лица (картинка кликабельна):

хостинг для хранения фото

Сразу же приношу извинения за возможно не очень качественные фотографии и наличие внутри скопившейся за многие годы пыли.

Слева внизу - выходной разъём, при нулевом ослаблении аттенюатора на нагрузке 75 Ом выходное напряжение 1 Вэфф. Над ним - ЖКИ дисплей, на котором отображается частота в герцах и режим работы. Под режимом работы понимается следующее - это шаг изменения частоты на один шаг вращения энкодера. Число импульсов на оборот выбранного, а точнее имеющегося энкодера - 128, соответственно шагов на оборот будет в четыре раза больше - 512. Изменение режима позволяет выбрать шаг изменения выходной частоты на один шаг энкодера: 0,01 Гц, 0,1 Гц, 1,0 Гц или 10 Гц. Поскольку если исследуются низкодобротные цепи, то с шагом в 0,01 Гц можно запариться крутить энкодер!
Собственно маховичёк энкодера расположен по центру, чуть выше выходного разъёма - имеет характерный алюминиевый цвет. Выше маховичка энкодера расположен аттенюатор, имеющий две соосных ручки переключения ослабления: внешний многогранник - от 0 до 60 дБ с шагом 10 дБ и внутренний прямоугольник - от 0 до 10 дБ с шагом 1 дБ.
Справа расположена обычная телефонная клавиатура, цифровые клавиши - набор частоты. "*" - десятичная точка, "#" - ввод (Enter), установка набранной на клавиатуре частоты. Остальные четыре клавиши без надписей служат для выбора одного из четырёх режимов выбора шага частоты энкодера. Надпись на дисплее о готовности появляется сразу после включения, если не было вращения энкодера или набора на клавиатуре.

Вот как выглядит отображение максимальной частоты с максимальным разрешением 0,01 Гц (кликабельно):

Фотохостинг бесплатный и без регистрации

Слева на дисплее отображено "M1", что соответствует шагу энкодера в 0,01 Гц

А вот произвольная частота в том же режиме - с тем же разрешением (кликабельно):

imageup.ru - бесплатный хостинг для изображений

А вот в режиме с шагом в 10 Гц, единицы, десятые и сотые герца - всегда нули (кликабельно):

сервис хранения изображений

А вот собственно потрохи синтезатора:

бесплатный хостинг фото

Собственно плат - четыре:
1. Блок питания - расположен на задней стенке между коаксиальными разъёмами и трансформатором.
2. Сетевой фильтр - также расположен на задней стенке справа от трансформатора.
3. Плата управления - на горизонтальной пластине слева, где генератор "Гладиолус".
4. Плата цифрового синтеза - на горизонтальной пластине справа, подключён потемневший от времени разъём аттенюатора.

Вид на заднюю стенку (кликабельно):

бесплатный хостинг картинок

Два коаксиальных гнезда внизу не подключены, это выход синхронизации - прямоугольные импульсы установленной частоты, и вход модуляции - в принципе нужен для поверки аттенюатора на установках для поверок аттенюаторов типа Д1-9 и т.д. Соответствующие разъёмы на платах имеются. Слева в самом низу, за шлейфами почти не виден, установлен разъём интерфейса RS-232, через который возможно управление синтезатором от компьютера, однако в текущей версии программного обеспечения это не предусмотрено.

А это плата управления (кликабельно):

Бесплатный хостинг для фотографий

Видны генератор "Гладиолус", правее его вверху - управляемый напряжением кварцевый генератор, который синхронизируется с ним. Справа внизу - не подключенный разъём внешней модуляции. Между разъёмами - собственно процессор в панельке.

А это собственно плата цифрового синтеза (кликабельно):

imageup.ru - хостинг для изображений

Собственно микросхема DDS расположена слева вверху, под разъёмом. Правее и выше, рядом с подстроечным резистором, - сдвоенный быстродействующий операционный усилитель (описание будет далее, когда будут рассматриваться схемы). Внизу слева также виден не подключенный разъём - это выход синхронизации.

А теперь, вид на переднюю панель сзади (кликабельно):

бесплатный хостинг для фото

Слева видна обратная сторона клавиатуры со шлейфом снизу, правее - здоровенная железяка с двумя мощными разъёмами сверху, - это аттенюатор. Правее его, внизу - оптический энкодер. Справа вверху - ЖКИ дисплей. Под ним - выходной разъём синтезатора.

Ну вот, на сегодня пожалуй, всё. Далее будут схемы, а затем программное обеспечение.

Если есть вопросы - задавайте!

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Продолжим - теперь схемы (прикреплены).

Сетевой фильтр

Каких-либо особенностей не имеет, аналогичен сетевому фильтру компьютерных блоков питания. Единственное отличие - конденсаторы С1, С4 установлены со стороны схемы (трансформатора), а не со стороны сети, как в компьютерных блоках питания. Это связано с тем, что эти конденсаторы в компьютерных блоках защищают от проникновения помехи в сеть, а в данной схеме - из сети.

Блок питания

Блок питания также никаких особенностей не имеет, разве что выпрямители на мостах D1 и D2 включены последовательно для обеспечения достаточного входного напряжения для стабилизатора +12 В, который питает опорный кварцевый генератор "Гладиолус". Ну и ещё имеет две земли: аналоговую - AGND и цифровую - GND. Это необходимо для снижения проникновения помех из цифровой части в аналоговую. Эти две земли связаны через резистор R1. Аналоговая часть схемы питается напряжениями +5 В и -5 В. Цифровая: +12 В (опорный генератор) и +5 В - процессор и логика.

В этом же блоке (внизу схемы) расположен гальванически изолированный интерфейс RS-232. Согласование уровней TTL и уровней RS-232 обеспечивает микросхема D4 в стандартном включении. U6 и U7 - оптоизоляторы на выход и на вход соответственно. U5 - интегральный изолированный преобразователь 5 В -> 5 В для питания изолированной части.

Плата управления

Как уже говорилось, опорным генератором является термостатированный кварцевый генератор "Гладилус" - U2. Поскольку он имеет синусоидальный выход с относительно малым напряжением - 300 мВ, то он далее усиливается резонансным усилителем на транзисторе VT1 и поступает далее на триггер Шмидта U1C, на выходе которого формируются прямоугольные импульсы опорной частоты, U1D обеспечивает дополнительную развязку схемы ФАПЧ, а U1A, U1B, U1E, U1F, включённые параллельно, обеспечивают умощнение сигнала и через резистор R3 и разъём J1 поступают на разъём, расположенный на задней панели для контроля частоты опорного генератора.
Поскольку собственно микросхема ФАПЧ может работать лишь до частоты чуть выше 10 МГц, то сравнение частоты опорного генератора и синхронизируемого генератора производится на частоте 5 МГц. Это сделано с целью уменьшения джиттера и улучшения точности синхронизации. Частота опорного генератора делится половинкой микросхемы U3A на 2, а частота синхронизируемого генератора U4 типа VCXO-250H второй половинкой микросхемы U3B - на 8. Поделённая опорная частота поступает на вход SIN, а поделённая синхронизируемого генератора - на вход CIN микросхемы ФАПЧ U6. Выход P2 (13) этой микросхемы предварительно фильтруется конденсатором С17, а затем поступает на пропорционально интегрирующий фильтр R11, R12, C14, с выхода которого поступает на вход управления синхронизируемого кварцевого генератора.
Тактовая частота 40 МГц для микросхемы DDS была выбрана из соображений обеспечения разрешения в 0,01 Гц и не слишком сложных (большой разрядности) вычислений управляющих слов.
В схеме синхронизируемого генератора также используются буферные и умощняющие элементы, как и в схеме опорного. Выход 40 МГц также выходит на разъём задней панели.

Что касается процессора: тактовая частота его задаётся от внешнего сигнала 10 МГц, снимаемого с делителя синхронизируемого генератора, с включением внутреннего умножения на 4, т.е. процессор работает на частоте 40 МГц. Такое решение - использование внешней синхронизации с внутренним умножением, а не отдельного кварца для синхронизации процессора было сделано для исключения интерференционных помех, которые неизбежно возникнут, если в системе имеются несколько генераторов, частоты которых не синхронизированы.
Разъём J8 предназначен для целей отладки и программирования: в нормальном режиме на нём стоит перемычка, а в режиме программирования и отладки перемычка снимается. Это сделано для того, чтобы питание на процессор подавалось от программатора, который не обеспечивает необходимого тока для питания всей схемы.
Элементы R5, C12 обеспечивают сброс процессора по включению питания, а диод D2 - защиту схемы в режиме программирования.
Резистор R4 - ограничение тока подсветки ЖКИ дисплея, резистор R9 - регулировка контрастности дисплея.
Транзистор VT2 с обвязкой предназначен для осуществления модуляции выходного сигнала, в данной версии программного обеспечения не используется.
Конденсаторы С1-С6, С15, С16 служат для подавления импульсных помех по питанию и устанавливаются у процессора, синхронизируемого генератора, делителей частоты, микросхемы ФАПЧ и т.д.

Плата DDS

Схема имеет две земли: цифровую - обозначена жирной горизонтальной линией и аналоговую - обозначена треугольником вершиной вниз. Соответственно на микросхему DDS подаётся два питания: +5 В цифровой части и +5 В аналоговой части. Поскольку согласно описанию микросхемы не допускается неодновременная подача этих питаний, то для исключения этой ситуации используется сдвоенный диод Шоттки VD1. Если одно из этих питаний подаётся ранее другого, то через соответствующий диод напряжение подаётся и цепь другого питания. Когда оба питания достигают номинального значения, диоды эффективно изолируют их друг от друга.
Микросхема DDS U1 имеет токовый выход, величина тока которого регулируется резистором R7. Выходной ток установленной частоты синтезатора поступает на преобразователь ток -> напряжение на половинке микросхемы быстродействующего операционного усилителя U2A, имеющего полосу усиления до 300 МГц и имеющей выходной ток более 60 мА и рассчитанную на работу на нагрузку до 37,5 Ом.
Поскольку на выходе этой микросхемы получается однополярный сигнал, то вторая половинка этой микросхемы U2B служит для смещения сигнала и делает его двухполярным.
Резистор R4 обеспечивает подстройку выходного напряжения в небольших пределах с целью калибровки выходного уровня, а резистор R2 обеспечивает устранение постоянной составляющей в выходном напряжении. Т.е. устанавливается достаточно высокая частота, на выход подключается милливольтметр постоянного тока и при нулевом ослаблении аттенюатора этим резистором устанавливается нулевое напряжение на выходе.
Выход микросхемы U2B через согласующий резистор R12 75 Ом подключён к фильтру C15, L1, C16, L2, C17, который подавляет внеполосные составляющие выходного сигнала синтезатора.
С разъёма J4 сигнал поступает на аттенюатор (стандартный, от какого-то прибора), а с выхода аттенюатора - на коаксиальное гнездо на передней панели прибора.
Быстродействующий компаратор U4 и буфер U3 обеспечивают формирования прямоугольного сигнала с установленной частотой, который выведен на заднюю панель.

Вот, пожалуй на сегодня всё, следующий пост, а возможно и не один, будет посвящён программному обеспечению, однако поскольку завтра у нас в планах поехать с внуками на дачу к знакомым (с баней!), если будет хорошая погода, то следующие посты могут несколько задержаться, тем более, что в понедельник у меня намечается апгрейд компьютера жены, а то она меня скоро кончит по этому поводу.

Также напоминаю, что если есть вопросы - задавайте, постараюсь ответить.

P.S. Что касается применения этого или аналогичного синтезаторов для приёмников/передатчиков, то это не очень хорошая идея, поскольку спектр выходного сигнала для этих целей довольно грязный - см. даташит на AD9835. Для моих целей этого вполне достаточно, поскольку исследуются достаточно узкополосные цепи и побочные частоты в спектре особой роли не играют.

Тем не менее, решение для использования его в приёмниках/передатчиках есть: для этого используется малошумящий (с чистым спектром) гетеродин, который опять же с цепью ФАПЧ синхронизируется с синтезатором DDS! Достаточно большая постоянная времени цепи обратной связи ФАПЧ эффективно подавит все шумы и побочные составляющие спектра синтезатора DDS.

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Поскольку поездка на дачу не случилось, погода была отвратительной: с утра температура был +4,7 °С, и это в городе, вблизи стены здания, а поскольку небо было чистое, то за городом на почве были скорее всего заморозки. Да и днём было +12 °С, пасмурно и ветрено, поэтому с внуками пришлось развлекаться дома.

Так что продолжим - на этот раз: программное обеспечение. (прикреплено)

Программа написана на языке "С" для микропроцессоров серии PIC18 - MPLAB® C18, некоторые части кода написаны на ассемблере. Ассемблерные вставки применялись как правило в двух случаях:
1. Реализация кода на ассеблере получается проще, чем на С.
2. Для повышения скорости выполнения многоразрядной арифметики и, соответственно, уменьшения времени реакции программы на вращение энкодера.

Поскольку регистры частоты микросхемы DDS являются 32-х битными, т.е. 4 байта, то для формирования частоты в программе были использованы переменные типа unsigned long, которые обеспечивают представление чисел от 0 до 4294967295, если считать младшую единичку за 0,01 Гц, то возможно представление частот от 0 до 42,9 Мгц. Именно поэтому тактовая частота микросхемы синтезатора была выбрана 40 МГц. Конечно, в этом случае реальный шаг перестройки будет 0,00931 Гц, но это весьма близко к 0,01 Гц! Т.е. погрешность установки частоты будет определяться погрешностью опорного кварцевого генератора и ±0,01 Гц.

Однако для вычислений необходимо наличие операций умножения двух 32-х разрядных чисел с получением 64-х битного результата и деления 64-х битного числа на 32-х битное. Для этого был введён новый тип переменных SLONG - 64-ре бита, т.е. 8 байт.
Как раз эти процедуры были написаны на ассемблере и находятся в модуле SuperMath.

Прикреплены два файла:
1. Sintesizer.7z - архив исходных текстов и заголовочных файлов.
2. Переменные и флаги программы синтезатора.pdf - Как понятно из названия, это кратенькое описание переменных и флагов программы.

Хочу обратить внимание, что второй файл может не полностью соответствовать исходным текстам программы! Дело в том, что в процессе отладки или доработки программы соответствующие изменения не всегда вносились в файл описания.

Собственно программа.

Головной модуль - Sinthesizer.c. Он состоит из двух частей:
1. Инициализация - исполняется один раз при включении синтезатора и обеспечивает необходимую настройку режимов работы периферии как самого процессора, так и подключённых к нему внешних устройств: дисплея и микросхемы DDS синтезатора.
2. Циклически исполняемая часть или Главный цикл работы - бесконечный цикл в котором постоянно крутится программа вплоть до выключения синтезатора.

В Главном цикле выполняется следующее:
1. Сброс сторожевого таймера, который при сбое или зависании программы производит перезапуск процессора.
2. Вызов процедуры ServKBD( ) которая производит сканирование клавиатуры, т.е. была ли нажата или отпущена какая-либо клавиша и если нажата, то была ли нажата эта же клавиша на предыдущем цикле сканирования.
3. Вызов процедуры KBDPost( ) - постобработка нажатия клавиши, преобразует нажатие клавиши в символьный код с формированием строки для вывода на дисплей, определяет и устанавливает выбранный режим работы - шаг частоты энкодера: 0,01 Гц, 0,1 Гц, 1 Гц, 10 Гц.
4. Вызов процедуры ServEncoder( ) - отрабатывает вращение энкодера. Энкодер подключен к порту B, и работает по высокоприоритетному прерыванию (модуль Interrupts.c). Если энкодер повернулся, то происходит прерывание, считывается состояние выводов энкодера, сравнивается с его предыдущим состоянием путем исполнения операции побитного "ИЛИ", и, в зависимости от результата - вращение по- или против часовой стрелки, производится увеличение или уменьшение знаковой переменной StepEncod. Такой алгоритм позволяет обрабатывать прерывания, возникающие при вращении энкодера, достаточно быстро - за 4...5 микросекунд. Затем переменная StepEncod используется в процедуре ServEncoder( ) для формирования нового значения частоты. Т.е. изменение выходной частоты происходит не на каждый шаг энкодера, а сразу на величину переменной StepEncod, поскольку за время исполнения Главного цикла может происходить множество прерываний, вызывающих изменение переменной StepEncod. Поскольку зрение человека инерционно, как инерционен и ЖКИ дисплей, то это не приводит к каким-либо неприятным последствиям - даже при вращении энкодера со скоростью 1 об/с прерывания произойдут 512 раз, т.е. частота изменения показаний на дисплее должна быть 512 Гц, но человеческий глаз такое просто не способен воспринять!
5. Вызов процедуры ServDisplay( ) - формирует строку для вывода на ЖКИ дисплей с указанием режима и нового значения частоты и выводит её на дисплей.
6. Вызов процедуры ServAD9835( ) - эта процедура управляет микросхемой DDS синтезатора: вычисляет управляющие слова для микросхемы и записывает их в соответствующие регистры микросхемы.

Далее цикл повторяется по новой.

Поскольку источников внешних событий два: вращение энкодера и нажатие клавиатуры, то используется два прерывания - по изменению уровней на выводах портов, к которым подключен энкодер и по таймеру. Таймер вызывает прерывания примерно каждые 6,6 мс и устанавливает соответствующий флаг, по которому процедура ServKBD( ) проиводит сканирование клавиатуры, этого вполне достаточно для защиты от дребезга клавиш клавиатуры и достаточно быстрой реакции на нажатие клавиш.

Управление вызовом процедур и их синхронизация осуществляются флагами (заголовочный файл Interrupts.h): т.е. логика работы такова, что каждая из указанных процедур сразу при её вызове проверяет соответствующий флаг, если он установлен, то эта процедура выполняет соответствующее действие и при необходимости устанавливает другой соответствующий флаг, который используется следующей процедурой, сбрасывая свой флаг. Если флаг не установлен, то просто происходит выход из процедуры.

Ну вот, пожалуй и всё. Если есть вопросы - постараюсь ответить. Возможно на заковыристые не сразу, поскольку всё это делалось 12 лет назад и многое просто забылось! И хотя исходники довольно неплохо откомментарены, тем не менее, вполне могут возникнуть какие-либо хитрые вопросы.

И ещё одно: верхняя частота, которая устанавливает границу максимальной выходной частоты синтезатора, устанавливается переменной unsigned long MaxFrequency в головном модуле. В данной версии она принята 20 МГц. Сначала она была 12 МГц, затем 15 МГц - именно это указано на схемах, а 20 МГц я поставил чтобы поэкспериментировать какой сигнал будет в этом случае. Ведь по теореме Котельникова при тактовой частоте 40 МГц максимальная частота как раз и должна быть 20 МГц! Однако как оказалось, сигнал в этом случае крайне отвратительный, для исследования резонаторов на частоту 19,9998 Мгц проще оказалось использовать на выходе синтезатора удвоитель частоты.

Оффлайн Мельников Тимур

  • Administrator
  • Member
  • *****
  • Сообщений: 24
  • Репутация: +1/-0
    • E-mail
    • Личное сообщение (Оффлайн)
В процессе разработки высокостабильных кварцевых генераторов возникла необходимость точного измерения их параметров. Эти измерения производятся в двойной "П" цепи согласно международных стандартов IEC 444-1 и IEC 444-2. схема двойной "П" цепи следующая:



Правильно ли я понимаю. На вход мы подаем частоту с синтезатора, а на выходе меряем ее с помощью вольтметра. Если верно, то какие требования к вольтметру?

Оффлайн Новичёк

  • Administrator
  • Hero
  • *****
  • Сообщений: 15347
  • Репутация: +28/-108
    • Личное сообщение (Оффлайн)
Правильно ли я понимаю. На вход мы подаем частоту с синтезатора, а на выходе меряем ее с помощью вольтметра. Если верно, то какие требования к вольтметру?

Совершенно верно! Требований к вольтметру при простейшем способе измерений два:
1. Измеряемая частота должна попадать в рабочий диапазон вольтметра.
2. Вольтметр должен обладать достаточно высокой чувствительностью, порядка единиц - десятков милливольт. Это связано с тем, что кварц является нелинейной системой и его частота (последовательного резонанса) зависит не только от температуры, но и от рассеиваемой на нём мощности. Поэтому измерение параметров резонатора следует производить при минимально возможной мощности рассеивания на нём - порядка 10 микроватт.

К тому же, на самом деле метод измерения согласно IEC 444-1 и IEC 444-2 довольно сложен:



Генератор частоты или синтезатор (2) настроен на частоту, требуемую для того, чтобы фаза (4), измеренная между точками «А» и «В» векторным вольтметром или анализатором цепей (5), была равна нулю. Частота отображается частотомером (1) либо берётся непосредственно из значения частоты синтезатора и по отношению напряжений в точках «А» и «В» можно вычислить резонансное сопротивление кварцевого резонатора. Изменением уровня выхода генератора может быть приложен требуемый уровень возбуждения. Возможна частичная автоматизация этого процесса, если частота генератора управляется аналоговым или цифровым методом с помощью фазовой автоподстройки генератора по выходному напряжению, пропорциональному фазе (4).

Для упрощения процесса измерения двойная "П" цепь была доработана следующим образом: последовательно с резонатором включён конденсатор 20 пФ, NP0, ёмкость которого измерена с точностью ±0,5% и добавлены два высокочастотных реле типа РЭВ18. Одно реле закорачивает конденсатор 20 пФ, а второе реле - закорачивает резонатор, т.е. точки соединения R2, R3 и R4, R6 двойной "П" цепи.

Таким образом, не требуется фазометр или векторный вольтметр, можно использовать обычный, и процесс измерения сводится к следующим шагам:
1. Включается реле, замыкающие конденсатор 20 пФ. Частота синтезатора настраивается на максимум напряжения на выходе "П" цепи. Измеряется это напряжение.
2. Частота синтезатора изменяется в одну и в другую сторону от резонанса до уровня 0,707 от измеренного напряжения. Т.е. определяется полоса пропускания резонатора.
3. Выключается реле, замыкающее конденсатор 20 пФ и снова синтезатор настраивают на максимум напряжения. Эта частота будет выше, чем в п. 1.
4. Включается реле, замыкающее резонатор вместе с конденсатором 20 пФ. Снова измеряется напряжение на выходе "П" цепи.

Зная напряжения, измеренные на шаге 1 и 4, а также параметры "П" цепи, можно определить эквивалентное динамическое сопротивление резонатора.
Зная значение частоты на шаге 1 и ширину полосы пропускания на шаге 2, можно вычислить величину нагруженной (на сопротивление "П" цепи) добротности резонатора.
Зная значения частоты на шаге 1 и шаге 3 вычисляются остальные динамические параметры: Lд - динамическая индуктивность и Cд - динамическая ёмкость резонатора на основной частоте или соответствующей гармонике для гармониковых резонаторов.
Поскольку резонатор является ангармонической системой, т.е. у него существуют резонансы не только на основной механической частоте и её гармониках, но и на других, не кратных основной частоте, частотах. Параметры на этих ангармониках тоже можно измерить в этой схеме.
Ангармонические резонансы иногда используются в хитрых схемах: дело в том, что частота резонанса, который используется для генерации в прецизионных кварцевых генераторах, имеет экстремум в зависимости от температуры. И в термостатированных генераторах температуру устанавливают как раз в точке экстремума. Это позволяет снизить требования к точности системы термостатирования и повысить стабильность частоты от изменения внешней температуры. Т.е. в точке экстремума резонатор имеет нулевой температурный коэффициент частоты. Но ангармонический резонанс при этой температуре имеет не нулевой, а подчас и очень значительный температурный коэффициент частоты! Т.е. возбуждая резонатор сразу на двух частотах - рабочей и на ангармонической частоте, зная их соотношение в точке экстремума, можно с высокой точностью поддерживать температуру именно кварцевой пластины, а не по сути дела термодатчика, в обычных термостатах. Ведь в любом случае в любом термостате существуют хоть и незначительные, но тем не менее тепловые потоки в объёме термостата, что приводит к отличию температуры кварцевой пластины от температуры термодатчика, по которому и происходит регулирование температуры. Поскольку эти тепловые потоки зависят от внешних условий, то при постоянной температуре собственно термодатчика которая поддерживается схемой термостата, температура кварцевой пластины будет несколько изменяться, что неизбежно приведёт к изменению генерируемой частоты! А при стабилизации температуры по соотношению основной частоты и ангармоники, регулируется температура именно кварцевой пластины.
Кроме того, у кварцевых резонаторов есть такое явление, как медленное изменение частоты со временем - так называемое старение кварцевого резонатора. Однако для ангармоник и рабочей частоты эти изменения происходят по-разному! Если эта зависимость известна, то измеряя опять же соотношение рабочей частоты и ангармоники, можно эффективно компенсировать величину старения резонатора, повысив стабильность примерно на два порядка, т.е. довести стабильность частоты кварцевого генератора практически до стабильности квантовых стандартов частоты.
Как я уже ранее писáл, частота кварцевого резонатора зависит от величины рассеиваемой в нём мощности. Поэтому в высокостабильных генераторах стараются всемерно снижать эту мощность до уровня единиц и даже десятых долей микроватта и поддерживать её неизменной с помощью системы АРУ - автоматической регулировки уровня возбуждения. Так вот, зависимость частоты от уровня мощности для рабочей частоты и ангармоник, также разная! Т.е. опять же их соотношение можно использовать для поддержания постоянства рассеиваемой на резонаторе мощности.

Ой, что-то я, кажется, увлёкся.  :)

P.S. при необходимости могу выложить стандарты на измерение параметров резонаторов (на английском), поскольку в интернете они есть только за деньги: доллары или евро.

 

Последние сообщения на форуме: