Simple DC voltage modifier

Hi,

It's been years since I've done any basic circuit design, so I'm looking for a couple of pointers in the right direction to get me started.

I've got a heating system control and a hot water boiler that need to talk.

The control system puts out a 0-10V DC voltage to indicate what water temperature it needs. The hot water boiler takes a 0-10V DC analog input signal to indicate what water temperature it should produce.

However, the 0-10V DC scales for the two devices are not the same.

10V DC out from the controller indicates a "99*C" water temperature, but the boiler will only produce 80*C at 10V. At the low end, 2.2V from the controller indicates a desire for 22*C water, but the boiler will produce 27*C. Both scales are basically linear within that range. Details on the scale differences are available here:
formatting link

I'd like to put a simple circuit on the line to properly adjust the voltages being sent to the hot water boiler. Currently, the scales are close enough that the system works, but the water temperatures are a bit off.

I've been scratching my head for a couple of days, and I can't come up with anything simple. A small microcontroller with an ADC/DAC combination would do the job, but I'd like to power the device off the input signal if that's at all possible. This might be hard as above about 7V, the output would end up needing to be higher than the input.

Can anyone point me in the right direction (or if this is a well- known problem, point me at the terminology I should be searching around for?)

daniel

Reply to
Dan
Loading thread data ...

I didn't read the PDF and I don't know the current drive requirements for your 10V outputs. Some 0-10V inputs are on the order of 100k ohm, though. So currents should, guessing, should be on the order of 100 microamps. Is that about right?

I'm not sure what's easier for you -- microcontroller or otherwise. But I believe three cheap BJTs and four resistors plus a bipolar power supply providing +15V and -15V would do it without the micro. And some tinkering to nail the offset and gain. What kind of power supply might be convenient?

Jon

Reply to
Jon Kirwan

The controller manufacturer docs say "0-10 V Minimum 2500ohm" for the output, so I assume that means the controller can supply max 4mA. The boiler docs don't say how much it needs, but it seems safe to assume that it's less than 4mA.

There are some 12V and 24V wires floating around that I can hook into. Alternatively, I was considering plain old alkaline batteries if I could come up with something that would give me reasonable battery life (i.e. >1 year).

Ideally, I'd like to power it from the 0-10V supply itself and keep the circuit entirely in-line, but that may not be feasible. The boiler input has some hysteresis, so the "converter" wouldn't actually need to put anything out until the input rose above 2.2V, and cutting out anywhere below that would work fine too. There are several low power, low cost microcontrollers that'll run from 1.8V which should do the job.

The output voltage would only rise above the input when the input reaches about 7V, and the maximum difference is going to be about

1.5V. The rest of the time, the output will be lower than the input.
Reply to
Dan

Sounds like an opamp (or two) and a few resistors would do it. You need to have an offset and then a scale change. That's pretty easy. Powering it off the input line is going to be a problem since a lot of the time you need to output a voltage larger than the input voltage... I suppose you could add some sort of DC-DC converter if there was enough current available from the source.

George H.

Reply to
George Herold

Could be done with an op amp, although you'll need to find a way to power it. For values above 2.2 V you have a linear relationship where V.out = 0.68 * V.in + 12.7. With a single supply op amp, you'll need a gain greater than one so say we divide the input in half, yielding V.out = 1.36 * V'.in + 12.7. From there, it's a fairly straight line (no pun intended) to the resistor values needed for this.

Rather than banging it all out here, I'd recommend that you pick up the free PDF "Op Amps for Everyone" from TI at

formatting link
It's good reading if you need a refresher. Specifically, section 4.3.1 addresses just this problem of a V.out = m * V.in + b design.

--
Rich Webb     Norfolk, VA
Reply to
Rich Webb

If I interpreted your post right, there is a point where the controller's output and the boiler's response agree. That would be 4.578 volts. The controller is demanding 45.8 degrees and the boiler will provide 45.8 degrees. You can check my calculations. It's a simple linear thing. So I would say use a voltage reference of 4.578 volts and an op amp wired as a difference amplifier. Let Vc = controller voltage, and Vout = the difference amplifier's output. You want Vout = 1.543 (Vc-4.578)

Reply to
Michael Robinson

Correction: Vout = 1.543 (Vc - 1.611)

You can use an adjustable voltage regulator like the LM317 to get the 1.6 volt reference. Then set your op amp difference amplifier resistors to give you a gain of 1.543.

Reply to
Michael Robinson

Go to this link

