2015年1月13日火曜日

PSoC4 Pioneer Kit: DACモジュールでサイン波生成

PSoC4に内蔵されているIDAC8モジュールを使ってサイン波を出力してみた

まずはサンプルプログラムでモジュールの使い方を確認

PSoC Creator 3.1の[File]-[Example Project]から選択して開いた

IDAC8_PSoC4_Example

8bitの電流出力型のDACだ

このサンプルでは8bitの数値を指定して電流出力する

テスターの電流モードで出力値を確認した
(出力PINとGNDにテスタを直につないで大丈夫です)


main.cのIDAC_VALを変更すれば出力値が変更できる


出力値の精度はまずまずだ


電流出力型なので電流→電圧変換を内蔵オペアンプで行うことにした

これもサンプルプログラムで使い方を調べた

OpAmp_PSoC4_Example

2倍の非反転増幅回路のサンプルだ


テストには自作の可変電圧電源(http://dad8893.blogspot.jp/2014/12/blog-post_18.html)を使った(^q^/

IDAC8とOPAMPを使って電圧出力型のDACにしてみる

回路図(PSoC Creatorで作成)


PINから出ている点線の配線やRはPSoC4 Pioneer Kit外の回路だ

プログラムは簡単に32個のサインテーブルを作って、32μ秒ごとに出力する方法にした

32μ秒 * 32 = 1.024m秒

なので

1 / 1.024m秒 = だいたい1kHz

程度のサイン波が出力される

<main.c>
#include <project.h> 
uint8 sin32Table[] = {
    152 ,
    176 ,
    198 ,
    217 ,
    233 ,
    245 ,
    252 ,
    255 ,
    252 ,
    245 ,
    233 ,
    217 ,
    198 ,
    176 ,
    152 ,
    127 ,
    102 ,
    78 ,
    56 ,
    37 ,
    21 ,
    9 ,
    2 ,
    0 ,
    2 ,
    9 ,
    21 ,
    37 ,
    56 ,
    78 ,
    102 ,
    127
};
int main()
{
    /* Start the IDAC component */
    IDAC_1_Start();
 
    /* Start Opamp component */
    Opamp_1_Start();
 
    /* Sets Opamp power mode to High power */
    Opamp_1_SetPower(Opamp_1_HIGH_POWER);
    for(;;)
    {
        int i;
        for (i = 0; i < 32; i++) {
            IDAC_1_SetValue(sin32Table[i]);
            CyDelayUs(32);
        }
    }
}

ブレッドボードで組んでオシロスコープで波形を見てみた



周波数: 825.3Hz
Peak-Peak電圧値: 1.560V
平均電圧値: 1.746V
波形を拡大するとみごとに階段状の波形だ(^q^;


オーディオ・インターフェイス経由でPCに取り込んでWaveSpectraでも波形とスペクトルを見てみた


かなり歪んでるなあ


このまま使えばファミコンっぽいチープな音源になりそうだ

LPFは通しておいたほうがいいかな

うまくいけばぴゅんぴゅん3号として製作する予定

2 件のコメント:

  1. ご無沙汰です。いろいろあって動けませんでしたー。
    オシロ買いましたか。ルビコンを渡りましたか。(^_^)
    これで生涯おそらく電子工作を止める事はないでしょう。
    ネタつきるまで一生あそべまっせー。

    返信削除
  2. オシロは買ってよかったです
    視野が広がるというか
    理屈で考えたことが目に見えると楽しい

    コミケの申込書、難しすぎて読むのが嫌になりそうです(^q^;

    返信削除