Archive for August, 2015


RageBridge 2: The Indiegogo Campaign

Aug 27, 2015 in Motor Controllers

Back my kickstarter.

- Charles in every ironic statement ever

Today, that statement ceases to be ironic (or perhaps, is even MORE ironic). For I’m proud to announce the RAGEBRIDGE 2 INGIEGOGO CAMPAIGN!

You’ve been following the story of RageBridge 2 behind the scenes here, so now you can support its production and be first in line to get them! Or, perhaps, run far away because you know how derpy the development process is!

The link to the campaign is:


After the campaign has been fulfilled, RageBridge2 will be available on

RageBridge 2: The Rage Awakens

Aug 24, 2015 in Motor Controllers

At one point in time, I think I was working on some kind of motor controller. In fact, I might have sold a few here or there! And some of them might even still be working!

It’s been six months since I had an unexpected robot baby and had to drop RageBridge development efforts. But I’m glad to say that much progress has been made, and the first batch of beta testing units is almost ready for the SECOND Somewhat-annual RageBridge Breeding Program. We pick up the story again in June…

Here are some revision 3 boards under construction. Revision 2 was slated for immediately after Motorama 2015, but I discovered enough stupid board bugs on it to warrant skipping directly to revision 3. Namely, there were some incorrectly assigned pins to the ATMega chip and the current potentiometer was backwards. There were a few other trace optimizations made.

I use a small soldering tip – a Weller NT1 – to do everything but the “big power” components, then switch to a big chisel tip iron with a Weller LTD tip to restrain the FETs and other heat-grubbing parts, including the main capacitors. The gate drive chips, in ever-convenient TSSOP package, have their center thermal pads heat gun reflowed first, then the legs are soldered individually.

Two test units of Revision 3 built out and ready for abuse. At this point in development, the firmware was left in an R/C-only, hacked together mode. I began refactoring code I’d written “just to get by” for Motorama. At the same time, I started testing the boards using some standby motors:

Here’s Rage2 being tested on some motors it’s meant to drive – something roughly DeWalt sized, perhaps, and a scooter motor. I’m finding out some critical characteristics of the system, such as “Will my MOSFETS consume themselves?” (the answer is some times), and “Will it reset or stumble because of noise?”

Unfortunately, the answer to the last one is yes, and probably contributed to the Revision 1 unit that died at Motorama. With any hard reversing or command stepping – moments when the current draw increases sharply – the controller would reset, brown out, or exhibit other forms of bad behavior.

Uh oh. I’d been through this before, with RageBridge The Original, so I immediately checked the usual suspects. Poor ground routing. Placing capacitors in the wrong place such that they broke the grounding discipline. High power switching next to vulnerable signal traces, and so on. In the world of power electronics, where you put things is often more important than what you put there.

That’s my 5V logic power line, measured at the output of the power converter, being punched by nearly 1Vpp transients.

The brown wires are scoping points where I’d pay attention to the behavior of the system. The two blue wires were intended to jump the logic power input – which, up until this point, had been taken from the very end of the power plane feeding four gigantic MOSFETs – and gives it its own connection directly at the bus capacitors. It’s kind of like making a reverse Kelvin connection for the logic power.

As I suspected, I made a “cap derp”. The Allegro A3941 datasheet is not very clear (to me) about what it considered signal ground or power ground. In my view, it could stand to be a lot more descriptive about which pins need to be considered “dirty” – directly connected to switching power, so they should under no circumstances be routed to logic/analog ground. Instead, they choose to distinguish between “quiet ground” – what I’d call the logic ground – and “controller ground” vs. “power ground”.

I think I made a mistake here in routing the chip’s main bypass power – which is connected to VDD (battery positive) and “controller ground” – which I interpreted as logic ground for this board, but really should not be. I decided to try jumping this capacitor directly to the chip’s “ground” pin instead of taking it through the ground plane. I did the same for several other capacitors indicated on page 18 of the datasheet, forcing their “ground” sides to avoid the logic ground plane and basically making the only access point of the chip to the logic ground plane at its own ground pin (instead of in a few places).

These two hacks together basically resolved the resetting problem. I could no longer get the DeWalt – a very “dirty” motor, electrically speaking, to reset the board even with current limits off.

Once again – not what you put on the board, but where you put it.

With that cluster of issues resolved, I pushed a “revision 4″ with a few other changes like trace optimizations under the microcontroller, separating everything into a “tree” topology as much as I could – no longer was the 5V supply for the chip coming from 2 different places (!). All the microcontroller’s grounds were gathered and tethered to the plane at 1 location. I also separated the 5V line into a “clean” and “dirty” line – the dirty one is the one fed out to the headers, leaving the “clean” line, which is tapped after the final LC filter stage, to only the microcontroller and current sensors.

