STM32CubeMX タイマー PWM 出力

STM32CubeMX タイマー PWM 出力

知識百科事典 – PWM の概要

  PWM は、アナログ信号のレベルをデジタル的にエンコードする方法です。高分解能カウンタの使用により、方形波のデューティ サイクルが変調され、特定のアナログ信号のレベルがエンコードされます。いかなる瞬間においても、フルスケール DC 電源は完全にオン (ON) であるか、まったくオンではない (OFF) かのいずれかであるため、PWM 信号は依然としてデジタルのままです。電圧源または電流源は、ON または OFF の繰り返しパルス シーケンスでアナログ負荷に印加されます。ON の場合は DC 電源が負荷に追加されたとき、OFF の場合は電源が切断されたときです。帯域幅が十分である限り、PWM を使用して任意のアナログ値をエンコードできます。
  パルス幅変調 (PWM、パルス幅変調) は、マイクロプロセッサのデジタル出力を使用してアナログ回路を制御する非常に有効な技術であり、測定、通信から電力制御、変換に至るまで、多くの分野で広く使用されています。
  PWM の利点の 1 つは、プロセッサから制御対象システムへの信号がデジタル形式であり、デジタルからアナログへの変換が実行されることです。ノイズの影響を最小限に抑えることができます(パソコンと同様)。ノイズがデジタル信号に影響を与えるのは、論理 1 を論理 0 に、または論理 0 を論理 1 に変えるほど強い場合のみです。

STM32タイマーPWM出力の概要

  タイマ パルス幅変調モードは、TIMx_ARR レジスタによって決定される周波数と TIMx_CCRx レジスタによって決定されるデューティ サイクルを持つ信号を生成できます。TIMx_CCMRx レジスタの OCxM ビットに「110」 (PWM モード 1) または「111」 (PWM モード 2) を書き込むと、PWM を生成するように各 OCx 出力チャネルを独立して設定できます。TIMx_CCMRx レジスタの OCxPE ビットを設定して、対応するプリロード レジスタを有効にする必要があります。最後に、TIMx_CR1 レジスタの ARPE ビットを設定して (アップカウントまたは中心対称モードで) 自動リロード プリロード レジスタを有効にする必要があります。
   プリロード レジスタは、更新イベントが発生した場合にのみシャドウ レジスタに転送されるため、カウンタがカウントを開始する前に、TIMx_EGR レジスタの UG ビットをセットしてすべてのレジスタを初期化する必要があります。OCx の極性は、TIMx_CCER レジスタの CCxP ビットを使用してソフトウェアで設定でき、アクティブ High またはアクティブ Low に設定できます。TIMx_CCER レジスタの CCxE ビットは、OCx 出力イネーブルを制御します。

  • PWMモードの概要

  カウンタのアップカウント モード (つまり、TIMx_CR1 の DIR ビットが 0) では、TIMx_CNT<TIMx_CCRx の場合、PWM 信号リファレンス OCxREF は High になり、それ以外の場合は Low になります。TIMx_CCRx の比較値が自動リロード値 (TIMx_ARR) より大きい場合、OCxREF は「1」のままです。比較値が 0 の場合、OCxREF は「0」のままです。以下の図は、TIMx_ARR=8 (ARR リロード レジスタ、タイマのカウント周期を示す) の場合のエッジ揃え PWM 波形の例です。
ここに画像の説明を挿入

  この例では、IO 出力モード - PWM 波形出力を実装します。LED駆動を例に挙げると、高度なタイマー機能(PWMモード)を使用して、呼吸する光の効果を実現します。

1. ハードウェアインターフェース

  このハードウェア プラットフォームには 3 つの LED ライトがあります: LED2、LED3、LED4 LED2 は PA1 に接続され、LED2 は PB8 に接続され、LED4 は PB9 に接続されます。CH2 は外部ピン PB8 および PB9 に対応します
ここに画像の説明を挿入
  。
ここに画像の説明を挿入

2 ソフトウェア設計

  STM32CubeMX ツールを開き、タイマー 4 を設定し、PB8 をタイマー 4 のチャネル 3 (多重化プッシュプル出力) として設定し、PB9 をタイマー 4 のチャネル 4 (多重化プッシュプル出力) として設定します。
ここに画像の説明を挿入
ここに画像の説明を挿入
  タイマ 4 の基本構成と PWM モードの構成
  タイマ チャネル モードを PWM モードに設定し、分周率を 72、リロード値を 500、アクティブ レベルを Low レベルに設定します。
