Микропроцессорные синтезаторы сетки частот радиоприемных устройств мв-дкм диапазона. Программа расчета коэффициентов деления по алгоритму Евклида

УДК 621.396.62

МИКРОПРОЦЕССОРНЫЕ СИНТЕЗАТОРЫ СЕТКИ ЧАСТОТ РАДИОПРИЕМНЫХ УСТРОЙСТВ МВ-ДКМ ДИАПАЗОНА. ПРОГРАММА РАСЧЕТА КОЭФФИЦИЕНТОВ ДЕЛЕНИЯ ПО АЛГОРИТМУ ЕВКЛИДА

© П.А. Федюнин, И.Т. Степаненко

Fedyunin Р.А., Stepanenko I.Т. Frequency net microprocessor synthesisers of metre- and decametre-range radio-receiving units. A programme for calculating coefficients of division using the Euclidus algorithm. The article contains a detailed account of the issue.

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

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

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

Рассмотрим в качестве примера синтез частоты в диапазоне 12,8... 14,9999 МГц при частоте опорного

генератора/0 = 5 МГц с шагом сетки частот 10 Гц. Выберем из этой сетки случайную частоту /,ых1 =

N

= 129877430 Гц. Для схемы рис. 1 /иых = А/^т = — /0 .

т

При шаге сетки 10 Гц коэффициенты деления должны быть N = 1298743 и т = 500000. Частота сравнения в рассматриваемой схеме оказывается очень малой (10 Гц), а коэффициенты деления очень велики, так что делители получаются весьма сложными и длительность переходных процессов велика.

Поставленную задачу можно решить и по-другому, если заменить требуемое отношение коэффициентов И/т достаточно близким к нему другим. Например, если выбрать УУ= 9299, а т = 3580, то/ВЬ|Х1 = 129877430, 16759 Гц и отличается от требуемого значения всего на 0,16759 Гц. Относительная погрешность не превышает 1,29-10 8, т. е. имеет такой же порядок, как погрешность хорошего опорного генератора. В ряде случаев такая погрешность вполне допустима. При данном техническом решении требуется частота сравнения, приблизительно равная 1,396 кГц, а коэффициенты деления не превышают 10 000.

Если выбрать данную случайную величину из требуемого диапазона, например/ЬЪ1х2 = 13564570 Гц (/^Ь1х2 = 1356457

_ г ^ то дЛЯ нее с погрешностью не Оолее

500000

2,44-10~8 можно принять ^ых2:

5651

2083

fo = 13564570,33125

Гц. Частота сравнения теперь приблизительно равна 2,4 кГц, а коэффициенты деления опять не превышают 10000.

УГ

0Г

г л /о /-11 и

'"Ч./Т

ФИ ДПКД1 ИФД

Команды от внешних устройств на

формирование требуемой частоты

'•тт 'птах

ДПКД2

/

1

/!

тіп ~1утах

Микропроцессор

ИФД1

а)

ДПКД1

Команды от внешних

устройств на _______„

формирование требуемой частоты

УГ2 ДПКД4

~Ъ\~

Г

ДЩЦЗ

Микропроцессор

б)

Рис. 2. Схема синтезатора с микропроцессором

Частоты сравнения, необходимые для формирования /вых1 и /вых2> действительно оказываются неодинаковыми. Поэтому и между ОГ и ИФД должен быть включен ДПКД (рис. 2а). Выбор коэффициентов деления обоих делителей, необходимых для получения требуемых частот, сложен, и только использование микропроцессора позволит осуществить его достаточно быстро и без излишнего усложнения системы управления.

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

668481 1356457

ственно нулевое, первое, второе и т. д. приближения для величины Ы/т. Например, для частоты/вых1

2 3 5 13 200 213 413 9299 19011 Т’ТТТ’ТГ’ 82 ’159’3580’ 7319 ’ 66332 85343.151675.1298743. 25537’32856’ 58393 ’ 500000 ’

для частоты/вых2

2 3 8 19,274 567.2542 5651.19495 7’ГЗ’ 7 ’10Г209’ 937 ’2083’ 7181 ’

246407 500000

В микропроцессор необходимо ввести данные о требуемом значении выходной частоты синтезатора и допустимых значениях N и т.

В ряде случаев рассмотренная простая схема цифрового синтезатора с микропроцессором (см. рис. 2а) не обеспечивает требуемой точности выходной частоты. Для устранения этого недостатка схему усложняют - используют два кольца ИФАП (рис. 26). Частота выходных колебаний в такой схеме

/ =— / J вых > о

пт

