Fixing Bally/Williams Opto troughs

I had a problem with my WCS serving multiple balls, and I thought I’d share the approach I used to fix it.

I had looked at the switch tests, but the problem was somewhat intermittent so that didn’t really help.

I pulled the whole trough unit out; that took:

  • Two screws from the bottom
  • Removing the bottom playfield cover below the flippers
  • Removing 5 (?) screws from the top

That loosens the trough. I then took out the 4 screws that hold the solenoid to the trough, unplugged the connectors, and it was out.

Test the LEDs

I started by testing the LEDs. Through trial and error, I found that a 1K ohm resistor and a 5V supply resulted in a current of about 4mA, and since that’s within the spec for most LEDs, I stuck with that. Hook one end of the supply to the common and the other to the individual LED pins, and verify that they all light up.

They’re infrared LEDs, so you can’t see them, but pretty much any digital sensor can; a camera, your phone, etc. It’s simpler to remove the board from the trough before you do this.

All the LEDs on my board checked out.

Test the phototransistors

Keep your setup to turn on the LEDs as we’ll need it for this step.

Using a ohmmeter, connect one end to the common and then connect the other end to the pin for the LED that you currently have on. You should see about 4K ohm when the LED is on and something around 1M ohm when your hand is blocking the light. If you don’t see any difference, swap the leads from the ohmmeter around. You may have to turn the lights out to get 1M on some of the phototransistors as you can get room light reflecting into them.

Work your way down through each LED and phototransistor and verify that you are getting the right settings. If you find one that isn’t reading correctly, or consistently, it is *most likely* a connection issue.

I would start by verifying the connections; with one lead connected to the common pin, verify that you have continuity to all of the phototransistors; one of the pins on every one should be zero ohms (or close to it) and connected to the common.

Then repeat that from each of the LED pins on the connector to the non-common phototransistor pin. You should see zero ohms on each of those as well.

My issue turned out to be a rework issue; the #6 phototransistor was replaced by somebody and they either messed up the through-hole or didn’t resolder it correctly, so it was only making contact on the LED side of the board sporadically. Rather than pull the board off and try to resolder the phototransistor, I added a small jumper wire from the pin to the phototransistor.

Everything tested fine, and no more double balls.


Pogo pins + laser cutter = test fixture

I sell a small WS2811 expander board on Tindie:

WS2811 / WS2812 Extender 1

It’s not a particularly complex board, but it still needs to be tested, and at minimum that test requires 9 connections to the board. For the prototypes I just soldered wires on, but for the ones I sell that would not be a good idea, and it would also be a fair bit of extra work.

I decided to build a pogo-pin test jig, and since the approach I came up with was different than the other approaches I’ve seen I thought it would be worth sharing. I’m going to be targeting my laser cutter for fabrication, though I could have chosen to use my 3D printer instead.

Pin design and layout

I’m going to be using Kicad for my examples here; if you use something different, you’ll need to figure out how to do some operations ourselves.

Here’s the starting design:

image

For testing, I need to provide connections to a subset of the all of the headers. I’m going to do the design for all of the headers and then just populate the ones that I need. For many boards, you would have test pads that are unpopulated as the targets for your testing.

I need a way to get this into a format I can use with my laser cutter, and SVG is the one I’d like. Kicad can export to SVG just fine; you use the Gerber export and choose “SVG” as the format (no, it doesn’t really make a lot of sense). I’ll be using the pins to connect to the copper, so I’m going after the copper layer.

Once it’s exported, I can open it up in Inkscape for editing:

image

I’m going to clean this up to get rid of all the parts that I don’t need. In some cases, the components are grouped and I need to ungroup them.

image

What I want to do is put a pogo pin at the middle of each of these. These are the pogo pins that I’m using:

image

They are spec’d to have 1mm shafts and they’re quite close to that, so we’ll plan our design using that.

At this point, we need to account for one of the things that Inkscape does. The UI allows you to set the size of a circle, but the size that you set is the outer side of the circle, and that includes the stroke width. If your stroke width is 0.25mm and you set the circle to 1mm, the actual circle will only be 0.5mm.

This confused me for a while when I did my first prototype. And then it confused me again when I did this version. The fix is to set the stroke width to 0 – or something very close to 0 – and use a filled circle instead.

Here’s a picture of a pad and a 1mm red circle I want to center inside of it:

image

I need to get that red circle centered inside the pad. Because of the way Inkscape works, you need to start with the small circle on the lower left. I don’t know why. Then do the following operations:

  • Drag select both objects.
  • Choose “align top”
  • Choose “align right”
  • That should move only the red circle.
  • Align center on the horizontal axis
  • Align center on the vertical axis.

