The Dramatic Story of How I Saved the Ragebridges and Suck at Reading Datasheets, and an Überclocker Update

Alright, here we go. The post where I have to fix everything, because I have to leave for Atlanta and Dragon*Con 2012 (and its associated Robot Battles) in 8 hours. After assembling 2 more Ragebridge boards, finding that all of them had Resetting Regulator Disorder, I tried several increasingly desperate hacks to get the boards reliable before discovering a small nuance in the datasheet. In all, I managed to blow up another board (due to a slight… assembly problem), but I believe I have finally found a stable operating plateau for the Ragebridge boards.

Oh, and Clocker works. Here’s a recap:

One of the first problems I had to solve before actually getting to work on the Ragebridges was how to mount them. Formerly, Clocker’s “eBays” held 2 Victor 883s each. I wanted to group the Ragebridge boards on one side of the bot to avoid having to have long runs of distribution wiring, and because mounting two mostly bare PCBs horizontally greatly increases the risk of robot grunge getting places they shouldn’t.

I couldn’t really stack two of the Ragebridge boards horizontally, though, because they were slightly too tall to accommodate the thickness overhead of mounting standoffs. If I had shorter capacitors, this could have worked fine, and I was planning on building a small enclosure around the boards with fan cooling.

Then I realized that the boards are just short enough to mount vertically. I still needed a way to retain them, though, so cooked up very quickly this “rack” that has slots which the boards fit in.  This was whipped out on the Lab Replicator™ and the standoffs made with a lathe.

First tries always reveal where parts run into eachother. On the upper board, the capacitors on the underside touch the standoff above them. And on the lower board, the Arduino Nano’s ISP headers touch the standoff below them.

Hmm.

The second revision moved the boards a little closer together and away from the standoffs. With the mounting solution taken care of, it was time to attack the boards themselves. I first had to attach wires to them:

Instead of soldring wires to both battery inputs and then joining them in parallel, I used a single 12 gauge input wire and then a 16 gauge ‘jumper’ which brought power to the other half of the board. The constraints of rack-mounting my controllers this time meant I couldn’t make big Y-cables.

After populating the boards, I began to run into regulator drama yet again. With my Spektrum receiver (Clocker’s receiver for 3 years now) attached, the LM2594-based switching regulator wouldn’t. This was worse than it was on Null Hypothesis (details in the middle) where it seemingly had a habit of not wanting to power cycle. The 15v rail was totally unstable, and the 5v power LED on the Arduino nano would flicker as the regulator kept latching up and resetting.

Even with the Arduino Nano but no receiver, it was still erratic, taking several seconds to stop resetting the microcontroller. The whole time, the regulator was also getting hot. Extremely hot.

Both boards displayed the same symptoms. When the regulator was in latchup mode, the switching frequency was audible and also very unstable. Basically, it seemed that any load was causing the whole thing to go crazy. I began attributing it to being a design error on the board or in the layout – maybe I had crossed my grounds somewhere else?

I began pulling desperate hacks suck as capacitance in places where it really should not have needed capacitance (i.e. where a slightly out of spec component value should not have a first-order effect on functionality), and even hacking a 7815 linear regulator onto the board to test if it worked at all (Result: Yes, the board itself is fine, and the linear regulator would be also fine if I wasn’t wanting to run 30+ volts).

Defeated for the night and about to switch Clocker back to Victor 883s, I read once more through the datasheet hunting for possible thermal limitations or some indication that I had totally fucked up the component layout and selection. The datasheet had a section on inductor selection, which I’ve handily ignored in the past. Within it was this equation:

Okay, sure, let’s try it… For my setup, with Vin = around 25 volts and Vout = 15 volts, I got a V-us value of 38. Now let’s see the inductor selection table:

Oh dear.

For as long as I’ve used the LM2594, I’ve just tossed a 100uH inductor onto it because it was cheap on Digikey for the package size I designed with initially. And for as long as I’ve used the LM2594, it’s always been a nervous wreck.

My voltages and load clearly put me in 330uH territory. The microcontroller and receiver combined generally draw 50-70mA combined, with the beefy Spektrum receiver demanding 100mA when it is searching for a transmitter. So for the purposes of modelling, 0.1A is a good number to use for load current.

