Skip to content

Releases: mjbots/moteus

2024-11-14

16 Nov 19:14
Compare
Choose a tag to compare
  • Use space vector modulation - this increases the maximum speed achievable by 15% on all motor and controller types
  • Properly calculate maximum speed on moteus-c1 - the maximum speed was previously reported as 38% too high
  • Automatically calculate CPR in motor_position for many configurations where the CPR is known
  • Limit the PLL filter frequency for UART encoders based on the configured polling rate

2024-10-29

29 Oct 20:13
Compare
Choose a tag to compare
  • Many changes were made to make encoder compensation work better for hard configurations, such as with off axis MA732/MA702/MA600 magnetic encoders.
    • Upgrade encoder compensation to 256 bins from 32
    • Upgrade the compensation script to support both an inertial mode and a reference mode, improve plots
  • Commutation compensation now linearly interpolates between bins, which further helps off-axis encoders
    • As a side effect, compensation tables can now be invalid if too steep, resulting in an error
  • Support the MA600 SPI magnetic encoder
  • Implement PWM output for aux ports - all pins previously marked as hardware quadrature capable can now be used as PWM output
  • Expose the UUID over the register protocol, allow individual commands to be scoped to a UUID prefix. In the future, this could be used with the multiplex broadcast address to discover devices.
  • The motor thermistor resistance now defaults to 10k and is configurable

moteus_tool from pypi version 0.3.73 or newer is required to flash this firmware.

2024-06-17

18 Jun 15:17
Compare
Choose a tag to compare
  • Properly decode AksIM-2 warning and error bits
  • Make MA732 trimming for off-axis applications actually work
  • When encoders are no longer active, stop using them and trigger a fault
  • Limit the commanded velocity to something physically achievable
  • Fault if a non-reducing gear ratio is configured without overriding
  • Default bemf_feedforward to 0.0, and fault if it is configured non-zero without acceleration limits or override

This requires moteus_tool from pypi of 0.3.71 or newer to flash over CAN.

2024-05-20

21 May 00:49
Compare
Choose a tag to compare

New capabilities

  • The ilimit can now be scaled in addition to kp and kd on a per-command basis. This allows seamlessly switching between position and velocity mode even when an integrative term is configured.
  • Electrical power to (or from) the motor is now estimated and reported as servo_stats.power_W and register 0x007

Fixes

  • Fix many problems when motor_position.output.sign == -1, including BEMF feedforward and cogging torque compensation
  • Produce an error for many more malformed diagnostic mode commands, like d pos 0 0 f1

Compatibility

To flash this firmware, moteus_tool version 0.3.70 or newer is required.

2024-04-30

30 Apr 13:50
Compare
Choose a tag to compare
  • Support moteus-c1
  • Properly detect board hardware when DC input turn-on slew is very slow

2024-01-06

06 Jan 22:43
Compare
Choose a tag to compare
  • Implement servo.max_velocity_slip - this can be used to ensure acceleration limits are obeyed when control is saturated in velocity mode
  • Support re-capturing position and velocity while in control mode with the "recapture position and velocity" command

2023-12-15

15 Dec 18:48
Compare
Choose a tag to compare
  • Resolve an issue that resulted in fault 33 always being reported on r4.5 and earlier boards

2023-12-14

14 Dec 17:06
Compare
Choose a tag to compare
  • Fix a problem that triggered fault 37 if a configured I2C device was disconnected or had an intermittent failure

2023-12-04

05 Dec 00:49
Compare
Choose a tag to compare

Required moteus_tool: >= 0.3.65 (python -m pip install --upgrade moteus)

Major Changes

  • Resolve robustness issues that prevented I2C encoders from being used as the commutation or output encoder. Their use for output disambiguation worked reliably before and still does.
  • Switch I2C encoder polling rate configuration to be measured in microseconds rather than milliseconds. An up-to-date moteus_tool is required to flash this firmware as a result. It will properly migrate configuration on upgrade.
  • When in position-timeout mode, ignore user commands completely. This was always the intended behavior, but became broken with the addition of acceleration and velocity limits. As a result of the defect, commands that resulted in non-zero control velocities could result in user initiated torque.

Minor Changes

  • Configure AS5600 encoders to disable their internal filters.
  • Improve robustness of the encoder filter by preventing velocities from becoming too large.
  • If a hard-fault is triggered, perform a 2-flash pattern on the red LED
  • If firmware errors cause data to be written to the 0 page, report the fault as an incrementing counter system_info.mem_fault rather than as a error when attempting to perform conf write.
  • Ensure that motor_position configuration is updated to match auxiliary port configuration changes. This mostly means that encoder filter bandwidth limits are properly lowered if the polling rate of auxiliary sensors is decreased.

2023-09-26

26 Sep 15:33
Compare
Choose a tag to compare
  • Fault if a stop position is commanded along with velocity or acceleration limits. This never did anything useful, but was often accidentally commanded when using old videos that recommend stop position along with new firmware that has acceleration or velocity limits configured.
  • Support CUI AMT21 series RS485 encoders. These can be directly connected to the RS422 port on the moteus-n1, and can be connected to moteus-r4 with an adapter circuit similar to that needed for the AksIM-2.
  • Support MA732 SPI encoders on any SPI capable auxiliary port.
  • Fix stay within mode when velocity or acceleration limits are enabled. If either were enabled, then the commanded limits were not obeyed.
  • Define "target velocity == NaN" to mean "target_velocity == 0.0". Previously NaN here was undefined behavior, and would result in the controller becoming non-functional. Most (maybe all) users who commanded NaN actually wanted to be commanding 0.0 anyways.
  • "Index" inputs on auxiliary ports are now handled using an interrupt instead of polling at the control rate. This decreases the minimum required index pulse width from 1/PWM_RATE (~33us for a typical 30kHz pwm rate) to ~1us.