To select the circles I need to drag a region; it doesn’t work trying to select the object. I don’t know why.

That gives us the following:

image

Eventually, I will want one of those for every pin. But I need to do some test sizing first.

The beam on a laser cutter is pretty thin, but it still has some width. That means if I cut out a 1.0mm circle, I’ll get one that is just a bit bigger than that, and the pins will be loose.

I’m going to use the row of 6 pads at the top for test sizing.

image

You can’t tell from the picture, but these are sized 1.0 mm, 0.975 mm, 0.950 mm, 0.925 mm, 0.900 mm, and 0.875 mm.

Off to the laser cutter!

IMG_9553

The test fixture cut out of 0.1” (2.6mm) maple plywood.

The 0.875mm hole is the only one that is close; it’s a tiny bit snug in the middle (the laser beam is shaped like a very tall “X”, so the hole is thinnest at the focus point in the middle and a little bigger at the top and bottom).

Based on the step in sizing between holes, I’m going to size them all to 0.85 mm.

image

That’s the completed design. In my laser cutter (a GlowForge), it groups the elements by color, so it’s easy for me to tell it to cut the red circles and not the black pads. If you want to simplify the cutting part, you might want to delete the pads.

Back to the cutter.

IMG_9554

I cut 3 identical plates plus a spacer. The stack will have two plates with holes, then the spacer level where the wires will be soldered to the pins and finally a plate at back. The wires will all come out through the spacer holes on the left. It’s hard to tell from the picture, but the pins are inserted so that they stick out the back enough for the bottom of the pin to be flush when the spacer and bottom plate are added.

Oh, and that lower-left piece is upside down…

Next is hooking up the test wires. There are 22 pin holes, but two of them need only to be bridged and seven connected with wires for testing.

IMG_9560

That’s a rather poor picture of the wires attached to the pogo pins. After they are all soldered on, the back piece goes on and then I taped it together with blue tape so the pieces are apart.

That would normally be the last step, but the high-current pins on this board are set up using 3.96mm headers instead of the 2.54mm that my pogo pins are designed for, so those pins just go right through the bulbs. With a little bit of play using a soldering iron, you can get a blob of solder on each of those pins and then it will work fine.

Here’s the completed tester with a board just sitting on it.

IMG_9562

The yellow and green wires come from an ESP8266 that I use to drive it, the red and black are 12V power from a repurposed XBox 360 power supply, and then the white wires are the grounds for the loads (the board provides both positive and ground for each LED, but I only need the grounds to do the testing).

I made a quick video showing the tester in action.


MVI_0093 from Eric Gunnerson on Vimeo.


EagleDecorations Ornament Creation Instructions

Thank you for buying one of our ornament kits. These are the generic instructions that apply to all of our ornaments; please look at specific instructions for your kits for more details.

Tools & Supplies

You will need the following supplies:

  • A small soldering iron
  • Solder
  • Needle nose pliers
  • Diagonal cutters or other tool to trim leads and wire
  • A power supply for the kit your ordered – either a 5V USB charger or a 12V power supply.

LEDs and Resistors

To keep LEDs from burning up, we will be including resistors that will limit the flow of current through the LEDs and equalize the brightness between different ornaments.

Depending on the color of the LED that we are using the the voltage we are using for the ornament – either 5 volts or 12 volts – we will be connecting chains of 1, 2, or 4 LEDs to a single resistor. The instructions for your kit will tell you how many LEDs to put in the chain for each resistor. If there are multiple colors in your ornament, each color may use a different number of LEDs in the chain.

Creating chains

Here is an example of creating chains of 2 or 4 LEDs, taken from the yellow star ornament:

IMG_7062

Note that the LEDs are placed with the longer lead towards the outside of the ornament. That is the basic pattern we use for all of the ornaments.

IMG_7063IMG_7064

In these pictures, we are making chains of 2 LEDs. In the left picture, the longer lead on the closest LED is bent towards the shorter LED of the next LED. In the second picture, the short LED on the second LED is bent back towards the long lead from the first LED. Connections between LEDs should always be done in this manner.

Here is what it looks like after creating two chains of 2 LEDs:

IMG_7065

A 4 LED chain looks like this, with 4 LEDs connected in a chain.

IMG_7066

A full set of chains

The outline of an ornament will be a series of chains; it will look like this:

IMG_7068

Adding resistors

After the chains are created, we will need to add a resistor for each chain. The resistors are always connected to the inside (shorter) lead at one end of the LED chain:

IMG_7069

When all the resistors are connected, it will look like this:

