Программирование MCS51 AN334: пример программирования синтезаторов Si57X, Si598, Si599 Fri, April 26 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AN334: пример программирования синтезаторов Si57X, Si598, Si599 Печать
Добавил(а) microsin   

Из-за того, что каждый из программируемых XO/VCXO генераторов Si570, Si571, Si598, Si599 имеет свою уникальную частоту кварца, необходимо выполнить вычисления по преобразованию частоты для каждой желаемой новой выводимой синтезированной частоты, и делать это нужно индивидуально для каждого экземпляра программируемого генератора. Чтобы упростить создание процедур вычислений и поиска коэффициентов, компания Silicon Laboratories предоставила следующий эталонный дизайн (пример программирования), написанный на языке ANSI C. Эти вычисления можно производить на разном оборудовании и программном обеспечении, потому что используется ANSI C, который легко портируется с одной платформы на другую. ANSI C поддерживается на большом количестве процессоров и микроконтроллеров, поэтому приведенный здесь код можно адаптировать практически для любой платформы.

Вычисления, необходимые для изменения выходной синтезируемой частоты, используют умножение и деление, требующие достаточной точности, чтобы гарантировать точное значение выходной частоты. В этом коде показаны 2 способа решения проблемы точности. Один из них использует арифметику плавающей запятой двойной точности (double floating point precision), что дает точность установки частоты лучше 5 ppm. Альтернативный способ вычислений использует арифметику плавающей запятой одинарной точности (single floating point precision), что дает точность установки частоты лучше 100 ppb. Последний метод можно использовать для процессоров, которые не поддерживают вычисления точности double floating point.

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

Если независимый процессор недоступен в конкретной разработке, то все вычисления реального времени для программирования синтезатора может сделать дополнительный MCU, такой как например C8051F301 от компании Silicon Labs. C8051F301 имеет размер корпуса 3x3 мм, и содержит достаточно памяти Flash (память программ) для этой реализации. Вход стробирования (куда подключена кнопка) C8051F301 используется для перехода по списку сохраненных частот, см. рис. 1, где показан общий алгоритм функционирования примера кода. Оба примера кода из Приложения A и из Приложения B позволяют обработать этот список частот, однако отличие в том, что код Приложения B сохраняет последнюю выводимую частоту в энергонезависимой памяти Flash, чтобы эта частота автоматически устанавливалась, когда происходит новое включение питания (или сброс). Весь эталонный дизайн был реализован на оценочной плате с установленным процессором C8051F301.

Примечание: код Приложения A и Приложения B с русскими комментариями можно скачать по ссылке [4].

Микросхема Si570 [2] это программируемый через I2C синтезатор XO, который совместим по внешним выводам и внутренним регистрам с синтезатором Si598. Микросхема Si571 это синтезатор VCXO, который совместим по внешним выводам и внутренним регистрам с синтезатором Si599. Код, приведенный в этом апноуте, позволяет использовать любой из этих синтезаторов, в зависимости от требований техзадания. Более точные параметры по диапазону частот, стабильности и джиттеру см. в даташите на каждый используемый синтезатор.

Компилятор. Этот эталонный дизайн требует использования вычислений с плавающей запятой одинарной точности (single-precision floating point). Чтобы снизить цену конечной системы, которая может возрасти из-за требований к точности вычислений, применен бесплатный компилятор SDCC [3]. Готовый двоичный код для прошивки в память программ C8051F301 (Flash), а также исходный код можно загрузить с сайта Silicon Labs (также см. ссылку [4]). Апноут "AN198: Integrating SDCC 8051 Tools into the Silicon Labs IDE" описывает процедуру привязки компилятора SDCC к среде разработки. Этот код также был успешно протестирован с полной версией компилятора Keil. Апноут "AN104: Integrating Keil 8051 Tools into the Silicon Labs IDE" описывает процедуру встраивания компилятора Keil в среду разработки.

Особенности C8051F301. Поскольку требуется обмен данными с синтезатором по шине I2C, код использует аппаратуру I2C, имеющуюся в MCU. Когда код портируется на другие процессоры, необходимо определить, как обеспечить коммуникации I2C на этом другом оборудовании. Прерывания I2C и функции в этом коде скорее всего не будут обрабатываться на других процессорах, и их потребуется переписать. Обычно соответствующий код для поддержки I2C предоставляется производителем процессора. Код I2C, используемый в этом эталонном дизайне, был скопирован из апноута "AN141: SMBus Communication for Small Form Factor Device Families" (см. пример общения с EEPROM).

