Does anyone know what the highest, safest current is to run on the oDrive v3.6 board 56V model? (I want to know the highest value current_lim can be without damaging the board)
The current sensors saturate at 120A on their highest range, so that is the only ‘absolute limit’.
The rest is a function of how much cooling you can apply.
It is good up to about 60A continuous with the included heatsinks. After that, you will need to add extra cooling.
Thanks Towen! Is there a way to check what the current is so that I can trip the motor when the continuous current is above, say, 60A?
Yes, the (total) current sent through the motor is motor.current_control.Iq_measured^2 + motor.current_control.Id_measured^2
. If you just want the setpoint, use motor.current_control.Iq_setpoint
Also that’s already done by the ODrive. If the current measured is ever above current_lim * current_lim_tolerance
(or might be a + I can’t remember) then ODrive will trip with MOTOR_ERROR_CURRENT_LIM_VIOLATION.
Will the oDrive trip based on a continuous current exceeding the limit, or just a peak? Based on my tests I had thought it was just a peak, but I’m not sure. Thanks!
Aha sorry you’re right, It trips on a peak. The motor.config.current_lim
is an absolute max limit that is never exceeded by the current controller, except if it overshoots.
ODrive doesn’t have a concept of a continuous or “I^2 T” thermal limit AFAIK, although wouldn’t be hard to add it with some basic thermal model.
There are industrial drives which will derate the current limit after a preset continuous rating has been exceeded by an i^2 t value.
If you do adjust the current limit dynamically in operation, don’t forget to to test your controller stability at both limits
Hi Towen, I was re-reading your response just now and you mentioned “except if it overshoots.” When would this occur and how exactly would we prevent this. Also, if this were to happen, what damage would occur on the oDrive.
I am extremely frustrated right now because something is happening where my oDrives are “busting” in some way that I don’t really know. My hypothesis is that it involves some current overshoot. Essentially, when my motor (maybe goes too fast or gets stuck in my system as it spins) in an unforeseen circumstance situation, the oDrive throws a combination of “DRV fault” errors, “current_lim violation” errors, and “undefined errors.” When the “busted” board boots up, and I dump errors, there are no errors. Then, when I put a “busted” oDrive into closed loop mode, you get the errors mentioned above. Sometimes they are DRV fault, sometimes current limit, and sometimes just undefined errors. Over the course of this month, I have had many (like 7-8 oDrives break) with similar errors. At first, I thought I was getting unlucky, but now I feel like something is causing the oDrives to break, because I really don’t think they are this delicate. I could really use some help hardware debugging what may have caused these to break, so any suggestions on where to start would be helpful.
Furthermore, with some of these “busted” oDrives, I often try putting the boards in DFU mode and reflashing the firmware. After doing that on these boards, and dumping errors, I get a bunch of non-sensical errors that don’t make sense. For example, after reflashing the firmware on one of these broken boards, I would get “ERROR_DC_BUS_OVER_REGEN_CURRENT,” and error I wouldn’t get in my setup
on a normal, fresh oDrive.
Also if it may help, I may move this to its own post.
Yes there’s definitely something with your configuration.
With 0.5.2, OVER_REGEN_CURRENT happens pretty often. Remember to set config.enable_brake_resistor = True
and config.dc_max_negative_current = -1
What motors are you driving? ODrive doesn’t like high inductance motors doing sudden stops at high speeds. The resulting inductive voltage spike has a chance to damage the board.
I am driving Flipsky 6374 190 KV motors. More indepth scenario surrounding the error at this post:
I was doing some tests with a current probe today and noticed that whenever I change my axis_state, I get an immediate current limit violation. I wanted to verify that that a surge of current was actually being sent to the “broken” oDrive so I put the probe around all 3 of the motor A B and C cables and noticed that when around the C motor wire, I was indeed getting an overload of current, even past 100 amps, because my probe was beeping with an Overload indication. I think some part of the oDrive got broken and is requesting a lot of current, because I have used this bench setup with new odrives with no issues. To clarify, the oDrive that this current limit and current surge issue happened to is the one that broke in the scenarios I described above.
It is possible that the current sense amplifier is not working properly… Or perhaps it is not accepting the requested range?
What current limit have you got set, and what requested_current_range are you using?
What current were you requesting when you saw >100A on phase C?
(what requested_state did you set, and what do you have for calibration_current)
I am using current limit of 85, requested current range of 100.
I set requested state to odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
odrv0.axis0.motor.config.calibration_current is set to 10.
Here is a picture of the surge right when I send that axis state command
Hey there, I was just coming back to this equation you had given me for total current through the motor and had a quick question about it. You mentioned that measured current through the motor is motor.current_control.Iq_measured^2 + motor.current_control.Id_measured^2
but the docs say that to measure current for torque calculation, to use just current_control.Iq_measured
. Which is the correct value if I want to use a measured current value for torque? Thanks.
Torque is directly proportional to Iq_measured
.
The total current through the windings is sqrt(Iq^2 + Id^2)
.