IMG_7070

Hooking the chains together

The next step is to hook all of the chains together. We will do the insides first. This is done with some of the bare copper wire included in the kit. Start by taking the wire and bending it into a rough approximation of the template, and then put that inside the wire.

We will be connected the currently unconnected end of each resistor to the bare wire.

IMG_7071

As shown in this picture, you may need to reroute the resistor wire a bit to make it easier to connect to the bare wire. Here’s a close up of that:

IMG_7072

Once all the resistor wires are soldered on, trim the resistor wires. Next up are the outer wires. The outer wires run around the perimeter of the LEDs and are soldered to the remaining unconnected LED lead. Make sure the outer wire does not touch any other wires.

It is very useful to clamp the outer wire down as you are routing it around. I use a little alligator clip:

IMG_7074

Here’s what it looks like when finished:

IMG_7076

At this point we would test by applying the appropriate voltage to the inner and outer bare wires.

Adding the power cord

Locate the power cord – either the USB one with the 5V kit or another one if you are building the 12 volt version.

At the bottom of the ornament, you will find two tiny laser-cut holes. The are for the zip-tie that will hold the power cable in place. Pass the zip-tie from back to front and then to the back again, place the power cable in approximately the location you want and lightly secure it with the zip tie. Solder the power cord wires to the two bare wires, verify that it works, and then tighten the zip tie. Cut off the extra.

Success! You have completed the ornament:

IMG_7080

Protecting the wires

The wires only carry low voltage, so there is little shock hazard.

If you want to waterproof the ornament, I have had good luck with 100% clear silicone sealant. Make sure to cover the base all the LEDs and over and under the resistors and all wires. This approach has survived multiple holiday seasons outside in wet and cold weather, but there is no warranty for outside use.


Observational Studies and causation

There’s a problem with observational studies.

Let’s say you tell people to do something – eat less red meat, for example – you are hoping to change their behavior. You end up with some people who totally avoid red meat, some people who reduce the amount of red meat they eat, and some people who just ignore you.

Then you come back 10 or 20 years later and do an observational study and look at how much red meat people eat and how healthy they are, and – lo and behold – you find out that those people who eat less red meat are healthier.

So, you publish your study and a bunch of other people publish their studies.

Unfortunately, there’s a problem; the act of telling people what to do is messing with your results. The people who listened to your advice to give up red meat are fundamentally more interested in their health than those that didn’t listen in a myriad of ways. Those differences are known as “confounders”, and studies use statistical techniques to reduce the impact of confounders on the results, but they can never get rid of all the confounders. Which leaves us with a problem: we don’t know big the residual confounders are in comparison with any real effect we might be seeing.

Residual confounding is why those studies can never show causality; if you look at the studies themselves, they will say there is an association with red meat consumption and increased mortality.

But in the press releases from the research groups or universities, causality is often assumed.



7 Hills of Kirkland Metric Century 2019

Normally, I start a ride report with a description of the ride, how much I like it, etcetera, etcetera, etcetera.

In this case, I’ve done 7 hills so often that it hardly seems worth the effort. If you want that information, there are plenty of examples here

I *will* note that this is the 12th time that I’ve done 7 hills, if you ignore the fact that I skipped a year or two when it was wet.

My typical approach for a ride like 7 hills is what I can the “make sure I finish” approach; start slowly and ride conservatively, and you can be confident that you are going to make it back for your serving of finish line strawberry shortcake, delta any mechanical issues with the bike or the rider.

This year I said, “the hell with that!”

I’ve been playing around with my training this year; I’ve been riding more hills earlier in the season than I have in the past and I’ve been feeling pretty good both aerobically and on climbs. So, the plan is to push a lot harder than I have in the past and see what happens.

That should provide more opportunity for humor and perhaps some pathos as well.

My big preparation for the ride was doing a one-hour recovery ride two days earlier that turned into a 25 minute recovery ride when it started 5% chance of precipationing on me and I headed for home.

Woke up at 5:30 due to my old dude internal clock, got my stuff together, and had a couple servings of SuperStarch. I’m put BioSteel hydration mix in my water bottle (no need for 2 on this ride), and headed for Kirkland about 6:50.

You may ask yourself why I drive to this ride when the route passes within about 3 miles of my house. I’ve ridden to the route and done the ride that way, riding the last few miles at the start of my day and skipping it later. I found it messed with my aesthetic appreciation of the route, so now I drive.

Parked on the waterfront, got out the bike, stuffed my pockets with stuff, and headed to the start. Joyously absent was any thought at all about what I would wear; it was already about 60 degrees and was forecast to get into the low 70s, so no arm warmers, no leg warmers, no jacket, no hat; just the usual minimal stuff.

