Jump to content

    

Реализация GPS приемника

Не могу понять какая частота TCXO в этом проекте?

И частота среза указана 9 МГц.

 

Нужно сделать GPS/ГЛОНАСС RF приемник, поэтому интересует этот проект.

 

Николай.

 

В указанном по ссылке проекте частота TCXO=16МГц;

 

Т.к. исползьзуются обе квадратуры, то полоса оцифровываемого сигнала - 16МГц. При этом, чтобы фильтр ПЧ MAX2769 не обрезал полезный сигнал выбран его режим работы в виде фильтра НЧ с частотой среза 9 МГц. Т.е. относительно нулевой частоты сигнал простирается в положительную и отрицательную сторону на 9 МГц (т.е. полная полоса=18МГц).

Share this post


Link to post
Share on other sites

Понятно.

Значит, если я сделаю частоту опоры 26 МГц, я могу работать с ВТ кодом.

 

Николай.

 

Share this post


Link to post
Share on other sites

Получается, что так. Исходя из ИКД минимальная полоса для ВТ-кода получается 17.5325МГц. Только он же для военных и не рекомендован к применению без согласований...

Share this post


Link to post
Share on other sites

Прошу прощения, что несколько не в тему.

 

Ищу в Питере специалиста, который сделал сам работающий GPS модуль на базе чипсета.

Имеются вопросы, на которые я сам не могу найти ответа.

 

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

 

С уважением

Владимир

Share this post


Link to post
Share on other sites
Прошу прощения, что несколько не в тему.

 

Ищу в Питере специалиста, который сделал сам работающий GPS модуль на базе чипсета.

Имеются вопросы, на которые я сам не могу найти ответа.

 

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

 

С уважением

Владимир

укажите какой чипсет, протокол III, IV?

Share this post


Link to post
Share on other sites

Прошу прощения - только при личной встрече могу дать эту информацию.

Share this post


Link to post
Share on other sites
В указанном по ссылке проекте частота TCXO=16МГц;

 

Т.к. исползьзуются обе квадратуры, то полоса оцифровываемого сигнала - 16МГц. При этом, чтобы фильтр ПЧ MAX2769 не обрезал полезный сигнал выбран его режим работы в виде фильтра НЧ с частотой среза 9 МГц. Т.е. относительно нулевой частоты сигнал простирается в положительную и отрицательную сторону на 9 МГц (т.е. полная полоса=18МГц).

 

Сделал RF приемник на MAX2769 с выходами I и q. Коррелятор аппаратный на FPGA.

Никак не получается настроить ПЧ приемника на полосу +-9МГц.

АЧХ не соответствует тому что надо.

Хотя полосы 2,5, 4,2 и 8 МГц в режиме с нулевой ПЧ (zero-IF mode) те что надо.

Если не сложно, не могли бы Вы дать настройки каждого регистра MAX2769?

 

Николай.

Edited by Ynicky

Share this post


Link to post
Share on other sites

Использую примерно такие настройки:

 

//Enter here configuration code for max2769.

//max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x90;//LPF=18MHz!

max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x30;//BPF=4.2MHz!

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x50; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x81;//2bit

//max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x50; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x81;//1bit

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0xFE; max2769_conf_word[1] = 0xFF; max2769_conf_word[2] = 0x1D; max2769_conf_word[3] = 0xC2;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x9E; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x83;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x4A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1573MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x84; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1602MHz.

///max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x82; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1601MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x80; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1600MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7E; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1599MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7C; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1598MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1597MHz.

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x08; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x07; max2769_conf_word[3] = 0x05;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x80; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x06;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x10; max2769_conf_word[1] = 0x06; max2769_conf_word[2] = 0x1B; max2769_conf_word[3] = 0x27;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x1E; max2769_conf_word[1] = 0x0F; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x18;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x14; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x29;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

//Enter here configuration code for max2769. END.

 

 

А какая АЧХ у Вас получается? Чем не устраивает?

 

А какой коррелятор Вы используете? Что-то самописное? А на чем сделано управление коррелятором?

Share this post


Link to post
Share on other sites
А какая АЧХ у Вас получается? Чем не устраивает?

 

А какой коррелятор Вы используете? Что-то самописное? А на чем сделано управление коррелятором?

 

Коррелятор использую самодельный (написан на VHDL).

При работе с приемником на GP2015 работают как ГЛОНАСС

так и NAVSTAR. Только там у меня рабочая частота 25 МГц.

В корреляторе есть возможность работы и на частоте 26 МГц,

что используется в проекте с MAX2769.

Коррелятор управляется софтпроцессором.

АЧХ снимаю с помощью специальной программы.

Настроил MAX2769 следующим образом:

0xA2918F90

0x85592881 - sign & mag

0xFEFF1DC2

0x9EC00083

0x0C820D04 - 1601MHz, RDIV=26

0x08000705

0x80000006

0x10061B27

Два последних регистра не конфигурирую (оставляю значения по умолчанию).

Изменил Ваши настройки с учетом используемой у меня аппаратуры.

 

АЧХ прилагаю.

Выброс вблизи 0-й частоты - полагаю помеха от внутреннего VCO.