So what does too-small an inductor do to the system? Several possible things. First, current can change (ramp up or down) faster – there’s less “mass’ to it, so to speak. Second, as a result, the regulator can enter “discontinuous” mode, where the energy needed by the load per switching cycle results in a duty cycle so small that the current (which can now change faster) falls to zero instead of continuing to flow (“continuous” mode). The LM2594 should be able to handle discontinuous; but next, because the current can change faster due to the inductance being too low, it could very quickly reach a level which throws an overcurrent fault in the LM2594 regulator. In other words, it wakes up, turns the inductor on, goes OH FUCK, enters shutdown, wakes up, turns the inductor on, goes OH FUCK….

This really all speculation, but the observation that most supports the inductor-too-small theory is the fact that the LM2594 only reduces its switching frequency if it is in the overcurrent condition. I shouldn’t be able to hear it otherwise. I tested this by finding a voltage input which would run comfortably at 15v out and 100uH – about 17 to 18 volts seemed to do it. And there were no problems whatsoever. As soon as I crested about 20-22 volts, though, all hell would break loose.

Well then.

Could I have been defeated by just not reading the datasheet? Let’s find out. Luckily, I had some 330uH through-hole inductors left over from the construction of Segfault’s controller long ago:

Through hole, surface mount, same thing… just some bent legs.

This was the only change I made to the whole regulator circuit – all of my other hacks had been undone by this point, because I wanted to make sure there were no other layers of mods that needed to be made. Surely just an out-of-tolerance component value cannot be the root cause of my controllers’ undoing!

Except it was.

Whatever, I’m just gonna stuff it in the robot.

I’ve yet to experience another hiccup or reset since replacing the inductor. At all – the only thing which causes a reset is a sudden applied load on the logic side – plugging in the Spektrum receiver when the board was not doing anything previously, for instance. In *that* case, certainly more buffering capacitance could help, but if the receiver is suddenly plugged in during battle, something has gone very, very wrong.

I test drove Clocker for a few minutes in this configuration (only the drive – the other controller isn’t installed) just to test the robustness of the fix. This test included several power cycles both “hot” and “cold”, to see if the thermal issue could have been part of the problem. The regulator does still get hot, but it seems to be a normal hot.

It’s time to install the next board! By this picture, I had already pulled the 100uH inductor off every single Ragebridge board current in existence and replaced them with the 330uH thru-hole ones. I was now test lifting various chairs and handtrucks with Clocker.

Playing with the current limit setting, I got the main output gear clutch tuned to the point where the bot could quickly lift 30 pounds on top of the fork, but if I stalled the fork against the frame, there wouldn’t be enough current to do any damage. The way it was accidentally tested was by wiring up one lift motor backwards so the two motors were fighting eachother the whole time, while I stared dumbly on and went “Hmmm, I wonder if something’s jammed”. I am vaguely glad for the existence of (my and only my) current-limited controllers.

The prescribed current limit for the fork is 30A, at which point the two motors will produce 50lb of upward force at the tip of the fork.

Alright! I’ve fixed the electrical problem, so let’s bounce the problem back to mechanics. That is my right side output gear, not being where an output gear is normally found.

How did this robot *ever* work?

Remember at Dragon*Con 2010, the left-side output shaft of my custom DeWalt frakenboxes lost its shoddy press fit, leaving the bot mostly immobile. That side was repaired by knurling the output shaft where it meets the planetary gear carrier, and it hasn’t been a problem.

I’ll admit that the discovery of this problem was just a little unconventional:

Hey, if it has a current-mode, I’m riding it, okay?

Definitely a useful way to stall-test your drivetrain. Each drive side’s current limit is set to 55A, which actually seems kind of low for the DeWalts. They definitely want more when spinning up. Maybe I should have double-bypassed the current sensors to get peak 90A limits, but then I’m pushing the board’s physical layout in terms of current density in the copper layers.

During some enthusiastic turning, the right side suddenly stopped producing torque, and I heard the dreadful sound of “motor spinning up unloaded”.

How did this robot EVER work?

Clearly the answer is it never really worked, if I’m hammering out one problem after another. I repeated the knurling and re-fitting operation on the right side, and all was good.

Now let’s return to the electronics.

During another driving and lifting stress test, something exploded in the bot.

Crap. It’s already like 3 in the morning by this point, and I’m wondering if now that the fundamental disability of the controller has been solved, the problems have moved down the line to the next weak link. Now, the controller that bit it was the drive controller, a.k.a the one I did all the nasty experimentation on before finding the inductor issue, so maybe it’s just weakened from being an experimental subject.