Some illustrations of trace optimization for the microcontroller region.

A week and some later, Revision 4 appears…

Okay, so I still had to put them together. This is what the board looks like.

Yes, on the last revision, I forgot to hit “Black LPI please!” and so it was green. I shall not make that mistake again.

This board refused to power on at all. No matter what, the 5V rail never came on, and instead hovered around a few tens of millivolts. What gives? How did I take that many steps back!?

I have a tendency to resort to “explosion debuggin” quickly. That means just running unlimited amps at a low voltage through what is shorted, and seeing what begins smoking first. Every motor controller I’ve made save for LOLrioKart’s controller has been “explosion debugged” at least once. And that’s only because I was running low on the large “brick” MOSFETs.

I took one of the spare boards and ran 10 amps through the 5V rail. Amazingly enough, nothing started smoking, indicating something very low impedance and near to the source. The board did get suspiciously warm in one corner, so it was under the microscope…

Oh my goodness.

It’s a left over stub of a trace that I thought I had erased, but in fact was still there, bridging my 5V straight to ground.

So you might be thinking… But Charles, wouldn’t DRC have caught this? Well yes, but my boards generate so many DRC errors (on the order of 1500+) I just ignore them all and use to check for the most obvious stupidity, but it doesn’t tell one net from another!

This is really just telling me I should set up design rules to actually conform to how I design boards ಠ________ಠ

Well, I suppose I’m glad I don’t have to do this for 250 boards.

A revision 4 board being absolutely hammered to death by the “end boss” of motors – the AM Equipment “D-pack” motor, a marine diesel engine starter motor that, many years ago, drove heavy- and superheavyweight Battlebots with contactor control because no ESCs existed which were hardcore enough to handle them. They can easily draw over 1,000 amps at 12 volts, and their no-load current alone is 30 to 40 amps.

And RageBridge passed the test spectacularly. Check out the “abuse video” here, featuring some other motors while I’m at it.

This is not to imply Rage can control 1,000 amp motors, but that the current limiting algorithm is robust. If I held onto the throttle for longer, the FETs would have unsoldered themselves and attempted to escape. It’s ultimately still thermally limited.

Some more brown fungus sprouts to double check that the noise demon has been exorcised enough within the performance envelope of the controller to not be a nuisance. Notice how I didn’t say eliminated. There’s no such thing in motor controller design.

The story, however, doesn’t end there. You know this to be true because if it did, I would be taking orders right now.

Ever since one of the late models of RageBridge 1 prototype, it has not wanted to operate above about 33 volts. The 5V converter would just shut off and enter what seemed to be a discontinuous mode, or some other mode where the frequency of switching was cut back drastically. Here’s an example, looking at the output pin of the converter BEFORE the inductor:

That’s normal – 24 volts in, 5 volts out. As soon as the voltage crests about 31-32 volts, this happens:

Less than 1 volt out! The ringing indicates that the buck converter is operating in discontinuous mode, but to enter it so quickly and suddenly? Something was going on. During this time, the LM2594 chip itself also got hot quickly, which is not advertised or documented behavior in discontinuous mode.

This fact has prevented RageBridge from operating above 30V reliably, forcing me to rescind the “up to 36V nominal” specification, which fortunately only affected a very small number of users.

So what gives? The LM2594HVM chip is supposed to run up to 60 volts. All my parts in that part of the circuit are 50V on the input, so it ought to at least be fine with that.

I ended up spending the night trying all sorts of stupid things, like making these inductor sculptures. Perhaps the inductance was still a little on the low side? After all, my HV requirements are still in the “coffin corner” of the LM2594 inductor selecton chart.

Nothing changed.

So what has been a constant factor in these boards? The LM2594 power converter design, which has been more or less copy and pasted from older schematics without change. However, everyone else seems to use them fine, including Shane. Since we talk about motor controllers like normal 20-something cosmopolitan guys talk about craft beers and beard maintenance (I have nothing in that department), I went to him for some more perspective.

Umm… let’s take a look at the schematic.

That part number – the MBR120VLSFT3G, is a 20V, 1A Schottky diode. In fact, I found the exact version of RageBridge 1 where I elected to put this diode in: it was when I switched back from the LT3433 buck-boost converter and remade the LM2594 circuit from scratch.

This sounds all too familiar.

