22
2015 Microchip Technology Inc. DS00001523A_JP - p. 1 AN1523 はじめに 様々な周波数で波形を生成および制御する機能は、ほ とんどのアプリケーションで重要な要件となります。 そのような信号源が要求される最も一般的な事例とし て、周波数スティミュラスを提供するための産業試験 セットアップ、低ノイズが要求される通信機器、医療 検査機器等が挙げられます。 プログラマブル アナログ出力で高精度と高分解能を 達成するための方法として、デジタル直接合成 (DDS) 方式が業界で普及しつつあります。以前は、パルス幅 変調 (PWM) 方式が廉価版のデジタル / アナログ コン バータ (DAC) として上記の目的で使われていました。 PWM 方式では低周波レンジで生成できる波形が制限 されますが、DDS 方式を使う事でこれを克服できま す。 本書では、数値制御オシレータ (NCO) モジュールを 使って正弦波ジェネレータを実装する方法を紹介しま す。 NCO モジュールは DDS 方式で波形を生成します。 各種のPIC16FおよびPIC10F320/322 ファミリのMCU がこのモジュールを内蔵しています。コアから独立し た周辺モジュールの詳細は www.microchip.com/CIP を参照してください。 デジタル直接合成 (DDS) NCO デジタル直接合成 (DDS) は、デジタルデータとして保 存された信号波形と DAC を使ってアナログ波形 ( 一般 的には正弦波 ) を生成するテクニックです。 NCO モジュールは、アキュムレータに一定値を繰り返 し加算する事により、 DDS の原理に基づいて動作しま す。 20 ビット長のアキュムレータでは、入力クロック レート ( 最大で約 16 MHz) で加算が発生します。ア キュムレータは周期的にオーバーフローしてキャリー ビットをセットします。これにより、 NCO モジュール の出力の状態が遷移します。 NCO モジュールは 2 通りのモード ( 固定デューティサ イクル PWM モードと周波数制御パルスモード ) で動 作できます。以上の動作により、幅広い周波数レンジ (16 MHz クロック使用時に 0 500 kHz) で非常に良 好な線形性を有する応答が得られます。また、この周 波数レンジの全域で 15 Hz の周波数分解能が得られま す。従来の PWM 方式による周波数制御と比べた場合、 リニアな周波数制御と周波数分解能の向上が NCO 主な優位点です。1 に、NCO モジュールの内部ブ ロック図を示します。 Author: Vinaya Skanda Microchip Technology Inc. 数値制御オシレータ モジュールを使った正弦波ジェネレータ 注意 : この日本語版文書は参考資料としてご利用ください。最新情報 は必ずオリジナルの英語版をご参照願います。

注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523数値制御オシレータ モジュールを使った正弦波ジェネレータ

注意 : この日本語版文書は参考資料としてご利用ください。最新情報 は必ずオリジナルの英語版をご参照願います。

2015 Microchip Technology Inc. DS00001523A_JP - p. 1

はじめに様々な周波数で波形を生成および制御する機能は、ほとんどのアプリケーションで重要な要件となります。そのような信号源が要求される最も一般的な事例として、周波数スティミュラスを提供するための産業試験セットアップ、低ノイズが要求される通信機器、医療検査機器等が挙げられます。

プログラマブル アナログ出力で高精度と高分解能を 達成するための方法として、デジタル直接合成 (DDS)方式が業界で普及しつつあります。以前は、パルス幅変調 (PWM) 方式が廉価版のデジタル / アナログ コン バータ (DAC) として上記の目的で使われていました。PWM 方式では低周波レンジで生成できる波形が制限されますが、DDS 方式を使う事でこれを克服できます。

本書では、数値制御オシレータ (NCO) モジュールを使って正弦波ジェネレータを実装する方法を紹介します。NCO モジュールは DDS 方式で波形を生成します。各種のPIC16FおよびPIC10F320/322ファミリのMCUがこのモジュールを内蔵しています。コアから独立した周辺モジュールの詳細は www.microchip.com/CIP を参照してください。

デジタル直接合成 (DDS) と NCOデジタル直接合成 (DDS) は、デジタルデータとして保存された信号波形とDACを使ってアナログ波形 (一般的には正弦波 ) を生成するテクニックです。

