Skip to content

Commit d077f7b

Browse files
authored
Merge pull request #84 from arduino-libraries/torque-api
Provide API to limit the maximum torque of each servo.
2 parents b6ae0d2 + 135893f commit d077f7b

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

src/Braccio++.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ class BraccioClass
8080
void positions(float * buffer);
8181
void positions(float & a1, float & a2, float & a3, float & a4, float & a5, float & a6);
8282

83+
inline void setMaxTorque(uint16_t const max_torque) { _servos.setMaxTorque(max_torque); }
84+
inline void setMaxTorque(int const id, uint16_t const max_torque) { _servos.setMaxTorque(id, max_torque); }
85+
8386
inline void speed(speed_grade_t const speed_grade) { _servos.setTime(speed_grade); }
8487
inline void speed(int const id, speed_grade_t const speed_grade) { _servos.setTime(id, speed_grade); }
8588

@@ -184,6 +187,7 @@ class Servo
184187
inline void disengage() { _servos.disengage(_id); }
185188
inline void engage() { _servos.engage(_id); }
186189
inline bool engaged() { return _servos.isEngaged(_id); }
190+
inline void setMaxTorque(uint16_t const max_torque) { _servos.setMaxTorque(_id, max_torque); }
187191

188192
inline Servo & move() { return *this; }
189193
inline Servo & to (float const angle) { _servos.setPosition(_id, angle); return *this; }

src/lib/motors/SmartServo.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,16 +274,14 @@ void SmartServoClass::setTime(uint8_t const id, uint16_t const time)
274274
writeWordCmd(id, REG(SmartServoRegister::RUN_TIME_H), time);
275275
}
276276

277-
void SmartServoClass::setMaxTorque(uint16_t const torque)
277+
void SmartServoClass::setMaxTorque(uint8_t const id, uint16_t const max_torque)
278278
{
279279
mbed::ScopedLock<rtos::Mutex> lock(_mtx);
280-
writeWordCmd(BROADCAST, REG(SmartServoRegister::MAX_TORQUE_H), torque);
281-
}
282280

283-
void SmartServoClass::setMaxTorque(uint8_t const id, uint16_t const torque)
284-
{
285-
mbed::ScopedLock<rtos::Mutex> lock(_mtx);
286-
writeWordCmd(id+1, REG(SmartServoRegister::MAX_TORQUE_H), torque);
281+
if (max_torque > TORQUE_MAX)
282+
writeWordCmd(id, REG(SmartServoRegister::MAX_TORQUE_H), TORQUE_MAX);
283+
else
284+
writeWordCmd(id, REG(SmartServoRegister::MAX_TORQUE_H), max_torque);
287285
}
288286

289287
void SmartServoClass::setID(uint8_t const id)

src/lib/motors/SmartServo.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ class SmartServoClass
5656

5757
void setTorque(uint8_t const id, bool const torque);
5858

59-
void setMaxTorque(uint16_t const torque);
60-
61-
void setMaxTorque(uint8_t const id, uint16_t const torque);
59+
void setMaxTorque(uint8_t const id, uint16_t const max_torque);
60+
inline void setMaxTorque(uint16_t const max_torque) { setMaxTorque(BROADCAST, max_torque); }
6261

6362
void setID(uint8_t const id);
6463

@@ -98,6 +97,9 @@ class SmartServoClass
9897
static int constexpr NUM_MOTORS = 6;
9998
static float constexpr MAX_ANGLE = 315.0f;
10099

100+
static uint16_t constexpr TORQUE_MIN = 0;
101+
static uint16_t constexpr TORQUE_MAX = 1000;
102+
101103
static size_t idToArrayIndex(size_t const id) { return (id - 1); }
102104

103105
private:

0 commit comments

Comments
 (0)