回路図である。バッファアンプのベース抵抗は、2次高調波低減の為、4.7kとした。プログラムで使わないI/Oは、書いてない。
基本波のスペクトラム。
広帯域増幅なので致し方ないが、バッファアンプ付加により、n次のスプリアスがある。4次以降のスプリアスは、見当らなかった。この程度であれば、アプリケーションで対応可能だ。
電源電圧5V時、出力4mW。バッファアンプの電源は、VINからでもジャンパー出来るので、出力アップ可能。
基板サイズ 69 x 54。
オシレターは、正方形、長方形に対応。
program
7MHz AM送信機用に周波数が設定してある。受信時は、発振停止。クロックは、手持ちの部品で周波数を選んで56MHzとしたが、この周波数に拘る事は無い。//////////////////////////////////////////////////////////////////////
// AD9834 DDS VFO Premixed type program ver.1.0
//
// Copyright(C)2014.JA2GQP.All rights reserved.
// Crystal replacement
// 2015/9/8
// JA2GQP
//--------------------------------------------------------------------
// Function
// 1.ch0=7.195Mhz ch1=7.181Mhz ch2=7.160Mhz ch3=7.195Mhz
// 2.TX=chenel frequency RX=0Hz(off)
//////////////////////////////////////////////////////////////////////
//---------- Define Constant Value ----------
const byte SDATA = 4; // AD9834 SDATA
const byte SCLK = 5; // SCLK
const byte FSYNC = 6; // FSYNC
const byte SW_CH1 = 10; // Channel 1
const byte SW_CH2 = 11; // 2
const byte SW_CH3 = 12; // 3
const byte SW_TX = 13; // TX Sw
const long FRQ_CH0 = 7195000L; // CH0=7.195Mhz
const long FRQ_CH1 = 7181000L; // CH1=7.181Mhz
const long FRQ_CH2 = 7160000L; // CH2=7.160Mhz
const long FRQ_CH3 = 7195000L; // CH3=7.195Mhz
const unsigned long DDS_CLK = 56000000L; // AD9834 Clock 56Mhz
const unsigned long TWO_E28 = 268435456L; // 2^28
//---------- Memory Assign -------------------
long Dds_Dat = 0; // DDS Data
//---------- Initialization Program ---------------
void setup(){
pinMode(SW_TX,INPUT_PULLUP); // Input pin set
pinMode(SW_CH1,INPUT_PULLUP);
pinMode(SW_CH2,INPUT_PULLUP);
pinMode(SW_CH3,INPUT_PULLUP);
pinMode(FSYNC,OUTPUT); // Output pin set
pinMode(SCLK,OUTPUT);
pinMode(SDATA,OUTPUT);
}
//---------- Main program ---------------
void loop() {
if(digitalRead(SW_CH1) == LOW){
Dds_Dat = FRQ_CH1;
}
else if(digitalRead(SW_CH2) == LOW){
Dds_Dat = FRQ_CH2;
}
else if(digitalRead(SW_CH3) == LOW){
Dds_Dat = FRQ_CH3;
}
else{
Dds_Dat = FRQ_CH0;
}
if(digitalRead(SW_TX) == HIGH){ // Rx?
Dds_Dat = 0L;
}
Fnc_Dds(Dds_Dat);
delay(100);
}
//---------- Function DDS set ---------------
void Fnc_Dds(double frquency){
unsigned long wrk = frquency * TWO_E28 / DDS_CLK;
unsigned int wrk1,wrk2,wrk3;
wrk1 = 0x2000;
wrk2 = wrk & 0x3fff;
wrk2 = wrk2 | 0x4000;
wrk3 = wrk >> 14;
wrk3 = wrk3 & 0x3fff;
wrk3 = wrk3 | 0x4000;
digitalWrite(SCLK,HIGH); // Added 2014/12/29
digitalWrite(FSYNC,LOW);
shiftOut(SDATA,SCLK,MSBFIRST,(wrk1 >> 8));
shiftOut(SDATA,SCLK,MSBFIRST,wrk1);
shiftOut(SDATA,SCLK,MSBFIRST,(wrk2 >> 8));
shiftOut(SDATA,SCLK,MSBFIRST,wrk2);
shiftOut(SDATA,SCLK,MSBFIRST,(wrk3 >> 8));
shiftOut(SDATA,SCLK,MSBFIRST,wrk3);
digitalWrite(FSYNC,HIGH);
}
0 件のコメント:
コメントを投稿