メディア
連載
» 2014年11月17日 10時00分 公開

Q&Aで学ぶマイコン講座(8):マイコンでサイン波、コサイン波を作れますか? (3/3)

[菅井賢(STマイクロエレクトロニクス),EDN Japan]
前のページへ 1|2|3       

周期(周波数)制御

 DACの出力値レジスタの値を書き換えるタイミングを変えることにより、周波数が変ります。図1の例で、サイン波の周波数を1Hzにしたい場合は、0.0556秒(1秒÷18)おきに出力値レジスタの値を書き換えると、1Hzが出来上がります。

 一定周期でDACの出力値レジスタを書き換えるにはタイマのような時間を測定する機能が必要です。実際に出力値レジスタを書き換えるのはCPUですが、もしDMA(Direct Memory Access)が搭載されたマイコンであればDMAを使って出力値レジスタの値を書き換えることができます。その場合、CPUは他の仕事ができますので、効率アップを図れます。

 タイマで一定周期ごとにCPUまたはDMAにトリガ(割り込みを含)をかけて、DACの出力値レジスタをRAMのテーブルの値に書き換えます。RAMのテーブルの値をサイン波に相当する値にしておけば、DACはサイン波を出力します。

 同じ波形を繰り返したい場合、RAMのテーブルの値は、1周期分を作り、繰り返して読み出せば、同じ波形が繰り返されます。1つのRAM上のデータテーブルを繰り返し使用する方法は循環式(サーキュラー)モードと呼ばれています。

サイン波以外の波形の作り方

 コサイン波を作りたい場合は、サイン波と同じRAMのテーブルが使えます。コサイン波はサイン波と90°位相がずれているだけですから、90°相当のずれた値から読み出せば、コサイン波になります(図3-a参照)。

図3 D-Aコンバータ(DAC)を使ったコサイン波/三角波 (クリックで拡大)

 三角波を作りたい場合は、RAMのテーブルの値を一定の傾きで増加する値に設定し、最大値まで出力したら、そこから逆戻りすれば、増加する傾きと減少する傾きが同じ三角波を作れます(図3-b参照)。また、RAMにテーブルを作らなくてもy=ax+bの計算式をソフトで作って、xを一定周期で増加させていった場合の計算結果をDACの出力値レジスタに入れれば、RAMを使わずに三角波を作ることができます。

 雑音波を作る場合は、乱数を発生させて、その値をDACから出力すれば、雑音波になります。最近のマイコンには乱数発生機能を搭載しているものもありますので、比較的容易に雑音波を作ることができます。

 任意の波形を作りたい場合は、RAMに出力したい波形のデータテーブルを作って、DACから出力させれば、任意の波形を作ることができます。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.