Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Радиолинк на СС1100
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
ivainc1789
Есть ли у кого-нибудь положительный опыт использования FOC (Frequency Offset Compensation) в трасиверах СС1100?
Я сделал радиолинк на этих трансиверах: один передает пакет другому и тот эхом отправляет пакет обратно. Частота посылок раз в секунду. Прием/передача на обеих платах индицируется светодиодами. Работает примерно на 10 метров при минимальной мощности передачи.
С выключенной FOC радиолинк нормально работает в течении нескольких дней без потери связи, а как только включаю FOC связь становится неустойчивой. Если FOCCFG=0x16, как отрекомендовала Smart RF Studio, проходит всегда около 20 линков и частоты видимо расстраиваются окончательно, связь пропадает. Если FOCCFG=0x36 как по дефолту, связь живет примерно до часа и отваливается. Делал все по аппликухе swra159.pdf, но там лишь общий принцип реализации. Ниже привожу функцию, которая корректирует чатоту:

Код
  
// производит компенсацию частот RX и TX
// на основании тайминга валидного пакета принимающей стороной
// выполнять только в IDLE, сразу после перехода RX -> IDLE
// отдельная статистика для каждой передающей стороны
void SynCalibrate(unsigned char TXnodeAdr,unsigned char Direction){
  if (Direction == Read){// аккумуляторы ухода частоты
    if(TXnodeAdr == cc1100adr01) dSynFreq_01 += cc1100readStatus(FREQEST);      
    return;  
  }
  if (Direction == Write){// подготовка к последующей скорректированной передаче
    if(TXnodeAdr == cc1100adr01)cc1100write(FSCTRL0,dSynFreq_01);
    return;
  }  
}


Так как слейвов всего один применение функции осуществляем просто:

Код
  
   SynCalibrate(cc1100adr01,Read);// чтение данных калибровки синтезатора
   SynCalibrate(cc1100adr01,Write);// запись данных калибровки синтезатора


Вызовы вставлены сразу после перехода чипа в IDLE после режима RX.

От себя: возможно все из-за сильного шума сэмплов корректировки и нужно ставить программный ФНЧ? И что-то я не до конца понимаю назначение этого бита FOC_BS_CS_GATE в регистре FOCCFG. Комментарий к этому биту на стр. 76 даташита:
If set, the demodulator freezes the frequency offset compensation and clock
recovery feedback loops until the CS signal goes high.

У меня пакет обрабатывается только когда он пришел с верной CRC. В момент прихода естественно трансивер находится в режиме приема и CS имеет высокий уровень. Тогда получается что данный бит практически отключает FOC? Или нет?
Так в какой момент содержимое "замораживается" и когда его нужно читать? Действительно, один из трансиверов предполагается довольно долго держать в режиме RX, CS высокий практически постоянно, трафика нет...
rx3apf
Цитата(ivainc1789 @ Jun 13 2008, 11:24) *
Есть ли у кого-нибудь положительный опыт использования FOC (Frequency Offset Compensation) в трасиверах СС1100?


Я использовал предложенное SmartRF Studio значение (1D, использую 250 и 500 kbps), описываемых проблем не наблюдал. Одно из устройств работает непрерывно на прием, другое - в режиме периодического опроса. В особенности функционирования не вникал, что софтина предложила, то и загрузил (тем более что и в старом даташите никаких подробностей не было)...
rx3apf
Цитата(ivainc1789 @ Jun 13 2008, 11:24) *
Есть ли у кого-нибудь положительный опыт использования FOC (Frequency Offset Compensation) в трасиверах СС1100?


Я использовал предложенное SmartRF Studio значение (1D, использую 250 и 500 kbps), описываемых проблем не наблюдал. Одно из устройств работает непрерывно на прием, другое - в режиме периодического опроса. В особенности функционирования не вникал, что софтина предложила, то и загрузил (тем более что и в старом даташите никаких подробностей не было)...
ivainc1789
Цитата(rx3apf @ Jun 13 2008, 12:30) *
Я использовал предложенное SmartRF Studio значение (1D, использую 250 и 500 kbps), описываемых проблем не наблюдал. Одно из устройств работает непрерывно на прием, другое - в режиме периодического опроса. В особенности функционирования не вникал, что софтина предложила, то и загрузил (тем более что и в старом даташите никаких подробностей не было)...


