Monday, January 10, 2011

Victor 883107-7

Okay, so I know I said that one of the best things about building a brushed DC motor-based snow scooter was that for just this once I do not have to design a motor controller for the project...

...well I did anyway.

Honestly, if I had two Victor 883's lying around, I would use those. But I don't, and I'm not spending $300 on something I can make from scratch for less than that. I am done being a slave to IFI/Vex absurd pricing because they have no competition in their power-to-volume ratio. I can stuff MOSFETs into a small space too. In fact, it's what I do in my spare time anyway. The challenge:
  1. Using the same footprint as a Victor 883, make a MOSFET H-bridge controller that can handle 48V and 75A continuous.
  2. Run either on standard RC input or 0-5V analog throttle. Retain isolation between logic and power ground. (The Victors are optically isolated at the signal input.) 
  3. Be less than $140, including board printing and components.
I took my inspiration from this:

The last time I wanted to directly rip off the footprint of an existing MOSFET and make my own cheaper, more easily serviced version was on the Cap Kart. The kart had just finished a week of blowing up giant MOSFET bricks from IXYS and I decided that if it were going to blow things up, they might as well be cheap and user-serviceable. It never blew this one up.

Here is the smaller H-bridge version, which I call the Victor 883107-7:

What's that blue thing?

The name comes from the monster IRFS3107-7 MOSFETs. In the world of MOSFETs, the IRFS3107-7 reigns supreme. If the IRF1405 is a high-end sports car, the IRFS3107-7 is the supercar that shouldn't rightfully exist. It has such massive current handling capability that the D2Pak surface mount package sprouted four extra legs to handle the  source current. Let me put this another way: 0-gauge copper wire, which is the same diameter as this MOSFET, isn't rated for as much current.

Of course the 260A current rating is if you put the drain tab on an infinite heatsink held at a constant 25ºC blah blah blah. It can switch 75A no problem. With two FETs conducting in the H-bridge at any given time, the power dissipation from FET conduction at 75A is: 2*(75A)²*(2.1mΩ)=24W. There are also switching losses, but if I do the gate drive right, the power loss should be dominated by the conduction.

That's still a considerable amount of heat to get off the board. With only one square inch of on-board copper plane for sinking and natural convection, AN-994 suggests a thermal resistance of about 20ºC/W for a D2Pak. Since I'd have two sharing the load and have almost two square inches of copper, this gets split in half. But, my FETs would still be toast at anything above about 50A. (Still, 50A with no external heat sink...)

This is why I opted for bare boards with no soldermask. The heat transfer path is from the MOSFET drain tab to the board top copper layer, through a crapload of vias to the bottom copper layer, through thin silicone padding for isolation, and into an aluminum heat sink.

Heat transfer zone.

Normally, I would then need to worry about keeping the aluminum heat sink cool with some kind of fan. But for the most part my heat sinks are semi-infinite blocks of scooter/go-kart/robot chassis. And, as an added bonus, this one will employ direct 0ºC phase-change cooling (by virtue of being totally covered in snow). Hell, if the road's been salted, I might even try out eutectic cooling...

So I'm confident the 3107-7 won't fail under load, but unlike the Cap Kart's controller, this one has to have on-board logic. And the finally-resolved electrical noise issues of the 3ph 3.1 brushless controller are still fresh in my nightmares. I decided to take the safe way out, importing the completely isolated gate drive solution from the Cap Kart onto this board.

I do still love the IRS21844 gate drivers, but I just don't trust them quite as much as the optically-coupled HCPL-3120 when very high currents are required. It just gives me peace-of-mind to know that my microcontroller and logic are driving the equivalent of four LEDs, and are not in any way electrically connnected to the power circuit.

