Wave-Denshi
トップ
Home
オプションパーツ
ご注文
ダウンロード
お問合せ
mail
 戻る 

 技 術 情 報
目次
■ 水晶発振子の精度
■ DDSデバイスとは
■ DDSのの内部構造
■ インターフェース
■ DDSのプログラム

  【周波数の設定方法】

 周波数を設定する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     戻る