The failure was just indicative of massive shoot-through. Aren’t my gate drivers supposed to prevent that? What could possibly cause the FETs to suddenly overlap with disasterous consequences, besides like, leaving half of the gate drive chip unsoldered because I forgot to go back and solder all the pads after anchoring it?

Oh, it was that? Okay, carry on.

Here’s the final wiring arrangement for Clocker. It looks kind of like the same jumbled mess as it has been, but the wiring runs are alot better packed.

I made another spare battery afterwards, because this pack is getting high in years (and in number of dents in the cells – a little disturbing). Not only that, but Clocker has no less than 3 550 class motors and two DeWalt motors now, so it’s more stress on the battery than ever. It’s not going to run back-to-back matches for sure, so I need to have a swappable battery.

Here’s the bot all closed up for this year!

And now, a bit of test video, showing some more handtruck yoga.

So that’s where all those dents in the cells are coming from.

And here’s a shot of the 2012 fleet: Null Hypothesis and Überclocker Unicorn. Sorry, the nickname just kind of stuck – and it was also partially inspired by the fact that Gundam Unicorn is a real thing.

So that’s it. 30lbers only this year for me, with none of the ants and beetles returning. Instead, I have become the arena; more on that later!

Dragon*Con 2012 Schedule

Observant attendees will notice that I am a panelist in the Robotics & Making Things & Engineering & We’ll Find a Snappier Name For This Next Year track. It’s been a long peeve of mine to go to conventions only to discover that all the panels suck, so I’m out to fix it. In the past 2 years, I’ve been complaining that nobody really had a panel focusing on the where to get and how to use (not to mention the even go want to do look more like) – the resources of engineering projects, which for me at least was perhaps the number 1 contributor to actually being able to get nice stuff done. What to buy, where to buy it, where to scrounge and salvage it if you can’t buy it, and why it doesn’t work the way you think it does.

So I’m proud to announce the MAKER RESOURCES panel, which will probably be something like all of my Instructables slammed into an hour. Focusing primarily on parts procurement and fabrication resources for the non-shop-endowed maker, I’ll also touch on design software and design methodologies.

Next is the ELECTRIC VEHICLE TECH panel, co-hosted by real EV guy Adam Bercu. My role on this panel will probably be dealing with the smaller end of rideable objects, discussing the nuances of using hobby R/C parts and shitty e-bike controllers. We’ll likely cover basic EV drivetrains and power system choices as well as math for estimation and calculation of drivetrain properties. Basically, 2.00scooter in an hour except probably more 2.00motorcycle.

I’ll also be on the DIGITAL FABRICATION AND WATERJETTING panel along side long-time robot buddy Simon Arthur (some of you may know him as Big Blue Saw), in which we’ll touch on ways to abuse the waterjet and laser cutter, and the coolness of digital fab in general.

The 1100-mile haul begins soon.

A Hysterical Constant-Current Mode for RageBridge

Here’s where I deviate a little from the progress updates on Null Hypothesis to focus only on RageBridge for a little while.

After detonating the first board by shorting it through a very stalled and unhappy drill motor, I decided to fill in the current sensor pads and actually put them to use: I elected to investigate if I could give current limiting to RageBridge. Yes, you heard me right.

I, Charles Z. Jesús Sergeyovich Guan Kennedy III, after years of bitching endlessly about crappy robot controllers with fancy current limiting and how they don’t work, am building a motor controller with current limiting.

The primary motivation was to not detonate my hand-built boards left and right every time a motor decides to disembowel itself such that I can better appraise the reliability of the board. It’s nice to have an ESC that can dump forever into a stalled motor without any form of protection, but such a controller would of course then be dramatically overkill for any normal loads it is expected to experience. Even a shitty drill motor can pull a hundred amps for a few seconds (before it lights on fire), and very few reasonably-sized robot controllers will happily dish out those hundred amps. They do exist – they just fit nowhere in my robots.

That aside, I also have a personal grudge to settle (okay, fine, THIS was the real motivation). Most specialized robot ESCs these days are pretty smart and do feature current limiting. The problem is, when they say current “limiting” they mean “After this number of amps, I will shut off completely, without notice, and won’t turn on again until you cycle power”. Or even if it does turn on again by itself after a few seconds, the damage is already done, so to speak, – your bot has been totally defenseless for several seconds and is now probably in more than 1 piece. Granted that these are complaints only for the combat domain, which admittedly is a small realm of robots as a whole. Generally if you have a fancy controller like a Sabertooth driving an autonomous rover or whatnot, it’s not going to be making sudden full throttle forward-reverse slams, unless it is very confused or special. In that case, it’s totally legitimate to assume that if the current goes over a certain limit, something terrible has happened.

