メインコンテンツ

生成される PWM 出力についての信号の監視とパラメーター調整

この例では、Embedded Coder® Support Package for STMicroelectronics® STM32 Processors を使用して、Simulink® モデルの PWM Output ブロックで PWM 信号を生成する方法を示します。

はじめに

この例では、STMicroelectronics® NUCLEO-F429ZI ボードの Simulink® モデル内の PWM Output ブロックについて、その使用方法とコード生成方法を学習します。このブロックを使用して、タイマー モジュール 1 のチャネル 1 とチャネル 2 で PWM 信号を生成します。生成される PWM 出力の周波数とデューティ比を監視および調整する方法についても学習します。

前提条件

以下のチュートリアルを完了します。

必要なハードウェア

この例を実行するには、次のハードウェアが必要です。

  • STMicroelectronics NUCLEO-F429ZI ボード。

  • マイクロ USB ケーブル。

  • 接続用のジャンパー線。

モデル

このモデルを使用して、タイマー 1 モジュールのチャネル 1 出力、チャネル 1 相補出力、チャネル 2 出力の各ピンで PWM 信号を生成できます。

タイマー モジュール 1 のチャネル 1 と 2 で PWM 信号を生成するための PWM Output ブロックの構成

このタスクでは次のようになります。

  • PWM Output ブロックは、TIM1 タイマー モジュールについて PWM 出力を生成するように構成されています。チャネル 1 と 2 が有効であり、有効なチャネルのデューティ比のパーセンテージが入力として与えられます。Freq count 端子を使用して、タイマーの周波数カウントも入力として与えられます。タイマーのカウンターは CEN 入力端子を使用して有効/無効にできます。

  • PWM 出力ピンは、立ち上がり/立ち下がりエッジ検出による外部割り込みモードで構成された GPIO ピンに接続されます。Hardware Interrupt ブロックは、対応する外部イベントがトリガーされたときにそれらの GPIO ピンを読み取るように構成されています。これは、生成される PWM 信号をデータ インスペクターで監視するときに役立ちます。

1. stm32_pwmgettingstarted ターゲット モデルを開きます。

2. ブロックを構成します。ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。

  • "PWM Output" ブロックで、[Timer module] として TIM1 が選択されています。"チャネル 1 と 2" が有効になっており、[Duty cycle unit]Percentage で、それが対応するチャネル入力への入力として与えられます。

  • タイマーの周波数カウントを入力として与えるために [Enable frequency input] が選択されています。[Enable counter input] が選択されており、カウンターの有効化/無効化にはスライダー スイッチが使用されます。

  • "Hardware Interrupt" ブロックは EXTI15_10_IRQHandler 用に構成されており、EXTI15EXTI14、および EXTI12 のイベントが選択されています。

  • EXTI15EXTI14、および EXTI12 のイベントに接続された Function Call Subsystem の内部で、ピン PF14 (CH1 出力に接続)、PF15 (CH1 相補出力に接続)、および PE12 (CH2 出力に接続) が読み取られます。

3. 新しい STM32CubeMX プロジェクトを作成するか、既存の STM32CubeMX プロジェクトを参照します。STM32CubeMX プロジェクトを STM32CubeMX ツールで起動します。詳細については、STMicroelectronics の STM32 プロセッサ ベースのボード入門を参照してください。

4. STM32CubeMX プロジェクトで次の構成を行って、"TIM1" のチャネルを有効にして構成します。

  • [Clock Source]Internal として選択する。

  • [Channel 1]PWM Generation CH1 and CH1N を選択し、[Channel 2]PWM Generation CH2 を選択する。

  • [Prescaler]9999 と設定する。

  • [Counter Period (AutoReload Register - 16 bits value)] を初期周波数カウントを使用して設定する。

  • [Counter Mode]Up として選択する。

5. 次の構成を行って、"GPIO" ピンを外部割り込みモードで有効にして構成します。

  • [Pinout] ビューで、ピン PF14PF15PE12 を検索し、ピンを右クリックしてそれぞれ GPIO_EXT14GPIO_EXT115GPIO_EXTI12 として構成する。

  • [System Core][GPIO] で、これらのピンの [GPIO mode]External interrupt mode for rising/falling edge detection として構成されていることを確認する。

メモ: ハードウェア ボードには ST-LINK に接続された USART ピンがあります。外部 FTDI を必要とせずにモデルをエクスターナル モードで実行するには、GPIO 設定が USART 用に構成されていることを確認してください。ST-LINK に接続された USART ピンの詳細については、それぞれのボードの概略図を参照してください。

6. STM32CubeMX プロジェクトで、次の構成を行います。

  • [Project Manager]、[Project] で、[Do not generate the main()] を有効にする。

  • [Project Manager]、[Project] で、[Generate under root] を無効にする。

  • [Project Manager]、[Advanced Settings]、[Driver Selector] で、周辺装置に対して低水準 (LL) ドライバーを選択する。

  • [Project Manager]、[Advanced Settings]、[Generate Functions Calls] で、すべての周辺装置の初期化関数呼び出しについて [Do Not Generate Function Calls] を無効にする。

  • [Project Manager]、[Advanced Settings]、[Generate Function Calls] で、すべての周辺装置の初期化関数呼び出しについて [Visibility (Static)] を無効にする。

  • プロジェクトを保存する。

モデルの監視と調整

モデルに対して "監視と調整" アクションを実行すると、ホスト コンピューターがターゲットと通信し、生成された実行可能ファイルがターゲットで実行されます。

1. [ハードウェア] タブを開き、[監視と調整] をクリックします。診断ビューアーから、モデルのコードが生成され、生成された実行可能ファイルの読み込み後にホストがターゲットに接続されることを確認できます。

2. モデルの実行中に、"データ インスペクター" を使用して "GPIO 出力信号" を観察し、生成される PWM 信号のデューティ比と周波数を監視します。

  • "PWM Output" ブロックの入力端子を使用して周波数とデューティ比をランタイムで変更し、対応する PWM 出力の変化をデータ インスペクターで観察します。

  • PWM 信号はカウンターがオンになると始まり、カウンターがオフになると停止します。

PWM 出力の解析

この PWM 出力の解析は pin PF_14Timer 1 Channel 1 output に基づいています。上の図から、生成される PWM の "期間""1s" です。

PWM 期間は次のように計算されます。

  • PWM 周波数 = クロック周波数/((1 + 周波数カウント入力)(1 + プリロード レジスタ値))

  • PWM 期間 = 1/(PWM 周波数)

ここで

  • 周波数カウント = 9999

  • プリロード レジスタ値 = 9999

  • クロック周波数 = 100 MHz

したがって、PWM 周波数 = (100 x 10^6)/(10000 * 10000) = 1 Hz、PWM 期間 = 1s です。

この例では、上記のすべての構成が事前構成されています。

その他の試行:

  • DownCenter アライン モードなど、他のカウンター モードを STM32CubeMX プロジェクトで構成して使用します。

  • 更新イベントやキャプチャ コンペア イベントなどのタイマー イベントに対する Function Call Subsystem をトリガーするように Hardware Interrupt ブロックを構成します。これらのイベントは、ブロックの [イベント] セクションで対応するイベントの入力を有効にすることで、入力端子を使用して生成することもできます。

  • センター アライン モードで、STM32CubeMX プロジェクトの反復カウンターを奇数値として設定します。アンダーフロー時に更新イベントが生成されることを確認します。次に、PWM Output ブロックで [Set repetition counter after counter is enabled] を有効にし、オーバーフロー時に更新イベントが生成されることを確認します。

参考