Wave-Denshi
トップ
Homeオプションパーツ ご注文 ダウンロード お問合せ 戻る
|
【周波数の設定方法】 周波数を設定する32ビットの制御データは、下記式で求めることができます。 出力周波数 = (設定値 × クロック周波数)÷2の32乗 従って 設定値 = (2の32乗÷クロック周波数)×出力周波数 となります。 例えばクロックが180MHzの場合には、 設定値 = 23.86092942 × 出力周波数(Hz) となります。 では設定出来る分解能はいくらでしょうか 設定分解能 = クロック周波数 / 2の32乗 となります。 従ってクロック周波数180MHzの時は 0.04Hz = 180000000Hz/ 4294967295 となり、 180MHzのとき0.04Hzの分解能で設定可能です。 【 プログラム 】
周波数値から設定値を求める計算は浮動小数で計算する必要があり、
アセンブラ言語では非常に難しい計算となりますので
ここではPICマイコン用CCS社のC言語を利用して記載します。
参考までにDDSにデーターを設定する部分のみ記載しますので、
各自で応用下さい。
/********************************/
/* グローバル変数宣言 */
/********************************/
int32 F_data; // 周波数値
static union{
int32 Freq; // 設定データー
int iFreq[4];
} DDS_Freq;
/*------- DDS No_1 周波数設定 ---------------------------*/
void dds_f1set(void) {
float Para;
int32 dds_H;
int32 dds_L;
Para = 0.8609242 * (float)F_data; // 周波数値から設定データーを計算
dds_L = (int32)Para; // 小数点以下と整数を2回に分けて計算してます。
dds_H = 23 * F_data;
DDS_Freq.Freq = dds_H + dds_L;
port_d = 0x01; // 6倍モード 位相0度に設定
output_high(W_CLK_A);
output_low(W_CLK_A);
port_d = DDS_Freq.iFreq[3]; // D24 - D31 data set
output_high(W_CLK_A);
output_low(W_CLK_A);
port_d = DDS_Freq.iFreq[2]; // D16 - D23 data set
output_high(W_CLK_A);
output_low(W_CLK_A);
port_d = DDS_Freq.iFreq[1]; // D8 - D15 data set
output_high(W_CLK_A);
output_low(W_CLK_A);
port_d = DDS_Freq.iFreq[0]; // D0 - D7 data set
output_high(W_CLK_A);
output_low(W_CLK_A);
output_high(FQ_UD); // 周波数値ロード指示
output_low(FQ_UD);
}
/*-------------------------------------------------------------*/
上では 周波数値から設定データーを計算では2回に分けて計算してますが、
小数点以下の数値が7桁と細かい数値なのでこうしてます。
他社のコンパイラーでは以下のように1行で書く事も可能と思います。
Para = 23.86092942 * (float)F_data; // 周波数値から設定データー計算
DDS_Freq.Freq = (int32)para;
又、少し精度が落ちますが、
Para = 23.861 * (float)F_data; // 周波数値から設定データー計算
と繰り上げて計算すると簡単です。
|
TopPage 戻る