Anyways, I likely picked that diode to minimize the losses associated with forward voltage, forgetting the fact that the Output pin of the LM2594 is connected to battery voltage periodically. The lesson here is therefore

don’t use 20v diode at 30v it doesn’t work

I shipped 94 of these.

Sounds good. I replaced both of the MBR120VLSFT3G parts with 50v parts – what I used in RageBridge versions long ago, the STP0560Z.


Three of the four Revision 4 boards in various stages of construction here.

Undergoing a little more stress testing here, now with the D-pack hooked up to a…. leftover propeller from the GLP electric boat class. I wanted a bit more viscous load such that it can draw more amps at higher duty cycles, as well as have a up to 950% greater chance of decapitation.

What else is new? After validating R/C mode, I used the same output driving kernel to make the “EV mode” a lot of you have been craving. I made the signal processing code as modular and functional block-like as possible, sacrificing some speed for the ability to pipe whatever garbage signal into it I please.

Analog mode has two submodes :

  • “unmixed”, using a sprung throttle. Single ended, expecting 1 – 4v active range to represent 0 – 100%, with a discrete reverse switch, or
  • “mixed” using 2 analog joystick axes centered at 2.5V, with a 0.1 to 4.9v active range, controlling forward and reverse and turning in one joystick. This was even easier to write, because that’s literally the same code as the R/C mixing mode.

Selecting the “Combine” jumper forces the outputs to act together, creating a single channel controller. Combine and Mix jumpers are mutually exclusive and logic-checked, since it can’t be single and 2 channel at the same time!

This single channel mode is still not entirely reliable. I’ve rebuilt one of the revision 4 boards twice, finally electing to scrap it.

Since it still is paralleling devices at the driver level, if one driver hiccups or lags, it’s easy to cause cross-conduction (a high side and low side FET of the same half-bridge turned on at once) and destroy everything instantly. To counteract this, I’ll likely increase the deadtime – which right now is just barely enough to not cause cross-conduction in one channel mode – to permit more timing slop.

Will from Hypershock paid a visit to help me test single-channel R/C mode on Hypershock itself. Unfortunately, the aforementioned unreliability made this test largely a flop. However, if I improve this reliability, Rage2 in single-channel mode is a great match to a single “short” Ampflow motor, which means it’s not out of the question for use in heavyweight / BattleBots classes.

The price of progress – the twice-rebuilt and scrapped board, along with some more destroyed parts. After a board blows up once, none of the semiconductors are really the same ever again, so I’m not sure why I even bothered with rebuilding.

When one Rage dies, 10 more take its place!

These are “revision 5″ boards – hopefully the last of the revisions, and once assembled, will go out for beta testing. A few are slated for appearance at Dragon Con in 2 weeks, another few are being sent to Power Racing Series competitors to see how it holds up under the rigor of racing. Two completely different loading regimes and set of input & output requirements!

It’s time to order more gate drivers.

Also, here is an interesting picture.

Chibi-Mikuvan: The Detroit Maker Faire Recap; Chibi-Mikuvan × MarkForged

Aug 11, 2015 in Chibi-mikuvan, Events

It’s van season!

This year, in a stunning turn of events, I was the equipment hauler for the entire MIT contingent, instead of pulling both people and some equipment. I guess everyone just got sick of going 45 mph any time a hill appeared, as well as choosing between air conditioning or 10 more miles per hour. For this trip, Mikuvan was loaded with four go-karts and 80% of everyone’s pit equipment. In other words, if I had a repeat of Dragon Con 2014, we were all fucked. There is something to be said about a single point of failure here.

I also forced everyone across upstate New York to stare at this.

I am truly sorry.

I tried a new method of shielding the bodywork from bug splats and debris – instead of a tarp like last year, which failed pretty miserably, I just encircled it in pallet wrap – heavy duty plastic food film, basically. It clings tightly enough to not be affected by winds, but comes off easily. I also used the same pallet wrapping to bundle up the handlebar and motor & controller to protect it from possible weather.

The track this year was sponsored by Shell, and was therefore a bigger budget production. These low-profile “airport” style traffic barriers were laid out seamlessly into the biggest track PRS had ever seen. It was a well balanced track with several very tight areas but also an epicly long straightaway

Well, I did end up making it there, thank you very much, after only one stop to refill the engine oil.

Now, let’s be honest – this was a very epic one stop. For you see, I permitted three go-karts to be loaded up in the passenger cabin, and they took up all the available space. One, the Corpus Krotus (“Mad Max”), was across where the center two seats would be. The other two, Atomic Thing and the Frozen Chainsaw Massacre (I didn’t name any of these, only contributed to their delinquency) were side by side lengthwise. It was such an elegant packing that I’m quite eager to do it again.

