Pull to refresh
296
147

Программист микроконтроллеров

Просто хотел поэкспериментировать с электроникой, с ПЛИС. Сам ресивер работать отказывался, ощущение, что там прошивка микроконтроллера слетела.

"Может, просто в JTAG цепочку объединили микросхемы?"
На схеме TDO в воздухе висит. Добраться до G2, возможно, и можно , а вот надежно подключится, ничего не закоротив - проблематично.

Спасибо за статью!
В свое время разбирал ресивер Yamaha RX-V671. В нем была довольно навороченная плата цифровой обработки сигнала. Удивило то, что в Service Manual на ресивер была приведена полная его схема!
Структурная схема платы:

Тут и ПЛИС - Cyclone II, и микроконтроллер, мощный Backfin, DSP, видео АЦП/ЦАП.

Вот только у ПЛИС JTAG не был выведен до конца:

А у микроконтроллера прошивка была защищена паролем, и ее даже стереть нельзя было.
Насколько я понял, прошивку в ПЛИС загружал именно микроконтроллер.
Вроде бы пароль можно узнать - https://habr.com/ru/articles/469085/
но интерес к плате как-то уже пропал...

Такое раньше использовали в авиации - https://apex.aero/articles/sound-tube-surprising-history-airline-headsets/
А сейчас используют в МРТ - https://scansound.com/mri-safe-stethoscope-style-pneumatic-headphone/

Ага , я специально погуглил, в подобных наушниках использовался чипсет TA2061AF + TA2056F.
Несущая частота - 2.3/2.8Мгц для левого/правого канала. Модуляция - частотная.

Если хочется с передачей данных в цифровом виде поэкспериментировать, то лучше IRDA использовать.

Изменение частоты имитируется через смену фазы.
Ниже я показал пример изменения фазы в процессе формирования данных несущей частоты.
Можно видеть, что в результате такого изменения одна выборка как бы пропускается, если сравнивать данные до/после:

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

Интересно, как предполагается жестко удерживать все 5 спутников на заданном расстоянии друг от друга?
Это же интерферометр, точность нужна очень высокая.

У DDS генераторов есть аккумулятор фазы, и случае готовых микросхем часто его стартовое значение можно задавать.
Есть и двухканальные DDS.

В книге [3] фазовым дискриминатором называют ту логику, что поддерживает слежение за фазой несущей.
E-P-L там называют "delay lock loop discriminator".

Вы читали часть статьи "Перемножение и суммирование"?
Она идет явно раньше, чем описание трекинга.

Ваша картинка мне кажется перегруженной, MCU все-таки не ПЛИС, он делает вычисления последовательно.
Так что вычисление E-P-L - это просто вызов одной и той же функции трижды с разными аргументами.

uint16_t offset_p = code_phase_fine / GPS_FINE_RATIO;//present
uint16_t offset_e = offset_p - 1;//early
uint16_t offset_l = offset_p + 1;//late

...

gps_correlation_iq(tmp_prn_data, tmp_data_i, tmp_data_q, offset_e, &IE, &QE);
gps_correlation_iq(tmp_prn_data, tmp_data_i, tmp_data_q, offset_p, &IP, &QP);
gps_correlation_iq(tmp_prn_data, tmp_data_i, tmp_data_q, offset_l, &IL, &QL);

Если я не ошибаюсь, в случае свертки одна из функций зеркально отражается:
https://ru.wikipedia.org/wiki/Свёртка_(математический_анализ)
"Операцию свёртки можно интерпретировать как «схожесть» одной функции с отражённой и сдвинутой копией другой."

Да, Killdozer как-то больше впечатления производит. И на практике себя проявил...
А еще были кинетические шагающие скульптуры Тео Янсена.

Что-то я не понял вопроса.
Могу только это порекомендовать - https://en.wikipedia.org/wiki/Gold_code
Опять же, в статье есть ссылка - https://www.wasyresearch.com/generating-gps-l1-c-a-pseudo-random-noise-prn-code-with-matlab-and-c-c/

Замечу, что в процитированной части теста речь идет только про процесс формирования данных несущей частоты.
Код: https://github.com/iliasam/STM32F4_SDR_GPS/blob/develop/Firmware/project_single_sat/GPS/gps_misc.c#L325
Можно видеть, что внутри функции значение фазы берется из значения аккумулятора фазы.
https://ru.wikipedia.org/wiki/Цифровой_вычислительный_синтезатор


В коде приемника для одного спутника я оставил тестовый код, который просто заполняет бинарными данными sin/cos массив, это тот самый Carrier NCO:
https://github.com/iliasam/STM32F4_SDR_GPS/blob/develop/Firmware/project_single_sat/GPS/gps_misc.c#L482

Из картинки видно, что прямого управления значением фазы у меня нет, есть управление частотой NCO, которое влияет на фазу.
https://ru.wikipedia.org/wiki/Фазовая_автоподстройка_частоты
После того, как Carrier NCO отработал, значение аккумулятора фазы нужно сохранить, а потом загрузить его вновь в Carrier NCO перед началом следующего вычисления.
И да, изначально при старте трекинга фаза неизвестна, на IQ диаграмме при этом будет круг.

Это в каком "рядовом" STM32  есть CANFD?

"Протокол SPI — это синхронный серийный интерфейс"
Так протокол или интерфейс? ))

IDC - прямо подумал, что пропустил что-то, а речь про I²C.

За год у автора 180 статей и 30 комментариев))

У меня SPI настроен на прием в режиме LSB-first, 0x33 = 0b00110011, так что минуса перед sin/cos не нужны.

""0" заменяем на "-1" а "1" на что заменяется?"
Если в тексте не указано, что нужна замена, значит она не нужна...

SPI+DMA работают действительно так.
Только DMA передает 16-битные слова,
так что счетчик DMA считает: 0 -> 1023 -> 2046 -> 0

"Вся обработка по вычислению координат укладывается в 1ms?"
В статье я все описал - начиная с заголовка "Определение координат на микроконтроллере"

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

Information

Rating
22-nd
Location
Москва и Московская обл., Россия
Registered
Activity