NCO モジュールは、アキュムレータに一定値を繰り返し加算する事により、DDS の原理に基づいて動作します。20 ビット長のアキュムレータでは、入力クロックレート ( 最大で約 16 MHz) で加算が発生します。ア キュムレータは周期的にオーバーフローしてキャリービットをセットします。これにより、NCO モジュールの出力の状態が遷移します。

NCOモジュールは 2通りのモード (固定デューティサイクル PWM モードと周波数制御パルスモード ) で動作できます。以上の動作により、幅広い周波数レンジ(16 MHz クロック使用時に 0 ~ 500 kHz) で非常に良 好な線形性を有する応答が得られます。また、この周波数レンジの全域で 15 Hz の周波数分解能が得られま す。従来の PWM 方式による周波数制御と比べた場合、リニアな周波数制御と周波数分解能の向上が NCO の主な優位点です。図 1 に、NCO モジュールの内部ブロック図を示します。

Author: Vinaya Skanda Microchip Technology Inc.

Page 2: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

図 1: NCO モジュールの内部ブロック図

NCO モジュールは、 DDS 方式を使って高精度に制御 可能な出力周波数を生成します。基本的に DDS 方式は、慎重に制御されたジッタを含むクロックを提供します。このため必然的に周波数領域で信号にジッタの影響が現れます。

図 2 に、NCO モジュールを使って 50% デューティサイクルの矩形波を生成した場合の典型的な出力スペクトルを示します。ジッタによって生じる側波帯ノイズは基本周波数に比べて微弱です。対数スケールでプロットした場合、NCO 出力のスペクトルは理想的矩形波のスペクトルと同等である事が分かります。

Increment

Accumulator

Counter R

R

S Q

Q

20

20

Overflow

Output

16

Clock Sources:Fosc

CLC

HF INTOSC

Ext.Pin

Single Pulse or Duty Cycle Controlled

To Pins, Interrupt,

Complimentary Waveform

Configurable Logic Cell (CLC),

Generator (CWG)

DS00001523A_JP - p. 2 2015 Microchip Technology Inc.

Page 3: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

図 2: 理想的矩形波のスペクトルと NCO 出力のスペクトル

NCO 出力のスペクトル

理想的矩形波のスペクトル

2015 Microchip Technology Inc. DS00001523A_JP - p. 3

Page 4: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

NCO 出力と PWM 出力の比較以下では、NCO モジュールと PWM モジュールを比較します。PWM モジュールを使って可変周波数のパルスを生成する場合、PWM 周波数は式 1 を使って求めます。

式 1: PWM 周波数の計算

8 ビットの PR2 レジスタ値のレンジは 0 ~ 255 です。オシレータ クロック周波数が一定であれば、PWM 出 力周波数は PR2 レジスタの値によって決まります。式 1 において、PR2 レジスタ値は分母側にあるため、PR2 値の変化に対する FPWM の変化は非線形です。

図3に、PR2値に対するPWM周波数の関係を示します。

図 3: PWM モジュールにおける PR 値と周波数の関係

インクリメント レジスタ値と NCO 出力周波数の関係 を式 2 に示します。式 2 では、FNCO はインクリメント値に直接比例します ( アキュムレータ オーバーフ ロー値は 220 = 1048576 で一定 )。従って、インクリ メント値と NCO 出力周波数 (FNCO) の間に良好な直線性が得られます。

式 2: NCO モジュールを使った場合の PWM 周波数の計算

FPWM

FOSC

4 PR2 1+ ----------------------------=

FPWM = PWM 目標周波数

FOSC = オシレータ クロック周波数

PR2 = 周期レジスタ値

FNCO

FOSC

Accumulator---------------------------------- = IncrementValue

FNCO = NCO モジュール出力周波数

FOSC = オシレータ クロック周波数 ( 約 16 MHz)

Accumulator = 20 ビット積算レジスタ値 ( オーバーフロー時に出力が遷移 )

Increment Value = インクリメント レジスタ値 (FNCO を変更するために書き込む値 )

DS00001523A_JP - p. 4 2015 Microchip Technology Inc.

Page 5: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

NCO モジュールを使った場合のインクリメント値と出力周波数 (FNCO) の関係を図 4 に示します。

図 4: NCO モジュールにおけるインクリメント値と周波数の関係

従って、NCO を使って波形を生成する事で、通常のPWM 方式に比べてより幅広い周波数レンジでより良好な周波数分解能が得られます。

