Project_OKI’s diary

エンジニアの勉強ブログ

mbed(nucleo f401)でサーボモータを動作させる

​​

mbedでサーボモータ制御

1.目的

 (1) nucleo f401でPWM出力を行い、サーボモータを動作させる。

 (2) mbedのプログラムで実装する

 (3) STM32マイコンのプログラムで実装する。

作成したもの:
 

2.使用部品

 

個数 部品名 型番
1 接続ケーブル ジャンパーワイヤ​​  
1 mbed(マイコンボード) nucleo f401RE​​
1 USBケーブル USBミニBタイプ​​​
1 サーボモータ SG-90

 

3.内容

今回は、nucleo f401を使用して、サーボモータ(SG-90)を動作させます。

サーボモータのデータシートを確認します。
SG-90データシート:​https://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf

データシートから、
・0°~180°に動作する。
・電圧 3.3V~6V
・0.12秒で60°回る。

下記より、
・PWM Period(PWM周波数) 20ms
・Pwm Width (PWM幅)
  ・0.5ms   :-90°
      ・1.45ms :0°
  ・2.4ms   :90°
となります。

今回は、確認だけなので、PWMは3.3Vで、直接接続します。


次に、mbedのPWMを出力できるポートを確認します。
ポート確認:​https://os.mbed.com/platforms/ST-Nucleo-F401RE/

今回は、PA_3を使用します。


接続:
 ・mbedの5Vを真ん中の赤
 ・mbedのGNDを茶色
 ・mbedのPWM信号線をオレンジ (この写真ではPA_3)
 に接続します。
 
接続写真:



次に、プログラムを作成します。
作成するプログラムは、mbedのプログラムで作成を行います。

 mbedのプログラムは下記サイトで作成、実行、書き込みを行います。

Free open source IoT OS and development tools from Arm | Mbed

 

//mbedプログラム
/*
 mbed :nucleo STM32F401
プログラム内容:
 SG-90を動作させるプログラム
 -90°~90°に動作させる。
 出力ポート:A3
*/
#include "mbed.h"


PwmOut PWM(A3); //初期化
int main() {
    PWM.period_us(20000);  //周期設定
    while (1) {
                PWM.pulsewidth_us(500); //パルス幅変更
                wait(1);
                PWM.pulsewidth_us(1450);
                wait(1);
                PWM.pulsewidth_us(500);
                wait(1);
                PWM.pulsewidth_us(2400);
                wait(1);
    }
}


作成プログラム:​https://os.mbed.com/users/follow/code/2021_08_28_Servo_practice1/

これで、パソコンとmbedを接続し、動作させると、下記のように動作します。


4.次回やりたいこと

 (1) マルチプレクサを用いて、2個のPWMで4個のサーボモータを動作させる。