і
ИЗМЕРЕНИЯ
I
соответственно, ограниченный диапа-
зон представления чисел. Например,
если накопитель фазы имеет разряд-
ность 24 бита, то код фазы может при-
нимать значения в диапазоне от
0
до
2 в степени 24 минус единица. При
формировании синусоидального сиг-
нала имеет смысл вычислять фазу
только в диапазоне от нуля до двух
пи. За пределами этого диапазона си-
нусоида периодически повторяется.
Поэтому диапазон изменения кода
фазы поставлен в соответствие с ди-
апазоном изменения фазы от нуля до
двух пи. Тогда частота сигнала (f) и
шаг ее перестройки (дельта f) соответ-
ственно равны:
f = APhase х fclk / 224, Af = fclk / 224,
где 0<APhase<224,
fdk - частота дискретизации.
Значение мгновенной фазы преоб-
разуется в мгновенное значение сину-
соидального сигнала с помощью пере-
кодировочной таблицы, хранящейся в
ROM. Код мгновенной фазы использу-
ется как адрес ROM, а выходной код
ROM представляет собой мгновенное
значение синусоидального сигнала.
Этот код подается на вход DAC. Нет не-
обходимости использовать все 24 бита
мгновенногочзначения фазы, потому
что в ошибке значений выходного сиг-
нала доминирует составляющая ошиб-
ки квантования DAC. Максимальное
требуемое число разрядов адреса ROM
- это число разрядов примененного
DAC плюс два. При дальнейшем уве-
личении объема ROM качество сигна-
ла практически не улучшается [1]. На
выходе DAC формируется синусои-
дальный сигнал, который после низко-
частотной фильтрации поступает на
выход генератора.
Такой принцип формирования сину-
соидального сигнала применяется в
DDS (Direct Digital Synthesizer), напри-
мер, AD9851 фирмы Analog Devices.
Однако, микросхемы DDS относитель-
но дороги. С появлением быстродей-
ствующих микроконтроллеров стало
возможным реализовать всю цифро-
вую часть такого генератора сигналов
программно. При этом стоимость гене-
ратора, при вполне приемлемых пара-
метрах, получается очень низкой. Один
из вариантов практической реализации
генератора описан ниже.
Принципиальная схема генератора
показана на рис. 3. Генератор состоит
из следующих узлов: основной платы
(Main Board), платы источника питания
(Power Supply), платы иедикатора и кла-
виатуры (MT10-T7-7S), узла передней
панели с регулятором уровня и аттеню-
атором (Front Panel).
Основой генератора является мик-
роконтроллер AT90S2313 фирмы Atmel.
Быстродействия этого контроллера
оказалось достаточным, чтобы про-
граммно реализовать 27-разрядный
накопитель фазы, работающий на час-
тоте 250 кГц. При этом шаг сетки равен
примерно 0,002 Гц. Реально использу-
ется шаг сетки 0,01 Гц, что позволило
ввести цифровую калибровку опорной
частоты.
Алгоритм целиком реализован
внутри прерывания таймера, которое
возникает с частотой 250 кГц, т.е. каж-
дые 4 мкс. Столь малое значение вре-
мени потребовало предельной оптими-
зации обработчика. Микроконтроллер
имеет память программ объемом
2
Кбайт. Четвертая часть этого объема
отведена для хранения таблицы функ-
ции sin. Для экономии места хранится
только 1/4 часть периода, так как фун-
кция sin обладает свойствами симмет-
рии. Однако в результате несколько ус-
ложнился алгоритм. Для увеличения
скорости работы в таблице хранятся
8
-
разредные отсчеты. Поскольку на 1/4
периода знак функции не меняется, это
позволило знаковый разряд в таблице
не хранить. Знак восстанавливается
программно, поэтому фактически на
ОАС
поступают 9-разрядные отсчеты.
В генераторе применен дешевый 10-
разрядныйСАС типа КР572ПА1, рабо-
тающий в 9-разрядном режиме. Мак-
симальная частота выходного сигнала
зависит от многих факторов, в том чис-
ле от характеристик 1_РБ. Можно ска-
зать, что в любом случае должно со-
блюдаться следующее неравенство: от->
ношение частоты дискретизации к мак-
симальной выходной частоте должно
бьяь больше четырех. Поэтому для дан-
ного генератора максимальная выход-
ная частота равна 50 кГц.
В разных четвертях периода сину-
са обработчик прерывания работает по
разным веткам. Очень важно при этом
обеспечить равное время выполнения
каждой ветки. Текст обработчика пре-
рывания приведен ниже.
Текст обработчика прерывания
Sum:
in
tsreg,SKEG
;Save status register
add
PhaseK,FreqK
;Phase(0. .31)=Phase(0. .31)+Freq(0. .31)
adc
PhaseL,FreqL
adc
PhaseM,FreqM
adc
PhaseN,FreqN
mov
ZL,PhaseM
;ZL <- Phase(16.
.23)
mov
ZH,PhaseN
;ZH <- Phase(24.
.31)
sbrc PhaseN,1
com
ZL
;ZL=!ZL if Phase.25=1
sbrc PhaseN,1
com
ZH
;ZH=!ZH if Phase.25=1
andi ZH, 0x01
;Table address is 9 bit width
ori
ZH,0x06
;Table base is 0x0600 (0x300*2)
1pm
,-rO <- table[Z]
sbrs PhaseN,2
rjmp ph ab
/jump if Phase.26=1
ph cd: com
rO
;r0=!r0
cbi
PORTO, MSB
;To minimize glitch, clear DAC.9,
out
PORTB.rO
;and then setup DAC.l - DAC.8
out
SREG,tsreg
,-Restore status register
reti
ph_ab: out
PORTB,rO
,-To minimize glitch, setup DAC.l - DAC.8,
sbi
PORTO,MSB
;and then set DAC.9
out
SREG,tsreg
/Restore status register
reti
Окончание в №3/2006
34
\
Радиолюбитель - 02/2006
предыдущая страница 33 Радиолюбитель 2006-02 читать онлайн следующая страница 35 Радиолюбитель 2006-02 читать онлайн Домой Выключить/включить текст