2015 Microchip Technology Inc. DS00001523A_JP - p. 5

Page 6: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

NCO モジュールを使った 正弦波生成の原理NCO モジュールは、設定された周波数の矩形波を出力します。矩形波は、設定された基本 ( 中心 ) 周波数成分の他に多数の周波数成分を含みます。フーリエ変換により、矩形波は適切な振幅と位相を持つ一連の周波数の純粋な正弦波を合成する事によって生成できます。

フーリエの定理は、無限期間での正弦波の合成を前提とします。基本的に矩形波は、

基本周波数 - 1/3×3 次高調波 + 1/5×5 次高調波 - 1/7×7 次高調波 ....

により構成されます ( 図 5 参照 )。NCO からの矩形波出力を高 Q 値のバンドパス フィルタに通す事で、目 標とする周波数の正弦波を生成できます。

図 5: 矩形波の周波数成分

図 6 に、オシロスコープを使って観測した対称矩形波の周波数スペクトルを示します。

図 6: 矩形波の周波数スペクトル

Fundamental wave only

Fundamental wave +third-order harmonics

Fundamental wave +third-, fifth, seventh-and ninth-order harmonics

Time

Am

plit

ud

e

DS00001523A_JP - p. 6 2015 Microchip Technology Inc.

Page 7: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

正弦波ジェネレータのアプリケーション正弦波を使うアプリケーションは幅広く存在します。そのようなアプリケーションには以下が含まれます。

• 音響機器またはスピーカの校正• 信号内の周波数成分の検出• 無線機の音量レベル調整のためのテストトーンの生成• 無線機の同調回路• 楽器の調律に使う基準トーンの生成• 音響特性のイコライジングとテスト• 複数音響周波数を生成するための高調波の生成• サウンドカードの品質管理• ホワイトノイズの生成• 聴覚検査用機器

ケーススタディ : 離散型フーリエ変換(DFT) を使った相関法による侵入者検出システム以下では、DFT を使った相関法による侵入者検出システムにおける正弦波生成の適用例について説明します。

侵入者検出システムは、基本的に、室内または囲まれた空間内で侵入者を発見した時に特定周波数の信号を発信するトランスミッタを使います。

多くの侵入者検出システムは赤外線 (IR)信号を使います。信号を受信したレシーバは、信号に特定の周波数成分が含まれているかどうかを評価します。この検出プロセスでは、通常、受信信号に対して DFT を実行する事で、検出対象の周波数成分が存在するかどうかをチェックします。相関法を使って DFT を実装する場合、検出対象周波数の正弦波と余弦波が必要です。

DFT で用いる正弦波と余弦波は DFT 基本関数と呼びます。DFT は、振幅を表す一連の値を出力します。DFT基本関数は、単位振幅を持つ正弦波と余弦波のセットです。周波数領域で、正弦波または余弦波に各振幅を割り当てます。その結果得られる一連の正弦波および余弦波を合成する事で、時間領域信号を生成します。

図 7 に、侵入者検出システムの標準的なブロック図を示します。NCO モジュールは、レシーバで検出する目標周波数の矩形波を生成するよう設定します。適切な帯域のバンドパス フィルタに NCO 出力を通す事で、 中心周波数 ( すなわち検出対象周波数 ) の近くの周波数成分だけを通過させます。コーナー周波数でのカットオフ特性を急峻にするため、Q 値の高いバンドパスフィルタを使う必要があります。以上により、バンドパス フィルタの出力から基本周波数の正弦波が得ら れます。

図 7: 侵入者検出システムのブロック図

Cosine Samples

(Sine Samples X Receiver Input

Samples)

(Cosine Samples X

Receiver Input Samples)

Sine Wave ADC

Receiver Input

OrthogonalSignal

Generation

f (detect)

Numerically Controlled Oscillator

(NCO)

Band Pass Filter

Receiver Input Samples

Sine Samples

Y2

Y1

2015 Microchip Technology Inc. DS00001523A_JP - p. 7

Page 8: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

PIC® MCU の内蔵 ADC は、バンドパス フィルタの正 弦波出力用と、TX から送信されて RX で受信される信号用に 2 つの入力チャンネルを持ちます。これらの信号間の相関性を評価する事で、受信信号内に検出対象の周波数成分 (fdetect) が存在するかどうかを判定します。ADC から得られたデジタル正弦波サンプルを直交信号生成処理に通す事によって余弦波出力を生成します。この直交信号生成はファームウェアで処理します。この処理には、以下を含む各種の変換またはフィルタを使います。

