cancel
Showing results for 
Search instead for 
Did you mean: 

Knowledge Base Articles

PSoCでのPWMを使用した正弦波の生成 – KBA226852 - Community Translated (JA)

ChaitanyaV_61
Employee

PSoCでのPWMを使用した正弦波の生成 – KBA226852 - Community Translated (JA)

Community Translated by NoTa_4591161          Version: **

Translation - English: Generating Sine Wave using PWM in PSoC – KBA226852

質問:

PSoC®でPWMを使用した正弦波の生成方法を教えてください。

回答:

正弦波は、ルックアップテーブル (LUT) に基づいて、一定の間隔でパルス幅変調 (PWM) 信号のデューティサイクルを変化させることによって生成されます。図1に設計の概要を示します。

1PWMを使用して正弦波を生成するブロックダイヤグラム

pastedImage_1.png

この設計には5つのステップがあります。

  1. 正弦波のルックアップテーブルを作成してください。
  2. 定期的な割込みを生成するようにTimerブロックを設定してください。
  3. PWMブロックを設定してください。
  4. 各タイマー割込み中に、PWMデューティサイクルを変化させてください。
  5. ローパスフィルターを使用してください。

1. 正弦波のLUT

LUTの要素数によって、正弦波を作成するサンプルポイントの数が決まります。サンプルポイントの数が多いほど、量子化エラーは少なくなります。したがって、サンプルポイントの数をあまり低くして、正弦波を合成しないでください。アプリケーションに基づいて、サンプルポイントの数を選択できます。

正弦波の64ポイントLUTの例を以下に示します。

Sine_Lookup[64] = {0x19,0x1b,0x1e,0x20,0x23,0x25,0x27,0x29, 0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x32, 0x32,0x32, 0x32,0x31,0x30,0x2f,0x2e,0x2c, 0x2b,0x29,0x27,0x25,0x23,0x20,0x1e,0x1b, 0x19,0x17, 0x14,0x12,0xf, 0xd,0xb,0x9, 0x7,0x6,0x4,0x3,0x2,0x1,0x0,0x0, 0x0,0x0,0x0,0x1,0x2,0x3,0x4,0x6, 0x7,0x9,0xb,0xd,0xf,0x12,0x14,0x17};

2. Timerブロックの設定

Timerブロックは、PWM信号のサンプリング時間を決定します。PWM信号のデューティサイクルは、タイマーがオーバーフロー割込みを生成するたびに変化します。デューティサイクルは、LUTで指定された値に設定されます。割込みが生成されるたびに、デューティサイクルはLUTからの次の値に割り当てられます。タイマーが割込みを生成する間隔は、サンプリング時間になります

サンプリング時間の計算:

サンプリング時間 タイマーの周期 タイマーブロックの周波数

サンプリング周波数 1 サンプリング時間

正弦波の周期 サンプリング時間 サンプル数

サンプリングレート サンプル数 正弦波の周波数

60 Hzの正弦波が必要な場合、64個のサンプルポイントで、サンプリングレートは3.84 kspsになります。

3.    PWMブロックの設定

PWMは短い期間を生成するように設定されているため、サンプリング期間あたりのPWMサイクル数が多くなります。サンプルあたりのPWMサイクル数は、フィルターデバイスから安定した出力サンプル電圧を生成するのに十分な数である必要があります。サンプリング周期ごとに20 PWMサイクルが必要な場合、PWMの周波数はサンプリング周波数の20倍でなければなりません。

4. 各タイマー割込み中でのPWMのデューティサイクル変更

PWMのデューティサイクルは、タイマー割込みが発生するたびに(サンプリング周期ごと)、LUTに従って変化します。これは、次のコードスニペットを使用して示されます。

if(interrupt == INTERRUPT_OCCURED)

      {

     PWM_WriteCompare(Sine_Lookup[position++]); /* 各割込みの最後でPWMのデューティサイクルを変更 */

             if(position>63)

       {position=0;} /* LUTで配列の制限を超えた場合、0にロールバック */

       interrupt = 0;

}

:このコードスニペットは、使用しているデバイスに応じて変更する必要があります。適切なAPIについては、それぞれのコンポーネントのデータシートまたはPDLを参照してください。

5. ローパスフィルター

生成されたPWM波は、フィルター回路を使用して対応するアナログ電圧を生成するために使用されます。フィルターは、PWM電圧と同等の電圧を生成できる任意のデバイスです。最も単純なフィルター回路は、RCローパスフィルターです。フィルターは単純に各PWMサイクルのデューティサイクルを積分するため、PWM波の電圧を平均化します。

デューティサイクルが50%のPWMでは、波形の最大電圧のほぼ半分の平均電圧を生成できます。5 Vロジックを使用してPWMを生成する場合、この平均電圧は2.5 Vにほぼ等しくなります。デューティサイクルがわずか10%のPWM信号は、5 Vロジックでのみ0をわずかに超える平均電圧を生成できます。 90%のデューティサイクルを持つPWM信号は、5Vロジックよりわずかに低い平均電圧を生成できます。

この実装が機能するためには、積分器の周期がPWMの周期と同じかそれよりわずかに長くなければなりません。つまり、RC PWM周期です。

計算例:

目的: 周波数1 Hzの正弦波を生成します。

サンプルポイントの数を64と仮定します。

周波数1 Hzの正弦波を生成するために、サンプリング時間は次のように計算されます。

            サンプリングレート サンプル数 正弦波の周波数

            サンプリングレート 64サンプル/秒。

            サンプリング時間 15 ms

PWM周期を2μSと仮定します。したがって、C = 1 nFの場合、Rは次のように計算されます。

RC PWMの周期。これは、R 2 Kを意味します。

上記の設計では、図2に示すように1 Hzの正弦波が得られます。

2DSO1 Hz正弦波出力

pastedImage_2.png

0 Likes
Version history
Revision #:
1 of 1
Last update:
‎Jul 03, 2020 03:05 AM
Updated by:
 
Contributors