formatting link
and click on "differential amplifier." Apply 1.61 volts at V1 and apply the controller output at V2. Set R2/R1 ratio at 1.543 You are going to need a power supply a few volts higher than the controller output. For 100* C the op amp output will be nearly 13 volts for a controller voltage of 10 volts. Of course your boiler isn't going to ask for quite such a high temperature, but let's use the figure of 3 volts to guide us. If your op amp has rail-to-rail output, you need to run the op amp on a 13 volt power supply. For an ordinary 741 op amp or some such you will need something like 15 volts. Depending on how close to the top rail your op amp output gets.

Reply to
Michael Robinson

As others point out, an opamp is the obvious modern solution. With caveats. One of them being whether or not they are designed for inputs very close to the (-) rail voltage, or not. The wonderful thing about them is lots of gain for linearity far beyond what you need, I suspect, and very simple calculations and no real need for tweaking since everything can be worked out in advance... close enough for your needs.

You want 0V out to become 0V in and, I gather 10V out to become about 8.08V in. (This is where I think Michael Robinson gets this wrong... but maybe it is me.)

Some of your points conflict a bit with others. You mention the possibility of battery, but only with longish life. But that conflicts with something else you said... that it is safe to assume the input requires less than 4mA. Anything near 4mA, multiplied by a year, comes in near 35 amp-hours. Batteries do that, I suppose. But that's a lot all the same. And that assumes 0% for everything else... rather unlikely.

So either give up on the 4mA output or else the battery idea.

Is it possible to measure the current with an ammeter there? As I mentioned earlier, I did take a look at one device on the web and it suggested to me that standard inputs are 100k ohm but that outputs should assume 20k ohm because sometimes there is more than one input tied in.

The only reason all this is important is if you decide you want a discrete BJT option rather than an opamp. If you decide for an opamp, you probably don't need to worry as much. But if I propose something BJT-wise, I need to know. Opamps get to use dozens of BJTs. I'm stuck reaching for the least case, so more factors need to be worked out.

Jon

Reply to
Jon Kirwan

What you are writing about is a simple Op Amp circuit - they can adjust the Span (range of the signal) and Zero (what voltage the "baseline" is, if not actually Zero).

You sound as if this is out of your experience - no doubt you could do what you want, but it will take some learning... The "Op Amp Cookbook" has it all.

A micro controller is a bit over kill. You want easy, check out the picaxe controllers. They are ideal for this application. The 08M (all you need) sips current in the micro amp range so batteries will last (but you do have voltages available and it would be no big deal to just use what you have). The only fly in the ointment? is that all micros work on

Reply to
default

You could do it all with a passive resistor network and any voltage source greater than 5.52V, although not from your alkaline batteries unless the boiler input is _really_ high impedance.

You could do it with a passive resistor network, a voltage supply, and a couple of op-amps if you want to be textbook about it.

You could make a self-powered circuit with a switching booster if you wanted to be bizarre.

What do you want?

--

Tim Wescott
Wescott Design Services
http://www.wescottdesign.com

Do you need to implement control loops in software?
"Applied Control Theory for Embedded Systems" was written for you.
See details at http://www.wescottdesign.com/actfes/actfes.html
Reply to
Tim Wescott

That was my thought until I realised he wants 10.0 volts output with

8.0 volts input and 2.2V output for 2.7v input

so he needs a gain stage, and a reference other than ground.

--
¡spu?? ou '?? ?oo?
Reply to
Jasen Betts

I was earlier confused by his writing and now I'm still more confused, revisiting this.

The OP writes, "2.2V from the controller indicates a desire for 22C water, but the boiler will produce 27C." He also writes "10V DC out from the controller indicates a 99C water temperature, but the boiler will only produce 80C at 10V."

Assume 0V implies 0C for both controller and boiler. The controller equation is:

V_out = 0V + (10V - 0V)*[(T_set - 0C)/(99C - 0C)] V_out = T_set / 9.9

The boiler equation is:

T_boil = 0C + (80C - 0C)*[(V_in - 0V)/(10V - 0V)] T_boil = V_in * 8

Before looking at what the OP wants (T_boil = T_set), let's go back to what the OP writes. He writes, "2.2V from the controller indicates a desire for 22C water, but the boiler will produce 27C." Now let's double-check a few things.

First. Go to the equations I laid out above and let's check _my_ work. If the controller wants T_set=99C, then the equation says V_out=10V. This conforms to his writing, "10V DC out from the controller indicates a 99C." If the boiler is being controlled with V_in=10V, then the equation says T_boil=80C. This again conforms to his writing, "the boiler will only produce 80C at 10V." Assuming the 0C/0V factor I mentioned, the equations I wrote above work out. Maybe that assumption is wrong?