• ヒルベルト変換 : この変換は、入力信号に対して位 相が 90° シフトした ( すなわち直交した ) 出力信号を生成します。従って、正弦波を入力すると同じ振幅の余弦波が得られます。

• ローパスフィルタ : 一次ローパスフィルタに阻止帯 域 ( すなわちカットオフ周波数より上 ) の周波数を持つ正弦波を入力すると、振幅は減衰しますが、波形は入力と同じで位相が 90° シフトした信号が出力されます。ファームウェアでこの信号に適切な係数を乗算する事により、入力と同じ振幅の出力が得られます。つまり、周波数も振幅も入力と同じで位相が 90° シフトした正弦波 ( すなわち余弦波 ) が得られます。

• サンプル配列のシフト : 正弦波サンプル ( 配列内の エレメント ) を適切にシフトする事で、90° シフトした出力サンプル ( つまり余弦波サンプル ) が得られます。

正弦波形と余弦波形はあらかじめ生成してデジタルデータとして利用可能とし、入力信号との相関性を以下の計算により評価します。

• 個々の正弦波サンプルと入力信号サンプルの積を積算する

• 個々の余弦波サンプルと入力信号サンプルの積を積算する

2 つの積算出力 (Y1 と Y2) が得られた時点で、以下のように結果を解釈する事で、対象とする周波数成分が存在するかどうかを評価します。

• 正弦波の積算値 (Y1) と余弦波の積算値 (Y2) が共にゼロである場合、受信した信号の中に検出対象の周波数成分は存在しない。これ以外の場合、その周波数成分が有限量存在する。

• 正弦波の積算値が有限値で余弦波の積算値がゼロである場合、検出対象の周波数成分が存在し、その位相はシフトしていない。

• 正弦波の積算値がゼロで余弦波の積算値が有限値である場合、検出対象の周波数成分が存在し、その位相は 90° シフトしている。

• 正弦波の積算値と余弦波の積算値がどちらも有限値である場合、検出対象の周波数成分が存在し、その位相は有限量シフトしている。

以上の解釈方法を図 8 に示します。

図 8: 侵入者検出システムにおける周波数検出の原理

Frequency does not exist

Frequency exists and phase is zero

Frequency exists and phase is 90°

Frequency exists and with finite phase

If Y1 = 0 Y2 = 0

If Y1 = Finite Y2 = Finite

If Y1 = 0 Y2 = Finite

If Y1 = Finite Y2 = 0

Check for f(detect)

Y2

Y1

DS00001523A_JP - p. 8 2015 Microchip Technology Inc.

Page 9: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

NCO モジュールを使った正弦波の生成「ケーススタディ: 離散型フーリエ変換 (DFT)を使った 相関法による侵入者検出システム」で述べたように、NCO を使って必要な周波数の正弦波を生成できます。例 1 に、1 kHz の矩形波を生成するためのコードを示 します。この方法で生成した矩形波を 4 次サーレンキー フィルタに通します。

例 1: NCO モジュールを使って正弦波を生成するためのコード

サーレンキー フィルタのシミュレーション回路と、結 果の波形を図 9 に示します。

図 9: サーレンキー フィルタのシミュレーション

#pragma config FOSC = INTOSC

// FOSC configuration

OSCCON = 0x78;// Fosc = 16 MHz with internal oscillator

__delay_us(100);

TRISC = 0x00; // Port C as digital output port

ANSELC = 0x00; // Port C as digital output port

APFCON = 0x00;

NCO1CON = 0xC0; // NCO enable, NCO output enable, fixed frequency

NCO1CLK = 0x01; // NCO clock = FOSC = 16 MHz

NCO1INCH = 0x00; // NCO increment register high byte

NCO1INCL = 0x84; // NCO increment register high byte

// NCO output toggled at frequency = 2 kHz to get the square wave of 1 kHz

2015 Microchip Technology Inc. DS00001523A_JP - p. 9

Page 10: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

オシロスコープで観測した出力正弦波と周波数スペクトルを図 10 に示します。基本周波数 (1 kHz) に比べて 高調波 (2 kHz、3 kHz、4 kHz...) は無視可能または非 常に微弱です。