Market street is the first hill; I climbed it in a little over 4 minutes at 211 watts. It’s just a warmup, as is hill 2, Juanita drive. Hit the light, turned down Holmes point, headed towards Seminary hill.

Seminary is one of the two hardest hills; Winery is steeper but gives you chances to rest, while Seminary is more of a constant annoyance. I rode easy on the first little blip, and then rode hard. The top came 8:42 later, more than a minute faster than last year’s effort and 16 seconds slower than my PR from 2016. But… averaging a fairly significant 270 watts for that time, which is pretty decent for me.

The usual descent and trip over to Norway hill, a nice 426’ hill that I’ve ridden up a lot and I backed off a little at climbed at 234 watts, which was pretty much my target.

Which brings us to Winery. I like to have some rabbits to chase up winery so I was okay when I got passed on the flat part before the climb, I was less okay when the blocked the whole lane on the little bump over the railroad track. I got around them and took off up the steepest first pitch, riding at about 420 watts. It’s a short pitch and I kept that power over it, and then slowed down to recover for the upcoming pitches. 5:26 later I was turning off at the top of the climb and listening to bagpipe music, a heartbreaking 4 seconds from my PR. I’m going to call this one a “virtual PR” because I lost more than that getting by the group at the bottom. 287 watts average was a great effort, but when I went back and looked at last year’s data, I did it in 5:22 but only averaged 250 watts. Not sure what is going on there, though I am in need of some drivetrain maintenance, and it would be good to do that on the bike as well. 

We then headed east and climbed a few more hills, then we came to Novelty Hill.

It would be fair to say that it’s not my favorite part of the ride; too much traffic and not really a very fun hill. This is compounded by the use of the lower part of the climb as an “out and back” route; as you are climbing up the hill there are riders who are ahead of you descending back down at a high rate of speed, not really the most motivating thing to see. Strava somewhat strangely didn’t match the whole climb for me, but I got PRs on various sections so I’m going to call a PR on that section.

After some flat roads, you end up coming back back over to Novelty for the descent, completing the circle of life. We learned about the circle of life from Disney’s “The Lion King” during the scene where Simba and Nala protected themselves from roving hyenas by building a impregnable perimeter from family-sized boxes of cereal.

Anyway, a couple climbs after that I hit the last rest stop and after a thoroughly pedestrian sandwich (turkey/cheese/green pepper slices on pita bread), headed out for the last climb. My intention was to spin up old redmond road at take it easy, but there was a guy right in front of me so I ended up pushing a bit and coming within my PR by about 10%. Then a couple of fun descents and a mostly-flat trip back to the starting line in which I missed every single traffic light.

Overall, a pretty good effort; I felt strong the whole day which has been an issue for me this spring; I’m not sure if it was the BioSteel or the SuperStarch or my smoked almonds or maybe that small oatmeal gluten free cookie I ate at the first food stop (it was *not* the cookie; that was a mistake).

I was about 15 minutes faster than 2018, averaging 14.7 mph rather than last year’s 14.1, finishing in 4:04:28 and burning 2538 calories for the effort.




Minicamp May 2019

My wife and I have done a few cycling vacations. The ones we’ve done don’t feature particularly long days – maybe 50 miles over the whole day – but they do involve riding for a bunch of days in a row. I’ve noticed that doing something like that helps my fitness; I just feel better overall.

And therefore I decided to conduct an experiment; I would ride 5 days in a row and see what happened. I wanted every ride to be at least 3 hours, but I wasn’t going for century lengths. And I would ride however I felt like that day.

I expected that I’d start out feeling okay and gradually get more tired as the days went by.

Day 1 was a big hills day; I rode a few of the Issaquah Alps. My speed on the first 3 (Squak, Talus, Zoo) was a conservative speed, but after Zoo I took a trip up Pinnacles and decided that I wasn’t up for Belvedeere, much less the trip up The Widowmaker. I crawled up the back side of Summit and headed for home.

Day 2 was supposed to be a ride all the way around Lake Washington, but after doing the south end I opted to take the 520 bridge back across for home. Felt okay but not great.

Day 3 was an evening ride that I lead. I chose the route to be a little hilly but not too hilly. On the ride down to the starting point, that seemed like a really good decision as my legs were hurting, but despite the hurting, they seemed to perform okay when I needed them. I have a 275’ hill on the way home from the ride with a couple of short 13-15% kickers, and those were not fun *at all*.

