
写真1 AD9833 DDS MSOP 0.5ピッチ 変換基板に乗せる
それはさておき、
このチップは10ピンのMSOPで、写真にようにピンセットの先ほどの大きさです。
変換基板に取り付けましたが、ピンのピッチは0.5なので、半田付けにはちょっと技術が必要です。
まずチップをゲルタイプの瞬間接着剤で正確な位置に仮止めしておきます。
フラックスをほんのわずか塗って、すべてのピンにわざとまたがるくらい半田を盛ります。
半田吸い取り線で、余分な半田を吸い取って、出来上がり。
慣れれば簡単ですが、最初は数個パーにする覚悟がいります(笑)。
このDDSは、マスタクロック(MCLK)周波数は最高25MHzで、その場合最高発振周波数(ナイキスト周波数)は12.5MHzとなり、分解能は0.1Hzです。
今回は手持ち部品の関係で、20MHzのクリスタルを使用したので、10MHzまでのプログラマブルオシレータとして、実験してみました。この場合の分解能は約0.075Hzです。
DACでノコギリ波を作る STM32VL Discovery
投稿日 2012/03/26
STM32VL Discovery(ディスカバリー)のDAC(D/Aコンバータ)で、ノコギリ波を作ってみました。
STM32VL Discoveryには2つの独立した12bit DACが実装されています。
今回は電圧出力を確認するため、簡単なプログラムを作ってみました。
タイマーやDMAは使っていません。

写真1 ソースコード IAR EWARMv5 ワークスペース
使用している関数はSTMのファームウェアライブラリにある標準のものです。
DAC関連のモジュールは、そのままではリンクされないので、ワークスペースにstm32f10x_dac.cを追加しておきます。
また、stm32f10x_cinf.hの中の /* #include "stm32f10x_dac.h" */をコメントから外しておきます。
まずDAC_Configuration()をコールして、GPIOAとDACにクロックを供給します。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
次にGPIOAの4ピン(GPIO_Pin_4)を設定します。このときモードをGPIO_Mode_AINとします。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
次にDACの動作モードを設定します。チャネル1(DAC_Channel_1)を使用します。
内蔵の波形生成は使用しません(DAC_WaveGeneration_None)、トリガも不要です。(DAC_Trigger_None)
主力バッファはオシロをつなぐだけなのでどちらでもよいのですが、とりあえず有効(DAC_OutputBuffer_Enable)にしておきます。
DAC_InitTypeDef DAC_InitStructure;
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
最後にDAC Ch1を有効にします。
DAC_Cmd(DAC_Channel_1, ENABLE);
以上の設定でDACが使用できる状態になります。
電圧出力は、0から0x0FFFまでの4096段階の値をDACに出力(右寄せ)し、それを繰り返します。
while(1){
for (i = 0; i < 0x0FFF; i++){
DAC_SetChannel1Data(DAC_Align_12b_R, i);
}
}

写真2 DAC Ch1 出力 7.855ms(127.31hz) ノコギリ波の観測 10:1プローブ
電圧1点当たり 1.9usです。
上の画面からはよく分かりませんが、
最低電圧は78mV
最高電圧は2.97V
でした。
この値はバッファ有無に関係ありませんでした。
(JF1VRR)