The original modular, isolated half-bridge from the Cap Kart went a step further by using floating 15V supplies everywhere. The benefit here was that both the gate drive supply and the logic supply were isolated from the power circuit, and from each other. Also, by providing a floating 15V supply for the high side drive, it could be held on at 100% throttle. But, the floating supplies are really freaking expensive. In this newer version, I've opted to use just one floating supply (DCR021205) to isolate the logic's 5V, a trick a stole from the latest 3ph 3.1 upgrade. As for the gate drive, for the first time, I'm trying out bootstrapping with the optocoupled gate drivers:

Diode D4 charges the high side's bootstrap capacitor C6 while the low side is on. Then, when the high side needs to turn on, C6 charges the MOSFET gate while D4 blocks the reverse voltage. This is a pretty common trick for gate drive, and I'm really not sure why I never considered it for the optocoupled gate drivers. The only downside is that you can't get 100% throttle. The low side must be switched on in order for the bootstrap capacitor to recharge. But 95% throttle should be possible.

There's also a bit of a game to play to make sure that the high side gate driver does not go into under voltage lock-out (UVLO). The HCPL's will shut down at 11V. There's a bit of a voltage drop between the high side supply and the bootstrap capacitor because of the Schottky diode. There's also a bit of a drop on the other side because of the voltage drop across the low-side FET. Then, the capacitor loses some voltage as it charges up the MOSFET gate. And finally, it loses some more as it slowly drains through the gate's pull-down resistor. So, forget about using a 12V gate drive supply. 15V is a much better bet. Unfortunately, this means the controller won't run on a 12V battery...oh well.

My favorite thing about the optocoupled gate drive solution is how PWM dead-time is generated. Dead-time is required between turning off one FET and turning on the other. This ensures that two adjacent FETs are not on at the same time, which would short the power supply and cause instant destruction. Here, the optocoupler LEDs are wired in anti-parallel, so that they can't physically be on at the same time. Additionally, an RC filter on the input ensures that it takes some time to switch from 1.5V to -1.5V, turning one LED off and then the other on. The details of how to size the passives for a given dead-time are in the original write-up. Here's what the dead-time looks like in action:

Because these are such massive FETs, they take a good microsecond to turn on and off with 30-ohm gate resistors. I could push harder, since the gate drivers themselves can source/sink as much as 2A peak. But, as I found out in one of my many other controller troubleshooting sessions, slowing down the gate drive a little can sometimes help clean up noise. I chose a capacitor (C10 above) to set the dead-time to 1.5μs, which is what you see above. 

Aside from the fact that I soldered four out of six diodes in backwards the first time, the controller so far seems to work. I've only tested on the bench supply, but it was able to drive about 25A before alligator clips started melting. Once I get it hooked up properly to a battery, I'll be able to really load test it. 

Here's what it looks like side-by-side with a Victor 883:

"But, you said you made yet another controller because you didn't have any Victor 883s."

This one's not mine, okay? I borrowed it for the photo. Hopefully, it will just work and I can plop two of them into the snow scooter to run at 18V-ish. But in general, I'd be glad to have a Victor alternative for other projects as well. If it survives some more abuse testing, I'll post the design files so you can try it out yourself. For now, here's the full schematic:

(Click for full resolution image.)

