生成される 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
用に構成されており、EXTI15
、EXTI14
、およびEXTI12
のイベントが選択されています。EXTI15
、EXTI14
、および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] ビューで、ピン
PF14
、PF15
、PE12
を検索し、ピンを右クリックしてそれぞれGPIO_EXT14
、GPIO_EXT115
、GPIO_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_14
の Timer 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 です。
この例では、上記のすべての構成が事前構成されています。
その他の試行:
Down
やCenter
アライン モードなど、他のカウンター モードを STM32CubeMX プロジェクトで構成して使用します。更新イベントやキャプチャ コンペア イベントなどのタイマー イベントに対する Function Call Subsystem をトリガーするように Hardware Interrupt ブロックを構成します。これらのイベントは、ブロックの [イベント] セクションで対応するイベントの入力を有効にすることで、入力端子を使用して生成することもできます。
センター アライン モードで、STM32CubeMX プロジェクトの反復カウンターを奇数値として設定します。アンダーフロー時に更新イベントが生成されることを確認します。次に、PWM Output ブロックで [Set repetition counter after counter is enabled] を有効にし、オーバーフロー時に更新イベントが生成されることを確認します。