先日検討していたSi5351Aの周波数設定方法を実際に試してみた。 ただし、後で気が付いたが、分周値を実数にすると、位相調整ができなくなるので、結局Quadrature VFOとしては使えないという結果になった。
一応実験結果だけ記録しておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
void SetFreq(uint32_t freq) { uint32_t pllFreq; uint32_t xtalFreq = XTAL_FREQ; uint32_t l; float f; uint16_t mult; uint32_t num; uint32_t denom; uint16_t divid; //外部のジョンソンカウンタのため4倍 freq = freq * 4; //逓倍値(整数)を求める divid = 900000000 / freq; pllFreq = divid * freq; mult = pllFreq / xtalFreq; //VCO周波数(XTAL_FREQの整数倍)を求める pllFreq = mult * xtalFreq; //分周値の整数部分を求める divid = pllFreq / freq; //分周値の余りから分数部分の分子を求める l = pllFreq % freq; f = l; f *= 1048575; f /= freq; num = f; //分数部分の分母は、2^20-1固定 denom = 1048575; //PLL設定 setPLL(Si_PLL_A, mult); //分周値設定 setSynth(Si_MS0, divid, num, denom, 0); //逓倍値が変化した時だけPLLをリセット if(old_mult != mult) { TWI_Send_Register_(Si_PLL_RST, 0x20); //PLLA reset old_mult = mult; } } |
810kHz付近で1kHzステップで確認した限りでは、ロータリーエンコーダーを回した時にクリック音の発生は無かった。 オシロスコープの周波数計測値を見ると、周波数が落ち着くのが速いように感じた。 VCOの周波数が変化しないせいだと思う。
ジッタの影響は、特に感じられなかった。
ジョンソンカウンタを通した後の波形
分周値を整数にしたものと違いは観測できなかった。
結局、たいした違いはなかったけど、一般的にPLLは周波数が変化すると安定するまで時間がかかるので、使い方としてはなるべくPLLの周波数を変えない方がよさそうに思えるけど、世の中、分周値を固定して使っているものばかりなのがちょっと不思議な気がする。
何か問題があるのかもしれないけど、へそ曲がりな自分としてはしばらくこの状態で行ってみようと思う。