Waveshape Monitor Module for Modular Synthesizers

by baritonomarchetto in Circuits > Audio

3290 Views, 43 Favorites, 0 Comments

Waveshape Monitor Module for Modular Synthesizers

IMG_20211022_153345_slim.jpg
Wave Monitor Module for modular synthesizers
IMG_20211022_134337_slim.jpg

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

Arduino ADSR Digital Envelope Generator Module

Variable Waveshape Low Frequency Oscillator Module

The Circuit

differential_amplifier.png
differential_amplifier_app.png
IMG_20211013_180100_slim.jpg
IMG_20211013_180018_slim.jpg
IMG_20211013_175932_slim.jpg
IMG_20211013_175946_slim.jpg

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

IMG_20211022_130056_slim.jpg
IMG_20211022_134337_slim.jpg

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

IMG_20211022_130056_slim.jpg
IMG_20211022_130433_slim.jpg
IMG_20211022_132132_slim.jpg
IMG_20211022_132411_slim.jpg
IMG_20211022_134343_slim.jpg

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

IMG_20211022_172315_slim.jpg

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!