Микропроцессор и в этой схеме по команде от внешних устройств на формирование требуемой частоты /вых определяет оптимальные коэффициенты деления делителей ДПКД1 - ДПКД4 при допустимых значениях коэффициентов п, Ы,т,Ьц к.

Нами разработана программа расчета коэффициентов деления микропроцессорного синтезатора частот по алгоритму Евклида, позволяющая с заданной точностью рассчитать коэффициенты деления ДПКД микропроцессорного синтезатора сетки частот (прилож.1).

Поступила в редакцию 4 ноября 2004 г.

Приложение 1

Программа расчета коэффициентов деления микропроцессорного синтезатора частот

по алгоритму Евклида

unit Unitl;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForml = class

Buttonl: TButton;

Editl: TEdit;

Label3: TLabel;

ListBoxl: TListBox;

ListBox2: TListBox;

Button2: TButton;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Label1: TLabel;

Edit6: TEdit;

Label2: TLabel;

Li stBox3: TListBox;

ListBox4: TListBox;

procedure ButtonlClick(Sender: TObject); procedure Button2Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

Forml: TForml; implementation {$R *.DFM}

// Программа расчета коэффициентов деления микропроцессорного

// синтезатора частот по алгоритму Евклида

// Ермаков К.С. Авиационные системы связи. М.: Монино, 1992.

procedure TForml.ButtonlClick(Sender: TObject);

Var

A,B,F:Array[0..12] of Real; dF,Fmid,С,D:Array [0 . .12] of Real; i,j,n,k,m;integer;

FLAG:boolean; f_min, f_max, F0 : Real ;

FI,Ff,Dd:real;

new_freq,freq_srav:real;

a_l, b__l, d_l, dF_l, dF_dop : real;

begin

(Диапазон синтезируемых частот синтезатора}

f_min:= 1.5*1000000; f_max:=31.5*1000000;

FLAG:-False;

//FI:=2000000;

FI:= StrToFloat(editl.text);

If ((Fl<f_min) OR (Fl>f_max)) Then FLAG:=True;

If (FLAGoTrue) Then Begin

F0:=5000000; {Частота опорного генератора Гиацинт-М}

C[0]:=F1/F0; {Исходное отношение коэффициентов деления}

т? Гл1 . /т?г\\ .

