サーボモーター(LFD-01M)到着したので早速動作確認。制御は標準的なPWM方式。PWMの周波数も標準的な50Hzです。
接続はモーターへの電源、そしてM5stackからのPWM制御信号です。GNDの共有を忘れずに。当然モーターの電源は大電流なので外部電源で5Vを使います。PWMは多くの他の信号がそうであるように3.3V振幅ですが、入力はどうせC-MOSだろうから問題なし。
https://coskxlabsite.stars.ne.jp/html/for_students/M5Stack/RCServo/RCServo.html
PWMピンは上記を参照してDIOの2ピン目を使用。
動作確認用のソースはHiwonderのwebページからですが、サーボモーター用のライブラリは使ってません。存在しないのかもしれませんが、直接コードを書く方が動作の理解には助けになります。
https://drive.google.com/drive/folders/1Bgf1HGrfhB8N8XIxlRpz-U9_2oxVurDv
Arduino用なので多少の修正が必要なのと、画面表示がないと電源オンもわからないのでメッセージを出すようにしてます。ライブラリを使わないと、動作時間制御もコードで指定(この場合には20ms*20 = 400ms)しています。試しに9行目の20を10にすると90度ぐらいしか回転しません。
/*******舵机测试程序*******
* Arduino型号:Arduino UNO
**************************/
#include <m5stack.h> // M5stack needs this module
int servopin=2;
int pulsewidth;
void servo(int myangle)
{
for (int i = 0; i < 20; i ++) // i is used to make moving time, since this source does not use library.
{
pulsewidth=map(myangle,0,180,500,2500);
digitalWrite(servopin,HIGH);
delayMicroseconds(pulsewidth);
digitalWrite(servopin,LOW);
delay(20-pulsewidth/1000);
}
}
void setup()
{
pinMode(servopin,OUTPUT);
M5.begin();
M5.Lcd.fillScreen(BLACK); //Set the screen background color to black.
M5.Lcd.setTextColor(GREEN , BLACK); //Sets the foreground color and background color of the displayed text.
M5.Lcd.setTextSize(2); //Set the font size.
}
void loop()
{
M5.Lcd.setCursor(0, 70);
M5.Lcd.printf("servo_motor drive");
servo(0);
delay(500);
servo(180);
delay(500);
}
駆動波形はこんな感じ。
動作時の動画は、
となります。180度以上振れてるようなので、キャリブレーションは必要そうです。
admin