Comments 11
Да, именно так, тактовая для ADC задаётся с помощью PLL внутри FPGA. Что касается DAC, то там статический преобразователь.
Фишка в том, что помимо фильтров, есть ещё как бы гетеродины со смесителями. Цель — сдвиг частоты. Вот из-за этого, в основном, проблема возникла. Плюс, когда полоса режектора 3 кГц, то 1 кГц отклонение, то это очень много.
А насчёт длины связей — полноте. При максимальном габарите платы 50 мм задержка от одного конца платы до другого составит 6.67E-10 с с учётом диэлектрической проницаемости диэлектрика. Это на 3 порядка меньше, чем длина волны на частоте 50 МГц.
Фишка в том, что помимо фильтров, есть ещё как бы гетеродины со смесителями. Цель — сдвиг частоты. Вот из-за этого, в основном, проблема возникла. Плюс, когда полоса режектора 3 кГц, то 1 кГц отклонение, то это очень много.
А насчёт длины связей — полноте. При максимальном габарите платы 50 мм задержка от одного конца платы до другого составит 6.67E-10 с с учётом диэлектрической проницаемости диэлектрика. Это на 3 порядка меньше, чем длина волны на частоте 50 МГц.
Когда я был юным и безусым, меня невероятно бесило и удивляло, что в даташитах сложных радиотехнических компонентов сперва идет уйма каких-то странных графиков, цифр и таблиц, а все самое важное — описание интерфейсов, структура устройства и т.п. — где-то дальше. С тех пор прошло много лет, меня, в силу специфики моей специальности, это продолжает слегка раздражать, но я понял отчего так ;)
интересный опыт, но мне кажется что вы не докрутили исследовательскую задачу по выяснению причины неработоспособности схемы до конца) и она вас еще догонит. сложно судить без детальной схемы, но обычно проблема такого рода не в 1kHz разбросе для 50MHz тактового сигнала. два места на которые я бы обратил внимание: формирование опорного тактового сигнала для ADC, DAC(используются делители в FPGA и потом сигнал с нужной частотой идет на микросхемы?) и синхронизация данных ADC->FPGA and FPGA->DAC(судя по тексту у вас есть длинные линии связи между ADC, DAC and FPGA). Удачи!
Да, именно так, тактовая для ADC задаётся с помощью PLL внутри FPGA. Что касается DAC, то там статический преобразователь.
Фишка в том, что помимо фильтров, есть ещё как бы гетеродины со смесителями. Цель — сдвиг частоты. Вот из-за этого, в основном, проблема возникла. Плюс, когда полоса режектора 3 кГц, то 1 кГц отклонение это очень много.
А насчёт длины связей — полноте. При максимальном габарите платы 50 мм задержка от одного конца платы до другого составит 6.67E-10 с с учётом диэлектрической проницаемости диэлектрика. Это на 3 порядка меньше, чем длина волны на частоте 50 МГц.
Фишка в том, что помимо фильтров, есть ещё как бы гетеродины со смесителями. Цель — сдвиг частоты. Вот из-за этого, в основном, проблема возникла. Плюс, когда полоса режектора 3 кГц, то 1 кГц отклонение это очень много.
А насчёт длины связей — полноте. При максимальном габарите платы 50 мм задержка от одного конца платы до другого составит 6.67E-10 с с учётом диэлектрической проницаемости диэлектрика. Это на 3 порядка меньше, чем длина волны на частоте 50 МГц.
к сожалению в статье не видно всего пути распространения тактового сигнала, поэтому мой мозг нарисовал проблему по пути OSC->FPGA->ADC->FPGA, вы к слову написали «связь не работает, либо работает на скоростях значительно ниже тех, которые должны были быть.» а это очень часто проблема таймингов. не знаком с MAX, но в таких системах нужно гарантировать что данные будут правильно приняты/отправлены относительно тактового сигнала: задержка в пути PLL->MAX(OUT_PIN) или доп инверсия тактовго сигнала(почему нет?), задерка в ADC по выдаче данных(почему нет?), задержка в линии(соединение проводом)) в FPGA. и это мы опускаем изменение таймингов при разных уровнях питания и температуры. прыг скок и у вас данные принимаются в режиме установления. Или это проблема с PLL который не мог нормально залочиться на сигнал от первого кварца(проблема с параметрами сигнала с кварца?). проверялось ли все это не видно. Без временых диаграмм и прямых измерений это все мои догадки. Надеюсь у вас действительно основная проблема была с разбросом генератора)
Судя по тому, что при конфигурации конкретного модуля при забивании частоты не 50000 кГц, а, скажем, 500010 кГц, а в другом модуле что-нибудь вроде 50003 кГц, и этим решалась проблема связи, дело было именно в точности частоты опорника.
Дело в несущей частоте.
А насчёт PLL, модули достаточно низкочастотные, тактовая ADC всего-навсего 4 МГц. На рабочих частотах, превышающих 1 МГц, модули не тестировались. Возможно, что на более высоких частотах могут вылезти вышеуказанные проблемы.
Дело в несущей частоте.
А насчёт PLL, модули достаточно низкочастотные, тактовая ADC всего-навсего 4 МГц. На рабочих частотах, превышающих 1 МГц, модули не тестировались. Возможно, что на более высоких частотах могут вылезти вышеуказанные проблемы.
Что то мне кажется проблему не нашли, а окостылили и проблема в другом. Без исходных данных судить трудно, но: во-первых отклонение 10кГц на 50МГц это 200ppm, просто так такое не получится, это или кривая схема генератора (например неверно выбраны емкость кварца и/или нагрузочные емкости) или кварцы с помойки или неотмытая плата.
Идем дальше, в статье упоминается, что даже 1кГц на 50МГц уже проблема, т.е. если рабочая частота ацп 4Мгц, то 50МГц напрямую не делится, пусть будет х2, потом делим на 25, получаем 4МГц, но здесь уже ошибка 80Гц при начальном отклонении 1кГц (20ppm). Не забываем, что это лишь опорная частота, и по отношению к сигналу ошибка будет еще меньше, для простоты, если сигнал 40кГц, отклонение будет +-0,8Гц, подробно объяснять как это получается сейчас не буду, можете проверить. Если ваша PSK не работает при таком отклонении, то это однозначная проблема алгоритма. PSK простая как лопата и так же легко моделируется, это не OFDM. Дальше два варианта, откуда ошибки: Простая ошибка — вычисляете делитель на лету, не умножая кварц, получаете делить 12.5, округляете = 12, ошибка уже огромная. Второй вариант — джиттер. На самом деле требования к джиттеру существенно выше, чем собственно к частоте, а у PLL ПЛИС с этим печально, у генераторов, как правило, джиттер нормируется и он обычно неплохой.
ЗЫ: ну и вообще, синхронизация или фапч по сигналу предусмотрена?
Идем дальше, в статье упоминается, что даже 1кГц на 50МГц уже проблема, т.е. если рабочая частота ацп 4Мгц, то 50МГц напрямую не делится, пусть будет х2, потом делим на 25, получаем 4МГц, но здесь уже ошибка 80Гц при начальном отклонении 1кГц (20ppm). Не забываем, что это лишь опорная частота, и по отношению к сигналу ошибка будет еще меньше, для простоты, если сигнал 40кГц, отклонение будет +-0,8Гц, подробно объяснять как это получается сейчас не буду, можете проверить. Если ваша PSK не работает при таком отклонении, то это однозначная проблема алгоритма. PSK простая как лопата и так же легко моделируется, это не OFDM. Дальше два варианта, откуда ошибки: Простая ошибка — вычисляете делитель на лету, не умножая кварц, получаете делить 12.5, округляете = 12, ошибка уже огромная. Второй вариант — джиттер. На самом деле требования к джиттеру существенно выше, чем собственно к частоте, а у PLL ПЛИС с этим печально, у генераторов, как правило, джиттер нормируется и он обычно неплохой.
ЗЫ: ну и вообще, синхронизация или фапч по сигналу предусмотрена?
Во-первых, дана ссылка на статью, где даны развёрнутые данные.
Во-вторых, применены не «кварцы», а готовые генераторы.
В-третьих, ошибки в относительных единицах при делении частоты остаются такими же.
В-четвёртых, это не просто QPSK. Нечто более сложное. Скажем, типа OFDM, но с поднесущими, формирующимися с помощью QPSK.
В-пятых, я написал, что использован готовый чип в приёмнике.
В общем, нужно внимательнее читать.
Ещё раз, если проблема решается прописыванием в настройках FPGA реальной частоты опорного кварцевого генератора, то это не ошибки деления, не джиттер, а именно проблема точности.
Во-вторых, применены не «кварцы», а готовые генераторы.
В-третьих, ошибки в относительных единицах при делении частоты остаются такими же.
В-четвёртых, это не просто QPSK. Нечто более сложное. Скажем, типа OFDM, но с поднесущими, формирующимися с помощью QPSK.
В-пятых, я написал, что использован готовый чип в приёмнике.
В общем, нужно внимательнее читать.
Ещё раз, если проблема решается прописыванием в настройках FPGA реальной частоты опорного кварцевого генератора, то это не ошибки деления, не джиттер, а именно проблема точности.
Во-первых, в статье по ссылке формулы без результатов и вывод неоформлен, пара графиков не в счет. Погружаться в это читателю было бы странно, тем более здесь говорится о PSK, в статье об OFDM, я ее воспринял как иллюстрацию. Далее, по статье по ссылке, конкретики нету, ежу понятно, что если Вы сдвигаете частоту на четверть расстояния между каналами все становится плохо, только чтобы как то это соотнести с Вашей статьей, надо знать расстояние между каналами.
Про генераторы да, не обратил внимания.
«В-третьих, ошибки в относительных единицах при делении частоты остаются такими же».
— Именно про это я и написал, что ошибка относительная — для несущей 500кГц даже 200ppm (странное что-то, я такого не встречал) это будут 100Гц. Если брать просто типичный сверхдешевый генератор, имеем 50ppm (2,5кГц на 50МГц) или 25Гц смещения на 500кГц несущей и проблем это точно не должно вызывать.
— ладно, приемник взяли готовой, фапч не умеет, значит явно должны быть прописаны требования к стабильности и точности частот. Тогда смысл ставить генератор где этот параметр не нормируется, а потом героически преодолевать? Тем более что у Вас все данные на руках. Типично ардуиновый в полохом смысле слова подход, подать на 3-вольтовый чип 5 вольт, а потом удивляться, почему не работает.
Ваша статья была бы полезная если бы были подробности в цифрах. Добавили бы промежуточные пункты, что будет если задать частоту от номинальной к реальной с шагом 1кГц и результат. А так просто описали очевидный факт, можно всю статью уложить в два приложения: «Генератор с нормированной точностью лучше, чем непонятно какой, а в системе, где точность критична, непонятный будет работать плохо или вообще не будет. Хороший генератор должен обладать точностью не хуже 20ppm».
Про генераторы да, не обратил внимания.
«В-третьих, ошибки в относительных единицах при делении частоты остаются такими же».
— Именно про это я и написал, что ошибка относительная — для несущей 500кГц даже 200ppm (странное что-то, я такого не встречал) это будут 100Гц. Если брать просто типичный сверхдешевый генератор, имеем 50ppm (2,5кГц на 50МГц) или 25Гц смещения на 500кГц несущей и проблем это точно не должно вызывать.
— ладно, приемник взяли готовой, фапч не умеет, значит явно должны быть прописаны требования к стабильности и точности частот. Тогда смысл ставить генератор где этот параметр не нормируется, а потом героически преодолевать? Тем более что у Вас все данные на руках. Типично ардуиновый в полохом смысле слова подход, подать на 3-вольтовый чип 5 вольт, а потом удивляться, почему не работает.
Ваша статья была бы полезная если бы были подробности в цифрах. Добавили бы промежуточные пункты, что будет если задать частоту от номинальной к реальной с шагом 1кГц и результат. А так просто описали очевидный факт, можно всю статью уложить в два приложения: «Генератор с нормированной точностью лучше, чем непонятно какой, а в системе, где точность критична, непонятный будет работать плохо или вообще не будет. Хороший генератор должен обладать точностью не хуже 20ppm».
Я не анализировал по-битно, где собака зарыта. А есть участки структуры, где рекурсия по-чёрному используется. Может статься, что в этом дело.
Насчёт полезности. Я предостерёг от использования нестабилизированных, нетримированных кварцевых генераторов в синтезированных на базе FPGA радиоустройствах. Собственно, об этом статья. Только факты. Чтобы не повторили моих ошибок.
Был другой аналогичный случай, но там всё лежало на поверхности.
Была разработана система на базе CC1101. На тулкитах всё работало прекрасно. При переносе на реальные устройства связь не работала. Для формирования выходных частот в CC1101 используются кварцевые резонаторы на 27 МГц с обвязкой. И вот эта обвязка в виде конденсаторов давала разброс в 1 кГц опорной частоты между устройствами (кварцевые резонаторы использовались заведомо качественные). Этого было достаточно, чтобы GFSK с полосой примерно 10 кГц не состыковывался.
Каким образом TI выставляет на тулкитах опорную частоту в «0» — это загадка.
Насчёт полезности. Я предостерёг от использования нестабилизированных, нетримированных кварцевых генераторов в синтезированных на базе FPGA радиоустройствах. Собственно, об этом статья. Только факты. Чтобы не повторили моих ошибок.
Был другой аналогичный случай, но там всё лежало на поверхности.
Была разработана система на базе CC1101. На тулкитах всё работало прекрасно. При переносе на реальные устройства связь не работала. Для формирования выходных частот в CC1101 используются кварцевые резонаторы на 27 МГц с обвязкой. И вот эта обвязка в виде конденсаторов давала разброс в 1 кГц опорной частоты между устройствами (кварцевые резонаторы использовались заведомо качественные). Этого было достаточно, чтобы GFSK с полосой примерно 10 кГц не состыковывался.
Каким образом TI выставляет на тулкитах опорную частоту в «0» — это загадка.
Sign up to leave a comment.
О важности правильного выбора опорного генератора для FPGA при разработке приложений для аудио, видео