Day 4 was a ride in the country, specifically a ride out to Fall City. The intent was for it to be moderately hilly. My legs were tired from the night and I wanted to let the day warm up a bit, so I delayed my start until 11 AM. Legs were pretty sore but warmed up quickly. I had planned to ride up Sahalee (0.9 miles, 404’ of up) but that can be a long slog of a climb, so instead, I decided to head up “The Gate” (0.2 miles, 158’). That’s an average of 15%, with a top gradient of perhaps 21%. I didn’t have a lot of pop on it, but I rode up it okay with just a wee bit of paperboying. Worked my way east, the south, rode down Duthie, and then out to Fall City. Where I stopped at the grocer for a Coke Zero. My plan was to take Fall City –> Issaquah back, and take it I did, via the back way. Despite being on the 4th day and 25 miles into the ride, I was able to climb at about 250 watts pretty easy. Hit the top, finished my Coke Zero, did the bonus, and then worked my way to Issaquah and then back home.

Day 5 was the second evening ride for the week. I played with intensity as I spun through Marymoor, and my legs seemed fatigued but okay. The first climb was short but not a lot of fun. And then we hit Sahalee… I started slow, hit the steep spot, and found that my legs felt pretty good, so I rode the rest of ride at a bit more than 300 watts, averaging 280 for the whole climb. That put me close to my PR on the climb, which was a surprise. I did a sprint up a little steep hill on the route and managed somewhere in the mid 900 watts, though my legs *really really really* hurt at the top. I did notice that my aerobic recovery was pretty quick. After playing down the plateau we descended to East Lake Sam and pacelined back and I managed to “win” the fake sprint at the end by pulling out about 30 seconds from the end. My legs felt good, and the climb up to my house was considerably easier than on Tuesday.

Day 6 was designed just to warm up my legs and help them to recover a bit, so a 3.8 mile ride that took less than 20 minutes.



















































Day Distance Elevation Speed KJ
1 33.9 4177 10.9 1682
2 39.6 1575 14.3 1486
3 35.4 1788 14.5 1345
4 41.0 2470 13.6 1587
5 35.1 1903 14.3 1372
6 3.8 180 12.7 119
Total 188.8 12093 7591


The true test is going to be what my form is like after recovering for a few days, but early indications are that the minicamp did what I was hoping; I felt stronger in places where I hoped to feel stronger and my recovery seemed pretty good. I was mostly able to sleep quite well, and – somewhat surprisingly – my hunger didn’t seem to increase that much.


WS2811 Expander Part 6: of MOSFETS and voltage drops…

After I wrote the stress test article, I decided to put a voltmeter across the drain and source of the MOSFET and figure out what the voltage drop was. I hooked up the output to an LED ornament, watched the brightness cycle up and down, and put my probes on the MOSFET.

What I expected was pretty simple. In the sweet spot of the MOSFET I’m using, it claims a Rds – resistance between drain and source – of 10 milliohms. That means I should expect a voltage drop at 5 amperes of:

V = 0.01 * 5 = 0.05 volts

That low voltage drop is one of the reasons to use a power MOSFET; a bipolar transistor would have a voltage drop of about 0.6 volts, and therefore waste more power and get hotter.

The voltage jumped around a little, and settled down at full brightness:

0.8 volts

Okay, that is really unexpected; I played around with different voltages, and I still got 0.8 or 0.9 volts.

My first thought was that the MOSFETs that I got from Ebay might be counterfeit, so I waited for my order of real parts to show up from Arrow, built a new board, and it read:

0.85 volts

This is really confusing, so I asked a question on Reddit’s /r/AskElectronics subreddit.

The first answer I got was that it might be the base diode because I had the MOSFET backwards.

So, I pulled out the datasheet for the MOSFETS and looked at my schematic and board in Kicad. As far as I can tell, everything is wired correctly.

A deeper answer suggested that if I was doing PWM (I had been testing at brightness = 250 because I knew that would be more stressful for the MOSFET than always on), I should test with always on. It also talked about gate capacitance.

<digression>

This is one of those cases where real devices diverge from ideal devices. FET stands for “Field Effect Transistor” – current through the source and drain is controlled by the field on the gate. You establish a field by the flow of current to charge it up to an appropriate voltage.  The amount of current it takes depends on the gate capacitance (described as “Input Capacitance” on the datasheet). For the MOSFET to turn on, you need to flow enough current to establish whatever voltage you want on the gate.

Or, if you think of the gate as a capacitor, it takes a bit of time for it to charge. In my case, the time it takes to charge will be controlled by the pull-up resistance and the capacitance.

Let’s say we are running at 5V, and our MOSFET has 1nF input capacitance (pretty close), and we are charging through a 10K capacitor.

