Upgrading the Nomad's spindle driver

I haven’t been super fond of the stock spindle driver that comes with the Nomad (McGillicutty).

  • It doesn’t seem to actually output the rated 300W.
  • The driver, Allegro’s A4962, uses trapezoidal drive.
  • The FETs are not that high quality. The PMOS used has quite large Rds(on), 65mΩ. Both NMOS and PMOS are quite slow, the former has a rated fall time of 100 ns. They also both have higher gate charges than I would like. They are just not the kind of FET I would like to see in a motor driver.
  • The sense resistor is not using a kelvin connection :melting_face:.
  • It’s fragile, with very little in the way of fault protection. We’ve got two fat TVS diodes, and that’s it. Stalling the motor seems to fry the board instantly a majority of the time.
  • IMO someone went a tad overboard on the number of caps.
  • It isn’t open, nor is it extensible.

I figured it would be fun to try and design an upgraded driver that I could use in its place. With that in mind, meet the v0.1 (I’m not good with names) McSpindle Driver!

This is my first attempt at creating a replacement driver board so I’m expecting it to not work/have some number of problems.

I decided to stick with Allegro for the actual driver chip and went with their A89307 as it seemed :sparkles: fancy :sparkles: and I like fancy. The main highlights here are:

  • Vector control :partying_face:
  • 4 pin sense resistor w/kelvin connection.
  • 3 phase inverter made up of three dual n-channel FETs (MTH6010LPD). These things are super great. They’ve got:
    • Typical Rds(on) of 8.5mΩ.
    • Low Miller charge.
    • Exceedingly fast – 8.8ns rise time and 7.4ns fall time, 34.5ns for the body diode recovery time.
  • Fully isolated control with isolated power. The control circuitry is not on-board, primarily because this is the first iteration and I wanted to focus on the driver. What is on-board however is:
    • +5V, 150mA isolated power supply via mini transformer with push-pull drive.
    • Isolated PWM signal from the Carbide Motion board.
    • Isolated I2C+control interface for the A89307.

The A89307 has quite a lot of configuration that needs set, which is what I am working out now. The documentation is a bit lackluster so there’s a good amount of experimenting here.

So far the biggest unknown for me are the motor constants as the driver needs Kt to be set . The best guess I could come up with for these are

Kv = 24000rpm/24V = 1000rpm/V = 104.7 rad/V·s
Kt = 1/Kv = **0.00955 N·m/A**

Now, what are the units for the Kt register? I have no clue. The register is 9 bits wide so we have a range of 0-511. What I’m going with for now is that it wants N·m/mA which would in this case be 10. :woman_shrugging:

Similarly (noticing a trend here) there are no explanations for what units the inductance register should be in. I’m going to assume it wants µH which I measured as 300µH phase-to-phase. The register is 8 bits so we’re going to need to use the inductance_shift register. Setting that to 1 lets us use 150 for the inductance register.

Will post the full configuration later on when testing and I plan on continuing to document this as I go!


Oh yeah, forgot to add (not really, it just didn’t let me include more than 2 links since I’m new)


First test, started up the motor at 50% power, then went to 75%, then full 100%.


I think i understood about 20% of that you wrote even though i recognised most of the words. Really quite impressive that you thought sonething could be done and that it worked. It will be interesting to hear how it performs vs your expectations.


Is this an audition for employment? :grin:


Thank you! Honestly I don’t actually expect it to work that much better but it would be a nice surprised if it did. Running the motor at 100% anecdotally sounded like it was going harder than what the base board puts out but I can’t find a clip to compare. Main goal with this is just its fun and trying to not make it fry itself when it stalls.

I wish :joy_cat: I unfortunately do not have a degree in electrical engineering, I am a lowly software engineer.

Quick update

Dunno if I either toasted the A89307 a bit too hard repeatedly trying to get the pads lined up or what but the chip is exceedingly flaky. Having an incredibly difficult time communicating with it via I2C for configuring.

Starting to wish I went with TI’s MCT8329A even if it is still trapezoidal control.

Excellant to learn and discover.

I put this on hold as these drivers are a pain in the butt.

Plus my new Spindle arrived, which is what I’ve been focused on. (I had to take the top off as the spindle + powercord is a tad too tall for it. Water cooling loop isnt installed yet.)