Реализация. В эталонном дизайне реализованы необходимые операции чтения/записи из/в синтезаторы Si57x/598/599 и поиск коэффициентов выходного делителя (HS_DIV и N1), а также вычисления коэффициентов для настройки нового коэффициента умножения опорной частоты (reference frequency multiplier, RFREQ). Приведено 2 примера кода: один (Приложение A) всегда запускается (после сброса или включения питания) с жестко запрограммированной в коде частоты по умолчанию, а другой пример (Приложение B) будет запускаться с последней выведенной частоты. После включения питания или сброса MCU читает начальную конфигурацию из Si57x/598/599, и затем ждет подачи сигнала строба (нажатия кнопки). Изначально синтезатор Si57x/598/599 выводит свою частоту запуска, как это было определено в заказе на этот синтезатор (если используется программа из Приложения A), или последняя выводимая частота перед сбросом или выключением и включением питания (если используется программа из Приложения B). После получения сигнала строба MCU вычисляет новую конфигурацию для новой частоты и загружает соответствующие ей значения регистров в Si57x/598/599 через интерфейс I2C. Оба примера кода просто циклически с каждым стробом проходят по всему массиву частот, находящемуся в коде программы (см. таблицу 1). Если нужны другие частоты, просто отредактируйте код, чтобы поменять значения частот в этом массиве.

Таблица 1. Жестко закодированные в программе частоты (МГц).

27.000000
61.440000
74.175824
74.250000
100.000000
106.250000
125.000000
133.333300
155.520000
156.250000
161.132813
164.355469
167.331646
167.410714
172.642300
173.370747
176.095145
176.838163
200.000000
212.500000
368.640000
491.520000
622.080000
625.000000
644.531250
657.421875
666.514286
669.326580
672.162712
690.569196
693.482991
704.380580
707.352650
800.000000
933.120000
1000.000000
1400.000000

Примечание: микросхемы Si598/599 ограничены максимальной частотой 525 МГц.

Из-за того, что C8051F301 поддерживает арифметику плавающей запятой только одинарной точности, в этом эталонном дизайне была изменена рекомендуемая в даташите на синтезатор Si570 процедура вычислений [2], чтобы ограничить потерю точности (используется тип данных unsigned long). Изначально были взяты стандартные формулы:

       fXTAL · RFRWQ
fOUT = --------------
        HSDIV · N1

и

           fDCO
RFREQNEW = ------
           fXTAL

затем во вторую формулу была подставлена частота кварца fXTAL, и получилось следующее:

            fOUT1      N11      HSDIV1
RFREQNEW = (-----) · (----) · (-------) · RFREQOLD
            fOUT0      N10      HSDIV0

Изначальные вычисления сохранены максимально близко к оригинально рекомендуемым, в результате получилась очень малая потеря точности. В зависимости от того, значительно или мало частота запуска (startup output frequency, fOUT0) отличается от новой выходной частоты, могут понадобиться вычисления множителей.

AN334 Reference Design Usage Model fig01

Рис. 1. Модель использования демонстрационного примера.

Аппаратура. Для демонстрации работы кода использовалась печатная плата, схема которой показана на рис. 2. Переход MCU к новой частоте из списка происходит по сигналу от нажатия кнопки (SW1). Светодиоды состояния (status LEDs) последовательно зажигаются, чтобы показать индекс текущей выбранной частоты таблицы.

AN334 PCB Schematic fig02

Рис. 2. Схема печатной платы.

Этот эталонный дизайн был протестирован на синтезаторе Si570. Код для поддержки Si598 может потребовать незначительных изменений, потому что значение RFREQ синтезатора Si598 имеет не нулевые биты выше 34-й цифры.

[Словарик]

MCU MicroController Unit, микроконтроллер.

ppb Parts Per Billion, т. е. количество единиц на миллиард таких единиц.

ppm Parts Per Million, т. е. количество единиц на миллион таких единиц.

XO/VCXO здесь XO означает кварцевый генератор, VCXO означает управляемый напряжением кварцевый генератор.

[Ссылки]

1. AN334 Si57X/598/599 ANSI C Reference Design with optional Non-Volatile Output Frequency site:silabs.com.
2. Si570, Si571: программируемый через I2C генератор XO/VCXO.
3. 170301stc15w404as-clock.zip - в этом архиве можно найти компилятор SDCC.
4. 180530Si570x-appnotes-datasheets.zip - апноуты, даташиты, исходный код примеров программирования синтезаторов Si57x.

 

Добавить комментарий


Защитный код
Обновить

Top of Page