Thursday, March 18, 2010

Prophet '08 Encoder Issues

Figure we'll start this blog off with the big issue, I'll see if I can explain the problem a little more clearly so people know what's going on and what the solutions are right now and what's coming up:

Physically the encoders work by several small metal "brushes" attached to the rotating shaft. Each one of these brushes slides over several spaced out metal plates as you turn the encoder. When a brush hits one of the plates it connects one of two signal pins coming out of the encoder to a high voltage, then when it slides off the plate, the voltage drops back to zero. The plates that the brushes slide over are spaced in such a way that when you turn the encoder it sends out pulses on the two pins that are phased either +90 degrees or -90 degrees depending on the direction you are spinning. This is known as a quadrature or incremental rotary encoder (http://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder)

Anything interfering with the connection from the brush to the metal plate is going to cause the electrical connection to drop to zero very quickly. Instead of a nice clean pulse wave, we get a pulse with a lot of holes. Depending on the timing, this will look to the processor like a very quick direction change, a slightly longer direction change (about one full pulse length) or just totally invalid data. On the Prophet '08, as many of you well know, usually when this happens you seem to get stuck between two values and can't go up or down further until you slow down the turn. We'll call the interference between the brush and the metal plates 'noise' for now.

So we know that a noisy encoder will cause those jumpy values; the more noise, the more jumpy. To solve this problem let's start by having a look at what can cause that noise:
  1. Oxidation of the metal causes a jumpy electrical connection when the brush passes over due to patches of low connectivity on the metal surface.
  2. Turning the encoder faster causes the brushes to bounce up and down slightly as they hit the turn, if they bounce too high they lose connection with the plate and breaks the electrical connection.
  3. Pulling up on the encoder shaft can cause the brushes to hit less solidly as well because of the slight give in the housing.
  4. There is a lubricant/grease inside each encoder that helps the brushes connect. If this is removed or washed off it can have severe effects on the output. It also slowly wears off due to oxidation and just drying up as the encoder ages.
So what can we do to solve this? We want to do anything we can to improve the electrical connection of the spinning brushes. Going backwards from what causes the noise we have two main hardware solutions: bend or push the brushes down harder against the plates as they turn (but not too hard to cause more bouncing) or add connectivity in the form of a lubricant that will prevent the brushes from bouncing and improve the electrical conductivity when they do pass over the plates.

This is why we started sending out Deoxit tubes to anyone who had the encoder issues. We found that applying a couple drops of deoxit to all the encoders fixes close to 95% of the boards we've seen. It does a good job of removing the oxidation and keeps the brushes sliding over the surface smoothly. It's likely that a batch of encoders had the lubricant washed off and putting a little additional on will get it running smoothly again.

However there are the more extreme cases where deoxit does not fix the problem. Since we test the encoders before sending the instruments out it's likely they looked OK during testing but after a little oxidation in the real world and some mild usage and the problem reared it's ugly head. Maybe the metal of the brushes is a bit weaker in that batch, maybe the deoxit isn't strong enough to take all the oxidation off, we don't know. At this point we have only a couple options... replace all the encoders or look a bit deeper and figure out how to compensate in software.

I've been working on a software fix for the encoder issues, both preventing a low to mid grade of noise from causing the encoders to get stuck on values or change direction and a more general revamp of the encoder processing to improve the responsiveness. I'm a knob tweaker at heart and not being able to do a filter sweep with a flick of the fingers on a Prophet '08 breaks my heart. Sadly, It has turned out to be a much more complicated issue than hoped so it's taken a while to iron out. But do not lose hope! The Mopho Keyboard will have greatly improved responsiveness on the encoders which will be ported back as best I can. The response needs to be calibrated for the non-detented encoders and I'll run it against bad boards I've received to see if I can get them responding at least in a stable way.

I'll post an update here as soon as I have a beta Prophet '08 and Tetra OS ready with some encoder improvements to get a little feedback on the responsiveness.

1 comment:

  1. hi,

    wondering if you might offer to share a fully formed M4L patch for controlling the Tetra? I would love to be able to control my Tetra from Ableton (not to mention get rid of useless editor from Soundtower) but am not quite up the the task of programming my own controller in MAX.

    thanks.

    ReplyDelete