STS3032というサーボモータを知っていますか?
FEETECHが出している連続回転シリアルサーボモータで、秋月電子やスイッチサイエンス等で購入可能です。
今回はSTS3032をArduino等で使う方法について紹介します。
STS3032とは
連続回転のシリアルサーボです。
連続回転というのは180度までと角度が制限されているのではなく、ロボットのタイヤのように何周でも回転できるという意味です。
サーボモータというとSG90やFS90RのようにPWMで制御するのでは?と思うかもしれませんが、このサーボはシリアルサーボなのでシリアル通信で制御します。
そのため、モータの動作の仕方を細かく指定したり、モータ側からフィードバックを得たりすることができます。
その分回路や制御が難しく、値段もそこそこ高いのですが、小型ロボットの足回りに使用できるほどトルクとスピードともに優れており、便利なサーボモータです。
こちらが秋月電子のページです。
通信方式・回路
シリアル通信といいましたが、詳しくはRS485(なのかRS485もどきなのかよくわからないが以後RS485とします)の半二重通信方式で通信します。
半二重通信というのは、受信と送信を一つの信号線で行う通信方式のことです。
一方でUARTのように受信と送信を別の信号線で行う通信方式を全二重通信と言います。
Arduinoなどのマイコンについているのは全二重通信のUARTであるため、制御するためにはUARTをRS485に変換する回路を作らなければなりません。
そのために販売されているのがこちらのFE-URT-1ボードです。
これはUSBやUARTをRS485に変換してモータと接続できるボードで、このコントローラを使うことでモータを制御できます。ちなみにサーボモータにはidを割り振って制御するので、一つの変換回路で複数のサーボモータを制御できます。
しかし、これはロボット等に組み込むには大きくて邪魔だし値段も高いしであまり使いたくないですよね。
そこでは回路を自作しましょう!
なんと!ありがたいことに秋月電子さんが公開しているPDFに参考回路がのっています。
これと全く同じ回路で動作しました。これを基板実装なりブレッドボード上で作ってみるなりすると動かすことができます。(MAX485にSOP8変換基板などを使えばブレッドボードでも作れます)
TX、RXをマイコンにつないだりUSB-シリアル変換モジュールを挟んでPCにつないだりしましょう。
ちなみにこのPDFには5V用と書いてありますが、動作電圧が3.3Vのマイコン(STM32など)でもこの回路で問題なく動作しました。
モータの設定
STS3032はPCと接続することで専用のソフトウェアを使用して設定をすることができます。
詳しくは先ほど挙げた秋月電子さんのこちらの資料にのっているのでそちらを参考にしてください。
このソフトウェア上でidを変更することで、同じ通信バス上で複数のモータを制御できるようになります。
マイコンで動かしてみよう
それではArduinoやSTM32などのマイコンで動かしてみましょう。
STS3032を含むSTSシリーズ、SCSシリーズ、SMSシリーズのためのSCServoというライブラリがあります。
秋月電子のサイトからダウンロードしたり、PlatformIOで開発するならPlatformIOからダウンロードしてください。
以下はWheel Modeで回転するプログラムです。
#include <INST.h>
#include <SCS.h>
#include <SCSCL.h>
#include <SCSerial.h>
#include <SCServo.h>
#include <SMS_STS.h>
#define ServoID 1 // your STS3032 ID
int speed=2000;
SMS_STS sts3032;
void setup() {
// These Serial Port should be the port you are using
Serial.begin(1000000);
sts3032.pSerial = &Serial;
//Change STS3032's Mode to Wheel Mode
sts3032.unLockEprom(ServoID);
sts3032.EnableTorque(ServoID, 1);
sts3032.WheelMode(ServoID);
sts3032.writeByte(ServoID, SMS_STS_MODE, 1);
sts3032.LockEprom(ServoID);
}
void loop() {
sts3032.WriteSpe(ServoID,speed);
delay(1000);
sts3032.WriteSpe(ServoID,-speed);
delay(1000);
}
マイコンのUARTと変換基板とSTS3032サーボをつないだうえで、プログラムを書き込んで実行してみてください。
これで動けば成功です!
他にもモード等あるので試してみてください。ちゃんとしたドキュメント等はなさそうなので、ライブラリの中のコードやサンプルコード、他の人のプログラムなどを見ながら書いてみるとよいと思います。
最後に
一個5000円くらいするので少し高いですが、小型でトルクが高くてエンコーダ付きで金属ギアでというとても優秀なサーボモータなのでぜひ使ってみて下さい。
ご質問やご指摘等ございましたらお気軽にコメントください!
補足
4つのモーターを動かそうとすると少しタイムラグが生まれます。
この原因は通信の度にACK(確認応答)の処理をしていることです。
なくても通信に問題がなければ動作するので、いらない場合はライブラリの中のコードを書き換えて(ACKの部分をコメントアウト)しまってよいと思います。
四輪駆動ロボットなどを作ろうとしている人はぜひお試しください。
↓詳しくはこの一連のポストをご覧ください