Crawler ODrive housing

Summary:

Our first Odrive housing, installed on the underside of the flying bridge without the venting flue.O

Our first Odrive housing, installed on the underside of the flying bridge without the venting flue.O

The ODrive housing, is mounted on the underside of the flying bridge, and holds the Odrive and its attendant power resistor. This housing was developed in it’s current form for our tests at Eagle Mine, and is intended to be dust and splash resistant, and features panel mount connectors for everything except the auxiliary power output (which is run out the air vent if needed).

With both fans running, we found the maximum sustainable current to be somewhere on the order of 70amps. During autonomy testing we were able to set our current limit to 85a peak, with an ambient temperature of 105f and experienced no issues while testing.

ODrive:

Review:

The ODrive is a two-channel brushless servo controller, with built in FOC. The peak current is around 100a and the sustained current capacity is on the order of 70, depending on cooling. The unit comes in either a 24v, or a 56v configuration, and can communicate over serial, USB, CAN, or PPM. Although it should be noted that USB is the only option that is fully fleshed out. The price at time of writing is around 120$ for the low voltage variant, and 150$ for the high voltage variant.

In practice, we found that the ODrive worked okay, but had lots of fairly fiddly configuration that needed to be worked out. Not all of which was documented on the Odrive website. I would certainly re-use the ODrive for a budget-constrained vehicle project in the future, and would have no qualms about using it as a position controller (which is what it is really designed for), but would be hesitant to install it in a high-reliability application where the occasional re-start is unacceptable. The learning curve is fairly steep if you have no prior experience with FOC or servo controllers, so expect to allocate around 2 weeks to getting comfortable and then around 1 week to actual setup and testing.

Integration:

The original encoder setup. The new one keeps a similar structure, but switches to an in-line no contact magnetic encoder. With this configuration we periodically lost ticks and would eventually see the FOC fail when it lost track of the rotor posit…

The original encoder setup. The new one keeps a similar structure, but switches to an in-line no contact magnetic encoder. With this configuration we periodically lost ticks and would eventually see the FOC fail when it lost track of the rotor position.

Once connectorized, the ODrive had no issues with driving Balto’s main drive motor. We used an AS5047p magnetic encoder, mounted in-line with the motor, with the magnet directly mounted to the motor shaft, to provide ABI feedback. We did find that the index pulse is a non-optional part of the setup, as it allows ODrive to prevent the accumulation of missed encoder pulses (which did occur). The encoder is mounted to a vertical plate, which is in turn mounted to a small 3D printed breadboard that exactly fits into the chassis, and is then glued in place. For competition, we have short motor and encoder cables, but have not had any problem using longer cables (order of 2 feet) during testing. It should noted that although the system is wired for SPI communication, that is not currently supported by the ODrive, so only relative position is used.

Configuration Settings:

By far the most important part of using an ODrive (as with any motor controller really) is getting it configured correctly. Rather than storing our configuration settings on the motor driver, we choose to re-upload our non-standard configuration settings each time the Odrive is reset. This worked well, and helps us keep our ODrives interchangeable for other projects as needed. We also fully redo the calibration process each time the ODrive is initiated. This introduces terrain dependent variability though, so I would be cautious about taking the same approach.

We still have a few issues with our performance, and of course our settings are specific to the motor and power train we were using, but on the whole they did work well so I have included them below for reference. Note that if your hardware is different you will need different values.

  • axis1.motor.config.current_lim = 80

  • axis1.controller.config.vel_limit = 233333 + 50000

  • axis1.motor.config.calibration_current = 40

  • config.brake_resistance = 0.8

  • axis1.motor.config.pole_pairs = 2

  • axis1.encoder.config.cpr = 400

  • axis1.motor.config.requested_current_range = 60

  • axis1.controller.config.control_mode = 2

  • axis1.encoder.config.use_index = True

  • axis1.controller.config.vel_limit_tolerance = 0

Splash Proofing:

The housing fully assembled in it’s “splash proof” configuration. The lack of sealing around the edges is a little worrying, but did not prove an issue in practice. For future builds laser cut gaskets could be used.

The housing fully assembled in it’s “splash proof” configuration. The lack of sealing around the edges is a little worrying, but did not prove an issue in practice. For future builds laser cut gaskets could be used.

One of the key requirements for this motor housing was that it be as splash proof as possible. This was accomplished by adding a cover plate to the air inlets, and a circuitous path to the air outlet. As designed, there is no way for water to directly splash onto the PCB without taking at least two 90 degree turns. The panel mount connectors were sealed with CA glue (if permanent) or glue-gun glue (if temporary). During testing at the Eagle Mine, we created puddles and ran Balto through them without any issues. The system also held up fine at the actual competition which featured puddles on the order of a few inches deep. Although not as secure as full waterproofing, I do like this design and plan to re-use it for other protects.