It was, in fact, so elegant that I completely forgot about the fact that the engine access hatch has to swing backwards for me to get to anything. Into the well-packed go-karts, I mean. As it turns out, this might be why they make most cars with a distinct region for the engine.

So half an hour of go-kart de-Tetrising somewhere in western New York later, I was on my way again.


Van-butt for this round. Check out the Markforged bumper sticker. I had a whole lot riding on the 3d printed steering components. Namely, about half of the vehicle weight, and much more under strenuous handling.

There’s very little I can do explain the other MIT effort, the Frozen Chainsaw Massacre.  It’s a takeoff of the first Frozen Chainsaw Massacre effort, which is a takeoff of my takeoff of the Ryobi 40v cordless chainsaw‘s external and internal parts. Bayley’s site has a ton of info on the RY40511 if you want to try breaking into it also. One of the other principal constructors also documented the process (more in words than photos… LANDON) here.

This FCM uses two of the Ryobi saws, with custom firmware written by reverse engineering the controller, featuring nice things such as real-time current control.

Taking a slow drive-around of the track, before qualifier round.

After a few laps, I had determined that the caster angle added to the steering system really helped in the smoothness when turning. There was a catch, though. The rear tires are still rather tall in profile, so the sidewalls were very… pliable. I found that the rear end tended to oscillate a lot during and exiting a turn, because of how wobbly the tire was. To prevent the handling from being too squirrely, I had to drastically over-inflate the rear tires, which caused a lot of early wear, as I’ll show later.

Here is your “clean shot” of the weekend. It all went downhill from here.

You could also say it (almost) went sideways.

If this (and the subsequent landing… and many other two-wheel incidents thereafter) wasn’t a good test of the Markforged CFF parts, I don’t know what was…

Here are the… production? parts in use. By the end, the left front wheel had developed a mild camber, but it was also involved in a direct collision – details below. I’ll have to take this side apart and see what deformed!

Chibi-Mikuvan qualified third after Frozen Chainsaw Massacre (which was incredibly fast) and Phantom 48. As always is the case with Phantom, their wider track and bigger tires meant they could corner much faster than I could without doing that thing up there,even though we were evenly matched for speed.

After qualification was the Moxie Round. Basically, showing off and being an asshat in front of a large number of people. Hey, I’m okay at doing that, including on certain robot-themed TV shows!

Unfortunately, I could not find my usual Miku wig pigtails (this is not something normal people say) (ref. last year). Incidentally, Frozen Chainsaw Massacre also needed a light blonde wig for Elsa. Even more incidentally, there was a wig store in Dearborn only a few minutes of jogging away.

Great! Let’s go there and… wait, it’s a real wig store, for people with real wig problems. Very fortunately, they had leftovers from last Halloween in their basement. The above blue pigtails were made by cutting in half a blue wig and zip tying it to the anchors I 3D printed and mounted to the helmet. 5 minutes before Moxie Round began.

I’m glad to report that the combination of this effort (…) and Neko Nation played over the PA system caused Chibi-Mikuvan to win first in this Moxie Round. It seems like the demographic of this crowd had changed from majority disgruntled union workers (last year) to either majority small children who like cute things, or the Detroit Revival is being driven entirely by weeaboos and ravers, which makes Detroit somewhat appetizing.

I’m also fully aware Neko Nation is not a Miku song, but it had a better vibe than anything else I brought along.


Team “Cult Classic Racing” a.k.a “Team Florey” for those in the appropriate crowd, putting on their best Mad Max. Between the two of us, and Frozen Chainsaw Massacre, I believe we have the Moxie market of everyone from little kids (Frozen) to adults wishing they were little kids again (Mad Max: Fury Road) covered, with myself spread somewhere in between in a cultural infundibulum of glowsticks, blue hair, and cat ears.

The most questionable crossover in the Universe is being planned for New York Maker Faire.

Sprint race number 1 featured the “odd number” qualified cars, including myself. I took an early lead, only to lose it to a yellow flag penalty (which I totally did not see because rage-drive), and regained it again by the end.

To the left is last year’s overall champion, Hack to the Future.

To the right is the “Top Heavy Express… no, I shouldn’t be harsh like that. Everyone expected it to tip over, but it was very bottom-heavy and therefore quite stable, and a very steady runner. I was told it was made from a chopped up golf kart. It never quit running as far as I noticed, which is something I legitimately envy!

