This value is equal to the sum of the motor currents and the brake resistor currents.The motor currents are measured, the brake resistor current is calculated based onconfig.brake_resistor0.resistance.
Filter gain for the reported ibus. Set to a value below 1.0 to get a smootherline when plotting ibus. Set to 1.0 to disable. This filter is only applied tothe reported value and not for internal calculations.
If this property is true, something is bad in the configuration. TheODrive can still be used in this state but the user should investigatewhich setting is problematic. This variable does not cover allmisconfigurations.
A GPIO was used as an interrupt input for two internal componentsor two GPIOs that are mutually exclusive in their interruptcapability were both used as interrupt input.Example: config.step_gpio_pin of both axes were set to the same GPIO.
This is the amount of current allowed to flow back into the powersupply. The convention is that it is negative. By default, it is setto a conservative value of 10mA. If you are using a brake resistor andgetting DC_BUS_OVER_REGEN_CURRENT errors, raise it slightly. If youare not using a brake resistor and you intend to send braking currentback to the power supply, set this to a safe level for your powersource. Note that in that case, it should be higher than your motorcurrent limit + current limit margin.
Indicates the current error condition(s) of the axis. Each error flagclears automatically when the error condition goes away.If an attempt is made to activate the axis while an error is present,the axis immediately disarms and disarm_reason is updatedaccordingly.
This value is updated every time the axis disarms and indicates thereason why the axis was disarmed. It can be cleared usingclear_errors().This variable is used for reporting only. It affects the status LEDand the ERROR pin output but it does not prevent the axis from gettingre-armed upon user request.
A value of NaN indicates that the encoder is not yet configured, not readable, or,when using an absolute reference frame, that the reference frame has not yet been initialized(e.g. axis is not yet homed).
The position estimate can be shifted by writing to this variable (see Custom User Reference Frame).Writing to this variable will set absolute_setpoints to trueand shift input_pos and pos_setpoint accordingly, such that there is no impulse on the physical axis.
In some cases (for example in a dual-encoder setup where the load encoder sits behind a gearboxwith backlash) it is more suitable to use the commutation encoderfor velocity estimation. To do this, set use_commutation_vel to True andconfigure commutation_vel_scale.
The variables prefixed with calib_ affect only the calibration procedure.Changes to those variables take effect on the next start ofAxisState.ANTICOGGING_CALIBRATION (if a calibration is already ongoing, it isnot affected by such changes).
This limit is honored during both AxisState.ANTICOGGING_CALIBRATION andnormal operation.Changes to this variable take effect immediately, however if this value was too low during calibration, then the calibration must be repeated.
When true (default), the calibration runs in both directions. Whenfalse, the calibration only runs in the direction specified by thesign of calib_start_vel and calib_end_vel.When the motor is known to move in a single direction only duringoperation, running the calibration in that direction only can yieldbetter results.
Setting this to False even though a brake resistor is connected isharmless. Setting this to True even though no brake resistor isconnected can break the power supply.Changes to this value require a reboot to take effect.
This is intended for development / end-of-line testing / diagnosticsonly. The function uses five NVM write cycles on the encoder, which israted for only 1000 write cycles. Therefore this should not be usedduring regular operation.
Indicates the maximum current that can be measured by the currentsensors in the current hardware configuration. This value depends on.config.motor.current_hard_maxandconfig.inverterN.current_hard_max.
In ControlMode.VELOCITY_CONTROL, sets the desired velocity of the axis.In ControlMode.POSITION_CONTROL, sets the feed-forward velocity of the velocity controllerIn InputMode.TUNING, this acts as a DC offset for the velocity sine wave.
In ControlMode.TORQUE_CONTROL, sets the desired output torque of the axis.In ControlMode.VELOCITY_CONTROL and ControlMode.POSITION_CONTROL, sets the feed-forward torque of the torque controller.In InputMode.TUNING, this acts as a DC offset for the torque sine wave.
An internal hard timing requirement was violated. This usually meansthat the device is computationally overloaded, either due to aspecific user configuration or due to a firmware bug. This errorshould not occur during normal operation and can be considered similarto SYSTEM_ERROR.
The current controller tries not to exceed.config.motor.current_soft_max,however a bit of overshoot is normal. Therefore, if you get this error,try to increase the margin between the soft and hard current limits.
The current controller is a PI controller and its PI gains are automaticallycalculated based on config.motor.current_control_bandwidth and themotor resistance and inductance (pole placement). If you suspect an unstablecurrent controller, make sure to review these variables.
Another component (axis or brake resistor) on the ODrive failed. Mostcommonly this error indicates that the brake resistor was disarmed (e.g.during an undervoltage condition) and can be rectified by fixing theroot cause (e.g. undervoltage condition) and then clearing errors.
During calibration the motor resistance andinductance is measured.If the measured motor resistance or inductance falls outside a predefinedrange, either PHASE_RESISTANCE_OUT_OF_RANGEor PHASE_INDUCTANCE_OUT_OF_RANGE will be returned.Check that all motor leads are connected securely.
Some motors will have a considerably different phase resistanceand inductance than this. For example, gimbal motors, some smallmotors (e.g. < 10A peak current). If you think this applies to youtry increasing config.motor.resistance_calib_max_voltage fromits default value of 1 and repeat the motor calibration process.Increasing this value beyond the feasible range (around half of DCvoltage) has no effect. Therefore, if you maxed outconfig.motor.resistance_calib_max_voltageand still get calibration errors, try reducing config.motor.calibration_current.
ODrive variants of the AMT21 use a customized protocol to avoidaliasing issues that can occur at high RPM and could otherwise causethe current controller to go unstable and lead to current limit violation faults.
When the watchdog expires (after config.watchdog_timeout),the axis is put into AxisState.IDLE.The watchdog can be reset by the function axis.watchdog_feed(),by certain UART commands (see ASCII Protocol) or by CAN messages (see Watchdog).
Another way is sliding a loose magnet in your hand around therotor, and counting how many times it stops. This will be thenumber of pole pairs. If you use a ferrous piece of metalinstead of a magnet, you will get the number of magnet poles.
Indicates whether phase resistance is valid.This flag is automatically set to true after successfulmotor calibration. It can also be set manually ifphase_resistance is set manually.The motor will not spin unless this is true.
Indicates whether phase_resistance and phase_inductance arevalid.This flag is automatically set to true after successfulmotor calibration. It can also be set manually ifphase_inductance is set manually.The motor will not spin unless this is true.
Listen for index pulses even when not explicitly running indexsearch and even when the motor is disarmed.In case the index pulse is fairly wide (low resolution encoders orhall effect sensors), care must be taken as to which direction themotor is spun to register the index.Once the index is found (either by manually moving the motor or byrunning ENCODER_INDEX_SEARCH), thesearch is disabled.
Increasing this value allows the motor to continue operating evenif some SPI responses are corrupted (e.g. bad parity bit). However it also leads to slower reaction in case the encoder isdisconnected.
Setting this value too low can lead to missed control deadlineerrors because the transfer takes too long.Setting this value too high can lead to bad signal integrity,especially on long wires with high capacitance.
True: Position setpoints are with respect to an absolute referenceframe of some sort. See Position Reference Frame for available options.Attempts to enter position control will be rejected until the reference frame has been initialized(e.g. by completing a homing procedure).
When using two separate encoders for position control and commutation, this selects which of the two encoders is used forvelocity control. If false, the position encoder is used, else thecommutation encoder is used.commutation_vel_scale must be set accordingly.
Uses the inner torque loop, the velocity control loop, and the outer position control loop.Use input_pos to command desired position, input_vel to command velocity feed-forward, and input_torque for torque feed-forward.
Used for tuning your odrive, this mode allows the user to set different frequencies.Set control_mode for the loop you want to tune, then set the frequency desired.The ODrive will send a 1 turn amplitude sine wave to the controller with the given frequency and phase.
Hey Solomondg
Thank you for your reply.
Going to that documentation guides me to that python3 download and that is also confusing to me. I guess what i might need at the moment is more of a walkthrough to get something happening , I am a little more familiar with Arduino and to with Python at all. Yeah finding good info on this old gear is scarce yes. I need to get to the part where I can write(or copy and paste for now) a little program on Arduino and download it to the odrive.
Since you are running Windows 2012R2, I would recommend WebDAV for the integration. You can install it for free as part of IIS. odrive can connect with WebDAV servers to give users the same sync experience they would get when using the odrive file server.
c80f0f1006