Build Log:

Before beginning the build, it is important to source all of the required parts. This means printing the base and flue, along with the upper and lower Odrive covers. We choose to laser cut the covers for aesthetic reasons, but all parts can be printed on a Craftbot+ if need be. A soldering iron, Locktite 222, CA glue, heat shrink, 14 gauge wire, ribbon cable, and pliers will also come in handy. All of the mechanical hardware can be purchased from Micmaster, and the electrical hardware (excepting the Odrive itself) can be purchased from Digikey. Please see the list below for an approximate list of the require parts. The various wires, cables, and pin headers are also required along with lock washers or Locktite.

Purchased Components:

Most of the required parts laid out prior to assembly

Most of the required parts laid out prior to assembly

  • (12x) 1/2in 4-40 standoffs.

  • (10x) 4-40 x 1/4 cap screws.

  • (8x) 4-40 x 3/8 cap screws.

  • (8x) 1/4-20 heatset inserts.

  • (22x) 4-40 heatset inserts.

  • (2x) 40mm 12v fan.

  • (2x) male XT60

  • (1x) female XT60

  • (1x) female XT90

  • (3x) 6mm female bullet

  • (1x) Odrive, no headers.

  • (1x) D-SUB, 9 pin, female —> ribbon.

Assembly Steps:

68966651_726986087749181_3651018592998129664_n.jpg
69069669_2362534380654852_2825536581765431296_n.jpg
  1. Insert the heat-set inserts into the 3D printed and laser cut parts. Note that the outer four holes, and middle two holes on the lower lid are clearance holes. Likewise, the four holes on the upper lid are all clearance holes and do not need heat-set inserts. For the 1/4-20 heat-set inserts, only the four outer holes in each six hole pattern are used. The middle two can be left empty.

  2. Install the Odrive, Odrive resistor, fans, and upper and lower lid plates. Once the heat-set insert angles have been confirmed as adequate, remove the two lid plates, leaving the Odrive board and Odrive resistor installed.

  3. Solder together XT90 input cable, resistor lines, and female 6mm bullet connector cables, using the housing and installed Odrive to get the correct lengths. Take care to leave several inches of extra length for connecting each wire to the Odrive. All of these connections should be made with high current (14 gauge or larger) wire. Heat shrink should be used to insulate all connections, and should extend fully over the bullet connectors.

  4. Next assemble the female D-SUB panel mount connector. If using multi-colored wire place the black strand such that it runs to the first position on the connector. Measure the ribbon cable to the 1st encoder input on the Odrive and cut it with about 1.5 inches of margin. Once cut to length, connect the 5 position crimp-on connector with male pins using the following mapping. The D-SUB pin numbering follows the standard convention for this project.

    1. 1st D-SUB (MISO) —> NC.

    2. 2nd D-SUB (GND) —> 5th crimp position.

    3. 3rd D-SUB (MOSI) —> NC.

    4. 4th D-SUB (B) —> 3rd crimp position.

    5. 5th D-SUB (CLK) —> NC.

    6. 6th D-SUB (A) —> 2nd crimp position.

    7. 7th D-SUB (CS) —> NC.

    8. 8th D-SUB (5v) —> 1st crimp position.

    9. 9th D-SUB(INDEX) —> 4th crimp position.

  5. Test fit all panel mount connectors, including the usb panel mount, and check all of the required lengths. If viable solder the wires in place as appropriate and use CA glue to secure the XT90 connector, and bullet connectors in place. Otherwise, revise any incorrect lengths. The USB mount, and D-SUB can be secured with screws, (though the D-SUB should snap in place).

  6. Using medium (larger than 19 gauge) wire, solder the two auxiliary power taps onto the Odrive itself. One should extend into the housing for use powering the fans, and the other should extend out of the housing through the air vent for use powering the steering system if needed.

  7. At this point the housing should be fully assembled in an electrical sense. It may make sense to test that it works now, before progressing on to the cooling fans and lids.

  8. Thread the fan wires through the small holes in the larger of the two lid plates. Be sure to include some heat-shrink or other tubing to provide strain and abrasion relief. The fan wires can now be soldered together to an XT60 connector.

  9. The entire housing can now be assembled. Use ether lock washers, or low strength Locktite to secure all of the screws, and be sure to thread the external power tap out through the vent if in use.