Programmable Voltage Reference V2.12 Assembly

Assembling the V2.12 Programmable Voltage Reference Board.

Final assembly of the V2.12 Programmable Voltage Reference board with Teensy 3.2 attached
Final assem­bly of the V2.12 Programmable Voltage Reference board with Teensy 3.2 attached

It was home­made piz­za night, so I got off to bit of a late start with board assembly.
After a thor­ough clean­ing of the board with iso­propyl alco­hol and hit­ting all the pads with a flux pen, I applied sol­der paste using a blunt tip syringe. I am cur­rent­ly using MG Chemicals 4860P Sn63/Pb37 sol­der paste with good results.
Next came the com­po­nent place­ment which went well except for the AD5060BRJZ which comes in a 8‑lead SOT-23 pack­age with a 0.65 mm lead spacing.
Refow sol­der­ing on the Presto “Liddle Griddle” elec­tric skil­let was unevent­ful, and I man­u­al­ly fol­lowed the reflow pro­file pro­vid­ed by the sol­der paste man­u­fac­ture using a non-con­tact infrared ther­mome­ter. I took spe­cial care not to over­heat or stress the Texas Instruments volt­age ref­er­ence IC’s.

Board after reflow sol­der­ing with all sur­face mount com­po­nents except C10 on back

I want­ed to eas­i­ly remove the Teensy 3.2 proces­sor board if need­ed, so I used some Mill-Max 350 series inter­con­nects. Two 14 pin inter­con­nects were used for the out­er two rows and a sin­gle 5 pin inter­con­nect with one pin removed for A10, A11, REF and vUSB for the inner row.

Closeup of Teensy 3.2 with pin headers installed
Closeup of Teensy 3.2 with pin head­ers installed
Teensy 3.2 interconnects showing inner row with pin removed
Teensy 3.2 inter­con­nects show­ing inner row with pin removed

Even though the sol­der paste used is a no-clean type, I thor­ough­ly cleaned all flux residue, fin­ger prints, etc. from the main board with an iso­propyl alco­hol bath and light scrub­bing with a brush to remove all con­t­a­m­i­nants, fol­lowed by an alco­hol rinse and canned air drying.
Initial board test­ing went well, with the 5 volt rail read­ing 4.998 volts and the neg­a­tive bias sup­ply around ‑2.3 volts. Analog fil­tered 5 volt rail mea­sured 4.82 volts which is well above the 4.6 volt min­i­mum. Current draw was under 7 mA with the dis­play attached and read­ing 1.000 V.
The 2.048 volt ref­er­ence was spot-on, but when adjust­ing the trim pot for the 4.096 ref­er­ence I was at the extreme end of the adjust­ment. A 11K ohm resis­tor in place of the 12K in posi­tion R1 put the adjust­ment back in the cen­ter of the adjustable range.
I did notice an error in the silk screen for the dis­play con­nec­tor which had the +5 and GND text reversed. This has been cor­rect­ed in V2.13, along with some sol­der mask aes­thet­ic issues and the val­ue change in resis­tor R1.

End view of board after solder refow
End view of board after sol­der refow

I still have a bit of soft­ware to fin­ish, but all of the major parts are completed.
One of the hard­ware fea­tures that I added to the V2.12 board was the abil­i­ty to mon­i­tor the actu­al out­put volt­age using the Teensy 3.2’s 16 bit ana­log to dig­i­tal con­vert­ers. My plan is to com­pare the pro­grammed out­put volt­age against the actu­al volt­age and change a sta­tus LED from green to red if it is out­side a spec­i­fied range.
To main­tain out­put mea­sure­ment accu­ra­cy I am using a TI REF5020ID 2.048 V volt­age ref­er­ence in U4 con­nect­ed to the Teensy exter­nal vref pin. Output volt­age is sup­plied to the Teensy ana­log input via an OPA365 buffer op amp U3 and a Vishay foil resis­tor 25K-25K volt­age divider IC2.
The buffer op amp for the AD5060 dig­i­tal to ana­log con­vert­er was changed to a LTC1152 zero-drift op amp with a 10 mA sink and source capability.
Other hard­ware items added are a MAX14931 four chan­nel dig­i­tal iso­la­tor IC1 used for the SPI con­nec­tion to the DAC, and a tran­sient volt­age sup­pres­sion diode D3 for ESD pro­tec­tion across the output.

Next part is mount­ing the board in the case, alu­minum volt­age con­trol knob mod­i­fi­ca­tions, user inter­face deci­sions, pos­si­ble shield­ing for the ana­log side, BOM doc­u­men­ta­tion, and pow­er sup­ply decisions.

Programable Voltage Reference V2.12 assembled top view
Programmable Voltage Reference V2.12 assem­bled top view

Parts and files for the Programmable Voltage Reference V2.13:
OSH Park PCB board ser­vice Project page
Eagle CAD V7.5 PDF, schemat­ic, and board ZIP file
Firmware for Teensyduino — Version 0.7 with out­put V check ZIP file
Front Panel Designer — Front pan­el for PV Reference2 ZIP file
Digikey cart for V2.13
Download Digikey CSV parts file