But that kind of current limiting, more properly called current cutoff, pisses me the fuck off. It’s the reason why I keep using Victor 883s, as old school as they are, in my drives because they just don’t care. I’ve scared Banebots controllers, Sabertooths and SyRens, Robo-Claws, all purported modern intelligent motor controllers, with said shitty drill motors. Not even anything exotic or special! Cut-off is not smart – it’s stupid and easy, which is probably why it’s done.

True “current limiting” would behave much like a bench power supply. After a certain amp threshold is crossed, the output voltage will reduce to the level needed to sustain that current. Ideally it will dump x amps into a load forever, even a dead short. It would work something like:

Yeah. That. I’ve named it the “hysterical” current limiter since while it resembles a hysteresis controller I have no defined lower bound and it’s not trying to keep the current within a certain range, just giving it a ceiling.

Green represents nondimensional command (say “100%” voltage output), blue represents nondimensional voltage output, and red is nondimensional current of a load. Shown is a pure resistive load whose current just directly scales with voltage.

The idea is that with each timestep of the controller, it will increments the output voltage magnitude a small amount to follow the command. Also at each timestep, a current reading is taken, and if it is over the set limit, the limiter will take away that increment plus some more, such that the output voltage is lowered. If at the next timestep the sampled current is still higher than the limit, then the limiter will take away more output magnitude again. And so on – all this method needs is the current limiter ‘takeaway rate’ exceeding the maximum voltage ramp rate of the controller for responding to the inputs, e.g. my radio stick.

How big the current hysteresis band (the ‘triangle’)  is will depend on the ratio of the two rates and the timestep. If the current limiter takes a large amount of output magnitude away, then the input command portion will take a longer time to catch back up, the magnitude of the hysteresis band (“ripple current’) will be higher, but the response to an overcurrent condition would also be faster.  If the current limiter can’t take away as much magnitude as the input command contributes, then it doesn’t work.

Since I already have a “ramping” function in Ragebridge’s firmware, I could just inject my current limiting process directly into that. In fact, having this kind of limiting would make the command ramping I have obsolete – the maximum acceleration of the motor would only be dictated by how high I want set the current limit. A small motor which can’t pull enough amps to hit the limit will be slapped back and forth relentlessly, and in the best case, I can hitch this controller directly to twin direct drive Magmotors and have it slowly crawl along. Forever.

It’s not the same as current control which only increments/decrements as fast as needed to maintain a certain current (and your stick inputs are translated into a value representing how much current you want) – it really is current limiting. If your motor always wants more amps than the controller will output (e.g. twin direct drive Magmotors), then you will be operating always in the constant current regime – accelerating at a constant rate to your target speed.

So let’s start. First things first, I need to put together more boards:

Here we go. When I have the parts out, it’s actually more effective to just keep populating more boards since I can copy and paste my motions. The only limiting factor this time for me was the lack of MOSFETs. These fuckers are expensive and each board has 8 of them. Just these 3 boards are like $80 of MOSFETs, and by using them in my controllers I’ve pretty much sentenced them to death by burning smoky fire.

I’ve added reinforcing wire to the long return traces in the hopes of staving off another current-induced explosion. Ideally, if my hysterical current limiter works, they won’t be needed.

Three boards made, with the first board at the top background now being used as a reference  and parts junkyard. Only one of these has the current sensors built in right now – when I can verify that it works, the others will be adapted (Those current sensors are also kind of pricy – if I were to take these to production, I would try to use a resistive sense circuit instead of the hall effect sensors on there right now).

The ACS714 current sensors are bypassed externally by a 1 mohm current sense resistor, which reduces their sensitivity by about half. Otherwise, I’d only have 30 amps available to sense, whereas with 1 bypass there is “60 amps” available. Multiple current sensor bypass surgery is reasonable – current will divide itself according to the resistances of each path available, and I’ve done up to “double bypass” to get 90 amps on Tinytroller before.

The current sensors have up to 80khz bandwidth if there is no external filtering (datasheet), but the noise at those conditions is pretty frightening. Because my loop will only ever run at 500hz or 1khz (maaaaaaybe faster in the future), I can afford a little bit of external filtering to keep the peak-to-peak amps noise down. I elected to pitch 10nF filter capacitance on this board. I could go even higher if needed because the ATMega’s analog-to-digital converters take over 100us just to do their job (this is horrifically slow for modern microcontrollers), so the current rise time can be really slouchy.

