August 29, 2016

Introducing the GigaTroller

Enjoy this unprecedented two posts in one day.  It probably won't happen again.

The GigaTroller is the motor controller designed for running the absorber on the motor dyno, named for the absurd mosfets it uses, the IXYS MMIX1F520N075T2 TrenchT2 GigaMOS HiperFET. What a mouthful.

This is an rediculous mosfet.  Rdson is quite good but not spectacular (given its size), typically 1.2 mΩ on a 75V FET, and it has quite a lot of gate charge, 550 nC at 10V on the gate.   However, mechanically it's pretty awesome.  It's some fancy IXYS surface mount package, 1" square, with an isolated metal pad on the top.  Thanks to the presumably gigantic die and excellent package, it's rated for 500 A at 25 C, 1700 A pulsed, and 830 (!) watts of package dissipation at 25 C.  It's also a whopping $17 per FET on Digikey, but fortunately Bayley found some rails of them for $5 each on Ebay.  At $17 they would be silly to buy but it's actually a pretty reasonable amount of transistor for $5.

Nominally I'm designing this controller for 200A, 50V operation, because that's all the dyno absorber can do.  This should be very safely within the ratings of these transistors.

A tricky thing about designing a high current controller like this is designing a PCB that can actually handle that current.  To make the controller as compact as possible, I designed it to use custom surface-mount busbar, which I waterjet cut out of copper plate and reflowed to the PCB.  Another interesting feature of this transistor package is that it physically has a cutaway underneath the package between the legs.  I'm using that space to route the busbar beneath the transistors, instead of next to them.

Here's a board from 3PCB and a pile of busbar.  Although I didn't ask for gold plating on the PCB, I got it for no extra cost.  Presumably my boards were tacked onto a big batch that was getting plated or something?

It took two tries to solder the bus bar.  First time around, I tried clamping everything at once and baking it in an oven, but that ended up warping the board and turning out poorly.  At Peter's suggestion, I soldered the busbars one-at-a-time, fixturing them with steel binder clips and heat-gunning them with solder paste underneath.  This worked out beautifully:

After sanding off excess solder and oxidation:

Here's the power board populated with FETs, Allegro current sensors, gate pulldowns and gate zeners, and one 22 uF film cap per leg.  After reading this paper, I decided to try out using just a small-ish set of film caps instead of the the huge pile of electrolytics I'm used to seeing.

Note the bus bar routed underneath the transistors:

Logic and gate drive stack on top of the controller, next to the capacitors.  An STM32F446 does all the motor-control stuff.  I know the F3 series are probably a better choice for motor control things, but I had a few F446's left lying around, and this way I could just port all my FOC code over from my small controllers with minimal editing.

The power supply section of this features 5 isolated 15V DC supplies - one for the low-side gate drivers, one for each of the three high-side gate drivers, and one one for the logic.  The gates are driven by 2.5A gate drive optoisolators.

Bayley actually designed the power supply and gate drive section of this for different motor control project of similar power level, so I borrowed his design.  A 555 generates a square wave, which is fed into the inputs of a dual inverting/non-inverting gate drive IC.  The gate driver swings around the primary of a 6-winding transformer, the 5 other windings of which are rectified to generate the 5 isolated 15V supplies.

The gate drive IC driving the transformer gets extremely warm, but its power dissipation is still within spec, and it's now operated 10's of hours at least with no problems.  When the controller gets mounted to a heatsink I'll make sure it gets some airflow too.

I used ethernet connectors for programming/serial and position sensor, because they're nice cheap, locking, small-footprint connectors.  And they're matte black.

To get the controller working, I spent a few days figuring out how to generate complimentary PWM signals with software-defined deadtime.  That was the only significant code change, though, other than re-doing the current loops as usual.

So far I've pushed the controller to 45V, 100 phase-amps entirely without drama.  The transistors get a little warm.  Here's what bus voltage looks like at ~80 phase amps.  Note this is running of a bench supply with several feet of wire between the supply and controller.  At 41 volts on the supply, the sharp spikes hit ~7.5 volts above nominal, and the bulk ripple is a couple volts.

Here are the Eagle files, if for some reason you want to build one of these:
Power Board
Logic Board


  1. Hello:
    I have just purchased this Mosfet from digikey but it does not work with my application circuit. i just want to switch high power DC from its D to S. i have applied +24v at its drain and +5v on its gate but i received only +3v at its source instead of +24v.
    if any one has solution of my problem then kindly help me.

  2. Ben, have you looked in position sensorless control of brushless motors?
    I have had a look at all your awesome projects, but I don't see anything on sensolress motor control. The idea is, it basically omits the need for the encoder by working out the rotor angle using a phase lock loop, 2 currents and some fancy math in the synchronous rotating reference plane (dq). plenty papers on it. check it out if haven't already. pls email me if you have a reason/s you decided not to do things this way. I would be interested to hear them.

    1. Yes, I'm familiar with sensorless control, although I've never implemented it. Rotor position estimation is poor at low speeds especially, making sensorless control ill-suited for most of the applications I'm interested in - robotics, motion control, etc, which require high torque at low speeds and good positioning accuracy.

    2. Yep very true, but there are some techniques that do not depend on estimating the flux vectors and allow high torque at low speeds, even stationary. Arbitrary high frequency injection for one. I have not tried it on small PMSM's yet, but the control topology its similar to other larger scale motors I've tested. Essentially you just need some q or d axis current and a small-injection voltage on one of the dq-axis + fancy math. No rotor movement or lousy flux integrators required (which is why some of the PSC techniques fail at low speeds). The injection voltage is noisy though and you don't get perfect rotor position because of saliency shifts AND you use up some of your DC bus head room. but its still cool AF.

  3. I am planning a compact motor controller of my own and am having a problem sizing bus capacitors. A study I found referenced a bus capacitor requirement of C=Ipk/(8*f*dV). Using this I calculated a required 60 uF. My problem is it seems hard to find 60 uF of film capacitors with a high enough total current rating. RMS current through the capacitors should be about 55 amps. Any advice?