ここに画像の説明を挿入

3. パラメータの説明

モデル 説明する
インプットキャプチャダイレクトモード インプットキャプチャダイレクトモード
インプットキャプチャ間接モード インプットキャプチャ間接モード
TRC によるインプットキャプチャ インプットキャプチャトリガモード
アウトプットコンペア出力なし 出力コンペア (フリーズ モード 000)
アウトプットコンペア CH3 出力コンペア (001)
PWM生成 出力なし PWM は出力を生成しません
PWM生成 CH3 CH3へのPWM出力
CH3 結合チャンネル ジョイントチャンネル
xor アクティベーション タイマ入力 XOR モード
ここに画像の説明を挿入

4. コード生成

  TIM4の基本機能構成

/* TIM4 init function */
void MX_TIM4_Init(void)
{
    
    
  TIM_ClockConfigTypeDef sClockSourceConfig = {
    
    0};
  TIM_MasterConfigTypeDef sMasterConfig = {
    
    0};
  TIM_OC_InitTypeDef sConfigOC = {
    
    0};

  htim4.Instance = TIM4;//定时器4
  htim4.Init.Prescaler = 72-1;//分频系数72分频
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;//向上计数方式
  htim4.Init.Period = 300;//重装装载值
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//无时钟分频
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;//自动重装载预装载使能
  if (HAL_TIM_Base_Init(&htim4) != HAL_OK)//初始化定时器
  {
    
    
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  {
    
    
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  {
    
    
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  {
    
    
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;//PWM模式1,CNT<CCR为有效电平
  sConfigOC.Pulse = 0;//占空比
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;//有效电平时间
  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;//快速比较使能
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)//PWM模式初始化
  {
    
    
    Error_Handler();
  }
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  {
    
    
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim4);//硬件层初始户化

}

ここに画像の説明を挿入
  PWM モード設定:
ここに画像の説明を挿入
  PB8、PB9 ピン設定および PWM モード イネーブル

HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_3);//初始化通道3
HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_4);//初始化通道4

  ピンモード設定と PWM 初期化

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
    
    

  GPIO_InitTypeDef GPIO_InitStruct = {
    
    0};
  if(timHandle->Instance==TIM4)
  {
    
    
  /* USER CODE BEGIN TIM4_MspPostInit 0 */

  /* USER CODE END TIM4_MspPostInit 0 */

    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**TIM4 GPIO Configuration
    PB8     ------> TIM4_CH3
    PB9     ------> TIM4_CH4
    */
    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM4_MspPostInit 1 */
  HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_3);//启动通道3
  HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_4);//启动通道4
  /* USER CODE END TIM4_MspPostInit 1 */
  }
}

ここに画像の説明を挿入

4. ブリージングライトの主な機能の例

while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		/*实现呼吸灯*/
		if(flag==0)i++;
		else i--;
		if(i>=300)flag=1;
		if(i==0)flag=0;
		HAL_Delay(3);
		htim4.Instance->CCR3=i;//调节占空比
		htim4.Instance->CCR4=i;
  }

5. HALライブラリタイマーの共通機能の紹介

  HAL ライブラリのタイマの基本関数のソースコードは stm32f1xx_hal_tim.c に、拡張関数の関数は stm32f1xx_hal_tim_ex.c にあり、ここではよく使われるいくつかの関数を中心に紹介します。(以下にリストされている関数は、ユーザーによる呼び出しまたは変更が必要な場合があります)。

/*硬件层初始化:时钟、中断,DMA*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);
/*中断方式开启定时器*/
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
/*DMA方式开启定时器*/
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
/*开启定时器PWM模式*/
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

/*获取状态*/
HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);
/*中断方式开启定时器输入捕获功能*/
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

6. ソフトウェアシミュレーションエフェクト表示

  KEIL ソフトウェア シミュレーションを通じて、ピン レベルの変化、KEIL ソフトウェア関連の設定を確認します。
CPU DLL: SARMCM3.DLL
ダイアログ DLL: DARMSTM.DLL パラメータ: -pSTM32F103C8
ここに画像の説明を挿入
  シミュレーション モードに入る:
ここに画像の説明を挿入
  ピン レベルの変化波形を確認する:ここに画像の説明を挿入
ここに画像の説明を挿入
  波形効果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44453694/article/details/122351580
おすすめ