Waveshape Monitor Module for Modular Synthesizers
by baritonomarchetto in Circuits > Audio
3290 Views, 43 Favorites, 0 Comments
Waveshape Monitor Module for Modular Synthesizers
Waveshape monitors have been more and more common in commercial synthesizers lately. These can be placed at the end of the audio path to visualize the effect on the whole chain (think in example to Korg and their "-logue" series of synthesizers) but also as pure oscillator wave monitors (Moog One has three, one per oscillator!).
Whether you are really convinced that this type of utility can be useful in sculpturing the best sound ever or not, the charm of this novelty object is undeniable and having the possibility to add such toy to your rig will likely be a welcome news.
And it's cheaper than one might think!
In this Instructable I will show you how to realize a nice wave shape monitor module for modular synthesizers.
I will also share with you all the needed files to set it up and have it ready as fast as possible.
Let's go!
Other selected Instructables of this Series:
4 Channels MIDI to CV Interface Module
3340 Voltage Controlled Oscillator Module
Arduino Wavetable Voltage Controlled Oscillator
4 Channels Mixer with tone reference
Band Pass Resonant Filter and Amplifier Module
The Circuit
Arduino is always a great place to start looking at when it comes to get some inspiration and material to start a digital-in-nature project.
A waveshape monitor is essentially a limted oscilloscope, so my researches have started by focussing on DIY Arduino oscilloscope projects. Once again this approach did not disappoint me.
Two projects in particular are noteworthy and both comes from very skilled Japanese tinkerers: Hagiwo's oscilloscope and spectrum analizer module and Radiopench oscilloscope pen. Hardwarewise, these have one main point in common: they are built around a classic Arduino Nano and SSD1306 OLED display.
Apart from that, hardware solutions adopted and software written by the two are very different, Radiopench's project being an all-round oscilloscope (with a smart input impedance management), Hagiwo's being a little more oriented to the world of modular synthesizers.
The main issue coming with the adoption of a microcontroller board like arduino nano is the range of voltage inputs it can tollerate. We are infact limited to a 0 to +5V range, despite the -12V to +12V (or even +/-15V) voltage range our application could ask for.
Actual signals voltage ranges are always lower than those, power, ranges, but it's better to keep a certain margin of "safety".
Here is where it comes my solution to the problem, which is different from those adopted by the mentioned projects: the use of a differential amplifier at the wave input.
A differential amplifier is a combination of both the inverting and the non-inverting amplifier. In it's most common configuration, the output is the difference between the two inputs, multiplied by the closed loop gain (see attached picture).
At this link HERE (electronicshub) you can take a look at all the math, in case you are interested. Empirical observations follow.
Attached are pictures of common input signals after the diferential amplifier "magic" I scoped with my full-featured oscilloscope. In particular, you can see an LFO triangle wave oscillating in the +/-2.6V range shifted to the +2V to +3V range, a 3340 oscillator square wave shifted from 0/+8V to +2.5V/+4V and two looped ADSR signals scaled to a range of +2.4/3.7V from 0/+5V (direct ADSR) and 1.5V/2.7V from 0/-5V (fully inverted ADSR).
The obvious compromise here is with resolution (20 mV @ +/-12V), but for a qualitative information it's more than acceptable (see attached video!).
PCB, Module and BOM
The module is made up of main board and panel board. To make assembly easier and faster, component values are silkscreened on board. Please notice that resistors values are tuned for a +/-12V signal max. If your sistem is expected to send signals in the +/-15V range, resistor values should be changed accordingly. In particular, the two 4.7K ohm resistors should be replaced with at least 5.6K ohm resistors.
The main PCB board is intended to be mounted perpendicular to the face plate board.
Gerber files of both main board and face plate PCB are stored HERE (Github). You can have them manufactured HERE (JLCPCB, affiliated link).
Please notice that face plate holes are dimensioned for 1/4" jack connectors, not eurorack standard 1/8" connectors.
Follows the list of components (BOM) :
Resistors
1x 330 ohm resistor
2x 1K ohm resistor
2x 4.7K ohm resistor
Capacitors
1x 47uF electrolitic
3x 100n (104) non polarized
Arduinos, Display, Diodes and Op-amps
1x Arduino nano
1x SSD1306 OLED display
1x 1n4004 diode
1x TL072 op-amp
Others
1x 08x2 IDC connector
4x pinheaders
2x 15 pins female strips for headers (to host the nano board)
1x PBS-110 momentary push button switch
2x 1/4" jack connectors
An important note about the OLED display: the same ID (SSD1306) is used for different OLED displays out there. There could be slight size differences (nothing to worry about), number of pins differences but also pinout differencies.
When you order your display from one of the usual online stores take care to get one with four pins, not seven. Four pins displays could differ in pinout, as said. This module is built around those with GND on the far left, by looking at the display area. There are versions with Vcc (+5V) at the far left instead. These latest are not compatible with the front panel PCB attached to this article and will likely burn and/or cause severe damage to your PSU if used (in the two different versions GND and VCC are swapped).
In any other shared module of mine I have suggested to order aluminum as base material for the front panel: the cost is the same as fiberglass but the strenght is higher. In this case it is not possible because of the need for some through-hole electrical connection between the main board, the panel board and the OLED display.
WARNING: An aluminum board in this face plate would not work!
Wave Monitor Module Assembly
To correctly assemble your module, follow these steps
1) Assemble the main board first (see first picture). Components values are silk screeneed so a reference sheet is not necessary.
2) Solder the main board to the panel board
3) Cut all the main board protruding pins (in second picture I cut two only to show the difference)
4) Stick a small piece of isolating tape over the four pins
5) Solder your screen in place
6) Install all face plate elements (the button and the two jack connectors)
7) Solder face plate elements to the main board (don't forget ground cables!)
Points #3 and #4 are necessary to avoid short circuits between the main board and the OLED display. These are very close and could come in contact.
The Sketch
On the software side, I mostly reduced Radiopench original code to my application needs and simplified the buttons handling part (and translated the code from japanes, to some extent :D ).
In particular, I removed all the measurement functions (this is a wave monitor, not an oscilloscope), axis grid and general informations, simplified some function and maximised the area where the waveform is displayed.
Vertical (voltage) axis range is authomatic, and buttons handling is simplified being now limited to one single button to cycle between horizontal (time) scales. These are limited to three values in the current sketch (those I think are the most useful for our application), but it would be easy to extend to all seven ranges originally coded by Radiopench being that part of the code still present.
The button is no more handled via interrupts, but a simple, debounced, state change detection function (more than sufficient for this application). This has the further advantage of reducing the already limited number of components needed (have you seen the components counting of this project? It's ridicoulous, isn't it?!).
You can download the current version of the wave monitor code HERE (Github).
Radiopench put a lot of efforts in his code and I strongly suggest you to take a look at it: it's a pure gem! It's hosted HERE (Radiopench Blog).
My projects are free and for everybody. You are anyway welcome if you want to donate some change to help me cover components costs and push the development of new projects.
>>HERE<< is my paypal donation page, just in case you would like to contribute ;)
Acknowledgments
Wave Monitor main PCB and front plate pictured in this Instructables were sponsored by JLCPCB, a high-tech manufacturer specializing in the production of high-reliable and cost-effective PCBs.
Their customer service is very good and PCBs a great value for the money!
Their contribution in the realization of this module was essential soo... many thanks!