This was at the stage where I was just checking the current sensor values to see which polarity they read, and how much. The huge 2.5 ohm power resistor was a decent, if a little high-resistance and induction-less load. Start gently, I suppose.

Alright, now we’re getting serious. I don’t have a real low-ohm power resistor, but did find another one of those huge green things in MITERS, so 1.25 ohms is enough for now. While I could have taken several dozen feet of fat wire and dumped through it (and it would have some meaningful inductance to boot), these things were low enough to test up to the limit of the power supply. At this point I had written a basic version of the code which only applied to 1 sensor and in 1 direction.

The next step was to start puking into an RL type load, like a motor winding. Purely resistive loads have no ability to smooth their current (since ideally it tracks the voltage in proportion directly). Inductance adds a bit of ‘mass’ to the current, making it tend to keep going. When combined with a switching output stage (like my H-bridges, or every switching power supply ever) it is one component of producing very smooth DC outputs. Conversely, an RL load will tend to ‘coast’ for a while, making it actually much easier to control.

Plus, I’m building a motor controller, so it damn better work when I run a motor with it.

The test load is a classic EV Warrior motor I’ve had sitting around for a long time. Back in the day™, if you were a newbie and were building a 60 to 120lb battlebot, EV Warriors were the shit. It’s also a good candidate motor for this test – it’s got a huge armature with lots of inertia AND inductance, and can pull a hundred amps easily. It already killed the unprotected Ragebridge once.

To up the stakes, I clamped it to the table and locked the shaft with a vise grip. Or more accurately, I locked a vise grip onto the shaft… one is more dangerous than the other. I was about to find out if my current controller worked or not – if it worked, the EV Warrior will barely nudge the vise grip against my clamp. If it doesn’t, then the EV Warrior will shoot the clamp through my stomach.

Luckily, the answer was it worked. Okay, minus an accidental sign error in the reverse direction that had the radio input fighting the current controller whenever I hit reverse, but no blood was spilled!

After verifying that the current control worked for several currents between 5 and 20 amps, it was time to get serious. I upped the limit to 30 amps (as a start) and lobbed it in Null Hypothesis. Having 2 severely overvolted drill motors per channel, it will happily suck down over a hundred amps.

Driving the robot on only 30A per side was amusing – it actually didn’t take much longer to get up to speed, because the wheelspin current of each motor was about 10 amps (typical for drillboxes – here, have a drivetrain calculator). The motors would have tried to draw a brief burst of high current to get up to speed normally, whereas now they would have been limited to 30A, so they would have had to ramp up to speed a little slower. But that transient is so short it is nearly negligible with respect to the robot’s mass accelerating with the floor’s traction limitations.

But what it couldn’t do was push anything. As soon as there was additional weight on top of the robot, the sum of the motor currents exceeded 30 amps and the motors were capped in the amount of torque they could produce. It may have handled another 30lb robot fine, but I could stop it with my foot – something that normally results in me being toppled over as I get my center of gravity displaced.

I decided to up the limit for NH to 51 amps per side (up to 25 amps per motor, shared equally, or 50A per motor if one is totally fucked or unevenly loaded) and close the bot up. The weird limit has no particular reason – I could go up to 55 or so amps, but what I don’t want to do is saturate the current sensor so it never actually recognizes that it hit the limit.

One of the perennial fixes I have to make to my controllers is the “common mode nut”. I’m not sure what it does, but on the old Melontroller it helped resolve an issue where the controller would behave oddly and occasionally reset under heavy loads.

The problem with this board is a little different. I’m still not sure on why it happens, but occasionally my 15 volt power regulator would latch up and emit an audible buzzing sound. The voltage output is typically just enough to keep the ATMega alive, but no gate drives. It’s then impossible to reset, even with a power cycle – chances of it entering a normal operating mode are rather slim. The same issue has plagued tinyTroller as well – everything I’ve made with the LM2594 has displayed this latchup problem. Melontroller had it easy because it used a linear regulator.

It’s weird because only this board does it so far – the first one I made did not have this problem at all. Even better is that the board displays no issues after I manage to successfully power it on, just that I should not try and turn it off again!