図 10: NCO モジュールを使って生成した正弦波の周波数スペクトル

DS00001523A_JP - p. 10 2015 Microchip Technology Inc.

Page 11: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

ルックアップ テーブル法を 使った正弦波の生成以下では、ルックアップ テーブル法による正弦波の生 成について説明します。これは最も基本的で広く用いられている正弦波生成法です。この方法では、正弦波を近似するための値をメモリに保存します。

ルックアップ テーブル法には以下の 3 種類がありま す。

• 第 1 の方法では、テーブルの要素を用いて作成した基本周波数の整数倍の周波数を持つ正弦波を合成します。

• 第 2 の方法では、テーブルの要素を用いて作成した基本周波数の非整数倍の周波数を持つ正弦波を合成します。この方法では、これらの周波数は基本テーブル周波数の整数倍とはならず、総高調波歪み(THD) は大幅に増加します。

• 第 3 の方法では、基本周波数の非整数倍の周波数を持つ正弦波を合成しますが、補間を使って THD を低く抑える事ができます。

ルックアップ テーブル法を実装した場合、生成される 正弦波の総エネルギには基本周波数のエネルギだけでなく、それ以外の周波数に分布するエネルギも少量含まれます。これらの周波数は高調波と分数調波の両方です。これらの周波数成分の存在により、出力波形に特定量の歪みが生じます。

出力波形の高調波歪みは、量子化誤差とサンプリング誤差に起因します。正弦波テーブル エレメントは、限 定されたワード長 (8/10/16 ビット等 ) でデータメモリに保存します。従って、これらのエレメントによって正弦波の値を厳密に表現する事はできないため、ワード長に応じた量子化誤差が生じます。基本テーブル周波数の非整数倍の周波数を扱う場合、2 つのテーブルエントリの中間のサンプル値を推定する必要があります。これらの計算によってサンプリング誤差が生じます。これらの推定には、量子化誤差を元々含んだテーブル値を使うため、サンプリング誤差は常に量子化誤差より大きくなります。

量子化誤差とサンプリング誤差を低減するには、ルックアップ テーブル法に補間処理を組み合わせる必要 があります。これにより、歪みは大幅に減少します。補間により、テーブルエレメントの中間の値をより正確に表現できます。実装を容易にするため、線形補間法が最も多く用いられます。この方法では、任意の2 つのテーブルエントリ間の値は、2 つの値を結ぶ直線上にあると想定します。

2015 Microchip Technology Inc. DS00001523A_JP - p. 11

Page 12: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

例 1 に、ルックアップ テーブル法を使って 1 kHz の正 弦波を生成するためのコードを示します。

例 1: ルックアップ テーブル法を使って正弦波を生成するためのコード

#pragma config FOSC = INTOSC

unsigned char gDutycount =0;

const char SINETABLE[40]=

{

50,55,60,65,70,75,80,85,90,95,

100,95,90,85,80,75,70,65,60,55,

50,45,40,35,30,25,20,15,10,5,

0,5,10,15,20,25,30,35,40,45

};

// FOSC configuration

OSCCON = 0x78; // Fosc = 16 MHz with internal oscillator

__delay_us(100);

// Timer2 configuration for PWM

PR2 = 99; // PWM period register for 40 kHz

T2CON = 0x04; // Timer2 on

// PWM 1 configuration

PWM1CON = 0xC0; // PWM1 on, PWM 1 output enable

PWM1DCH = 50; // PWM duty initialized to 50%

PWM1DCL = 0;

PIE1bits.TMR2IE =1; // Timer2 interrupt enable

INTCON =0xC0; // Global interrupt enable, peripheral interrupt enable

TRISC = 0x00; // Port C as digital output port

ANSELC = 0x00; // Port C as digital output port

void interrupt Timer2_ISR(void)

{

if (TMR2IF)

{

++gDutycount; // Increment the counter variable by 1

if(gDutycount == 39)

{

gDutycount = 0;

}

PWM1DCH = SINETABLE[gDutycount]; // Load the duty cycle register

according to the sine table

TMR2IF = 0;

}

}

DS00001523A_JP - p. 12 2015 Microchip Technology Inc.

Page 13: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