Here’s a video clip of me diving between two other cars on the straightaway.

That’s what 30 laps of “me” looks like on a Kenda scooter tire. Like I said, it had to be inflated over ratings – to 50 PSI – before I found the handling to be linear enough. The result? Massive center wear, as expected, from the tire ballooning outwards in the center.

Race number 2 was the even numbers, and race number 3 was EVERYBODY.

Wow, what? That’s like 20 cars on the track at once. We expected utter chaos, and there was indeed chaos. There I am starting in 3rd place.

In the truss camera video, I can be seen executing a “Storrow Drive Special” here at 2:09.

Excuse me, my Boston is showing.

All the MITERS-affiliated cars in one frame here. (Krotus was also MIT affiliated, though more loosely through alumni and Boston University, working at MITERS).

At some point during this race, I accidentally put Chibi Atomic Thing into the wall on this corner. (6:37 of same video)

Oops. I think I was attempting an inside pass that went wrong when they cut in much closer than I expected.

There are very few chances in life to say “I was stuck in traffic between Noah’s Ark and a TIE Fighter.”

Yes, there was a matching X-wing from another team, before anyone asks.

Sadly, the impact with Atomic Thing also popped my left front tire. I made it another lap and a half before noticing the brake disc sparking on the ground. Unfortunately, in a sprint race like this, if you pit, you’re pretty much done. So even though I tried to replace the tire quickly, I could not make up the position by the end and ended up coming in 12th out of 20. (According to the official race data, the “lap and a half” plus my pit stop took 171 seconds… or 6 average laps of downtime. Being short staffed in the pits – only with Cynthia as my ‘pit crew’, contributed immensely.

Lots more damage was taken in this race. I actually lost entire chunks of foam on this one. I think I was trying to mash between Phantom and the School Bus at the very end of the straight, and took it straight in the NIMBY. Sadly, action movies where the hero threads a car through a rapidly closing gap did not translate well to real life.

To resolve the chunks of foam and fiberglass hanging off, after Race 3 I smothered the area in 5-minute epoxy to hold it together. More extensive repairs will come soon!

The front left corner showing a bit of Atomic Thing….

After Race 3, I also discovered that the chopped R/C BEC unit that was producing 12 volts to keep the logic battery charged……. failed to do so. Looks like just straight up load caused it to overheat.

Given that the DC water pump draws about 1.5 amps when pumping and the contactor draws about 1 amp and it was heat-shrunk, mounted on Velcro, in an enclosed box, in a 90 degree+ Detroit summer day, I am not surprised it gave out.

So on the next day, for the Endurance Race, I stuffed a Strategic A123 Brick (which nobody at MITERS leaves the building without, especially not to a go-kart race) into the 12v system and ran only with it. The capacity was more than enough for the Endurance Race.

To my surprise, CMV lasted all the way to the end of the Endurance Race with no hiccups. By this time, over half the field had retired. CMV ended up taking 4th for lap count. Not getting around to building a 3rd battery really bit this time, as I was running out of power again by the end due to a mistake in battery handling (namely “handing your battery to some random person to put on your charger) resulted in the battery only getting five minutes of charge.

The meme will now officially never die.

This was hurled out of Krotus at me some time during the endurance race. I tried to run it over, but couldn’t really get it caught on anything.

It combined with race hosts Jim and Patrick & others endlessly reminding me that THIS ISN’T BATTLEBOTS! made for a great audience reaction.

Medals presentation at the end of Sunday! Chibi-Mikuvan wins the first sprint race, gets 2nd in total Moxie points (Hack to the Future being the better known pop culture icon garnered more crowd votes during the Endurance Race), and the two of those combining to yield a 1st place overall in the weekend!

CMV with both medals of the weekend and battle scars. I have some work to do before New York Maker Faire… namely, weld on some bumper extensions to the frame, because this ‘eroding corners’ thing is getting ridiculous.

Here is a van bonus on the way out… a European diesel box truck converted to an RV. I was in fact so excited to see this that I forgot take a Vans next to Things photo.

On the way there, not-Chibi Mikuvan began to develop a mild misfire or something in one cylinder (“idling like said diesel truck”). It gradually got worse as I got back to Boston, so I’ve been incrementally diagnosing and isolating issues since then. It will still start and run, but definitely skips one cylinder at idle and low RPMs, yet drives fine at higher speeds. After my battery of testing (not to be confused with testing batteries, something I also do), I’m fairly sure one of the fuel injectors is dying. But that’s for another post…