マイコンでサイン波、コサイン波を作れますか?:Q&Aで学ぶマイコン講座(8)(3/3 ページ)
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。8回目は、上級者の方からよく質問される「マイコンでサイン波、コサイン波を作れますか?」です。
周期(周波数)制御
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参照)。
三角波を作りたい場合は、RAMのテーブルの値を一定の傾きで増加する値に設定し、最大値まで出力したら、そこから逆戻りすれば、増加する傾きと減少する傾きが同じ三角波を作れます(図3-b参照)。また、RAMにテーブルを作らなくてもy=ax+bの計算式をソフトで作って、xを一定周期で増加させていった場合の計算結果をDACの出力値レジスタに入れれば、RAMを使わずに三角波を作ることができます。
雑音波を作る場合は、乱数を発生させて、その値をDACから出力すれば、雑音波になります。最近のマイコンには乱数発生機能を搭載しているものもありますので、比較的容易に雑音波を作ることができます。
任意の波形を作りたい場合は、RAMに出力したい波形のデータテーブルを作って、DACから出力させれば、任意の波形を作ることができます。
関連キーワード
マイコン 関連 | マイコン | 周波数 | D-Aコンバータ(IC) | CPU | 出力端子 | QandAで学ぶマイコン講座 | DAC(D/A Converter) | デジタルアンプ | 解説 | 作り方
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 水晶やセラミック発振子を使った発振回路の設計方法は?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。2回目は、実際の開発者の方からよく質問される「水晶やセラミック発振子を使った発振回路の設計方法」についてです。 - マイコンが港で行う仕事とは? 「入出力ポート」
マイコンが行う仕事の中で、最も簡単な仕事は、「端子から0/1の信号を出すこと」と、「端子に入力された0/1の信号を読み取ること」です。非常に簡単な動作ですが、非常に重要な動作です。どんな高機能なマイコンでも、必ず使われている機能であり、今回はこの機能を行う「入出力ポート」を説明します。 - 「クロック」数えて「パルス」を操る――タイマーの基本機能
タイマー(Timer)は、キッチンタイマーのように、時間が経過したことを知らせる装置です。しかし、経過時間を測る以外にも指定した周期のパルスを出力したり、入力パルスの周期を測ったりすることにも使用します。むしろ、最近ではそのような用途の方が多いようです。そのため最近のマイコンには特別な機能を備えたタイマーが多くあり、使用方法もマイコンによって異なります。そこで、今回はSTM32シリーズ(STマイクロエレクトロ二クス製)に搭載されている汎用タイマーを例にとって、タイマーの基本的機能を説明します。