PWM のデューティサイクルを変化させ、その出力をサーレンキー フィルタに通します。出力正弦波と、そ の周波数スペクトルを図 11 に示します。出力正弦波に含まれる高調波は、NCO を使った方法 (「NCO モジュールを使った正弦波の生成」参照 ) よりも少し増加します。

図 11: ルックアップ テーブルを使って生成した正弦波の周波数スペクトル

2015 Microchip Technology Inc. DS00001523A_JP - p. 13

Page 14: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

三角関数式による正弦波の生成正弦波と余弦波は式 3 により表します。

式 3: 正弦波と余弦波の式

三角関数により、その角度 (rad) における信号の瞬時値が求まります。正弦波と余弦波では位相が 90° 異なるだけで、波形は同じです。従って、一方の波形の瞬時値は、他方の波形の位相を 90° シフトする事により得られます。これらの波形は、オシレータを使ってアナログ領域で生成します。デジタル信号に変換した場合の基本波形式を式 4 に示します。

式 4: 基本波形式のデジタル表現

デジタル コンピュータでは、式 4 を評価する事で特定 周波数の信号を生成できます。正弦波は、補間法または DAC を使って構成できます。デジタル周波数 f は、F/Fs により求まります。

例えば信号周波数 = 1000 Hz、サンプリング周波数 = 360000 Hz の場合、f の値は式 5 のように求まります。

式 5: デジタル周波数

式 4 に f の値を代入し、n を 0 から無限大へインクリメントする事で、余弦波のサンプル値が計算できます。しかし、各計算は角度 (rad) の余弦の計算を含み、これは余弦無限級数の計算です。この方法の問題は、CPU サイクルの消費が増大する事です。この問題を解消するため、三角関数解析を使って、無限級数の評価を少量の浮動小数点計算まで削減できます。標準的な三角関数式を式 6 と式 7 に示します。

式 6: 標準的な三角関数式

式 7: 標準的な三角関数式

式 6 と式 7 を加算する事で式 8 が得られます。

式 8: 標準的な三角関数式の加算

式 8 は式 9 に変形できます。

式 9: 三角関数式の変形

V t Sin 2Ft =

V(t) = 瞬時値

t = 時間

F = 信号周波数

2π = ラジアンへの変換に使用

V t Cos 2Ft =

X n Sin 2FnT =

:

n = デジタル サンプルの番号 ( 整数値 : 0、1、2、3、4.......n)

T = 波形の 2 つのサンプルの間の時間 ( サンプリング周期 )

X n Cos 2FnT =

X n Sin 2FnT Sin2Fn

Fs-------------- Sin 2fn = = =

また、 X n Cos 2fn =

f = F/Fs = デジタル周波数 ( レンジは -1/2 ~ 1/2)

Fs = 1/T または T = 1/Fs (Fs = サンプリング周波数 )

f FFs------ 1000

360000------------------= =

= 0.00277777777777777777777777777778 Hz

cos x y+ xcos ycos x ysinsin–=

sinx = 現在のサンプルの信号周波数の正弦

siny = サンプリング周波数の正弦

cos x = 現在のサンプルの信号周波数の余弦

cos y = サンプリング周波数の余弦

cos(x+y) = 次のサンプルの信号周波数の余弦

cos x y– xcos ycos x ysinsin+=

cos(x-y) = 前のサンプルの信号周波数の余弦

cos x y+ cos x y– + 2 xcos ycos=

cos x y+ 2 xcos ycos cos x y– –=

DS00001523A_JP - p. 14 2015 Microchip Technology Inc.

Page 15: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

正弦波を度数法で表現するために式 10 を使います。直前および現在の信号サンプルと、サンプリング周波数の余弦が既知である場合、式 9 を使って余弦波の次の余弦値を計算できます。

式 10: 度数法による表現

図12に、式6~式9に示した三角関数式を図示します。

図 12: 正弦波形の角度表現

式 9 は式 11 のように書き直せます。

式 11: 余弦波のサンプルに基づく表現

余弦波の最初の2個のサンプルは、cos(2πf0)とcos(2πf1)を直接評価する事により計算できます。

x 2FnTs 2nFFs

--------------= =

F = 信号周波数 (Hz)

Fs = サンプリング周波数 (Hz)

f = F/Fs = デジタル周波数 (-0.5 ~ 0.5)

