mbedには簡単な設定で動作するPWM出力が装備されています。このPWMを使ってパルスを出力し、サーボモータを動かしましょう。

課題1
 mbedに接続したラジコン用サーボに1.0ms~2.0msのパルスを順次送信し、アームを左右に動かすプログラムを作成しましょう。送信周期は20ms=50Hzとします。

使用するサーボ
 ラジコン用として販売されているサーボであればほとんどのサーボが利用可能です。ただし、デジタル・サーボは使用できません。作例ではプチロボで使っているE-Sky製小型サーボを使用しています。

  サーボ例:http://eleshop.jp/shop/g/g490001/

 サーボ接続線は電源とシグナルの3本で構成されているのが普通です。写真のサーボの配線は次のとおりです。

  白:信号線、赤:電源(+)、黒:共通グラウンド
 ほとんどのサーボは電源が赤・黒または赤・茶です。シグナルが白や橙です。

1_P1220495.jpg
mbed回路図
 mbedに4行×20桁LCDを接続した状態を基本システムとしてサーボ・モータを接続します。サーボの適正電圧は4.8V~6Vとなっているので、5V電源をmbedと共通電源として接続します。2行×16桁LCDなども使えますが、表示部分のプログラム修正が少し必要になります。

12_AS000520.GIF組み立て
 mbed基本システムにサーボを接続します。サーボの3ピン端子にブレッドボード用配線ピンを直接接続しています。シグナルをmbedのp15ピンに接続します。

 mbed         サーボ
(p15)   橙 =======> 白
(電源+) 赤 =======> 赤
(電源-) 黒 =======> 黒

 
3_P1220497.jpg 以上でハードウェアは完成です。

2_P1220500.jpgmbedプログラミング
・サーボ出力用ピンはp21です。mbedのPWM出力を利用して、サーボ駆動に必要なパルスを作り出します。
PwmOut servo1(p21); 

・パルス出力周期は20ms=50Hzです。次の一文で設定します。
servo1.period_ms(20); 

・パルス幅を出力します。0.001s=1ms~0.002s=2msの間を0.0001s=0.1ms間隔で変化します。servo1.pulsewidth_ms(pwidth)とすれば、1ms単位での指定もできますが、pwidthがint型のために1.5msなどの指定ができないために、わかりにくいですが、0.001sと秒単位の指定をします。
servo1.pulsewidth(pwidth)

■■下記URLでPublishしています。
 mbedプログラムは下記のURLでPublishしています。
  http://mbed.org/users/takeuchi/programs/2bk0817_servo_test01/lw2zw9

■■mbedソース・リスト
<
>//Servo test01
// Servo basic test

#include "mbed.h"
#include "TextLCD0420.h"

#define ON 1
#define OFF 0

PwmOut servo1(p21);

TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3

int main() {
  float pwidth;
  lcd.cls();
  lcd.locate(0,0);
  lcd.printf("*** Servo test ****\n");         
  servo1.period_ms(20);// pulse cycle = 20ms

  while(1){   
    for(pwidth=0.001; pwidth<=0.002; pwidth+=0.0001) { // 1ms ~ 2ms
      servo1.pulsewidth(pwidth); // pulse servo out
      lcd.locate(0,1);
      lcd.printf("PulseWidth:%2.5f%",pwidth);
      wait(0.25);
    }
  }//while    
}//main4

 実行すると、サーボのアームが左右に動きます。そのときのパルス幅1.0ms~2.0msをLCDに表示します。

5_P1220491.jpg
長野県飯田工業高校 竹内浩一

========<コラム>=====================

サーボは・・・サーボ・モータともいいます。その語源と思われるServant=召使い=命じたとおりに動くから名付けられたようです。ONにすると普通のモータはただ回転するだけですが、サーボは指定した角度で停止させることができます。

サーボの角度指定は・・・パルス幅で行います。一般的なラジコン用サーボのパルス幅は、1ms~2msです。1.5ms付近をニュートラル=中立といい、真ん中で止まります。手でサーボを動かすとニュートラルを中心に±90°回転しますが、±60°程度がサーボを壊さない安全な動作範囲です。



| | トラックバック(0)

トラックバック(0)

このブログ記事を参照しているブログ一覧: <55>mbed入門 ~mbedでラジコン用サーボを動かそう その1~

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/5851





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.