Странно. Я даже тестовый буфер в RAM разместил на 50 элементов и мониторил содержимое dSynFreq_01 с помощью Дракона и реально наблюдал как уходит частота... Просто не вижу разумного способа пофиксить и даже объяснить такой уход. А если перекомпилировать исходники с закомментированной функцией SynCalibrate то все работает на ура.

А у вас какой период опроса?

И еще. По приему пакета у вас трансивер автоматом выходит в IDLE или сделали вручную? Дело в том, что я понял документацию так, что даже при приеме пакета с неверной CRC трансивер выходит в IDLE (при дефолтных настройках в MCSM1).
ivainc1789
Вот две картинки. На первой мониторится прочитанное содержимое FREQEST. На второй накапливаемая корректировка (содержимое dSynFreq_01). Как видно, частота уходит. Что-то тут не так и вроде не сказать что сэмплы FREQEST сильно отличаются друг от друга...

Нажмите для просмотра прикрепленного файла



Нажмите для просмотра прикрепленного файла
_3m
Цитата(ivainc1789 @ Jun 13 2008, 11:24) *
Есть ли у кого-нибудь положительный опыт использования FOC (Frequency Offset Compensation) в трасиверах СС1100?

Зачем вам это ?
Сделайте компенсацию заводского отклонения частоты кварца и все.

Цитата
От себя: возможно все из-за сильного шума сэмплов корректировки и нужно ставить программный ФНЧ? И что-то я не до конца понимаю назначение этого бита FOC_BS_CS_GATE в регистре FOCCFG. Комментарий к этому биту на стр. 76 даташита:
If set, the demodulator freezes the frequency offset compensation and clock
recovery feedback loops until the CS signal goes high.
У меня пакет обрабатывается только когда он пришел с верной CRC. В момент прихода естественно трансивер находится в режиме приема и CS имеет высокий уровень. Тогда получается что данный бит практически отключает FOC? Или нет?

Когда установлен этот бит подстройка частоты выполняется только при наличии несущей, соответственно должен быть настроен порог обнаружения несущей. Когда бит сброшен подстройка частоты выполняется все время, но при отсутствии трафика демодулятор будет пытаться подстроиться под шум эфира, что несколько глупо.

Цитата
Так в какой момент содержимое "замораживается" и когда его нужно читать? Действительно, один из трансиверов предполагается довольно долго держать в режиме RX, CS высокий практически постоянно, трафика нет...

Читать нужно сразу после приема пакета с правильной crc. Программный фильтр нч обязателен, как сказано в swra159.
Почему у вас постоянно высокий CS при отсутствии трафика?

Цитата(ivainc1789 @ Jun 13 2008, 14:53) *
Вот две картинки. На первой мониторится прочитанное содержимое FREQEST. На второй накапливаемая корректировка (содержимое dSynFreq_01). Как видно, частота уходит. Что-то тут не так и вроде не сказать что сэмплы FREQEST сильно отличаются друг от друга...

Нажмите для просмотра прикрепленного файла



Нажмите для просмотра прикрепленного файла

Откуда у вас вылезают значения 0xdd и т.п. ? Это может быть почти предельным отклонением. На первой картинке таких больших чисел не видно.
ivainc1789
Цитата
Когда установлен этот бит подстройка частоты выполняется только при наличии несущей, соответственно должен быть настроен порог обнаружения несущей. Когда бит сброшен подстройка частоты выполняется все время,


Хм... Как это? На основании каких данных "все время"? По-моему, подстройка возможна только когда принимаются преамбула/syncword. Именно в этот момент демодулятор получает данные для расчета содержимого FREQEST.

Цитата
Почему у вас постоянно высокий CS при отсутствии трафика?


Один из трансиверов постоянно находится в режиме приема и ждет пакета. К трансиверу нет обращения в это время, прием пакета я веду по факту его прихода с верной CRC (IOCFG0 = 0x07). Поэтому на все время режима RX CS = 1;

Цитата
Откуда у вас вылезают значения 0xdd и т.п. ? Это может быть почти предельным отклонением. На первой картинке таких больших чисел не видно.


На второй картинке - аккумулятор отклонения, вот там и накапливается отклонение до значений 0xDD. Но я сейчас подумал, а разве этот аккумулятор не должен быть знаковой величиной? В swra159 у них почему то беззнаковое целое и у меня тоже. Может поэтому я и накапливаю отклонение в одну сторону?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.