This calculator says that the time constant is 0.00001 seconds, or 10 microseconds.

</digression>

So, I went and changed the animation code to run all the way to full on – luckily my code is running on an ESP8266 and animations can be changed over WiFi – and rechecked the voltage drop.

Would it surprise you if I told you it was 0.8 volts? Probably not at this point…

Perhaps it’s my voltmeter; I have a nice Fluke but how about if I try using my oscilloscope (a Rigol DS1102D I picked up a while back)?

So, I powered it up, hooked it up, and looked at the waveform across the load. I showed the a nice PWM waveform…

But wait a second… I had updated the animation.

My debugging rule is that when things seem unexpected, back out a level and retest the assumptions. Usually one of those is wrong.

I started with my controller code. I suspected the gamma mapping code, so I added some Serial.println() statements and verified that, yes indeed, the colors were getting set to 255. So, that part was fine.

I next suspected the support library I use (the rather excellent NeoPixelBus). I read through a bunch of source but didn’t seem to be any issues. The code all looks fine…

Was the data getting to the WS2811 correctly? So, I fired up the scope again and hooked it to the data line. On full on, the data looks like this:

NewFile0

The WS2811 uses an encoding scheme where a short positive pulse means “0” and a long positive pulse means “1”.

That is a full string of ones; you can’t see all 24 of them, but trust me when I say they are there. You can see this switch back all the way to all zeros as the animation progresses.

So, the software is telling the WS2811 to go to full bright, but it is still turning off for part of the cycle. Here’s the output straight from the WS2811:

NewFile4

That little positive spike is 29.4 microseconds, which is about 5% of the 536 microsecond cycle time, so full bright is only 95% bright.

The cursors on the capture show the start of two sequential PWM cycles, and the scope nicely tells me that it’s updating at 1.87 KHz. Which is another weirdity, since every source I’ve seen suggests that WS2811s update at 400Hz.

At this point I’m beginning to wonder if I have a WS2811 clone. I thought it might be the same IC used in the SK6812 ICs, but the claim is that they have a PWM frequency of 1.1KHz which is less than I am seeing.

So, it’s off in search of some real WS2811s. It is really easy to buy cheap ICs made in China but is surprisingly hard to find an authorized source. There are lots of sources on aliexpress, some looking pretty shady. Octopart found me a 10-pack from Adafruit for $4.95. I finally found lcsc.com, which specializes in this sort of thing, and ordered some. They look to be WS2811S chips, but I can’t find any information on what the “S” means. More on that when they show up.

Back to voltage drop…

Since the WS2811 wouldn’t go into “full on” mode, I needed a test setup to do my testing. Here’s what I came up with:

image

In the right middle is the MOSFET, with clips connected to the lead and the body. In the picture, it is running only the LED Star, which pulls 145mA of current.

One of the fun things about MOSFETS is the gate holds onto the charge, so if you just touch the gate to 12v, it turns on and stays on. Touch it to ground, and it turns off, and stays off. I measured the voltage drop across the MOSFET.

I next decided to hook up my test load. I started with a single 50 watt bulb, a 4 amp load. I carefully hooked it up in parallel with the led star, and…

There was a loud “crack” and the led star went out. No magic smoke, but the MOSFET was toast. The gate was floating, and there wasn’t enough charge there to put it firmly into full conduction, so it was in the linear zone and quickly overheated, melting the plastic on one of my clamps. So… replace the MOSFET, make sure the gate is attached to positive, and try again. That worked, and the MOSFET was only mildly warm. Let’s try two bulbs for an 8 amp load. That worked, *but* there is no heatsink and it got hot pretty fast, so I unplugged it before it got too hot.

I collected some data and figured out that the Rds was about 90 milliohms, which is a lot higher than the 10 milliohms I expected. That was a mystery for about 8 hours, until I was writing this up and realized that I was measuring the voltage drop at the ends of the leads connected to the MOSFET. The thin leads.

So, I went back and measured right at the MOSFET, and got a Rds of 7 milliohms, a bit better than the 10 milliohms that was spec’d. So, yay!

Faster switching

Returning to our somewhat slow switching, here is what I saw:

NewFile2NewFile3

The negative transition is when the transistor turns on; notice how effortlessly and quickly it pulls the gate voltage down. And when the transistor turns off, note how long it takes it for the gate voltage to charge back up. It’s roughly 10% of the overall cycle time.

Which is a bit embarrassing; I chose the 10K value as a typical pullup value, not thinking about the fact that this was happening on every PWM cycle. It can only supply about 1 mA of current.