Then let's examine the OP's writing, "2.2V from the controller indicates a desire for 22C water." Again, from the above equation for V_out, we get V_out=22/9.9=2.222V. Okay. Not exactly 2.2V. But close enough, probably, so that I'm not far off and might be right. The OP also writes, "but the boiler will produce 27C" from that 2.222V input, I assume. Using the equation above, I get T_boil=17.7C, not

27C.

Maybe he miswrote 27C and meant 17C?

Perhaps someone can set me straight, here.

Jon

Reply to
Jon Kirwan

On Fri, 1 Oct 2010 08:49:00 -0700 (PDT), Dan wrote:

:Hi, : : It's been years since I've done any basic circuit design, so I'm :looking for a couple of pointers in the right direction to get me :started. : : I've got a heating system control and a hot water boiler that need :to talk. : : The control system puts out a 0-10V DC voltage to indicate what :water temperature it needs. : The hot water boiler takes a 0-10V DC analog input signal to :indicate what water temperature it should produce. : : However, the 0-10V DC scales for the two devices are not the same. :10V DC out from the controller indicates a "99*C" water temperature, :but the boiler will only produce 80*C at 10V. At the low end, 2.2V :from the controller indicates a desire for 22*C water, but the boiler :will produce 27*C. Both scales are basically linear within that :range. Details on the scale differences are available here: :

formatting link
: : I'd like to put a simple circuit on the line to properly adjust the :voltages being sent to the hot water boiler. Currently, the scales :are close enough that the system works, but the water temperatures are :a bit off. : : I've been scratching my head for a couple of days, and I can't come :up with anything simple. A small microcontroller with an ADC/DAC :combination would do the job, but I'd like to power the device off the :input signal if that's at all possible. This might be hard as above :about 7V, the output would end up needing to be higher than the input. : : Can anyone point me in the right direction (or if this is a well- :known problem, point me at the terminology I should be searching :around for?) : :daniel

Since Tekmar controls are compatible with Viessman Vitodens boilers one would have thoughtthat the necessary interface for correct temperature control would already be taken care of for whatever application you require. There should be no need for any custom user interface design at all. I would request information regarding your problem directly from Tekmar to start with.

Here is another relevant Tekmar bulletin regarding their 420, 422 and 423 modules

formatting link

For example, it says you need a Viessmann Vitocom 0-10Vdc interface module - do you have this part?

Reply to
Ross Herbert

Just a small thought. What is the SAFE max temp the boiler should run at ? ... 99 DegC is too high. Most electrtical thermostats would max out at around 80ish. I'm presuming it's a hot TAP water supply ?? If so you wouldn't want the water at or near boiling. The commercial hot water systems we have in stores run at around 55DegC so there is no scalding issues and above 50 should eliminate problems with bacteria (legionella etc).

Have you tried wiring up what you've got and seen how it performs ?

