STM32資料 基礎編 4

サーボモーターを動かしてみよう

今回はPWMという新しい機能を使ってサーボモーター動かしてみる

今回から少しだけ配線が必要になるので、不安なら先輩に確認してもらおう

今回やること

作業の流れ

ピンの割り当て

今回はPWMという機能を使います

(プロジェクト名).iocからPA8を選択し、TIM1_CH1を割り当てよう

左側のTimersからTIM1を選択し、上側のModeと下側のConfigurationを写真のように設定しよう

TIM1の設定からChannel1にPWM Generation CH1を割り当てよう

下のConfigurationからParameter Settingsを開き詳細な設定をしよう

Parameter Settings

各項目を以下のように設定してね

この設定でやっていること

回路

サーボモーターとSTM32をジャンパー線を使ってつなぐ

配線を間違えるとサーボモーターが壊れてしまうことがあるので気を付けてください

真ん中の5Vだけは絶対に間違えないようにしよう!

配線図

用途 STM32 サーボモーター
信号線 D7(PA8に対応) 黄色
5V線 5V 赤色
GND線 GND 黒色

プログラム

今回はタイマーのスタートと値の設定の2つの関数を使用します

TIMのスタート

指定したタイマーを起動するための関数

HAL_TIM_PWM_Start(&htimx, TIM_CHANNEL_y);

この関数の引数

引数名 変数型 内容
&htimx TIM_HandleTypeDef* TIMのポインタ(xはTIMの番号)
TIM_CHANNEL_y uint32_t yはChannelの番号

TIMの設定

起動したタイマーの値を設定するための関数

__HAL_TIM_SET_COMPARE(&htimx , TIM_CHANNEL_y, Value);

この関数の引数

引数名 変数型 内容
&htimx TIM_HandleTypeDef* TIMのポインタ(xはTIMの番号)
TIM_CHANNEL_y uint32_t yはChannelの番号
Value uint16_t PWMのデューティ比を変更
TIMを止める関数

今回は使用しないが、安全装置などの設計をする上で止める関数が使えるので紹介しておく

HAL_TIM_PWM_Stop(&htimx, TIM_CHANNEL_y);

引数はスタートの関数と同じなので頭の片隅においておくといいかも?

サンプルコード

実際にサーボモータを回し続けるコードを作成した

0~2500の好きな値を指定できるので、色々な値を試してみよう

(CounterPriodを2500にしたので、0~2500の間で調整することになっている)

#include "wrapper.hpp"
#include "tim.h"

void init(){
    
    //タイマーの起動
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_Delay(500);     
}
        
void loop(){
    
    //値の設定
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1000);
    HAL_Delay(1000);
        
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1500);
    HAL_Delay(1000);
        
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 2000);
    HAL_Delay(1000);
}

終わりに

今回は、タイマーを使ってサーボモータを動かしてみました

ほかのモーターも同じように動かすことができるので、機会があったらやってみてね

リンク

・メインページ

・前のページ

・次のページ