[Blue Bridge Cup] [Embedded カテゴリ] セクション 14: PWM 出力プログラミング


目的: 特定のピンで調整可能な周波数とデューティ サイクルを持つ方形波信号を生成します。
競技ではPA6とPA7をマスターするだけで済みます。

PWM出力原理

CNT:タイマ内のカウンタ、1us で 1 ずつ増加するように構成されています;
ARR:自動リロード レジスタ (カウント期間に相当)、CNT が ARR までカウントするとオーバーフローし、再びカウントを開始します;
CCRx:比較レジスタ (カウント期間に相当)ハイレベル時間)、CNT が CCRx までカウントすると、出力極性が反転します! (STM32CUBE では CCRx からパルス)
具体的な原理を次の図に示します。
ここに画像の説明を挿入します

単一の PWM 信号出力

例えば今回PA7に1KHZの方形波を出力させたいのですが、ARRリロードレジスタの値はどのように設定すればよいのでしょうか?
1KHZ に対応する周期は 1ms、1ms は 1000 マイクロ秒であるため、ARR に達するには、CNT をマイクロ秒ごとに 1 回、合計 1000 回インクリメントする必要があることになります。また、ARR カウントは 0 から始まるため、ARR を 999 に設定することで達成できます。

ここに画像の説明を挿入します

したがって、これらのパラメータを上記のように設定するだけです。

この「自動リロードのプリロード」は、ここで話しているリロード値ではなく、非常に一般的な設定である「プリロード値」であることに注意してください。有効かどうかにはほとんど関係がないため、そのままにしておきます。デフォルトの状態です。
もう1つのポイントは、PWM出力は割り込み設定を必要としないため、NVICをチェックする必要がないことです。

以下の部分の構成について。
ここに画像の説明を挿入します

これらの構成は関連しています。「モード」には「PWM モード 1」と「PWM モード 2」の 2 つのモードがあり、
ドキュメントでの定義は次のとおりです。

  • PWM モード 1 - TIM15 CNT<TIM15 CCR1 が非アクティブである限り、チャネル 1 はアクティブです
  • PWM モード 2 - TIM15 CNT<TIM15 CCR1 がアクティブである限り、チャネル 1 は
    非アクティブです。

これは、モード 1 は CNT < CCR1 の場合に非アクティブ状態を表し、モード 2 はその逆であることを意味します。
アクティブ状態と非アクティブ状態は、以下の「CH 極性」によって制御され、「CH 極性」が「High」を選択した場合、ハイレベルがアクティブ状態、ローレベルが非アクティブ状態になります。州。
したがって、この 2 つの組み合わせは、mode1 が選択され、「CH Polarity」が「High」に選択されている場合、CNT < CCR1 の場合は方形波信号出力が Low レベルになり、CNT > CCR1 の場合は方形波信号出力が方形波信号出力になることを意味します。電波信号はハイレベルでフラットです。通常、より直感的なこの組み合わせを選択します。「パルス」オプションは「アクティブ状態時間」を指定するため、上で選択した組み合わせがモード 1 で、「CH 極性」が「高」を選択した場合、ここでの「パルス」は高レベル時間を指定し、デューティ サイクルになります。
ARR は 999 (合計 1000 マイクロ秒) に設定されているため、パルス 100 はデューティ サイクル 10% を意味し、パルス 200 はデューティ サイクル 20% を意味します。
ここに画像の説明を挿入します
したがって、上記の構成に従ってください。次に、コードを直接生成します。
main 関数で tim17 の初期化関数を呼び出した後、hal ライブラリ関数を使用して tim17 のチャネル 1 の pwm 出力をオンにします。

	MX_TIM17_Init();
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);

もちろん、main 関数でレジスタを直接操作して、周波数とデューティ サイクルを変更することもできます。

TIM17->ARR=499;
TIM17->CCR1=250;

デュアルPWM信号出力

シングルチャネル PWM コードを 1 回繰り返すだけです。
次に、対応する初期化コードと、メイン関数で PWM をオンにすることによって生成されたコードを追加します。

MX_TIM16_Init();
HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);

おすすめ

転載: blog.csdn.net/Gorege__Hu/article/details/129948948