The most obvious thing to try is to replacing it with a 1K resistor. That will result in 10mA of current and should switch roughly 10 times faster. Can the transistor handle it? The datasheet says that the 2N3904 can handle up to 200 mA continuous, so that will be fine. Is the base resistor okay? Well, transistor has a DC current gain of at least 50, so that means we need a base current of 10mA / 50, or 0.2mA. The 5V from the WS2811 will push about 4 MA through the 1K base resistor, so that’s way more than enough. It would probably be fine with a 10K base resistor, actually.

I took one of the boards and replaced one of the 10K resistors with a 1K resistor and then looked at the gate drive:

NewFile5

In case it’s not obvious, the top version is with the 1K resistor and the bottom one is with the 10K resistor. More than good enough for my application.


You meet the nicest people on the Zoo

Yes, “on the Zoo” is a strange wording; the reason for it might become apparent.

This afternoon I went on a bike ride. I go on a lot of bike rides; most of them don’t really warrant mention (got on the bike, rode, went home). This one might have showed up on Facebook as I sometimes do, so that my riding friends can “like” the ride as an indication of their recognition of my awesome cycling prowess (not really), and the rest of my facebook friends can… well, I’m not really sure what they think of those kind of rides, though “what a nutjob” is probably a good start…

You can look at the – which I cleverly named “A Grand Squaky Zoo” after the three hills I climbed (Grand Ridge, Squak Mountain, Zoo hill) – here. 38 miles, 4186’ of up, which is a lot for me in April.

But I digress…

The climb up Squak was a bit more painful than I had hoped, and I planned on skipping the Zoo hill climb, but I had to ride by it on the way home and turned up the hill on the spur of a moment. And immediately thought I’d made a mistake, as the bottom part up to the Zoo is steep. I came around the first turn, and noted a rider up ahead of me.

That’s a good thing; riders up in front of you are rabbits and you can focus on getting closer to them.

As I drew closer, I looked at his bike, because a bike can tell you a lot. Steel frame, fenders, pretty wide tires, and a handlebar bag in the front. That’s a touring setup. But many touring cyclists don’t ride hills, which meant it was most likely a Randonneur. Randonneur is a long-distance cycling discipline with events that are pass/fail based on elapsed time, so a 200 kilometer event (120 miles, or nearly 1000 furlongs) must be completed in 13.5 hours. Which isn’t really that out-of-the-ordinary, except that 200 km is the entry-level distance and the routes tend to be more than a bit hilly.

Where it gets to be a bit nuts is rides of 300, 400, or even 600 km; the local Seattle International Randonneurs 600k route involves nearly 22,000’ of climbing, is 383 miles long, and as a 600k has a time limit of 40 hours. There are also 1200k rides with a time limit of 90 hours; in that time you will climb 38,000’.

I like hills, but that seems a bit excessive…

As I pulled up next to the rider – why am I quite a bit faster than a randonneur rider? – I slow down to talk to him. Any distraction is welcome on a long climb, and this one is going to take me 36 minutes today – so we start talking, and he mentions that this is a training ride for him; he rode over from Freemont and he’s going to ride up this climb 6 times and then go home.

6 times. Well, if I was going to ride it 6 times (for about 7000’ of up total), I guess I’d be riding it fairly slowly as well.

Turns out his name is Doug Migden, and he’s training for the Transcontinental Race, a self-supported race across Europe. In 2015, he rode the 4200 km and climbed 35,000 *meters* in 446.5 hours. There’s a great writeup of his experience here.

I often wondered what you do if a 1200k ride isn’t long enough, and now I know. It’s always nice to run into people that are crazier than you as it lets you feel that you are sane.

We chatted and I learned a lot about long-distance self-supported riders. As we got about 3/4 of the way, I turned left to head to the classic top of the climb. Normally I don’t think you have done the Zoo if you don’t do the top, but a) Doug was going to an alternate top, and b) he was doing it 6 times, so I think I’m going to cut him a little slack.

And damn, was that descent cold.


WS2811 expander part 5: 12V stress test…

One of the points of the expander is to be able to drive bigger loads than the 18mA that the WS2811 gives you directly. Much bigger loads.

To do that, I needed something that would stress the system, and I needed to verify that the design worked with 12V.

First off, I needed to cut a new stencil uses the paste layer:

IMG_9501

That’s a bit nicer than the first one; there is adequate spacing between the pads this time.

Aligned it on the board, applied paste & components, and reflowed it. Here’s the result, still warm from the oven:

IMG_9502

All the components self-aligned nicely, no bridges, no missing wires. Perfect.

