Hello everyone,
I am seeking assistance in finding an alternative method to retrieve the torque of my Dynamixel MX64AT 2.0. Currently, I am using a dynamometer where the arm exerts force in kilograms (Kg_force). Please refer to the attached image for the setup, although the dynamometer itself is not depicted as it is positioned on the floor, perpendicular to the arm.
Currently, I am able to continuously measure the Newton force when I supply the dynamixel with 1A of current at 12 Volts. However, when I increase the current to 2A, 3A, or 4A (all at 12 Volts), the dynamixel starts to blink and goes into a stalled state after approximately 20 seconds for 2A, 15 seconds for 3A, and 10 seconds for 4A. Additionally, I attempted to monitor the absorbed current, and it corresponds to the value I set.
I initially suspected an overload condition (exceeding 4.1A), but this has not occurred. Could someone please assist me in understanding this behavior?
Thank You all
My HW: Portenta H7+MKR Dynamixel shield
My SW:
/**** SETUP DXL ****/
const int DXL_DIR_PIN = A6;
const uint8_t DXL_ID = 1;
const float DXL_PROTOCOL_VERSION = 2.0;
#include <Dynamixel2Arduino.h>
#define DXL_SERIAL Serial1
#define Serial _UART_USB_
Dynamixel2Arduino dxl(DXL_SERIAL, DXL_DIR_PIN);
using namespace ControlTableItem;
void setup() {
_UART_USB_.begin(115200); while (!_UART_USB_);
/**** SETUP DXL ****/
dxl.begin(115200);
dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);
// Get DYNAMIXEL information
dxl.ping(DXL_ID);
dxl.torqueOff(DXL_ID);
dxl.setOperatingMode(DXL_ID, OP_CURRENT_BASED_POSITION);
dxl.torqueOn(DXL_ID);
}
void loop() {
// put your main code here, to run repeatedly:
dxl.setGoalCurrent(DXL_ID, 2000, UNIT_MILLI_AMPERE);
dxl.setGoalPosition(DXL_ID, 300, UNIT_DEGREE);
_UART_USB_.println(dxl.getPresentPosition(DXL_ID, UNIT_DEGREE));
}
Can you monitor its Present Temperature also?
Sure @roboteer , this is what I print in the loop
dxl.setGoalCurrent(DXL_ID, 2000, UNIT_MILLI_AMPERE);
dxl.setGoalPosition(DXL_ID, 300, UNIT_DEGREE);
Serial.print("Pos: ");Serial.print(dxl.getPresentCurrent(DXL_ID, UNIT_MILLI_AMPERE));Serial.print(" , ");
Serial.print("C°: ");Serial.print(dxl.readControlTableItem(PRESENT_TEMPERATURE, DXL_ID)); Serial.print(" , ");
Serial.print("AlarmLed: ");Serial.print(dxl.readControlTableItem(ALARM_LED, DXL_ID)); Serial.print(" , ");
Serial.print("Voltage: ");Serial.print(dxl.readControlTableItem(PRESENT_VOLTAGE, DXL_ID)); Serial.print(" , ");
Serial.print("Shutdown: ");Serial.println(dxl.readControlTableItem(SHUTDOWN, DXL_ID));
Imagine the arm pushing toward the ground with 2A trying to reach 300°. With the arm touching the ground, the reached angle is 200° more or less.
The output is:
Thank You again for the interest
According to the Shutdown parameter value of 52 (i.e. 110100) the DXL is overheated, overloaded, and had an electrical shock. But the present temperature is not that high = 49 , and by default Temperature Limit (add. 31) is set to 80 deg. C. So I am stomped too with this dxl behavior. Please check the actual value stored in Add. 31.
It is 80…It seems as if time is spent and the dynamixel still didn’t reach the position target, there is an electrical shock
I think that It is time to ask @willson or @YKW_R In the mean time have you tried to do Firmware Recovery on this DXL?
I have no any openCR that can help me to do a firmware recovery with dynamixel wizard. But I tested it on 3 different dynamixel mx64AT and, unfortunately, the problem is still existing. 15 seconds more or less to go in stall for 2 A, 8 sec for 3A, 3 sec for 4A. I have no the problem with 1A. And I also shall have no the problem with 2-3-4 only if there is not the ground or some object that can resist to the movement of DXL. Thank You again
In that case why don’t you try to go from a lighter object to start out and then increase its weight until you get into overload situation?
@DjangoTango
If you change the goal position to something like 201 or 202 degrees (something just barely not reachable), does the servo still fault in this way?
The current test you are performing is intentionally subjecting the servo to a pretty severe stall condition, considering it can’t approach anywhere near the desired goal. I’m not surprised that you are getting frequent shutdowns in this configuration, and there is also a significant possibility of this stall testing to permanently damage your actuator’s internal motor.
@DjangoTango
When the DYNAMIXEL cannot reach to the Goal Position under certain condition (more likely to happen under a higher current to prevent the damage), it will return Overload Error in Hardware Error Status(70).
Please read the address 70 and see if there’s any error when your DYNAMIXEL is shutdown.
You may try unchecking the Overload Error(Bit 5) to go around this protection, but please be aware that this may void the warranty.
The Overheating Error will eventually intervene and shutdown the DYNAMIXEL as the temperature of the core motor rises, but there is some delay in the temperature of the coil of the motor and the thermal sensor reading attached near the motor housing which may cause damage of the core motor under certain environment.
1 Like
Thank You all guys, I understood that this is not the proper functioning of DXL generally. I would like to test only because of my curiosity and thoughts about a special aim. I don’t want to damage the servo but, at least, I have some number before the Overload. I would like to ask You still 2 questions:
- Is it possible that if I don’t reach the desired position and I am feeding the DXL with 4A (the maximum), then the motor goes in protection of ONLY 3 seconds?
- how can I uncheck this?
You may try unchecking the Overload Error(Bit 5) to go around this protection, but please be aware that this may void the warranty .
Thank You again