y = 円周上の 2 点が成す角度 (rad) ( 角度 (rad) で表したサンプリング レート )

y n 2 ycos y n 1– y n 2– –=

y(n) = 計算対象の n 番目のサンプル

y(n-1) = n-1 番目のサンプル

y(n-2) = n-2 番目のサンプル

Note 1: cos2f1 は、最初のサンプルの余弦であり、0番目と最初のサンプルの間の角度差を表します。従って、この値は、信号の 1 サンプリング周期に相当する角度を表します。

2: 円の半径をrとします。円をFs/Fに等分した時に、2 つの隣り合う半径が成す角度がサンプリング レートです。従って、こ の角度の余弦はサンプリング周波数です(n = 1 の場合、2πfn (rad))。これは信号の 2 番目のサンプルでもあります (n = 1 か つ y(n-1) = cos y = cos x)。

2015 Microchip Technology Inc. DS00001523A_JP - p. 15

Page 16: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

8 ビット MCU は、余弦無限級数の評価を実行するための浮動小数点プロセッサを備えていません。しかし加算、減算、乗算、除算等の基本的な浮動小数点演算はソフトウェアでエミュレートできます。

式 11 を再帰的に使う事で、任意のサンプリング周波数に対する周波数信号サンプルを計算できます。また、正弦波と余弦波は周期的であるため、1 サイクルの計算だけが必要です。1 サイクル後は同じサンプル値を繰り返すため、後続のサイクルを計算する必要はありません。このため、CPU サイクル数を削減できます。これは、リングバッファを使うと容易に実装できます。

サンプル値を正弦波に変換するには ( 信号波形を再構成するには )、1 サイクルあたり少なくとも 10 個のサンプルが必要です。従って、サンプリング周波数は信号の最大周波数の 10 倍にする事を推奨します。信号の最大周波数が 3000 Hz である場合、正弦波の再構成 で信号波形を維持するするには、30000 Hz のサンプ リング レートが必要です。

サンプル値は浮動小数点形式で計算するため、DAC に入力してアナログ信号を生成する前に、整数形式に変換する必要があります。信号の分解能は可能な限り高くします (8ビットのサンプル値よりも10ビットのサンプル値の方が信号波形をより忠実に再構成できます )。

DAC のビット分解能を γとします。浮動小数点サンプル値に (2γ–2(γ-1)) を乗算して 2(γ-1) を加算する事で、全てのサンプル値のレンジを (-1 ~ 1) から (0 ~ 2γ) に変換し、結果を丸め処理する事で 1 サイクル分の信号サンプルの整数配列が得られます ( 式 12 参照 )。

式 12: 1 サイクルの信号サンプルの整数配列

ほとんどの 8ビットMCUは高分解能DACを備えていませんが、PWM モードを備えたキャプチャ / コンペア(CCP) モジュールを使う事で、最低 10 ビットの分解能でデジタル値をアナログ信号に変換できます。

最初に、PWM を 50% デューティサイクルに設定します。PWM 周波数は、信号のサンプリング周波数とします。例えば、1000 Hz の信号を 30000 Hz でサンプリン グする場合、50% デューティサイクル PWM 信号の周波数を 30000 Hz にします (PWM信号の各サイクル (周 期 )は信号のサンプル値を1つだけ含む事が必要です )。2 つの PWM 周期が同じサンプル値を含む場合、PWMのフィルタ処理によって正弦波信号にステップが生じます。これにより波形が歪み、信号周波数は 1/2 になります。従って、PWM 周波数は、毎周期で信号のサンプル値を 1 つだけ含むサンプリング周波数である事が必要です。このため、PIC MCU では、PWM 信号の生成 に timer2 を使って割り込みを生成します。割り込みハンドラ内で、CCP デューティサイクル値を毎周期更新できます。その後、PWM 出力を 2 重極 RC フィルタに通して正弦波信号を生成します。

sample_value (integer value) =

sample_value(floating point value) × (2γ – 2(γ-1)) + 2(γ-1)

Note: 計算周波数(F)の整数倍の周波数を生成できます ( 最大周波数は Fs/10)。例として、1000 Hz の計算信号を30000 Hzのレートでサンプリン グする場合について考えます。1000 Hz のサン プルから 2000 Hz ( 高調波または 1000 Hz の 整数倍 ) の周波数を生成する場合、1000 Hz 信 号のサンプルを1つおきに (つまり偶数番目または奇数番目のサンプルを ) 選択します。

