SERVOモータのコントロール
以前からロボット用に使われている「Servoを使いたい」と思い購入しましたが、なかなか使うチャンスがありませんでした。この正月休みを利用して暖めていた物を試しに使ってみる事にしました。SERVOは一般のモータと異なり、一方方向に回転する物ではなく「ある位置からスタートして、また戻る」を繰り返します。こんな感じで使うもので、使い方は普通のモータと異なります。
小形なアンテナを回転させるのに使おうと思ったのですが、うっかり半回転の物を買って来たので結局使えず(この製品が多い)、しばらくお蔵入りになっていたものです。
1回転の物(360deg)を少し前に購入したので、この機会に改めて動かす実験をして見ました。写真はVer2のVRを付けたものです。
作動の基本
SERVOモータは結構値段が高く、ロボットのような複数使う物では全体でかなりの値段になってしまうので、私としてはあまり複雑な物はやらない事にしています。
SERVOに付いて特徴を並べてみると次のようになります(思いつくままなのでまとまりが無い!)。
部品としてのSERVOなので、買っても秋葉原では説明文など付いてない。どこかの説明文を読まないと回転さえ出来ないのが現状です。
1.信号
ラジコンのプロポーでは1mSecから2mSecのパルスをコントロール信号としてSERVOに加え、回転させている。
SERVOはこのパルス幅と同じ角度の位置になるまで、モータを回転させている。2.回転
回転は180度、360度、複数回るものがカタログ上に見える。ただし1回転以上の物はあまり売っていない。ほとんど半回転(Max180度)の物です。3.チャンネル
市販の製品では20mSecのスパンで9チャンネル分のパルスを連続して送り、受ける方はそれを各SERVOにパルスを送って回転させています。4.記憶
秋月電子で購入して来たGWSの1回転SERVOは、止まるまでパルスを連続で与えないと止まってしまいました。これは、ある意味では便利ですが「パルス幅を記憶してない」のでコントロールが面倒になります。
回転角180度の別メーカの品は「パルス幅を記憶」しているので、ボタンを押して1回信号(パルス)を送れば必要な角度まで回って止まります。その間ボタンから離れても実行されます。5.スピード
速さはSERVOによって大きく変わります、秋月電子GWS1回転の物は約2秒かかります。180度の物はかなり早く回り、もっとゆっくり回って欲しいですがスピードコントロールは出来ません。SERVOの種類によって決まります。6.電源
4.8Vか6.0Vの物が多く売られています。ニッカド電池やニッケル水素電池(NI-MH)で動く物です。IC電源の5Vが来ている場合はそれが使えます。7.電流
想定外なのは電流です。モータが回転を始めるまでたくさん電流が流れ0.5Aのレギュレータを使った場合、電流の制限によって電圧が保てない場合がありました(回転に息をするような症状が出る)。
電池の場合は十分ですが、レギュレータを使った物は1Aの物が必要です。
モータは一度回転を始めるとその後電流はあまり流れません。またスタンバイ(同じ角度を維持)状態では極めて少ない電流になります。8.内部の構造
減速ギヤにプラスチックを使ったものとメタルギヤの2種類の物が売られています。当然メタルギヤの方が耐久力はありますが気持ち重くなります、そして値段も上がります。
軽さを考え、プラスチックの利用も考えられます。
また、内部の軸受けにベアリングの入った丈夫なものなどがあります。9.動力の伝達
SERVOの回転を外部に伝える物として、回転板や十字型をした物など色々な物が市販されています、付属してなければ購入時には忘れずにチエックしましよう。10.本体取り付けの金具など
取り付け板、回転版を固定するネジなど小物が結構必要です。本体の取り付けはネジ止めですが、この辺は現物に合わせれば問題ありません。購入時に注意します。11.コントロール線
SERVOの線は3本です。[A]コントロールでパルス信号を受け取ります。ICの端子とは(ショートしても壊れないように)500Ω-4.7KΩを間に挟んで接続する。
[B]は電源の+です。
[C]は電源の-です。試しに動かす
ボタンを付けて適当なパルス(1mSec)を出してSERVOに加えます。これで右か左に動くはずです。ただし、これは一度だけしか動きません。もう一つパルス2mSecを出すスイッチを付け、これを押すと逆に動くことになります。念の為1mSec+20mSecの休み、そして1mSec+20・・・これを繰り返しSERVOに加え続ける。
2つのSWを押すたびに右・左と動くのが分ります。パルスの幅でSERVOの止まる位置が異なります、また種類で止まる角度も変わります。手元のGWSの1回転の物は5mSecパルスでは回転が止まらなくなりました(短すぎた)、ストッパーが聞かないようです。7mSecあたりが良かったです、これで360度+60度ぐらい回っています。
もう一つの物はこれだと120度ぐらいしか回りません、もう少し時間を短くしたいです。この辺は使い方やメーカによって決めます。
一応、動くことが分りましたのでこれのプログラムを入れておきます。コントロール
ICはPIC16F648Aを使い内部発振の4MHz動作です、特に意味はありません。スイッチは端子をプルアップしてRA0/RA1に接続しDATAとして読み込んでいます。RA3がコントロール信号で(この後Ver2ではRA2に変更)SERVOに接続しています。
レギュレータとして5Vの1Aを付け、外部電源を利用して回転の実験をしました。(よく見るとプログラムは無駄があるので後で直します。)2008/JAN/28
プログラム @ プログラム A ;------------------------------------------------------- ; SERVO Motor control ; Controle Pulse = 20mSec ; 4MHz BY M.Kikuchi ;2008/1/24 ;------------------------------------------------------- LIST P=PIC16F648A INCLUDE "P16F648A.INC" __CONFIG 0x3F51 ERRORLEVEL -302 ;------------------------------------------------------- TEMP EQU 20H ;tempolary ASET EQU 21H ;Standard=15 S_TIME EQU 22H ; CNT1 EQU 23H ;for Timer counter CNT2 EQU 24H SERVO set 3 ;SERVO Controle RA3 ORG 0 ;------------------------------------------------------- BEGIN CALL PORT_INI ;Port Mode set MAIN ;KEY input check comf PORTA,W ;L active movwf TEMP movlw 3 andwf TEMP,W ;mask btfss STATUS,Z goto MA2 ;ノーマル(Center) MA1 bsf PORTA,SERVO ;SERVO start movlw d'12' ;0.1x12=12mSec movwf S_TIME ; MA11 call WA_100 ;Wait decf S_TIME,F ;or decfsz btfss STATUS,Z goto MA11 goto MAEND ;+ ------------------------------------------ MA2 btfss TEMP,1 goto MA3 bsf PORTA,SERVO ;SERVO start movlw d'20' ;0.1X20=2.0mSec movwf S_TIME ; MA21 call WA_100 ;Wait 0.1 mSec decf S_TIME,F btfss STATUS,Z goto MA21 goto MAEND ;- ------------------------------------------ MA3 bsf PORTA,SERVO ;SERVO start movlw d'5' ;0.1X5=0.5mSec movwf S_TIME ; MA31 call WA_100 ;Wait 0.1 mSec decf S_TIME,F btfss STATUS,Z goto MA31 MAEND ;Wait ----------------- bcf PORTA,SERVO ;SERVO stop movlw D'20' ;1X20=20mSec movwf S_TIME MAE2 call WA_1M ; decf S_TIME,F btfss STATUS,Z goto MAE2 goto MAIN ;End ;------------------------------------------------------- PORT_INI clrf PORTA MOVLW 0x07 ;Turn comparators off and MOVWF CMCON ;enable pins for I/O functions ;For P16F648A BSF STATUS,RP0 ;Bank1 BCF STATUS,RP1 ;Bank1 MOVLW 0ffH ;RB0-7=input MOVWF TRISB ;PORTB MOVLW 03H ;RA0-1=in(1) / RA2-4=out(0) MOVWF TRISA ;PORTA BCF STATUS,RP0 ;Bank0 RETURN ;------------------------------------------------------- ; Timer subroutine for 4MHz ; WA_100 :WA_1M ;------------------------------------------------------- WA_100 ;100usec(95usec) MOVLW D'30' MOVWF CNT1 T_LP1 DECFSZ CNT1,F GOTO T_LP1 ;3*30+2-1 NOP ;+2+2=95 NOP RETURN ; ;------------------------------------------------------- WA_1M ;1mSec(with call) MOVLW D'248' MOVWF CNT2 T_LP2 nop DECFSZ CNT2,F ;2+4*248-1=993 GOTO T_LP2 NOP NOP NOP RETURN ;=998 ;------------------------------------------------------- end
もどる [MAIN MENU