Repairing a Midi Synth
In this post, I take on the challenge of repairing a Midi synthesizer which was sitting in a co-worker's junk bin for a few years. I was talking to him about electronics at some point and he mentioned that he had this thing he uses for DJ'ing, but it was messing up and he stopped using it. A repair was attempted, but it didn't go well. The project ended up sitting for a few years. On March 15th ("Evacuation day" as we call it when we were all sent to work from home) he handed the device over to me in a case with a bag of parts. His description was "I think the problem was over here somewhere" while pointing to about half the circuit board.
What is it and what does it do?
This kit is the Audiothingies P6 Virtual Analog Polysynth. Think of it as a pass-through mixer for adding sound effects.
It is used to take in a Midi signal from an instrument or playback device, add all sorts of filters, envelopes, mixes, shifts... any sort of different effect. It then outputs a new Midi signal for downstream devices (all digitally) and it also has stereo analog outputs in the form of two 1/4" jacks; standard in Audio equipment. It appears to be originally sold as a kit that the end user can assemble. This means lots of through-hole parts and a decently labeled board.The kit was discontinued around 2016 as Audiothingies released newer versions with more surface-mount components not friendly to soldering for the inexperienced.
There is an ARM processor doing most the work on a daughter board, and a DAC daughter board for the audio generation. The main IC is the ST Micro STM32F405, the same as used in the Adafruit Feather Express and other boards.
For I/O, this kit has an LCD, 9 tack switches, 6 rotary encoders; each also having a 'press' button. To handle all of these inputs, it uses shift register ICs SN74HC165N to essentially 'serialize' all the digital inputs into a single pin on the Micro. Each of the three shift registers handles two encoders and two buttons. They are daisy-chained together so that the final result is a bitstream of 24 bits on a single pin. The software could then just look at this input with a simple bitmask to see button status. There are a few signals required to run these (clock, Shift data) but they can provide good flexibility in adding inputs to a lower IO count IC. The 9 LEDs are mostly driven from a similar shift register 74HC595N. This chip takes in serial data, and assigns it to 8 digital outputs. It can also be daisy chained for 'distributed IO' around your board.
Here is an overview of what it was like when I got it.
What was broken?
Well... I don't know what the original issue may have been. The inputs on the shift registers all use 10K pull-down resistors, in the package of 5-pin resistor networks. I think that the original issue may have been a bad solder joint on one of these. By the time I got the board, the original solder pads around the part looked almost rusted out. No more metal was on them and they were all dug up. On further inspection, I found what appeared to be the snipped-off leg of a component wedged between the resistor network and a rotary encoder. Clearly there was something fishy going on in this part of the board indeed...
Step 1 - Clean it up!
{gallery} Cleaning up the unit |
---|
Before: mmm... Problem area is near the right side, about 1/3 of the way up the board. |
Before: Lots of crusties. |
Cleaning: Scrubbing the board with an old toothbrush and isopropyl alcohol to remove the at least some of the crusties. The large IC socket in the upper middle is for the main controller IC daughter board. The socket on the upper left in this view is for the DAC daughter board. The MIDI connectors can be seen facing away in this view at the back. The toothbrush is scrubbing right over the row of pins where the issue was centered. You may be able to see the corrosion in this picture, but there is a better one down below in the next slide show. |
Trimming: I trimmed off the leads from the LEDs which were poking out the back. Not sure why this was never done before. Note in the bottom left the stamp noting revision 1.07B. The schematic I found was for version 1.04, but was close enough to get me what I needed. |
The pile of parts: This is how the device arrived. A pile of parts - a bag full of bits and pieces... This has a nice laser cut acrylic case, but it wasn't installed as you can see here. |
This had some crusties on it from over the years, so step one was to clean it up. I used an old toothbrush and some isopropyl alcohol. I took the time to get more familiar with the layout of the board and the components and sections.
Step 2 - Start poking around
I started doing some research online to see what info was available. As noted above, this is discontinued. I was hopeful that since this was sold as a kit and it seems to be popular with audiophiles (who are often also electronics junkies) that I'd be able to easily pull the schematic. Unfortunately, the manufacturer doesn't have the schematic posted on their website. It took a lot of searching, but I eventually found the schematic linked part way down page 2 of a Sweedish language audio forum. Here is the direct link. It was really nice to find this since the PCB is dual sided with white paint over all the traces. It would not have been easy to trace things out manually, adding on the fact that I had a bunch of intermittent connection issues going on. The only thing that left me guessing was that the schematic was notating revision 1.04, but my unit had version 1.07B printed on it. I did a quick look to compare the schematic to the board and the only think I could really find different is the daughter board for the main micro has a different pinout - same signals, but different pins.
This image shows the problem area that I focused on. Specifically where resistor network RN6 ties in to act as a pull-down resistor.
So once I was comfortable with the schematic and the board itself, I started probing with my meter. As per my protocol, I was able to find and fix the issue all without ever connecting power. The very first time I powered the board up was after the fixes were applied, with one small exception.
I went around all the shift registers and read the resistance to ground for each input pin. I knew that they should all have a 10K pull-down, so I expected to see 10K on all of them. I read all three ICs to get a baseline and look for differences. As I went around, I keep track using a Word doc. Here are my readings:
IC8 was the one under question for having a fault. At this point in the process, I still didn't know where the issue was. I read 10K on the first digital input pin (pin 3), then 400 Ohms on the second (pin 4). It was odd, but I double checked, wrote it down, then moved on. The last one I read was pin 11, which was showing as open; another red flag.
I then read all the legs of the resistor network (RN6 in my case). By using a ground test point on the PCB, then touching the meter to the legs of the resistor pins, I got 10K for all of them, which was correct. So why the 400 ohm reading and why the open? Then as I was going back through, pins 11-14 were all changing readings randomly between 400 ohm, open, and 10K.
As I looked deeper at the issue, then went to bed for the night, it was pretty clear that whatever happened to that resistor network was causing intermittent issues. These functioning as biasing resistors would cause the inputs of the IC to float and produce erratic values if they aren't hooked up.
Step 3: Do the repair
On repair, night #2, I started by double checking my readings from above. It occurred to me later that the bouncing between 400 ohms and 10k resistance to ground was just caused by the position of the rotary encoder. When in some positions, it is grounding the pin, and in other positions, it is not and thus I see the 10K resistance. Once I was comfortable with that, I started soldering in new jumper wires. I was pretty confident that whatever happened to the resistor network was concentrated around where the legs go through the circuit board. I used some 30 gauge wire-wrapping wire as jumpers. I carefully soldered them in on the backside of the board.
When I finally did power the device for the first time after making repairs, I actually forgot the golden rule "thou shalt check voltages". Since it seemed to be working otherwise, I never did bother. It uses a 7805 and a 1117V33 voltage regulators for the two rails.
Pretty much things started to work, but I still had one of the tactile switches not functioning. On further investigation, I determined that one of the traces had gotten cut in the previous repair job. I went and added one more jumper wire between the switch and the shift register IC.
{gallery} Doing the repairs |
---|
Problem area: This is the area where I found the problem. The IC on the left reads the encoder (three signals) and the tactile button (the fourth signal); all using the resistor network in the middle for pull-down biasing. The same IC also reads the rotary encoder on the left and the next button over, but those four inputs never showed any issues, and the RN seemed fine on that one. |
Problem area: Detail view of the "iffy at best" resistor network RN6. Note the corrosion around the legs and what I originally thought was just a bodge wire running up to the encoder. |
Problem area: Here we see where I pulled out what I thought was a factory bodge wire at first, but appeared to actually just be a wayward piece of wire that got lost under the rotary encoder during the previous repair job. I pulled it out with a small screwdriver - the end which is lifted wasn't actually soldered to anything. It had burned through the white ink of the PCB. This part wasn't needed and was removed. I think it got there by mistake. Note on the left side all the scratching of the board. One of these cut a trace on the PCB, which I discovered after powering the device up and things still weren't working. |
Repair job: This is the best I could manage. The damage was already done on the PCB by the time I got it. There wasn't much left to solder the new wires to. I had to run two jumpers off the tactile switch coming from the bottom since the PCB trace was cut. |
Powered up: The board fired up and it seemed to be working straight away. The next step would be to test. |
Step 4 - Test it out
I had been debating how to properly test this device with audio. Despite having a decent amount of musical stuff around, I don't own any MIDI devices. This isn't like a guitar FX pedal processing analog signals. Midi is more of a 'software defined instrument' serial protocol. It is digital and sends what are essential serial port-style packets defining the voice (instrument), pitch, attack, sustain, and some other parameters. This unit only has a digital input made for Midi; no analog input at all. I started looking around to see how I could generate a Midi signal and immediately was planning on using the Arduino. I started looking at this post on Instructibles, but found quickly after, that the Arduino IDE already comes with a sketch to simulate a Midi instrument.
The wiring was super simple - Just wire the Arduino TX to one pin of the Midi port; and the Arduino 5V to the other side. When the Arduino pulls TX low, it pulls current from the 5V rail, through an opto-isloator (and 220 resistor) on the PCB of the polysynth. The other side of that opto feeds digital data into the ST micro controller of the P6 like a serial port. I did reference the schematic on the Instructables website, but the ground connection wasn't needed and neither was the second current-limiting resistor based on the internal components of the P6. Since I don't have any matching Midi connectors, I just wired directly on the legs of through-hole components of the circuitry.
{gallery} Testing the P6 |
---|
Arduino as Midi instrument: This is how I wired the Arduino in. It is running a simple sketch to push some Midi notes out the serial port. Note that I forgot to get a grab this image when I was actually testing, and when I mocked this up, I didn't connect the wires correctly on the Arduino... Clearly the white wire is supposed to be plugged into the Arduino TX pin, not the black one. |
Suggested wiring: This is how Instructables suggests doing the wiring. I left out the 220 Ohm since the P6 already has a current limiting resistor, and the ground wire isn't connected on the P6. |
P6 internal wiring: The red arrows indicate where I tapped in to the Midi input on the P6 to inject Midi data. |
REPLACE THIS TEXT WITH YOUR IMAGE IMAGE TITLE: THEN IMAGE DESCRIPTION |
REPLACE THIS TEXT WITH YOUR IMAGE IMAGE TITLE: THEN IMAGE DESCRIPTION |
Video proof???
Lets take a look at the final result. I'll show the repairs and do a quick demo with the Arduino and the audio output going into a guitar amp. I'll also show the pulsetrain coming off the shift registers.
Top Comments