с [_ и j ; = un*—i v с х / с v / ,

А [0] :=F[0] ;

В [0] : =1 ;

//

//

11

П

II

//

II

//

//

//

//

//

//

ListBoxl.Clear;

ListBox2.Clear;

ListBoxl.Items.Add('A'+FloatToStr(0) + ' = 1+FloatToStr (A [0] )) ;

ListBox2.Items.Add('В'+FloatToStr(0)+'=1+FloatToStr(B[0]));

For n:=1 to 12 do Begin

C[n] := (1/(C[n-1] -F[n-1] ) ) ;

F [n] : = Round (C [n] ) ;

If (nol) Then Begin

a_l : =A [n - 1 ] ; b_l:=B[n-l];

A [n] : =A [n-1] *F [n] + A [n-2] ;

B[n] :=B[n-l] *F[n] + В [n-2] ;

D[n] : =F1 -F0*A [n] /В [n] ;

Fmid [n] :=F1/A[n] ; dF [n] : =Abs (D [n] ) /FI ;

ListBoxl.Iterns.Add('A1+FloatToStr(n) + 1 = 1+FloatToStr(abs(A[n])));

ListBox2.Items.Add(1В'+FloatToStr(n) + 1 = 1+FloatToStr(abs(B [n] ) )) ;

ListBoxl.Items.Add(10П dF1+FloatToStr(n)+1='+FloatToStr(dF[n]));

ListBox2.Items.Add('0П dF1+FloatToStr(n)+'='+FloatToStr(dF[n])); writeln ( 1A' , n, 1 = 1 , abs (A [n] ) ) ; writeln('В',n,' = ',abs(B[n]));

writeln(1 Относительная погрешность dF',n, 1 = 1,dF[n] ) ;

if (Abs(D[n])<0.00001) Then FLAG:=True;

If (A[n]>9999) OR (B [n]>9999)Then FLAG:=True;

If (Abs(D[n] )<0 . 00001) Then FLAG:=True;

end;

If (FLAG=True) Then Break;

If (n=1) Then Begin

A [ 1 ] : =A [ 0 ] *F [1] + 1;

В [1] :=F [n] ;

Dd:= FI - F0 *A[1]/В[1] ; dF[1]:=Abs(Dd)/FI;

ListBoxl.Items.Add('A1+FloatToStr(1) + 1 = '+FloatToStr(abs(A[1]))) ;

ListBox2.Items.Add(1В 1+FloatToStr(1) + 1 = ’+FloatToStr(abs(B[1]))) ;

ListBoxl.Items.Add(10П dF1+FloatToStr(1)+1=’+FloatToStr(dF[1]));

ListBox2.Items.Add(10П dF1+FloatToStr(1)+1=’+FloatToStr(dF[1])); writeln(1 A1,1, ’ = 1,abs(A[1])) ; writeln ( ’ В 1 , 1, 1 = ’ , abs (B [1] ) ) ; writeln(1dF1,1,1 = 1,dF[1]); end;

end;

end;

If b_l<>0 Then d_l : =Fl-F0*a__l/b_l ; dF_l:=Abs(d_l)/FI;

edit2.text := 'a_l = ' +floattostr(a_l)+ ' b_l = ' +floattostr(b_l) +'dF_l= ' +floattostr(dF_l); edit3.text := 'Абс.погр.=' + floattostr(d_____1); {для определения знака погрешности}

dF_dop:=Fl*0.0000001;

edit4.text := 'Абс.погр.(доп)=1 + floattostr(dF_dop); {}

new_freq := FI + dF_dop;

edit5.Text:=floattostr(new_freq);

ВТОРОЕ КОЛЬЦО

Частота на выходе new_freq Частота сравнения freq_srav := new_f req*b_l/a_l ; edit6.Text:=floattostr(freq_srav);

FI := new_freq;

FI := freq_srav;

If ((Fl<f_min) OR (Fl>f_max)) Then FLAG:=True; FLAG:=False;

If (FLAG<>True; Then Begin

F0:=5000000; {Частота опорного генератора Гиацинт-М)

C[0]:=F1/F0; {Исходное отношение коэффициентов деления}

F[0] :=Round(F1/F0) ;

А[0] : =F [0] ;

В[0]:=1;

ListBox3.Clear;

ListBox4.Clear;

ListBox3.Items.Add(1 A1 +FloatToStr(0) + ' = '+FloatToStr(A[0])) ;

ListBox4.Items.Add(1В'+FloatToStr(0) + ' = 1+FloatToStr(B[0])) ;

For n:=l to 12 do Begin

C[n] :=(l/(C[n-l]-F[n-l]));

F [n] : =Round ( С [n] ) ;

If (nol) Then Begin

a_l : =A [n- 1 ] ; b_l:=B[n-l] ;

A [n] : =A[n-l] *F [n] + A[n-2);

В [n] : =B [n - 1] *F [n] + В [n - 2 ] ;

D [n] : =F1-F0*A [n] /В [n] ;

Fmid [n] : =F1/A [n] ; dF [n] : =Abs (D [n] ) /FI;

ListBox3.Items.Add(1 A'+FloatToStr(n) + ' = '+FloatToStr(abs(A [n] )) ) ;

ListBox4.Items.Add{'В'+FloatToStr(n)+'='+FloatToStr(abs(В[n])));

ListBox3.Items.Add('ОП dF'+FloatToStr(n)+'='+FloatToStr(dF[n]));

ListBox4.Items.Add('ОП dF'+FloatToStr(n)+1='+FloatToStr(dF[n]));

// writeln(1A1,n, 1 = ',abs(A[n])) ;

// writeln ('В 1 , n, 1 = ' , abs (B [n] ) ) ;

// writeln('Относительная погрешность dF',n,1 = ’,dF[n]);

II if (Abs(D [n])<0.00001) Then FLAG:=True;

If (A[n]>9999) OR (B[n]>9999)Then FLAG:=True;

If (Abs(D[n])<0.00001) Then FLAG:=True;

*

end;

If (FLAG=True) Then Break;

If (n=l) Then Begin

A [1] : =A [0] *F [1] + 1;

B[l] : =F [n] ;

Dd:=Fl - F0*A[1]/В [1] ; dF [1] : =Abs (Dd) /FI;

ListBox3.Items.Add('A1+FloatToStr(1) + 1 = 1+FloatToStr(abs(A[1]))) ;

ListBox4.Items.Add(1 В'+FloatToStr(1) + 1 = '+FloatToStr(abs(B[1]))) ;

ListBox3.Items.Add('0П dF'+FloatToStr(1)+'=1+FloatToStr(dF[1]));

ListBox4.Items.Add(10П dF1+FloatToStr(1)+1=1+FloatToStr(dF[1]));

// writeln('A1 ,1, ' = ',abs(A[1])) ;

// writeln('В1, ' = 1,abs(B [1]));

IJ writeln (' dF 1, 1 = 1 , dF [ 1 ] ) ;

end;

end;

end;

end;

procedure TForml.Button2Click(Sender: TObject); begin

close; end;

end.