Library for Kondo B3M Servo Motor

Dependencies:   BufferedSerial

Files at this revision

API Documentation at this revision

Comitter:
sgrsn
Date:
Fri Sep 07 02:59:41 2018 +0000
Parent:
4:5e8fad3a7991
Commit message:
Optimize wait time

Changed in this revision

B3MServo.cpp Show annotated file Show diff for this revision Revisions of this file
B3MServo.h Show annotated file Show diff for this revision Revisions of this file
diff -r 5e8fad3a7991 -r fe45a1f21522 B3MServo.cpp
--- a/B3MServo.cpp	Fri Sep 07 01:52:50 2018 +0000
+++ b/B3MServo.cpp	Fri Sep 07 02:59:41 2018 +0000
@@ -25,7 +25,8 @@
 B3MServo::B3MServo(PinName tx, PinName rx, PinName enable) : BufferedSerial(tx, rx), _enable(enable)
 {
     BufferedSerial::baud(115200);
-    control_mode = 0xFF;
+    for(int i = 0; i < 0xFF; i++)
+    control_mode[i] = 0xFF;
     //Serial::baud(115200);
 }
 
@@ -85,17 +86,18 @@
 }
 void B3MServo::onTorque(char id, char movingMode, char controlMode)
 {
+    control_mode[id] = controlMode;
     sendPacket(WRITE, id, TorqueON, int((controlMode << 2) | movingMode));
 }
 void B3MServo::controlAngle(char id, float angle)
 {
-    if(control_mode == Position)
+    if(control_mode[id] == Position)
     {
         sendPacket(WRITE, id, DesiredPosition, int(angle*100));
+        wait_us(1000);
     }
     else
     {
-        control_mode = Position;
         onTorque(id, Normal, Position);
         wait_us(600);
         controlAngle(id, angle);
@@ -109,13 +111,13 @@
 }
 void B3MServo::controlTorque(char id, int mNm)
 {
-    if(control_mode == Current)
+    if(control_mode[id] == Current)
     {
         sendPacket(WRITE, id, DesiredTorque, mNm);
+        wait_us(1000);
     }
     else
     {
-        control_mode = Current;
         onTorque(id, Normal, Current);
         wait_us(600);
         controlTorque(id, mNm);
@@ -165,7 +167,9 @@
 
 float B3MServo::getCurrentPosition(char id)
 {
-    return float(readPacket(id, CurrentPosition, 2)) / 100;
+    int data = readPacket(id, CurrentPosition, 2);
+    wait_us(1000);
+    return float(data) / 100;
 }
 
 float B3MServo::getCurrent(char id)
diff -r 5e8fad3a7991 -r fe45a1f21522 B3MServo.h
--- a/B3MServo.h	Fri Sep 07 01:52:50 2018 +0000
+++ b/B3MServo.h	Fri Sep 07 02:59:41 2018 +0000
@@ -50,7 +50,7 @@
     
     private:
     DigitalOut _enable;
-    int control_mode;
+    char control_mode[0xFF];
 };
 
 #endif
\ No newline at end of file