LoginSignup
0
0

More than 3 years have passed since last update.

STM32 nucleoを使う (7) PWMによるLEDの調光

Posted at

はじめに

STM32の汎用タイマーの使用例としてPWMをあげます。PWMはモーター制御や音源、調光などいろいろな用途で使われています。
汎用タイマのTIM2を使いLEDをPWMで点灯させます。

PWM

PWMはPulse Width Modulation:パルス幅変調の意味でパルス波のデューティを変化させて変調します。

タイマーでPWMを実現するには、まず周期を設定します。その周期の中でHの期間をコンペア値で設定します。

001.png

LEDの制御なので周期は1kHzとします。分解能は0.1%以上にしたいと思います。

LED設定

NUCLEO-F303REのユーザーLEDはTIM2が接続されています。
002.png
PA5端子をクリックしTM2_CH1を選択します。

TIM2設定

Pinout & Configurationを選択し、Timersを広げ、TIM2をクリックします。
Clock Sourceを"Internal Clock"に、Channel1を”PWM Generation CH1”にします。
ConfigurationのParameter Settingタブを選択します。
Prescalerは72にします。クロックソースは72MHzなので72分周すると1MHzになります。
Counter Periodは999にします。
003.png

コード

TIM7で10msのタイマー割り込みを発生させ、割り込み中でPWMのデューティを設定します。

割り込みハンドラー

タイマー割り込みで10回ごとにデューティ比を設定した配列の値を読み込み、コンペア値に変換し設定します。
コンペア値の設定は__HAL_TIM_SET_COMPARE()で行います。

/* USER CODE BEGIN PV */
uint16_t    pwmTbl[] ={
        0,20,40,60,80,100,80,60,40,20,
};
/* USER CODE END PV */

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){

    static unsigned char count = 0;
    static unsigned char stage = 0;
    int tblSize = sizeof(pwmTbl)/sizeof(uint16_t);
    uint32_t width;

    if(htim == &htim7) {
        count++;
        if (count >= 10) {
            count = 0;
            stage++;
            if (stage >= tblSize) {
                stage = 0;
            }
            width = (999*pwmTbl[stage])/100;
            __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, width);
        }
    }
}
/* USER CODE END 0 */

main

メイン処理はタイマーの設定を行います。
HAL_TIM_PWM_START()でPWM動作を開始します。

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_TIM7_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim7);
  /* tim7 Start */
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  /* PWM Start*/
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 0);
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

LEDの明るさが変わるはずです。

STM32の使い方を学習した内容をまとめています。内容に不備等ありましたら連絡お願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0