記事

DIPマイコンLPC1114FNでmbed入門 <3>サーボ・テスタの製作 ~その2~

サーボ・テスタの製作 ~その2~

 前回ハードウェアが完成したので、後半は、サーボ・テスタのプログラミングを楽しみます。

●mbedプログラミング

◆メインのソ-ス・プログラム

 I2Cライブラリは、Publishしてあるプログラムからそのまま取り込んでください。

// Servo Tester

#include "mbed.h"
#include "I2cLCD.h"

I2cLCD lcd(dp5,dp27,dp26); //sda scl reset
PwmOut servo1(dp18);
AnalogIn vr1_adc(dp9);

double vr1,pduty1;

#define ON 1
#define OFF 0
#define XON 0
#define XOFF 1

int main() {

   lcd.cls();
   lcd.locate(0,0);
   lcd.printf("ServoSet");
   wait(0.1);

   while(1){
      vr1=vr1_adc.read();
      pduty1=(vr1+1.0)/1000;
      servo1.pulsewidth(pduty1);
      lcd.locate(0,1);
      lcd.printf("%4.2fms",pduty1*1000);
      wait(0.1);
   }//while
}//main

◆プログラムの説明
 マイコンに内蔵されたA-Dコンバータによりボリュームの電圧を読み込み、0~1.0の値に変換します。この変換値を1.0~2.0msのパルス幅に変換して、PWMとして出力し、サーボを駆動するプログラムです。パルス幅の値はLCDに表示します。

I2cLCD lcd(dp5,dp27,dp26); sda scl reset端子の設定 dp26には何も接続しない。

PwmOut servo1(dp18); サーボ接続用PWM端子の設定

AnalogIn vr1_adc(dp9); アナログ入力端子の設定

vr1=vr1_adc.read();  ボリュームの電圧をA-D変換により読み込む 0~1.0

pduty1=(vr1+1.0)/1000; vr1の値をms単位に変換

servo1.pulsewidth(pduty1); pulsewidthを設定し、サーボを駆動する。

◆Publish
 次のmbed URLでパブリッシュしています。

  https://developer.mbed.org/users/takeuchi/code/20160301_Servo_Tester/

●動作確認
 プログラムが完成後、書き込みアダプタなどを使用して、1114FNにbinファイルを書き込みます。それでは動作確認を行います。

◆ニュートラル
 サーボ・ホーンは取り付けない状態とします。電源をONし、ボリュームを回します。ボリュームの回転に合わせてサーボの軸が回転すれば正常に動作しています。1.5msに合わせて、サーボ・ホーンを写真を参考にして水平に取り付けます。


 

◆パルス幅最小
 ボリュームを回して1.00msに合わせます。これがパルス幅最小値です。サーボ・ホーンはこの位置になります。


 

◆パルス幅最大
 ボリュームを回して2.00msに合わせます。これがパルス幅最大値です。サーボ・ホーンはこの位置になります。


 

 ボリュームを連続回転して、サーボ・ホーンがスムーズに回転することを確認してください。このサーボ・テスタがあればサーボのニュートラルを簡単に出すことができます。また、サーボと同じ様にパルス幅で制御しているラジコン用モータ・コントローラ(ESC)なども同じように動作確認できます。

 サーボをロボットやラジコン飛行機に取り付ける際にニュートラルを出すのにサーボ・テスタはとても便利に使えます。かわいがってあげてください。

竹内浩一

連載メニュー DIPマイコンLPC1114FNでmbed入門

(1) mbedでLチカする手順

(2) サーボ・テスタの製作 ~その1~

(3) サーボ・テスタの製作 ~その2~

(4) 電圧と電流を同時に測れるVIメータの製作 ~その1~

(5) 電圧と電流を同時に測れるVIメータの製作 ~その2~