Oh, and it runs on an Arduino. Did I forget to mention that? My bad.


  1. Hi Shane,

    I thought that you might not be able to restrain yourself from designing another controller for this project! Being brushed made the control code part easy I'm sure(runing in that small and simple blue MCU module - small arduino PCB?). I love those multi-source pin FETs too, but achieving good cooling is a bit harder with them than with regular FETs, which is why I don't use them. But I guess if your silicone/amp ration is high enough, then you don't need much cooling anyways, right!? :-) Of course the snow might help a bit too...

    Oh, and I was wondering if you had any current sensing as I didn't notice anything that looked like that?

    Before I forget, I want to thank you for posting your brushless controller's source code a month or so ago - very cool and also very generous of you, Shane! I haven't looked at it for a couple weeks now, but I think it's the version that runs on the 32 bit MCU, right? Is your original brushless code (with q/d current control) made for your 8 bit MCU very different from the code posted? I ask because I have my own controller designed around a 8 bit PIC (18F4431), and was thinking of having some fun with some of the tastier code tidbits from your code.

    BTW, I think you could have pulled off making this controller without any isolation and maybe also faster switching speeds (thus less switching losses and less parts count). One important thing that would reduce ground noise much in your layout would be to tie the low side FET sources together very closely (instead of doing this to the high side FET drains, a less critical point). This ground point would then become the center of your ground star, were power ground input+filtering and ground drive signals would connect to. You would then be able to eliminate the DC-DC isolator, replace the four optocouplers with two gate drivers, plus you could also simplify your power supply by using a simple/cheap linear part instead of the switcher (for low voltage input and light loads it shouldn't heat up very much). Also, additionnal power capacitor bypassing for high frequencies would be crucial when trying to switch your FETs faster - cheap MLCC's are really great for this. I would be happy to send you a small package with some 50V 10uF MLCC's (1206 size) if you would like, I have a whole reel of them here. It would be a very small present compared to all the cool info you share!

    I've never made a brushless controller yet, but my last controller manages to output up to ~170A burst though a single phase (RL load, tested @ 50% duty) without any isolation... but I must say it uses copper bars as power conductors! What I was thinking of doing sometime is modify my firmware to make a dual brushed motor control mode - that would make for a very versatile controller.

    Anyways, I can't wait to see a video of your snow scooter in action - I love the way your dual motor/gearbox design is so compact. I've been thinking of using a mountain bike tire with the side walls removed instead of a timing belt as a track. Many tires have a quite flat profile and good threads so it might work, and then I could use much smaller diameter, smoother tires as the drive wheels. If I do try this out and it works I'll send you a photo (I'll probably post it on the endless sphere ebike forum - if you've never been there before).


  2. Yep, the code I posted was for the 32-bit STM32F103 chip. The previous design was based on a 16-bit MSP430F2274. However, the code is virtually the same in terms of structure. The only main difference is that the "slow loop" ran at 122Hz on the MSP430 as opposed to 1kHz on the STM32. As long as phase current and rotor position are sampled synchronously, the speed of the slow loop can be reduced to fit the processor. I have no doubt it will run just fine on an 8-bit processor, provided that it has three independent PWM channels (18F4431 looks good to me).

    No current sensing on this controller. It can probably handle stall current for short bursts, so I'm not too worried. The motors might not last that long, though. If the brushes get vaporized, I'll probably switch to sensored brushless, for which I already have a pretty good solution.

    I get what you're saying about isolation and ground noise. I've used the IRS21844 drivers for my brushless controllers without isolation and they seem to work well up to 50A, but for some reason it just makes me more comfortable having an optical barrier in the circuit. Maybe it also makes me more careless about power-side layout, though...

    Sometime soon I might try designing a higher power controller and then I will revisit all these considerations.


  3. Hi Shane, I really like your motor driver. Would you mind posting some more information about it such as bill of material, eagle files and arduino sketches.


  4. Sure, I posted the EAGLE files, Gerbers, and Arduino sketch here:

  5. Thank you very much, I greatly appreciate it !

  6. Great write up and controller Shane. I was wondering how further testing went and also if you had a bill of material you can post. Thanks and again great job

    1. Thanks! I've tested it on a bunch of motors with no problems so far. I burned up several 550 motors with it, so it seems it wasn't the weakest link up to about 75-100A for brief durations.

      I don't have a BOM handy but I think you can export one from the EAGLE files.

  7. Hi Shane, I got some question on this circuit.

    I see this H-bridge contain only N-Chanel HEXFET, is that going to work? I mean the high side, is it should be a P-Channel mosfet?

    I'm kind of new at this thing. It's silly question btw.


    1. Oops, my bad. Didn't read it through. (I was looking for schematic first and then suddenly curios)


  8. Hi is it possible to post the design files to a working link?