You are here

RCサーボの利用

RCサーボの利用

PICSYS18では、4個までのRCサーボを任意のI/Oピンに接続し、制御することができます。
RCサーボの制御は、基本的に2つの操作で行います。例えばRB0ポートにRCサーボを接続した場合、以下の2つの操作を行います。

  • pinMode(RB(0), OUT_SERVO1):RB0にRCサーボ出力機能の1番目を割り当てる
  • digitalWrite(RB(0), 50):RB0のサーボの回転角を最大値の50%に設定する

RCサーボの制御に必要な継続的なPWMパルスの出力処理は、PICSYS18が自動的に行います。

exservo1.c: 1個のRCサーボの制御



#include "picsys18.h" void setup() { pinMode(CN2, OUT_SERVO1) ; // RCサーボ制御出力の割り付け pinMode(SW1, INPUT) ; pinMode(SW2, INPUT) ; } int pos = 0 ; void loop() { delayMilliseconds(20) ; if (digitalRead(SW1) == LOW) pos += 1 ; if (digitalRead(SW2) == LOW) pos -= 1 ; /* 値は-100(%)から100(%) */ if (pos > 100) pos = 100 ; if (pos < -100) pos = -100 ; digitalWrite(CN2, pos) ; // サーボの回転制御値の設定 }

CN2はPIC-DML-2520のRCサーボ用のコネクタで、具体的にはpic-dml-2520.hで、#defineによりRA(3)と定義されています。

exservo2.c: 2個のRCサーボの同時制御



#include "picsys18.h" void setup() { pinMode(CN2, OUT_SERVO1) ; // RCサーボ制御出力の割り付け pinMode(CN3, OUT_SERVO2) ; // RCサーボ制御出力の割り付け pinMode(SW1, INPUT) ; pinMode(SW2, INPUT) ; pinMode(SW3, INPUT) ; pinMode(SW4, INPUT) ; } int pos1 = 0 ; int pos2 = 0 ; void loop() { delayMicroseconds(20) ; if (digitalRead(SW1) == LOW) pos1 += 1 ; if (digitalRead(SW2) == LOW) pos1 -= 1 ; if (digitalRead(SW3) == LOW) pos2 += 1 ; if (digitalRead(SW4) == LOW) pos2 -= 1 ; /* 値は-100(%)から100(%) */ if (pos1 > 100) pos1 = 100 ; if (pos1 < -100) pos1 = -100 ; if (pos2 > 100) pos2 = 100 ; if (pos2 < -100) pos2 = -100 ; digitalWrite(CN2, pos1) ; // サーボの回転制御値の設定 digitalWrite(CN3, pos2) ; // サーボの回転制御値の設定 }

PICSYS18では必要に応じて4個までのRCサーボの制御が可能です。
ただし、PIC-DML-2520に装備されているRCサーボ用のコネクタは3個なので、基板の加工をしない場合には3個が上限となります。

開発ソフト: 
チップファミリー: 
MCUチップ: 
技術: