[sdiy] Calibration procedures for digital CV modules?

Patrick Dowling pld at gurkenkiste.com
Thu Apr 22 12:06:42 CEST 2021

Yeah, having a calibration point per octave is easy to implement (see o_C or Yarns) but actually calibrating it gets tedious pretty quickly, unless you can set up some automation loop (serial port to module, multimeter with USB, etc.)
You can reduce the effort somewhat by first calibrating -10V, 0V and 10V and generating a (hopefully) better set of initial per-octave values than the theoretical values. That table might even be “good enough”, it’ll probably depend on the output scaling tolerances, etc.

I like the idea of it being mostly self-calibrating with a loopback from DAC->ADC but it is a bit chicken-eggy.

You can maybe get away with integer math by using fixed point?

> On 22. Apr 2021, at 11:22, Spiros Makris via Synth-diy <synth-diy at synth-diy.org> wrote:
> Hello,
> I am designing the firmware of a quantizer/microtuner that uses a 16 bit ADC and DAC (which I hope to share with you all in a few weeks!) and I'm having trouble nailing down the process with which it will be calibrated. I'll preface by saying that I don't have an accurate meter yet (still in the mail), but the following has been validated by another person with a high count DMM.
> The input and output ranges of the module are +/- 10V and one bit corresponds to roughly 0.3mV. Calibrating the input is fairly easy, and due to the lack of an accurate meter, I just do it using a commercial CV generator. I figured a mV or so of potential error doesn't matter much when you identify the input note, and this seems correct in practice. The module correctly identifies all the incoming notes in its whole range.
> The scheme of producing the output value is:
> -Decide which note you will output
> -Multiply that by a constant "gain" value
> -Add the output offset compensation value
> -Add any tuning adjustments, if set up (the module gives the option of detuning individual notes of the scale)
> At first, I was using an integer gain value, which quickly became apparent that won't work properly for the whole range. An error of 0.5mV will become 6mV after an octave, which is already too much, more as you go further away from the center note, so I abandoned that approach.
> I then tried to use floating arithmetic, and calibrate using 2V:
> -Adjust the output until you get 2V
> -Divide that value by 24 to find the floating value that corresponds to a single semitone.
> This has the advantage (in theory) that any error you introduce will be divided by 24, so it keeps the tracking better for +/- 4 octaves, but then starts to have more noticeable errors.
> A solution that was suggested to me, but I have yet to implement and try out, is to calibrate values for each octave and then produce a look up table, which will be used to interpolate the output values as required. This should be very accurate, but has the disadvantage of requiring a lot of measurement points, ideally 20 (the total output range in octaves).
> A final thought, which is still very fuzzy, is to calibrate the output dac for a semitone, then calibrate the ADC based on that and finally let the module find the points for 1V, 2V etc on its own and produce the aforementioned table. Still requires an accurate meter, but is more or less automatic as a process. 
> What other options do I have that wouldn't require more than a couple of samples from the calibrator? I use an atmega328 and still have ample processing time and memory to spare. I know a mV or two of final error is not the end of the world, but since the hardware offers the accuracy, I'd like to use it to its full extend. Any additional advice and suggestions are greatly appreciated.
> PS. This is a collaboration project that has not been officially revealed yet , which is why I am not giving away more info right now. Please bear with me, this will be eventually released as a DIY, open source project
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at synth-diy.org
> http://synth-diy.org/mailman/listinfo/synth-diy
> Selling or trading? Use marketplace at synth-diy.org

More information about the Synth-diy mailing list