14 Replies to “Programmable Voltage Reference V2.12 Assembly”

  1. Hi

    I build the ref­er­ence and am impressed by the qual­i­ty and sta­bil­i­ty of the gen­er­at­ed volt­age. I would also like to put the cir­cuit in an enclo­sure. Would you share the design file for the front panel ?


    1. Hi Michael,
      The post has been updat­ed with a link to “Front Panel Designer” Front pan­el for PV Reference2 ZIP file.

      Greg (Barbouri)

    1. Hi Jon,
      The neg­a­tive bias is specif­i­cal­ly for the OPA365 Op-Amp. See the datasheet sec­tion 7.3.4 “Achieving an Output Level of Zero Volts (0 V)”.
      Version 2.19 of the board has addi­tion­al neg­a­tive bias fil­ter­ing and sep­a­rate bias resis­tors for each Op-Amp. 


      1. Hello Greg,

        Talking about sta­bil­i­ty. I could not get a very sta­ble out­put from LTC1152 despite C25 and C21 are sup­posed to reject noise. I have replaced LTC1152 for OPA388 and this changed the sta­bil­i­ty com­plete­ly for the best. On the low­er end, long term 1mV is rock sta­ble with 143nV stan­dard devi­a­tion and 1uV p‑t-p over a few hours. This is an amaz­ing result in my view. On the upper scale at 4V sta­bil­i­ty is not that good, but still impres­sive with 8–10uV p‑t-p over a long term. 

        Not sure why my LTC1152 was very noisy.


  2. Hello Greg,

    Can I use this ref­er­ence to pow­er, say, Arduino? I think this was an inten­tion in the orig­i­nal uChip design?

    I tried to pow­er Arduino, but the encoder turned pur­ple and volt­age dropped from 3.300V to 1.492V. Consumption is 17mA or less. Is this an expect­ed behaviour? 


    1. Hi Alex,
      This is the expect­ed, and designed behav­ior of the PVR.
      The vio­let LED indi­ca­tor sig­nals that the out­put does not match the set out­put val­ue with­in the pro­grammed tolerance.
      The LTC1152 oper­a­tional ampli­fi­er data sheet states:
      “The LTC1152 fea­tures an enhanced out­put stage that can sink and source 10mA with a sin­gle 5V supply…”
      “out­put resis­tance… is typ­i­cal­ly 140Ω with a sin­gle 5V supply…”

      The “Programmable Voltage Reference V2.12” was nev­er designed as a pow­er sup­ply, but it can be used with­in its spec­i­fi­ca­tions as a pow­er source.

      The orig­i­nal uChip design was intend­ed to sim­u­late an ana­log sen­sor input on an Arduino/ATmega processor.
      uChip wrote in his design goals sec­tion, “This is a volt­age ref­er­ence, not a pow­er sup­ply, so a lim­it of a few mil­liamps is acceptable.”

      Greg (Barbouri)

      1. Hi Greg,

        Yes, you are right. I can dri­ve a small 0603 LED ~3mA, but not larg­er loads. uChip has used 1K resis­tor to dri­ve load, which cor­re­sponds to 4mA.

        I have a dif­fer­ent ques­tion on cal­i­bra­tion. Generally, my PVR is pre­cise to 1mV. Say, 1V is dis­played in the ser­i­al mon­i­tor as 1.000V and 6 1/2 DMM is say­ing 1.000581 V (aver­age). However, read back volt­age is some­times is off. You are say­ing +/-4mV, which prob­a­bly more cor­re­sponds to 10bit Arduino ADC. Teensy has got 12bit ADC. Firstly, can I get more pre­ci­sion from DAC? Effectively, I can get it down to 10uV (res­o­lu­tion — 4.096 / (2^16))?
        How can I improve read back volt­age? Maybe an exter­nal 16bit ADC on a daugh­ter board?

        Thank you

        1. Hi Alex,
          There is a sep­a­rate sec­tion in the sketch for the Teensy A‑D calibration

          // include Teensy A‑D error cor­rec­tion vari­ables, Set for each Teensy
          Serial.print(“ Output voltage = ”);
          Serial.print((code * 0.0002502)-0.0007, 3); //0.0002500 base value

          You will need to cal­cu­late the lin­ear­i­ty and off­set of the Teensy A‑D and enter the values.
          Base val­ues are: 0.0002500 and 0.0000

          I am get­ting around 0.05% read back accu­ra­cy on all my PVR units after cal­i­bra­tion of the Teensy A‑D.
          You should be able to cal­i­brate the main out­put to with­in 100 uV (62.5 uV step) of the set volt­age, for all 4,095 out­put settings.

          The read back val­ue was nev­er meant as a sub-mil­li­volt read­out. It was only to ver­i­fy the out­put was work­ing cor­rect­ly with­in sev­er­al mV.
          My goal was to pro­vide a visu­al response to an error con­di­tion, such as con­nect­ing a load over 10 mA.

          Greg (Barbouri)

  3. Hi Greg,

    I just want­ed to share my thoughts on vref. I think ulti­mate­ly it depends on what accu­ra­cy you want to achieve. Additionally, I am of the opin­ion that for the best long-term drift, LM399 has to be used.

    Talking about 2.12, I have not assem­bled it yet though I have the PCB. How accurate/stable do you find REF5040ID‎? What about long-term drift? How often do you have to re-cal­i­brate it please?


Leave a Reply

Your email address will not be published. Required fields are marked *