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個のサーボモータを動作させる。