STM32 呼吸灯 (PWM パルス幅変調に基づく)

目次

 

 

1. PWM パルス幅変調

1.PWMとは

 2. PWM 信号の生成方法

2. CubuMX は PWM を出力するようにタイマーを構成します。

1. チップの選択 (stm32f103c8t6)

2. 時計の設定

3. タイマー出力 PWM の設定

 4. プロジェクトのエクスポート

3. プログラム工学コード分析

1. TIM1_channel1 の初期化

2. 割り込みコールバック関数で呼吸光を実現

4.実験効果表示

V. まとめ

6. 参考リンク


 

1. PWM パルス幅変調

1.PWMとは

        PWM (Pulse Width Modulation) は、パルス幅変調と呼ばれるパルス幅変調です。マイクロプロセッサのデジタル出力を利用してアナログ回路を制御する非常に有効な技術で、対応する負荷の変化に応じてトランジスタのベースやMOSトランジスタのゲートのバイアスを変調するアナログ制御方式です。トランジスタまたは MOS チューブの導通時間の変更により、スイッチング安定化電源の出力の変更を実現します。

 

        PWM は、インバータ回路のスイッチング デバイスのオン/オフを制御することで、出力端子に振幅の等しい一連のパルスが得られ、これらのパルスを使用して正弦波または必要な波形を置き換えます。PWMは、アナログ信号のレベルをデジタル的にエンコードする方法であることも理解できます。高分解能カウンタを使用することで、方形波のデューティ サイクルが変調され、特定のアナログ信号のレベルがエンコードされます。PWM 信号は常にデジタルのままです。これは、フルスケールの DC 電源が常に完全にオン (ON) であるか、またはまったくオンでない (OFF) ためです。電圧または電流源は、オンまたはオフの繰り返しパルス シーケンスでアナログ負荷に適用されます。帯域幅が十分である限り、PWM を使用して任意のアナログ値をエンコードできます。

PWM パルス幅変調回路図

    9c1f631663414ef585fe8956553b8dd1.png

 

 2. PWM 信号の生成方法

(1) PWM信号は、チップの内部モジュールを介して直接出力できます. I/Oポートには統合モジュールがあり、いくつかの簡単な手順のみが必要であることが前提です. この種のPWM出力を備えた機能モジュールは、プログラミングが容易になると同時に、データがより正確になります。

(2) ただし、IC 内に PWM 機能モジュールがない場合、または要件がそれほど高くない場合は、I/O ポートを使用していくつかのパラメータを設定し、PWM 信号を出力することができます。一連の高低レベル。具体的な方法としては、I/O にタイマーを追加する方法があります。出力する必要のある PWM 信号の周波数がタイマーと一致している場合は、タイマー割り込みを使用してカウントしますが、この方法は一般的には使用されません。精度、頻度などは達成可能性が高くありません。
 

2. CubuMX は PWM を出力するようにタイマーを構成します。

1. チップの選択 (stm32f103c8t6)

500323da1a214062887880674bc8fe4b.png

 

2. 時計の設定

外部高速クロック (HSE) 入力として水晶/セラミック発振器を選択

35e0f3ddb37948118bc94a16bcbcdccf.png

システムクロック数の設定

38c2bcdf031b477bb46d49214426d6aa.png

3. タイマー出力 PWM の設定

PA8 を PWM 出力 IO ポートとして設定

a0cb8​​f1a783b4ccaa83eadf855ff2ab2.png

 4. プロジェクトのエクスポート

15d45cf98e424041a7c704e2222e4af6.png

3. プログラム工学コード分析

1. TIM1_channel1 の初期化

 MX_TIM1_Init(); //タイマー 1 初期化関数

6e3f88e1ac5a486b9bef065fd8b6ed74.png

 

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); //tim1 チャネル 1 タイマーを開始

タイマー割り込みタイマーがオンになっている場合にのみ、動作してカウントを開始します

2. 割り込みコールバック関数で呼吸光を実現

 __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,i); //PWM出力デューティ比設定関数

  MX_GPIO_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);				//开启tim1通道1计时器
   
  /* USER CODE END 2 */
	int i=0,flag=0;
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	
	 if(flag==0)			//0状态占空比按+10的步长逐渐增大
	 {
		 i+=10;
		 if(i>400)
			flag=1;
	 }
	 else				   //1状态占空比按-10的步长逐渐减小
	 {
		i-=10;
		if(i<5)
			flag=0;
	 }
	 /*PAB2总线时钟为72Mhz,经过72分频后为1Mhz,计数周期RCC为65535
	  __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,i);	    //设置该PWM输出占空比为变量i
	 
    /* USER CODE BEGIN 3 */
  }

 プロジェクト コード ファイル ポータル:プロジェクト コード

4.実験効果表示

PWM_LED

V. まとめ

        ブリージング ライトは主に、PWM パルス幅変調によって IO 出力電圧を変化させ、LED の明るさの段階的な変化を実現します.PWM は非常に便利なものであり、将来の工学設計で頻繁に遭遇または使用される可能性があります. したがって、将来の読者がこの小さな実験を通じて PWM について学ぶことができることを願っています。

6. 参考リンク

STM32 を使用して PWM 波形を出力する

PWM (パルス幅変調) 信号原理

STM32CUBEMX_PWM ベースの呼吸灯

 

おすすめ

転載: blog.csdn.net/qq_52791446/article/details/127576192
おすすめ