シリアルサーボ STS3032 の考察
これまでFeetech社製 シリアルサーボ STS3032を用いていろいろ製作してきました。
いろいろと私なりに分かったことをまとめます。
目次
STS3032動作モード
STS3032には4つ動作モード (Operation Mode 0~3) があります。
サーボの動作モードはFeetechのサーボデバッグ用ソフト(秋月の販売ページでダウンロード可能)で変更できます。
”Programming”タブのWork Mode (Address 33)の数字を変更することで動作モードを選択します。
Operation Mode 0
通常のサーボモード
STS3032 Operation Mode = 0
通常のサーボモード
回転位置を360°を0-4095で指定
最大スピードは7500 [単位は恐らくstep/sec] pic.twitter.com/oZZTiauIHD— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
STS3032の回転範囲は360°で、デバッグソフトのスライダもしくはGoal欄に0~4095で位置を指定。
最大スピードは約110rpm。
Operation Mode 1
連続回転モータモード。回転速度を指定する。
STS3032 Operation Mode = 1
モータモード クローズドループ制御らしい
回転速度を10~9999 [-10~ -9999] で指定
最大スピードは7500 [単位は恐らくstep/sec]反転時にちょっともたつく
私はこのモードで倒立振子してた pic.twitter.com/x0poAhpfE0— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
デバッグソフトのspeed欄に数値を入れて回転させる (10~9999 [反転:-10~ -9999] 但し実際の最大スピードは7500)。
最大回転速度は約110rpm。
クローズドループ制御ということでキッチリ回転速度が管理されての回転のようだが、要求に対する応答が遅いです。
デバッグソフトでPID定数いじったら改善するかも?しれません。
Operation Mode 2
連続回転モータモード。トルクを指定。
STS3032 Operation Mode = 2
モータモード オープンループ制御らしい
Timeを50~1000 [-50~ -1000] で指定
最大スピードは9500 [単位は恐らくstep/sec]速いし反転時の応答もいい!
このモードで倒立振子するべきだった。… pic.twitter.com/zbjV7TZ2Xk— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
デバッグソフトのTime欄に数値を入れて回転させる (50~1000 [反転:-50~ -1000])。
最大回転速度は約140rpm。
Operation Mode 1に比べ応答性もよいですが、トルクを指定つまり電流値指定で回転させているので負荷によって回転速度は変わります。
ちなみにSTS3032の回転モード Operation Mode = 1 では回転速度を指定し内部フィードバック制御されているので、負荷がかかると速度を保つために電流が増えます。
Operation Mode 3
回転移動量を指定するステップモード。
STS3032 Operation Mode = 3
ステップモード
回転量を指定 負の値で反転 (最大指定ステップ数は不明 無限??)
最大スピードは7500 [単位は恐らくstep/sec] pic.twitter.com/NlszDX6LNM— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
モードの指定に加えてMin Position Limit (Address 9)とMax Position Limit (Address 11)の値を0にする必要があります。
回転スピードはSpeed欄で指定 (0~7500)。最大回転速度は約110rpm。
回転量はGoalで指定 (最大値±30719 約7.5回転)
参考
Arduino IDE で Operation Mode 2
STS3032はその他のFeetech社製サーボモータと同様にArduinoライブラリSCServo が用意されています (秋月の販売ページでもダウンロード可能)。
ライブラリを用いてサーボ位置やスピードを指定することで各種モードでの動作を楽しむことはできるのですが、SCServoライブラリではSTSサーボのTime設定ができないために Operation Mode = 2 での使用ができません。
そこで、ライブラリにTimeを設定できる関数を追加して動作を楽しみました。
反転時も速度調整できるようになりました。
反転ビットは10ビット目でした。
(マニュアルには15ビットと書いてあったが。。) pic.twitter.com/GlhDlxqCij— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
以下の関数をSCServoライブラリのSMS_STS.cppに追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int SMS_STS::WriteTime(u8 ID, s16 Time) { if(Time<0){ Time = -Time; Time |= (1<<10); } u8 bBuf[7]; bBuf[0] = 0; Host2SCS(bBuf+1, bBuf+2, 0); Host2SCS(bBuf+3, bBuf+4, Time); Host2SCS(bBuf+5, bBuf+6, 0); return genWrite(ID, SMS_STS_ACC, bBuf, 7); } |
WriteTime関数でサーボのIDとTime(-1000~1000)を指定してトルク指定の応答性の良い連続回転モードを楽しみました。
コントローラ
Feetech社製のシリアルサーボは電源Vdd, GND, 信号線の3線式です (PWMサーボと同様に多くのシリアルサーボがこんな感じ)。
シリアル信号 (TX, RX)を1線に変換する必要があり、Feetech社製専用の変換コントローラも販売されてございます。
コントローラ基板をPCにUSB接続して前述のデバッグソフトで制御したり、外部からシリアル通信で制御することが可能です。
コントローラを自作することも可能です。秋月の販売ページのFEETECH社デジタルサーボの使用方法 資料に参考回路が記載されています。
私は以下のようにユニバーサル基板で回路を構成してコントローラを作製したりしました。
Feetechシリアルサーボ 通信基板
いい加減 基板起こすか pic.twitter.com/Vj86CB8jHk— HomeMadeGarbage (@H0meMadeGarbage) August 6, 2023
いちいち基板を手作りするのも大変になってきたので最近では専用基板を製作して使用しています。
やっと基板作った
コレで一生安泰 pic.twitter.com/JhOHaujXCl— HomeMadeGarbage (@H0meMadeGarbage) September 24, 2023
STS3032で製作したモノ
STS3032を使用して製作したものを紹介させていただきます。
ジャンプする倒立振子
屈伸タイプの倒立振子の足の駆動とホイールにSTS3032を使用しました。
足駆動はサーボモードで使用し、比較的早い動作ができるためジャンプ動作を実現することができました。
ホイール用にはOperation Mode = 2 のモータモードで使用しました。若干まだスピードが足りない印象ですが、まぁまぁな操作性を実現できています。
Wheel-Legged Robot
前述の屈伸型倒立振子を応用して4脚のWheel-Legged Robot を製作しました。
通常のビークル動作はもちろんのこと、起き上がっての倒立動作も実現しました。
ホビーで起上れるWheel-Legged Robot を製作したのは地球上で私しかいないのではないでしょうか。
すべてハイクオリティ シリアルサーボSTS3032のおかげです。
バク転ロボット犬
前々からバク転するロボット犬を製作したいと思っていたのですが、STS3032を用いて満を持してトライしました。
4脚ロボットは初めて製作したのですが、STS3032が優秀過ぎて3日ほどでバク転を実現できました。
おわりに
ここではシリアルサーボ STS3032について各記事に分散していた内容をまとめてみました。
以前は秋月で3000円ほどで購入できたのですが、円安の影響か5000円弱となっております(どこの販売店も同等の価格のようです)。
気軽に使用できる価格ではなくなってしまいましたが、雑では作れないワンランク上の製作の際の一品として本記事を思い出していただけましたら幸いです。