@madcowswe madcowswe released this Dec 2, 2018

Assets 14

[0.4.7] - 2018-11-28

Added

  • Overspeed fault
  • Current sense saturation fault.
  • Supress startup transients by sampling encoder estimate into position setpoint when entering closed loop control.
  • Make step dir gpio pins configurable.
  • Configuration variable encoder.config.zero_count_on_find_idx, true by default. Set to false to leave the initial encoder count to be where the axis was at boot.
  • Circular position setpoint mode: position setpoints wrapped [0, cpr). Useful for infinite incremental position control.
  • Velocity setpoint ramping. Use velocity control mode, and set controller.vel_ramp_enable to true. This will ramp controller.vel_setpoint towards controller.vel_ramp_target at a ramp rate of controller.config.vel_ramp_rate.

Changed

  • Increased switching frequency from around 8kHz to 24kHz. Control loops still run at 8kHz.
  • Renamed axis.enable_step_dir to axis.step_dir_active
  • New process for working with STM32CubeMX.

Fixed

  • Would get ERROR_CONTROL_DEADLINE_MISSED along with every ERROR_PHASE_RESISTANCE_OUT_OF_RANGE.
  • ODrive tool can now run interactive nested scripts with "%run -i script.py"

@madcowswe madcowswe released this Oct 7, 2018 · 106 commits to master since this release

Assets 14

[0.4.5] - 2018-10-06

Added

  • Trapezoidal Trajectory Planner
  • Hook to execute protocol property written callback
  • -Wdouble-promotion warning to compilation

Changed

  • Make python tools compatible with python 2.7 (so it can be used with ROS)
    • Threading API constructor can't take the daemon parameter, so all thread creation had to be expanded out.
    • TimeoutError isn't defined, but it makes for more readable code, so I defined it as an OSError subclass.
    • ModuleNotFoundError is replaced by the older ImportError.
    • Print function imported from future
  • Using new hooks to calculate:
    • motor.config.current_control_bandwidth
      • This deprecates motor.set_current_control_bandwidth()
    • encoder.config.bandwidth
  • Default value for motor.resistance_calib_max_voltage changed to 2.0

Fixed

  • An issue where the axis state machine would jump in and out of idle when there is an error
  • There is a bug in the arm fast math library, which gives spikes in the output of arm_cos_f32 for input values close to -pi/2. We fixed the bug locally, and hence are using "our_arm_cos_f32".

@madcowswe madcowswe released this Aug 31, 2018 · 251 commits to master since this release

Assets 14

[0.4.3] - 2018-08-30

Added

  • Encoder position count "homed" to zero when index is found.

Changed

  • We now enforce encoder offset calibration must happen after index is found (if using index)
  • Renaming of the velocity estimate pll_vel -> vel_estimate.
  • Hardcoded maximum inductance now 2500 uH.

Fixed

  • Once you got an axis error ERROR_INVALID_STATE you could never clear it
  • Char to int conversion to read motornum on arduino example

@madcowswe madcowswe released this Aug 5, 2018 · 295 commits to master since this release

Assets 14

[0.4.2] - 2018-07-04

Added

  • Hall sensor feedback
  • Configurable RC PWM input
  • Ability to read axis FET temperature
  • Config settings for:
    • motor.config.requested_current_range
    • motor.config.current_control_bandwidth and motor.set_current_control_bandwidth. Latter required to invoke gain recalculation.
    • encoder.config.bandwidth

@madcowswe madcowswe released this Jun 10, 2018 · 420 commits to master since this release

Assets 14

[0.4.0] - 2018-06-10

Added

  • Encoder can now go forever in velocity/torque mode due to using circular encoder space.
  • Protocol supports function return values
  • bake Git-derived firmware version into firmware binary. The firmware version is exposed through the fw_version_[...] properties.
  • make write_otp command to burn the board version onto the ODrive's one-time programmable memory. If you have an ODrive v3.4 or older, you should run this once for a better firmware update user experience in the future. Run the command without any options for more details. Once set, the board version is exposed through the hw_version_[...] properties.
  • infrastructure to publish the python tools to PyPi. See tools/setup.py for details.
  • Automated test script run_tests.py
  • System stats (e.g. stack usage) are exposed under <odrv>.system_stats

