サーボモーターの動作確認(M5stack gray)

サーボモーター(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