目次>5章 第2ステップ(色々な実験)>(12)正弦波を作る
正弦波を作る
− 発振では無くD/A変換で −D/A変換(デジタルデータをアナログ信号に変換)によりPICで正弦波を作成します。
正弦波は一般的に発振回路により作成しますが、ここでは発振回路は使わずにPICからデジタルデータを出力し、D/A変換回路とローパスフォルタできれいな正弦波を作ってみます。(あえて作成と表現しました。)
sinの計算結果に基づいていますので正確な正弦波が作成できます。
実験回路 | ||||||||||||||||
・ |
今回作成する回路図です。
RB0〜RB7につながる抵抗群(5KΩ×7本,10KΩ×9本)は、ラダー抵抗回路と呼ばれるD/A変換回路です。 今回は、分解能8ビットとしました。(ポートをONにしたときの電圧を255等分した任意の電圧が出力できます。電源電圧が5Vの場合、約0.019V刻み。)
5KΩと10KΩは、1:2の比率であれば、1KΩと2KΩなどでもかまいません。
その右の1KΩの抵抗と0.022μFのコンデンサはローパスフィルタで、ここでは出力波形をきれいにするために使っています。
さらに右の47μFのコンデンサは直流分をカットします。
PICの上にあるディップスイッチ(RA0〜RA3)と、RA4のスイッチおよびMCLRのプッシュボタンスイッチは、周波数選択のために使用します。
4つのディップスイッチで、16種類の中から周波数を選択します。
設定した周波数と分割数は、MCLRのプッシュボタンスイッチを押した時に反映されます。
| |||||||||||||||
プログラムの作成 | ||||||||||||||||
正弦波の1サイクルを64分割して作成することを考えます。
こちらは、同じものを棒グラフで表しています。
今回作る回路では、PORTBに出力する値(0〜255)に対応した電圧を出力できます。
上の棒グラフの縦軸を0〜255にして表現したものが下の図です。 横軸は時間で、1目盛りは正弦波の1サイクルを1/64した時間です。
従って、横軸の1目盛りに相当する時間毎に、対応する縦軸の値をPORTBに出力すると、下図のような正弦波が出力されます。
| ||||||||||||||||
プログラム全体 | ||||||||||||||||
今回作成したプログラムはこちらです。 メモ帳などのテキストエディタに取り込んで、SIN.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。 RA4のスイッチにより、1サイクルを64分割とするか128分割にするかを選択し、 ディップスイッチで出力する周波数を選択して、リセットスイッチ(MCLRに接続したプッシュスイッチ)を押すと該当する正弦波が出力されます。
| ||||||||||||||||
出力波形 | ||||||||||||||||
この回路での出力波形の例をいくつか載せておきます。 全て、1サイクルを64分割で作成したものです。
こちらはD/A変換の出力で、今回の回路とプログラムで出せる最低周波数の100Hzです。
こちらもD/A変換の出力で、最大周波数の4596Hzです。
こちらは、100Hzをローパスフィルタを通した後です。
同様に、4596Hzをローパスフィルタを通した後です。
上と同じ4596Hzですが、ローパスフィルタのコンデンサを0.022uFから0.01uFに変えたものです。
PICと、D/A変換回路,ローパスフィルタできれいな正弦波を作成できます。
<いずれやってみたい追加実験>
|