The only thing I need to do is get rid of the center pad for the MOSFETs, since they don’t actually have a center pin.

How to test it?

Well, I dug through my boxes and found a 5 meter length of 12V LED strip. It says that will be 25 watts. I hooked it up and verified that all 3 output channels are working. It’s running an animation that ramps from 0 to 255 over 2 seconds, holds for 2 seconds, and ramps down for 2 seconds. I chose that because the quick switching is the hardest for the MOSFET to deal with from a heat perspective.

But 2 amps isn’t quite enough. I dug out a 12V power supply that claims it can do 6 amps and hooked it up to one output channel:

IMG_9504

That’s the NodeMCU board in the upper right, powered by LED, the data and ground running to the board, and then some decently-hefty wires running to the board.

More load, more load, more load. I want something that soaks up the 12V. Incandescent car bulbs are nice but I don’t have any handy. But I do have an extra heated bed for my 3d printer; it’s a nice 6” x 6” pc board. Hooked that up in parallel with the lights:

IMG_9505

Ignore the breadboard…

This worked just fine. The board heated up to about 170 degrees, the lights worked fine, and the MOSFET on the driving board just *barely* heats up. My measurements show that it’s switching about 5 amps of current.

The only one that’s not happy is my cheap power supply, which is putting out a nice 10Khz (ish) whine when under load.

I switched over to run it on all the time to see how that affected things. After 10 minutes, the board is up to about 110 degrees, the printer bed is up to 240 degrees, and the 12V power supply is 125 degrees.

I think I’m going to rate it at 6 amps total; that gives a lot of margin, and frankly 70 watts is quite a lot of power for this application.


WS2811 expander part 4: Boards and Parts!

After a bit of waiting, the boards showed up from OSHPark. they looked fine as far as I could tell.

I had all the other parts to do a board, but I needed a paste stencil. I went into pcbnew, chose File->Export, and then chose to export the F.Mask (ie solder mask) layer to a SVG. I cleaned it up a bit to remove non-pad elements, went out to the laser cutter and cut a stencil out of 4 mil mylar:

IMG_9495

Everything looked pretty good; there was good alignment between the board and the stencil. The spacing between the pads looked a little tight, but it’s a fairly fine pitched board, so it was mostly what I expected.

I carefully aligned the stencil and taped it on, got the solder paste out of the fridge, and applied it. Pulled up the stencil and it looked crappy, scraped it off, did it again, and got something that looked serviceable though there was more paste than I expected. Hmm.

Got out the components:

  • 1 WS2811
  • 1 33 ohm resistor
  • 1 2.7k ohm resistor
  • 6 10k ohm resistors
  • 3 1k ohm resistors
  • 3 NPN transistors
  • 3 MOSFETS
  • 1 100nF capacitor

and it took about 5 minutes to do the placement. Here’s the result:

IMG_9496

I didn’t look at the picture at the time, but that’s a *lot* of solder paste.

Into my reflow oven (Controleo 3 driving a B&D toaster oven), let it cycle, seemed fine, here’s the board:

IMG_9499

Not my best work. Frankly, it’s a mess; there are obvious places where there is no solder, and obvious pins that are bridged together. I spent about 15 minutes with my VOM testing for continuity and there were 3 solder bridges and 7 unconnected section.

Something clearly went wrong. And I went back to PCBNew and it was *really* obvious.

The layer you should choose for your stencil is F.Paste, not F.Mask. Here are the two next to each other (Mask left, Paste right):

imageimage

The Mask layer sizes are positively giant compared to the paste ones. So, what happens if you use the Mask layer is that you have:

  • A *lot* more paste on the board, especially the small pads which must have double the amount
  • Solder paste with much reduced clearances.

What that means in reality is that when you put the components on, it squishes the solder paste together and connects pads that shouldn’t be connect. And then when you head it up, you either get bridges or one of the pads wins and sucks all the paste away from the other pad (how it wins isn’t clear, but it is clear that the huge MOSFET pads pulled all of the paste from the transistors next door).

This makes me feel stupid, but it is actually quite good news; it means that the design is fine and I just need to remake a stencil with the correct layer.

Anyway, after a lot more rework than I had expected, I ended up with this:

IMG_9500

It’s still an ugly board, but does it work?

Well, I hooked up 5V, GND, and data in to one of my test rigs and a LED to the LED outputs.

And it works; the LED is on when I expect it to be on and off when I expect it to be off. All three outputs are fine.

The next test will be some testing to see how it fares with switching high current. And I’ll probably want to make another one using the correct stencil and hook it up for 12V operation to verify that.





Pages:1234567...31