ラジコンサーボのトルク測定

2003年11月30日 (C) 岡田 紀雄

デジタルサーボの場合、入力PWM信号周期に異存なく、トルク保持性が保てることは知られているとおりですが、アナログサーボは、入力PWM周期に依存してトルクが変えられるようです。 逆にいえば、適切なPWM周期を選ばないとせっかくのサーボの能力をフルに発揮できないことを意味してます。

そこで、手持ちのアナログサーボのトルク測定を行ってみよう!ということで、実験をしてみました。
H8/3664F のPWMを使って、単純にPWM周期と角度を変更できるプログラムをつくり、1つのサーボだけをつなげてのシンプルな構成で実験を試みました。
同じような実験は、バーニング宮田さんの Web でも紹介されてますので、特にサーボをこらから購入を考えていらっしゃる方や、サーボ比較に興味がある方は、そちらのほうがよろしいかと思います。 とてもたくさんのサーボを比較されておりまして、参考になります。


H8/3664F のプログラムより

SCI3 への入出力ルーチン、6桁10進数出力ルーチンは削除しました。
見てのとおり、非常に単純なプログラムです。

1:      #include        "3664f.h"
2:
3:      #define         _GRA            (40000)
4:      #define         _GRB            (4000)
5:
6:      static void             init_3664( void )
7:      {
8:              short           xx;
9:
10:             IO.PMR1.BIT.TXD = 1;
11:             SCI3.SCR3.BYTE = 0;             /* clear all flags      */
12:             SCI3.SMR.BYTE = 0;              /* Ascnc, 8bit, NoParity, (Even), stop1, 1/1 */
13:             SCI3.BRR = 25;                  /* 19200baud (CPU=16MHz) */
14:             for( xx = 0; xx < 280; xx++ );  /* wait 1 bit time (1/9600 sec) */
15:             SCI3.SCR3.BYTE = 0x30;          /* scr=0011 0000 (TE=1,RE=1) */
16:             xx = SCI3.SSR.BYTE;             /* Dummy Read */
17:             SCI3.SSR.BYTE = 0x80;           /* Clear Error Flag (TDRE=1) */
18:             TW.TIOR0.BIT.IOB = 0;           /* GRB のコンペアマッチで1を出力 */
19:             TW.TMRW.BIT.PWMB = 1;           /* FTIOB PWM mode */
20:             TW.TCRW.BIT.CCLR = 1;           /* TCNT カウンタクリア */
21:             TW.TCRW.BIT.CKS = 3;            /* クロックを8分週にセット */
22:             TW.TCRW.BIT.TOA = 0;            /* FTIOB PWM init. value = 0 */
23:             TW.TCRW.BIT.TOB = 1;            /* FTIOB PWM init. value = 1 */
24:             TW.GRA = _GRA;
25:             TW.GRB = _GRB;
26:             TW.TMRW.BIT.CTS = 1;            /* TW Start */
27:     }
28:     void            main( void )
29:     {
30:             unsigned int    gra, grb;
31:
32:             init_3664();
33:             gra = _GRA;
34:             grb = _GRB;
35:             while( 1 ) {
36:                     int             ch;
37:
38:                     outch( '>' );
39:                     ch = inch();
40:                     outch( ' ' );
41:                     switch( ch ) {
42:                     case 'u':       grb += 8;
43:                                     if( grb > 0x1390 ) grb = 0x1390;
44:                                     break;
45:                     case 'U':       gra += 2000;
46:                                     if( gra > 60000 ) gra = 60000;
47:                                     break;
48:                     case 'd':       grb -= 8;
49:                                     if( grb < 0x0460 ) grb = 0x0460;
50:                                     break;
51:                     case 'D':       gra -= 2000;
52:                                     if( gra < 5000 ) gra = 5000;
53:                                     break;
54:                     case 'i':       grb = _GRB;     break;
55:                     case 'I':       gra = _GRA;     break;
56:                     }
57:                     TW.GRA = gra;
58:                     TW.GRB = grb;
59:                     out6d( gra );
60:                     outch( ' ' );
61:                     out6d( grb );
62:                     crlf();
63:             }
64:     } 


  • 簡単な方法ですが、トルク測定を実施。
  • 写真左より、
    • H8/3664F PWM 発生装置
    • RCサーボ(PS−2174FET)
    • プラスチック板(3mm厚、10cm長)
    • 調理用ハカリ(Max2kg)
  • 測定時は、サーボの力でサーボ固定板が浮き上がらないように、
    手で固定した。

トルク測定結果

このプログラムにより測定した結果が、次のグラフです。 トルクについては、10cm長3mm厚のプラスチック板をサーボに取り付け、調理用ハカリにて、荷重を測定しました。 トルク(kg・cm)=アーム長(cm)×測定値(g)÷1000 の換算を行ってます。

この結果からすると、R1N で採用した BestTech. のボードではトルクが落ちまくってしまうではないか!と、気が付き、R2N への移行が思いついたのでした。
現在、ハイパワーギア(+ストロングギア)を搭載した PS-2174FET を脚部に12個用意できたので、あとは制御系、プログラムができれば、歩行以後の計画ができるはず!と、かなりの意欲がでてきました。