Community Translation - Generating Sine Wave using PWM in PSoC – KBA226852

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi,

I would like to translate KBA226852 into Japanese.

Thanks,

Kenshow

 

0 Likes
2 Replies
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Original KBA:

Generating Sine Wave using PWM in PSoC – KBA226852

Translated by Kenshow

==============================

タイトル: PSoCでPWMを使用して正弦波を生成– 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

==============================

17-Apr-2020

Kenshow

0 Likes
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello, Kenshow-san

We receive your translation, it will be published to KBA to Community.

After upload, You will receive the points as the word of KBA.

Due to the current volume of works (waiting review, etc.), Please bear with me for the delayed the response.

It could be delayed, but it will be processed soon.

Thanks for your contribution to CDC!

Will keep you update the status.

Thanks,

Jenna Jo

Jenna Jo