x(n) を 30000 Hz のレートでサンプリングした 1000 Hz 信号のサンプルとした場合、同じレー トでサンプリングした 2000 Hz 信号のサンプル y(n) は x(2n) または x(2n-1) です。

DS00001523A_JP - p. 16 2015 Microchip Technology Inc.

Page 17: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

例 2 に、三角数関数法を使って正弦波を生成するためのコードを示します。

例 2: 三角関数計算を使って正弦波を生成するためのコード

Program to generate cosine/sine wave using trigonometric equation cos(a+b) = 2 cos a cos b - cos(a-b)

// where a is the current sample, b is the sampling frequency, a-b is the previous sample and a+b is the next sample

// to be calculated

int single_cycle_array[40], samples; //array-integer array to store sample values of one sine/cosine cycle, samples-no of samples in one cycle=Fs/F

void main()

{

float y, y_1, y_2=1.0, sampling_freq_angle;

// y_2 is previous sample, y-1 is current sample and y is the next sample

// sampling_freq_angle is the cosine of sampling frequency b

int signal_freq=1000, i; //i-counter

OSCCON = 0b11111100;

OSCTUNE = 0b11000000;//31.25kHz, PLL enabled, factory calibrated frequency

while(1)

{

samples = (int)(31250/signal_freq);

// The first and second sample value is hard coded, since the evaluation of infinite series in non-feasible on 8-bit MCU

y_1 = sampling_freq_angle = 0.97985505238424686571479340950002;

// cos(2P(signal_freq/31250)) and sampling frequency = PWM frequency = 31250 Hz

// This one time calculation will also save CPU cycles

sampling_freq_angle *= 2.0;

// The sample values are rounded into range of 210, i.e, 0 to 1024 values

// Higher resolution PWM are advised to use for better and symmetric sine wave

// reconstruction

single_cycle_array[0] = (int)(y_2*510+510);

single_cycle_array[1] = (int)(y_1*510+510);

// The loop to finish calculation of remaining samples

for(i=2;i<samples;i++)

{

y = y_1*sampling_freq_angle - y_2;

single_cycle_array[i] = (int)(y*510+510);

y_2 = y_1;

y_1 = y;

}

}

2015 Microchip Technology Inc. DS00001523A_JP - p. 17

Page 18: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

高調波は、NCOまたはルックアップ テーブル法を使っ た場合よりも増加します。この方法で生成した PWM出力をサーレンキー フィルタに通し、その出力をオシ ロスコープで観察した結果(1 kHzの正弦波と周波数ス ペクトル ) を図 13 に示します。

図 13: 三角関数計算を使って生成した正弦波の周波数スペクトル

DS00001523A_JP - p. 18 2015 Microchip Technology Inc.

Page 19: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

まとめ多くのアプリケーションは正弦波ジェネレータを使って設計できます。本書では、正弦波ジェネレータを使うアプリケーションの 1 つの事例として、侵入者検出システムを紹介しました。

正弦波は大部分の電気 / 電子システムにおける基本機能を形成するため、正弦波ジェネレータを使うアプリケーションは多数存在します。数値制御オシレータ(NCO)モジュールを使って任意周波数の正弦波を生成する方法と、従来のパルス幅変調 (PWM) 方式と比べた場合の優位性についても説明しました。NCO を使って生成できるのは正弦波だけではありません。適切なカットオフ周波数を持つ適切なフィルタを使う事により、任意の波形を生成できます。

コ ア か ら 独 立 し た 周 辺 モ ジ ュ ー ル の 詳 細 はwww.microchip.com/CIP を参照してください。

2015 Microchip Technology Inc. DS00001523A_JP - p. 19

Page 20: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

AN1523

NOTE:

DS00001523A_JP - p. 20 2015 Microchip Technology Inc.

Page 21: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

2015 Microchip Technology Inc.

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-63277-321-0

DS00001523A_JP - p. 21

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

Page 22: 注意 この日本語版文書は参考資料としてご利用くだ …ww1.microchip.com/downloads/jp/AppNotes/00001523A_JP.pdf式1: PWM 周波数の計算 8 ビットのPR2 レジスタ値のレンジは0

DS00001523A_JP - p. 22 2015 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15