При изменении центральной частоты VCO меняется и положение этого выброса.

 

Николай.

post-5422-1314719237_thumb.jpg

Share this post


Link to post
Share on other sites

Это вы берете вторую ПЧ с gp2015 вместо третьей?

 

Ох, как-то непривычно выглядит спектр в данном режиме у вас. А не могли бы вы выложить запись отсчетов, по которым у вас строился спектр, чтобы я мог сравнить в своей привычной программе?

 

У меня спектр выглядит как в приложении.

 

Выбросы около нулевой частоты и прочие тоже обычно прослеживаются, если взять БПФ от выборки подлинее. С причиной пока не разобрался, но так как они заметно не влияют на результат обработки пока оставил все как есть...

 

Ой, очень любопытно узнать как отлаживается связка коррелятор+программа управления. Еще очень интересует вопрос как влияют задержки между моментом получения очередной выборки с коррелятора и моментом ввода новых команд коррелятору.

post-10006-1314739674_thumb.png

Share this post


Link to post
Share on other sites
Это вы берете вторую ПЧ с gp2015 вместо третьей?

 

Ох, как-то непривычно выглядит спектр в данном режиме у вас. А не могли бы вы выложить запись отсчетов, по которым у вас строился спектр, чтобы я мог сравнить в своей привычной программе?

 

У меня спектр выглядит как в приложении.

 

Выбросы около нулевой частоты и прочие тоже обычно прослеживаются, если взять БПФ от выборки подлинее. С причиной пока не разобрался, но так как они заметно не влияют на результат обработки пока оставил все как есть...

 

Ой, очень любопытно узнать как отлаживается связка коррелятор+программа управления. Еще очень интересует вопрос как влияют задержки между моментом получения очередной выборки с коррелятора и моментом ввода новых команд коррелятору.

 

В проекте RF приемника на GP2015 с выхода 1-й ПЧ идет ответвление

для ГЛОНАССа на квадратурный смеситель U2794B,

далее через RC ФНЧ - на АЦП AD9066 (используются 2 старших разряда).

Для NAVSTAR-а используется остальная часть GP2015. АЧХ прикрепил.

Так как схема довольно сложная, решил перейти на MAX2769.

Дамп памяти для построения спектра в MATLAB-е прикрепил.

Текс .m файла привожу ниже.

 

fid = fopen('f1601bw18.dmp','r');

[a,count] = fread(fid,'uint16');

fclose(fid)

c = log10(a)

plot(c,'r-')

title('GLONASS')

ylabel('Log10(P)')

xlabel('Frequency (0 = +13MHz, 2600 = 0MHz, 5200 = -13MHz (1 = 5000Hz))')

hold on

 

В состав моего коррелятора входят 2 синтезатора частот (для кода и несущей),

комплексный смеситель (на основе ПЗУ), накапливающие сумматоры-интеграторы

(за период 1 эпоха ПСП (1 мС)), а также счетчик местной шкалы времени.

Каждую эпоху процессором считываются получаемые на интеграторах и других

регистрах (псевдодальности, счетчик эпох и др.) отсчеты,

которые обрабатываются и используются для задания корректирующей информации

коррелятору. Минимальное время петли обратной связи - это 4 мС в фильтре

ФАП. Фильтр слежения за кодом замыкается раз в 20 мС.

Процессор можно применить общего назначения, только для вычисления координат

требуется плавающая точка.

 

Экспериментируя с MAX2769 установил, что нулевую центральную частоту

внутреннего фильтра ПЧ можно выставить записав все 1 в поле FCEN.

АЧХ для полосы 8 МГц с нулевой центральной частотой фильтра также вложил.

 

Николай.

post-5422-1314805344_thumb.jpg

post-5422-1314805355_thumb.jpg

post-5422-1314805371_thumb.jpg

f1601bw18.rar

Edited by Ynicky

Share this post


Link to post
Share on other sites

Ой, а это у вас не сам сигнал в файле, а уже его спектр?

 

Только я так и не понял у вас работает max2769 в режиме ГЛОНАСС или нет? В режиме lowpass filter mode (бит FCENX = 0), по-моему, значение бит FCEN не играет роли.

 

А что значит "Минимальное время петли обратной связи - это 4 мС в фильтре

ФАП"? Т.е. каждую мс вы считываете значения с интеграторов, но только каждые 4 мс используете их? А какую частоту выставляете для синтезатора несущей: соответствующую текущей расстройке или как-то хитро экстраполируете ее на время +4мс?

 

Я сам пытаюсь использовать коррелятор из проекта namuru: http://www.gmat.unsw.edu.au/namuru/

А управляющую программу osgps: http://sourceforge.net/projects/osgps/

Share this post


Link to post
Share on other sites
Ой, а это у вас не сам сигнал в файле, а уже его спектр?

 

Только я так и не понял у вас работает max2769 в режиме ГЛОНАСС или нет? В режиме lowpass filter mode (бит FCENX = 0), по-моему, значение бит FCEN не играет роли.

 

А что значит "Минимальное время петли обратной связи - это 4 мС в фильтре