I’m fairly certain it’s inrush-current related, but it also seems to involve temperature. What fixed tinyTroller’s problem was turning the 15V regulator’s input from a diode only to a diode-resistor circuit, with a 10 ohm resistor supplying current to the input capacitors. It basically puts the LM2594 at the output of an RC filter, limiting how fast the voltage transients can be. In this case, the controller will power on fine if I

  1. Turn it on, but do not try to turn it back on from a power cycle within about 2-3 minutes
  2. Or turn it off and expect to be able to turn it on again after it has been on for more than about 30 seconds

I’ll try adding the inrush-limiting resistor to the logic regulator and see if that fixes anything. Or just put together another board and see if it’s some kind of strange assembly problem!

Hardware oddness aside, here are some pretty scope pictures.

Just a shot of gate drive voltages, measured at the gate of the FETs. Purple trace is low-side, red trace is high-side. The turn-on and -off time for the IPB034N06 FETs I’m using with the IRS21844 gate drives is only about 200ns. I’ve become used to just setting the “deadtime” on the 21844 to 1 microsecond, but that’s clearly excessive. I split that time roughly in half for this controller, and it seems to be working great. 1us isn’t terrible, but having excessive deadtime not only limits how high of a duty cycle you can achieve with purely bootstrapped gate drivers, but for very fast loads it can also cause voltage spikes to occur at the FETs if the load gets ‘cut off’ suddenly, kind of like punching your bartender in the face if he waits too long to serve you another drink.

To investigate how fast I can have my code run, I decided to time the main loop by quickly switching on a pin and then turning it off. I accomplished this using direct port manipulation – the digitalWrite procedure in Arduino adds something like 100us of overhead, which is a little distressing. A port write is done on the next machine cycle, adding negligible time if my code take several hundred microseconds to run already.

The entire control loop, from taking in the latest inputs to calculating the output magnitudes, takes only a little over 300us. This was good news – I started the code running at 500hz, and could conceivably bump it to over 2khz! The faster the loop, the tighter my ‘hysterical triangle of current’ gets.

Unfortunately, my ramping function only works with integers. I’m already only letting it ramp 2 LSBs per loop, and to take the loop much faster means I’d start having to do 0.75 or 0.5 or something, which would imply floating point math (sloooooooooooooooooooow). Maybe I could ‘prescale’ the ramping function by having it run only ever other loop or something, but that seems impractical. Given that I have the current limiter, the ramping function is almost unnecessary.

For now, I decided to just leave it in, so I had to pick a speed that could still accommodate it:

I decided on a 1khz loop. That means it is checking the current every millisecond, which ought to be fast enough save for the lowest-inductance pancake motors and raw resistors. There isn’t really harm in dumping into a non-RL type load anyway – the current ripple would just increase in magnitude.

This is a trace of the current sensor’s raw reading, showing the triangle-wave-like waveform that results from the voltage command being tugged back and forth by the limiter. It’s important to note that neutral (zero current) is at about 2.5 volts, or above the displayed waveform. Therefore, the current dips sharply down (the shorter, steeper slope) before incrementing up again (the longer slope). I can’t accurately judge the ripple current from this screenshot because the wave is barely bigger than the pixels. Maybe I’ll take a more accurate picture later.

For now, though, some video I shot during the process. The video shows me bobbing the EV Warrior around at 5 amps and 10 amps, then standing on the robot to keep it still. Even though the current sensors weren’t verified for the video, it’s important to note that the voltmeter is trying to take an average reading – the peaks might be at 5 and 10 amps, but the average is a little less because of the ripple.

 

I have yet to try the “crowbar” test where I run a motor near top speed and then suddenly short the output with a screwdriver. This would be the ultimate test of it saving itself without interfering with robot operation otherwise.

While NH may be able to make use of this for saving its drive motors, I’m more interested in this controller now for Uberclocker. Not only does it have bigger drive motors, but the lifter would certainly benefit from current limiting. I don’t have limit switches on the actuators, so the only thing saving them from fiery explosion (or unreleasable self-inflicted lock) is me not being too hard on the stick at the wrong moment. Historically, the top clamp arm has had a habit of locking itself into a position where it doesn’t have enough torque to pull back out. If I had, for instance, asymmetric current limits, then I could clamp with a lower current allowed than releasing, guaranteeing it would be able to free itself again.

I’ll need to fix that regulator inrush problem before really trusting this controller, however, but for the time being I will go ahead and populate the other two spare boards with current sensors!

Oh, yeah, before I forget: The current control firmware that is running on Ragebridge as of right now.