Changed

  • DFU script updates
    • Verify the flash after writing
    • Automatically download firmware from GitHub releases if no file is provided
    • Retain configuration during firmware updates
  • Refactor python tools
    • The scripts explore_odrive.py, liveplotter.py, drv_status.py and rate_test.py have been merged into one single odrivetool script. Running this script without any arguments provides the shell that explore_odrive.py used to provide.
    • The command line options of odrivetool have changed compared to the original explore_odrive.py. See odrivetool --help for more details.
    • odrivetool (previously explore_odrive.py) now supports controlling multiple ODrives concurrently (odrv0, odrv1, ...)
    • No need to restart the odrivetool shell when devices get disconnected and reconnected
    • ODrive accesses from within python tools are now thread-safe. That means you can read from the same remote property from multiple threads concurrently.
    • The liveplotter (odrivetool liveplotter, formerly liveplotter.py) does no longer steal focus and closes as expected
    • Add commands odrivetool backup-config and odrivetool restore-config
    • (experimental: start liveplotter from odrivetool shell by typing start_liveplotter(lambda: odrv0.motor0.encoder.encoder_state))
  • Set thread priority of USB pump thread above protocol thread
  • GPIO3 not sensitive to edges by default
  • The device now appears as a composite device on USB. One subdevice is still a CDC device (virtual COM port), the other subdevice is a vendor specific class. This should resolve several issues that were caused by conflicting kernel drivers or OS services.
  • Add WinUSB descriptors. This will tell Windows >= 8 to automatically load winusb.sys for the ODrive (only for the vendor specific subdevice). This makes it possible to use the ODrive from userspace via WinUSB with zero configuration. The Python tool currently still uses libusb so Zadig is still required.
  • Add a configuration to enable the ASCII protocol on USB at runtime. This will only enable the ASCII protocol on the USB CDC subdevice, not the vendor specific subdevice so the python tools will still be able to talk to the ODrive.

Fixed

  • Enums now transported with correct underlying type on native protocol
  • USB issue where the device would stop responding when the host script would quit abruptly or reset the device during operation

@madcowswe madcowswe released this Mar 27, 2018 · 902 commits to master since this release

Assets 10

[0.3.6] - 2018-03-26

Added

  • Storing of configuration parameters to Non Volatile Memory
  • USB Bootloader
  • make erase_config to erase the configuration with an STLink (the configuration can also be erased from within explore_odrive.py, using my_odrive.erase_configuration())
  • Travis-CI builds firmware for all board versions and deploys the binaries when a tag is pushed to master

Changed

  • The build is now configured using the tup.config file instead of editing source files. Make sure you set your board version correctly. See here for details.
  • The toplevel directory for tup is now Firmware. If you used tup before, go to Firmware and run rm -rd ../.tup; rm -rd build/*; make.
  • Update CubeMX generated STM platform code to version 1.19.0
  • Remove UUID_0, UUID_1 and UUID_2 from USB protocol. Use serial_number instead.
  • Freertos memory pool (task stacks, etc) now uses Core Coupled Memory.

Fixed

  • malloc now fails if we run out of memory (before it would always succeed even if we are out of ram...)

Known Issues

  • The README says you should run (lsusb -d 1209:0d32 -v; lsusb -d 0483:df11 -v) | grep iSerial to find your ODrive's serial number. However with this release's firmware you need to run (lsusb -d 1209:0d33 -v; lsusb -d 0483:df11 -v) | grep iSerial instead (that is 0d33 instead of 0d32).

@samuelsadok samuelsadok released this Mar 12, 2018 · 1047 commits to master since this release

Assets 5

[0.3.5] - 2018-03-04

Added

  • Reporting error if your encoder CPR is incorrect
  • Ability to start anticogging calibration over USB protocol
  • Reporting of DRV status/control registers and fault codes
  • DRV status read script
  • Microsecond delay function
  • Travis-CI

Changed

  • Build system is now tup instead of make. Please check the Readme for installation instructions.

[0.3.4] - 2018-02-13

Fixed

  • Broken way to check for python 2. Python 2 not supported yet.

[0.3.3] - 2018-02-12

Added

  • Liveplotter script
  • Automatic recovery of USB halt/stall condition

Changed

  • Modified python code to be Python 2 compatible

Fixed

  • USB CSC (USB serial) now reports a sensible baud rate

[0.3.2] - 2018-02-02

Added

  • Gimbal motor mode
  • Encoder index pulse support
  • resistance_calib_max_voltage parameter