ФАП"? Т.е. каждую мс вы считываете значения с интеграторов, но только каждые 4 мс используете их? А какую частоту выставляете для синтезатора несущей: соответствующую текущей расстройке или как-то хитро экстраполируете ее на время +4мс?

 

Я сам пытаюсь использовать коррелятор из проекта namuru: http://www.gmat.unsw.edu.au/namuru/

А управляющую программу osgps: http://sourceforge.net/projects/osgps/

 

Отсчеты с АЦП мне не доступны, да и памяти столько в FPGA нет, чтобы их сохранить.

А с MAX2769 я так и не могу принять ни одного спутника, ни в режиме ФНЧ ни в режиме ПФ.

Значения с интеграторов я использую каждую эпоху. Усредняю и подставляю в формулу фазовой автоподстройки.

Каждые 4мС записываю в управляющие регистры корректирующую информацию (новое значение фазы несущей).

Для неподвижного объекта это время можно увеличить. Для динамического (самолет) больше нельзя сделать.

Будет срыв автоподстройки.

А вообще коррелятор у меня позаимствован у GP2021 (идея). Только я его модифицировал для работы с широкой входной полосой несущего сигнала, чтобы обрабатывал весь спектр ГЛОНАСС.

И программа за основу взята у ф.Zarlink, которую они прилагают к своим отладочным платам.

 

Николай.

 

Share this post


Link to post
Share on other sites

Эх, а у меня никак не получается запустить ФАПЧ :( Все модели работают по записанным, а в железе пока никак :(

 

Проверил работу с вашей конфигурацией, подав в качестве опоры 26 МГц. У меня все заработало (записал данные с max2769 и далее обработал их на ПК). Вот еще раз пример двух рабочих конфигураций max2769:

 

Первая удачная конфигурация:

 

//Enter here configuration code for max2769.

max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x90;//LPF=18MHz!

//max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x30;//BPF=4.2MHz!

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x50; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x81;//2bit

//max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x50; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x81;//1bit

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0xFE; max2769_conf_word[1] = 0xFF; max2769_conf_word[2] = 0x1D; max2769_conf_word[3] = 0xC2;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x9E; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x83;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

///max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x4A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1573MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x84; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1602MHz.

max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x82; max2769_conf_word[2] = 0x0D; max2769_conf_word[3] = 0x04;//f_get=1601MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x80; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1600MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7E; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1599MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7C; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1598MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1597MHz.

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x08; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x07; max2769_conf_word[3] = 0x05;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x80; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x06;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x10; max2769_conf_word[1] = 0x06; max2769_conf_word[2] = 0x1B; max2769_conf_word[3] = 0x27;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x1E; max2769_conf_word[1] = 0x0F; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x18;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x14; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x29;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

//Enter here configuration code for max2769. END.

 

 

Вторая удачная конфигурация

 

//Enter here configuration code for max2769. TEST for electronix.ru!!!

max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x90;//LPF=18MHz!

//max2769_conf_word[0] = 0xA2; max2769_conf_word[1] = 0x91; max2769_conf_word[2] = 0x8F; max2769_conf_word[3] = 0x30;//BPF=4.2MHz!

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x59; max2769_conf_word[2] = 0x28; max2769_conf_word[3] = 0x81;//2bit

//max2769_conf_word[0] = 0x85; max2769_conf_word[1] = 0x50; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x81;//1bit

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0xFE; max2769_conf_word[1] = 0xFF; max2769_conf_word[2] = 0x1D; max2769_conf_word[3] = 0xC2;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x9E; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x83;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

///max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x4A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1573MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x84; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1602MHz.

max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x82; max2769_conf_word[2] = 0x0D; max2769_conf_word[3] = 0x04;//f_get=1601MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x80; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1600MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7E; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1599MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7C; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1598MHz.

//max2769_conf_word[0] = 0x0C; max2769_conf_word[1] = 0x7A; max2769_conf_word[2] = 0x08; max2769_conf_word[3] = 0x04;//f_get=1597MHz.

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x08; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x07; max2769_conf_word[3] = 0x05;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x80; max2769_conf_word[1] = 0x00; max2769_conf_word[2] = 0x00; max2769_conf_word[3] = 0x06;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

max2769_conf_word[0] = 0x10; max2769_conf_word[1] = 0x06; max2769_conf_word[2] = 0x1B; max2769_conf_word[3] = 0x27;

write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

///max2769_conf_word[0] = 0x1E; max2769_conf_word[1] = 0x0F; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x18;

///write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

///max2769_conf_word[0] = 0x14; max2769_conf_word[1] = 0xC0; max2769_conf_word[2] = 0x40; max2769_conf_word[3] = 0x29;

///write_cmd(udev, 0x0C, 0, 0, max2769_conf_word, 4);

//Enter here configuration code for max2769. END.

 

В приложении то же самое + картинки со спектром для обоих вариантов.

elex.zip

Share this post


Link to post
Share on other sites
Вторая удачная конфигурация

Сделал тоже самое у себя.

Интересные получились результаты.

 

Николай.

post-5422-1314993717_thumb.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this