写真1 AD9833 DDS MSOP 0.5ピッチ 変換基板に乗せる

 

それはさておき、

 

このチップは10ピンのMSOPで、写真にようにピンセットの先ほどの大きさです。

 

変換基板に取り付けましたが、ピンのピッチは0.5なので、半田付けにはちょっと技術が必要です。

 

まずチップをゲルタイプの瞬間接着剤で正確な位置に仮止めしておきます。

 

フラックスをほんのわずか塗って、すべてのピンにわざとまたがるくらい半田を盛ります。

 

半田吸い取り線で、余分な半田を吸い取って、出来上がり。

 

慣れれば簡単ですが、最初は数個パーにする覚悟がいります(笑)。

 

このDDSは、マスタクロック(MCLK)周波数は最高25MHzで、その場合最高発振周波数(ナイキスト周波数)は12.5MHzとなり、分解能は0.1Hzです。

 

今回は手持ち部品の関係で、20MHzのクリスタルを使用したので、10MHzまでのプログラマブルオシレータとして、実験してみました。この場合の分解能は約0.075Hzです。

mbed サインウェーブを作る

投稿日 2011/04/17

mbed_sinewave.jpg

mbedでサインウェーブを作ってみました。

 

0から360度までをラジアンに変換しsin関数に与えます。

 

mbedのDAコンバータ(p18)はmax 3.3Vですので、1/2して0.5Vのオフセットを与えます。

 

これで1.65Vを中心に最小0V、最大3.3Vのサイン波となります。

 

計算値をDAコンバータで電圧として出力し、それをADコンバータ(p20)に入力してLCDに表示します。

 

同時にローカルファイル"sinewave.csv"に出力します。

 

#include "mbed.h"
#include "TextLCD.h"

 

TextLCD lcd(p24, p26, p27, p28, p29, p30);

 

LocalFileSystem local("local" );
DigitalOut busy(LED2);
AnalogOut DA(p18);
AnalogIn AD(p20);

 

int main() {
lcd.printf("SineWave\n" );
FILE *fp;

if ( NULL == (fp = fopen( "/local/sinewave.csv", "w" )) )

error( "" );
 

busy = 1;

for (float i=0; i<360; i++) {

DA = sin(i/180*3.14)*0.5+0.5;
wait(0.05);
lcd.locate(0,1);
lcd.printf("AD out %0.5fV", AD.read()*3.3);
fprintf( fp, "%f\n", (float)AD.read()*3.3 );

}
fclose( fp );
busy = 0;
}

mbed_sinewave_display.jpg

コンパイラ画面

 

NEWをクリックして新しいソースを作ります。mbed.hは自動的にインポートされます。

 

LCDのライブラリをインポートしておきます。

 

コンパイルしてsuccessとなったら、ローカルファイルシステムに書き込み、mbedのRESETを押して実行します。(p18とp20)をワイヤでショートしておきます。)

 

実行中はLED2が点灯します。

 

LED2が消えたらローカルファイルに"sinewave.csv"が作られます。

mbed_sinewave_graph.jpg

エクセルでサインウェーブを描く

 

A列を選択して、折れ線グラフを描画します。


 

http://mbed.org/users/jf1vrr/programs/sinewave/lpsph3

 

(JF1VRR)

コメント(4)

  • オシロスコープで作るとしたらどうなりますか? e259keinex ] 2011/9/21(水) 午後 11:26

  • e259keinexさん オシロで観測したいという意味だと思いますが、
    for (float i=0; i<360; i++) {
    DA = sin(i/180*3.14)*0.5+0.5;
    wait(0.05);
    lcd.locate(0,1);
    lcd.printf("DA out %0.5fV", AD.read()*3.3);
    fprintf( fp, "%f\n", (float)AD.read()*3.3 );
    }
    この部分で、lcdの行とfpirintfの行を削除し、waitでスピードを調整してください。どのくらいの周波数まで出せるか試してください。なお、単純に0から3.3Vの波形出力なら0から1.0をfor文で回せばもっと早くできます。(JF1VRR) 
    2011/9/22(木) 午後 2:46

  • 次のようなプログラムにしたらオシロではノイズになってしまいました。
    #include"mbed.h"

    AnalogOut signal(p18);

    int main() {
    while(1) {
    for(float i=0;i<360;i++) {
    signal=sin(i/180*3.14);
    wait(0.05);
    }
    }

    e259keinex ]

    2011/10/22(土) 午後 5:46

  • e259keinexさん、mbedのD/A(A/Dも同じ)の扱えるデータは0から1までです。リファレンス電圧は電源の3.3Vですから1が3.3Vになります。したがってSINの計算値を0から1までに収めるため*0.5+0.5する必要があります。こうすれば1.65Vを中心に±1.65Vの波形が得られるはずです。やってみてください。(JF1VRR) 2011/10/23(日) 午後 2:12