( just my 2p's worth)

--
Terminal_Crazy

Mitch - 1995 Z28 LT1 M6          terminal_crazy@sand-hill.freeserve.co.uk
Lancashire England          http://www.sand-hill.freeserve.co.uk/terminal_crazy/
Reply to
Terminal Crazy

I bollixed it up, too. From the PDF that the OP linked, my reading now is that he has a system that is for a "tekmar Boiler Target" (tBT) but which is actually driving a "Viessmann OpenTherm Target" (VOT).

When the tBT controller calls for, say, 80C it generates an 8.1 V signal. However, the VOT heater system it's talking to works on a slightly different scale, so that 8.1 V control signal only produces a temperature of 67C.

What he needs is to input the 8.1 V tBT signal and then output 10 V to the VOT heater. The slopes are different, so where the tBT sends 3 V (for 30C) the module needs accept that 3 V and then output only 2.5 V to the VOT.

The relationship then would be V.VOT = 1.47 * V.tBT - 1.89 (where the top end V.VOT may need to be truncated to 10 V).

The below would be one realization, with the caveats that it uses a magic op amp, is otherwise ideal (no bypassing etc.), has a 12 V supply that is exactly 12 V (it's divided down to serve as a reference), and it does not account for the possible need to cap the VOT at 10 V.

Version 4 SHEET 1 880 680 WIRE 304 -176 -208 -176 WIRE -208 -96 -208 -176 WIRE -128 -96 -208 -96 WIRE 16 -96 -48 -96 WIRE 128 -96 16 -96 WIRE 240 -96 208 -96 WIRE 336 -96 240 -96 WIRE 496 -96 416 -96 WIRE 16 -16 16 -96 WIRE 304 -16 304 -176 WIRE 240 0 240 -96 WIRE 272 0 240 0 WIRE 496 16 496 -96 WIRE 496 16 336 16 WIRE 576 16 576 0 WIRE 576 16 496 16 WIRE 688 16 576 16 WIRE -208 32 -208 -96 WIRE 272 32 160 32 WIRE 160 64 160 32 WIRE 688 64 688 16 WIRE 304 96 304 48 WIRE -208 176 -208 112 WIRE 16 176 16 64 WIRE 160 176 160 144 WIRE 688 176 688 144 FLAG -208 176 0 FLAG 16 176 0 FLAG 688 176 0 FLAG 160 176 0 FLAG 304 96 0 FLAG 576 0 Vout SYMBOL res -32 -112 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R1 SYMATTR Value 2K SYMBOL res 224 -112 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName RG SYMATTR Value 47K SYMBOL res 0 -32 R0 SYMATTR InstName R2 SYMATTR Value 1K SYMBOL res 432 -112 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName RF SYMATTR Value 22K SYMBOL res 672 48 R0 SYMATTR InstName RL SYMATTR Value 2500 SYMBOL voltage -208 16 R0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR InstName Vsup SYMATTR Value 12 SYMBOL voltage 160 48 R0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR InstName Vsig SYMATTR Value 8.1 SYMBOL Opamps\\UniversalOpamp2 304 16 R0 SYMATTR InstName U2 TEXT -242 200 Left 0 !.dc Vsig 0 10 .1

--
Rich Webb     Norfolk, VA
Reply to
Rich Webb

I worry about that "at 10V input, the boiler produces 80C"; if he wants 99C, does he get there by exceeding the boiler's input range?

Thanks, Rich

Reply to
Rich Grise

--- If your controller sends 10V to the boiler when it wants 99C water and the boiler responds by making 80C water, then it would seem that the controller would have to make higher than 10V to send to the boiler to increase the water temp to 99C.

Conversely, if the boiler sends 10V to the controller when it's making

80C water, then the controller will be fooled into thinking that the water's at 99C and will servo the boiler around the 10V point in order to keep the water temp more or less constant at 80C

So...

It seems that by reducing the output voltage from the boiler, the water temp will have to increase in order to drive the voltage higher.

Without considering the 22C point for right now, the controller's slope is:

10V Sc = ----- = 0.101 volt per Celsius 99C

and the boiler's:

10V Sb = ----- = 0.125C volt per Celsius. 80C

In order to make the boiler's slope equal to the controller's, we'll rearrange the boiler's equation to solve for the slope we want:

E = 80C * 0.101V = 8.08V

Now we need a way to reduce 10V to 8.08V, and an easy, passive way to do that is to use a resistor in series with the controller's input: (View in Courier)

CONTROLLER BOILER +----------+ +----------+ |ON/OFF OUT|------------|ON/OFF IN | | | | | | ANALOG IN|----[Rs]----|ANALOG OUT| | | | | | GND|------------|GND | +----------+ +----------+

The analog input to the controller will present some resistance to ground, so the circuit formed will be, essentially:

ANALOG OUT, E1 0-10V | [Rs] | ANALOG IN, E2 +-----> 0-8.08V | [Rl] | GND

With Rl representing the resistance of the controller's analog input.

The procedure for determining the value of Rs is:

Rl * (E1 - E2) Rs = ---------------- E2

So, for instance, if the controller's input looked like 10k, we'd have:

10kR (10V - 8.08V) Rs = -------------------- = 2376 ohms 8.08V

A problem with this solution might be that the controller's input resistance may vary with input voltage or changes in ambient temperature so, if that's going to be a problem, a better way would be to drive it with a voltage source; an opamp.

Plus, we need to consider the 22C end of the range.

Can't do it now, I've gotta run some errands, but I want to get this off, as a start.

--- JF

Reply to
John Fields

--
1. I made an error in assuming that the external controller output
   could rise above 10V in order to allow the junction of Rs and Rl
   to rise to 10V in order to get 99C water from the boiler.

2. If I'd RTFM like I should have, in the beginning, I would have
   found that on page 74 of the manual, at:

http://www.viessmann.ca/etc/medialib/internet-ca/pdfs/doc/wb1b.Par.36164.File.tmp/Vitodens_100-WB1B_is.pdf


that the boiler is set for a maximum temp of 80C, and that the 99C is
an absolute, non-adjustable cutout.

Plus, nowhere did I find that the output goes to 99C for 10V in, so
please ignore, or at least don't lend any credence to, my earlier
post.
Reply to
John Fields

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.