Forums

1/x function with op amps or multiplier or something else...

Started by Fibo April 15, 2016
On Thu, 14 Apr 2016 20:18:25 -0700 (PDT), Fibo <panfilero@gmail.com>
wrote:

>Hello, > >I'm trying to figure out the best way to go about making a -1/x function in hardware. From googling around I see 2 methods, > >1. Inverting log -> Anti-log >2. OpAmp with multiplier in the feedback loop > >I have +/-5V rails available, and my input is from 0.4V to 2V (which should give me an output of (-2.5 to -0.5). All DC values. > >Can anyone point me in the right direction here, I'm trying to do this with as few parts (no microcontroller) and as painlessly as possible, it doesn't have to be very accurate (2-5% error it ok). > >Much Thanks!
You can actually get a pretty decent 1/x function with a 555 timer... <http://www.analog-innovations.com/SED/OneOver_Using_555_Timer_2016-04-18_08-42-38.png> (Period proportional to Control voltage. Run it thru a F-to-V converter to get back to voltage.) For better linearity, replace boot-strap-style current source with an OpAmp-controlled mirror. ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance
On Thu, 14 Apr 2016 20:18:25 -0700 (PDT), Fibo <panfilero@gmail.com>
wrote:

>Hello, > >I'm trying to figure out the best way to go about making a -1/x function in hardware. From googling around I see 2 methods, > >1. Inverting log -> Anti-log >2. OpAmp with multiplier in the feedback loop > >I have +/-5V rails available, and my input is from 0.4V to 2V (which should give me an output of (-2.5 to -0.5). All DC values. > >Can anyone point me in the right direction here, I'm trying to do this with as few parts (no microcontroller) and as painlessly as possible, it doesn't have to be very accurate (2-5% error it ok). > >Much Thanks!
Better approach, avoid timing error due to using "Discharge" pin, run symmetric... <http://www.analog-innovations.com/SED/OneOverV_Using_555_Better_2016-04-19_09-02-49.png> ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance
On 18/04/16 02:06, Jim Thompson wrote:
> On Sat, 16 Apr 2016 18:07:13 -0700 (PDT), sroberts6328@gmail.com > wrote: > >> Here, see if this fits, I linked it where I can post attachments... >> >> http://www.eevblog.com/forum/projects/alegbraic-inversion-for-other-forum/ >> >> Steve > > Thanks, Steve! > > I had forgotten all the CA parts from the past. The CA3086 should > work just fine in my circuit. > > And there's also the CA3046.
and the HFA3101 and its friends.
On 18/04/2016 11:33, piglet wrote:
> On 18/04/2016 08:06, piglet wrote: >> On 15/04/2016 08:47, whit3rd wrote: >>> On Thursday, April 14, 2016 at 8:18:30 PM UTC-7, Fibo wrote: >>>> Hello, >>>> >>>> I'm trying to figure out the best way to go about making a -1/x >>>> function in hardware. From googling around I see 2 methods, >>>> >>>> 1. Inverting log -> Anti-log >>>> 2. OpAmp with multiplier in the feedback loop >>>> >>>> I have +/-5V rails available, and my input is from 0.4V to 2V >>> >>> For a multiplier, one possibility is a variable duty cycle chopper. >>> Start with a '555 with current source pullup (just a grounded-base PNP >>> transisor >>> with emitter resistor to +5) to make a sawtooth ('555 powered from GND >>> and -5V, this >>> makes a 1.67 Vpp triangle). Attenuate the input signal, 'X', to the >>> {0, 1V} range and feed >>> to a comparator, and use the comparator's open-collector output to >>> chop (shunt >>> to ground) your other signal, 'Y'. >>> >>> After a bit of low-pass filtering, the chopped signal has a value of X >>> * Y /1.67... >>> >>> I'd level-translate the triangle with a blocking capacitor and >>> ground-clamp >>> diode, but there's other options. >>> >>> This all assumes that your 'X' input, and your 'Y' output signals can >>> be much >>> slower than a manageable sawtooth generator. Under 1 kHz would work >>> fine; over >>> 1 MHz, means you'd be better off with something else. >>> >> >> Yes, I think the OP said the signals were dc or slow varying so a PWM >> based multiplier could be a very practical method and avoids all the >> tempco and matching problems of Vbe based log/exp. >> >> piglet >> >> > > Here is a sketch of the concept I had in mind: > > <https://www.dropbox.com/s/jnu9c2x3redhnv3/ReciprocatorPWM.pdf> > > If a 2.5V or similar reference is available then the comparator PWM > maker levels can be referenced to that and a wider duty cycle range > obtained and less gain needed in the output servo - should improve the > accuracy. > > piglet
Finally made a simulation showing PWM multiplier inside a servo: Version 4 SHEET 1 1700 680 WIRE 464 -176 464 -192 WIRE 608 -176 464 -176 WIRE 816 -160 704 -160 WIRE 704 -128 704 -160 WIRE 464 -112 464 -176 WIRE 1008 -112 944 -112 WIRE 1152 -112 1072 -112 WIRE 816 -96 816 -160 WIRE 432 -80 320 -80 WIRE 608 -80 608 -96 WIRE 768 -80 608 -80 WIRE 608 -64 608 -80 WIRE 608 -64 512 -64 WIRE -80 -48 -80 -64 WIRE 96 -48 -80 -48 WIRE 400 -48 176 -48 WIRE 432 -48 400 -48 WIRE 1152 -16 1152 -112 WIRE 1232 -16 1152 -16 WIRE -80 16 -80 -48 WIRE 320 16 320 -80 WIRE 320 16 240 16 WIRE 448 16 448 -16 WIRE 448 16 432 16 WIRE 1024 16 1024 -16 WIRE 432 32 432 16 WIRE 816 32 816 -16 WIRE 832 32 816 32 WIRE 944 32 944 -112 WIRE 944 32 912 32 WIRE 992 32 944 32 WIRE 240 48 240 16 WIRE 1152 48 1152 -16 WIRE 1152 48 1056 48 WIRE 464 64 464 -16 WIRE 992 64 960 64 WIRE -80 128 -80 96 WIRE 320 128 320 16 WIRE 608 128 608 -64 WIRE 608 128 560 128 WIRE 400 144 400 -48 WIRE 1024 144 1024 80 WIRE 176 160 -32 160 WIRE 176 176 176 160 WIRE 128 192 48 192 WIRE 960 208 960 64 WIRE 1232 208 1232 176 WIRE 48 224 48 192 WIRE 128 240 80 240 WIRE 816 240 816 32 WIRE 768 256 720 256 WIRE 176 272 176 256 WIRE 320 272 320 208 WIRE 320 272 176 272 WIRE 400 272 400 224 WIRE 400 272 320 272 WIRE 720 272 720 256 WIRE -32 288 -32 160 WIRE 80 304 80 240 WIRE 608 304 608 128 WIRE 608 304 80 304 WIRE 768 304 608 304 WIRE 1232 336 1232 288 WIRE 1280 336 1232 336 WIRE 176 352 176 272 WIRE 80 368 80 304 WIRE 128 368 80 368 WIRE 816 368 816 320 WIRE 1152 368 1152 48 WIRE 1152 368 816 368 WIRE 1232 384 1232 336 WIRE 128 416 80 416 WIRE 80 448 80 416 WIRE 176 448 176 432 WIRE 176 448 80 448 WIRE 176 464 176 448 WIRE 1232 464 1184 464 FLAG -80 128 0 FLAG 1280 336 0 FLAG 1232 176 5P FLAG 1184 464 5N FLAG -80 -64 Vin FLAG 1024 -16 5P FLAG 464 -192 5P FLAG 464 64 5N FLAG 1024 144 5N FLAG 240 112 0 FLAG 432 32 0 FLAG 560 128 PWM FLAG 1232 -16 Vout FLAG 720 272 0 FLAG 704 -128 0 FLAG 768 -32 0 FLAG 960 288 0 FLAG 176 464 0 FLAG 48 224 0 FLAG -32 368 0 SYMBOL voltage -80 0 R0 WINDOW 123 0 0 Left 2 WINDOW 39 0 0 Left 2 SYMATTR InstName V1 SYMATTR Value PULSE(2 0.4 10m 100m) SYMBOL voltage 1232 192 R0 WINDOW 123 0 0 Left 2 WINDOW 39 0 0 Left 2 SYMATTR InstName V2 SYMATTR Value 5 SYMBOL voltage 1232 368 R0 WINDOW 123 0 0 Left 2 WINDOW 39 0 0 Left 2 SYMATTR InstName V3 SYMATTR Value 5 SYMBOL Comparators\\LT1011 464 -64 R0 SYMATTR InstName U1 SYMBOL Opamps\\LT1001 1024 -16 R0 SYMATTR InstName U2 SYMBOL res 592 -192 R0 SYMATTR InstName R1 SYMATTR Value 4.7k SYMBOL res 416 240 R180 WINDOW 0 -45 68 Left 2 WINDOW 3 -65 24 Left 2 SYMATTR InstName R2 SYMATTR Value 1meg SYMBOL res 336 224 R180 WINDOW 0 36 76 Left 2 WINDOW 3 36 40 Left 2 SYMATTR InstName R3 SYMATTR Value 100k SYMBOL res 192 -64 R90 WINDOW 0 0 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName R4 SYMATTR Value 33k SYMBOL cap 224 48 R0 SYMATTR InstName C1 SYMATTR Value 1n SYMBOL cap 1072 -128 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C2 SYMATTR Value 1n SYMBOL res 928 16 R90 WINDOW 0 0 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName R6 SYMATTR Value 330k SYMBOL sw 816 224 R0 SYMATTR InstName S1 SYMATTR Value AS1 SYMBOL sw 816 -112 R0 WINDOW 3 38 74 Left 2 SYMATTR InstName S2 SYMATTR Value AS2 SYMBOL voltage 960 192 R0 WINDOW 123 0 0 Left 2 WINDOW 39 0 0 Left 2 SYMATTR InstName VrefNegServo SYMATTR Value -0.4 SYMBOL sw 176 160 R0 SYMATTR InstName S3 SYMATTR Value AS3 SYMBOL sw 176 336 R0 SYMATTR InstName S4 SYMATTR Value AS4 SYMBOL voltage -32 272 R0 WINDOW 0 -151 5 Left 2 WINDOW 3 -74 83 Left 2 WINDOW 123 0 0 Left 2 WINDOW 39 0 0 Left 2 SYMATTR InstName VrefPosPWM SYMATTR Value 2.5 TEXT 1104 584 Left 2 ;EPW APR 2016 TEXT 968 528 Left 2 ;PWM -1/x RECIPROCATOR TEXT -120 504 Left 2 !.tran 120m TEXT 576 552 Left 2 !.model AS1 SW(Vt=1) TEXT 576 584 Left 2 !.model AS2 SW(Vt=-1) TEXT 280 552 Left 2 !.model AS3 SW(Vt=1) TEXT 280 584 Left 2 !.model AS4 SW(Vt=-1) TEXT 280 408 Left 2 ;At Vin=2 PWM is 80% TEXT 280 448 Left 2 ;At Vin=0.4 PWM is 16% TEXT 280 504 Left 2 ;AS1-4 = 2/3 of HC4053 TEXT 616 408 Left 2 ;For 80% of Vout = -0.4 TEXT 616 448 Left 2 ;For 16% of Vout = -0.4 TEXT 864 408 Left 2 ;then Vout must be -0.5 TEXT 864 448 Left 2 ;then Vout must be -2.5 I am a spice newbie, and hope one of the spice wizards will give tips on speeding up simulation. I think the servo action makes LT very slow to converge on a result? piglet
On Sat, 23 Apr 2016 11:43:54 +0100, piglet <erichpwagner@hotmail.com>
wrote:

>On 18/04/2016 11:33, piglet wrote: >> On 18/04/2016 08:06, piglet wrote: >>> On 15/04/2016 08:47, whit3rd wrote: >>>> On Thursday, April 14, 2016 at 8:18:30 PM UTC-7, Fibo wrote: >>>>> Hello, >>>>> >>>>> I'm trying to figure out the best way to go about making a -1/x >>>>> function in hardware. From googling around I see 2 methods, >>>>> >>>>> 1. Inverting log -> Anti-log >>>>> 2. OpAmp with multiplier in the feedback loop >>>>> >>>>> I have +/-5V rails available, and my input is from 0.4V to 2V >>>> >>>> For a multiplier, one possibility is a variable duty cycle chopper. >>>> Start with a '555 with current source pullup (just a grounded-base PNP >>>> transisor >>>> with emitter resistor to +5) to make a sawtooth ('555 powered from GND >>>> and -5V, this >>>> makes a 1.67 Vpp triangle). Attenuate the input signal, 'X', to the >>>> {0, 1V} range and feed >>>> to a comparator, and use the comparator's open-collector output to >>>> chop (shunt >>>> to ground) your other signal, 'Y'. >>>> >>>> After a bit of low-pass filtering, the chopped signal has a value of X >>>> * Y /1.67... >>>> >>>> I'd level-translate the triangle with a blocking capacitor and >>>> ground-clamp >>>> diode, but there's other options. >>>> >>>> This all assumes that your 'X' input, and your 'Y' output signals can >>>> be much >>>> slower than a manageable sawtooth generator. Under 1 kHz would work >>>> fine; over >>>> 1 MHz, means you'd be better off with something else. >>>> >>> >>> Yes, I think the OP said the signals were dc or slow varying so a PWM >>> based multiplier could be a very practical method and avoids all the >>> tempco and matching problems of Vbe based log/exp. >>> >>> piglet >>> >>> >> >> Here is a sketch of the concept I had in mind: >> >> <https://www.dropbox.com/s/jnu9c2x3redhnv3/ReciprocatorPWM.pdf> >> >> If a 2.5V or similar reference is available then the comparator PWM >> maker levels can be referenced to that and a wider duty cycle range >> obtained and less gain needed in the output servo - should improve the >> accuracy. >> >> piglet > >Finally made a simulation showing PWM multiplier inside a servo: > >Version 4 >SHEET 1 1700 680 >WIRE 464 -176 464 -192
[snip]
>TEXT 864 408 Left 2 ;then Vout must be -0.5 >TEXT 864 448 Left 2 ;then Vout must be -2.5 > >I am a spice newbie, and hope one of the spice wizards will give tips on >speeding up simulation. I think the servo action makes LT very slow to >converge on a result? > >piglet >
Did you miss my post that produces V-to-Period... <http://www.analog-innovations.com/SED/OneOverV_Using_555_Better_2016-04-19_09-02-49.png> Then run this output thru an F-to-V to get the 1/V function. LTspice has many issues with initial convergence. Try setting Solver=Alternate and adding "Spice Directive"... .options plotwinsize=0 But don't hold your breath, LTspice still chokes. ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance
On Thu, 14 Apr 2016 20:18:25 -0700 (PDT), Fibo <panfilero@gmail.com>
wrote:

>Hello, > >I'm trying to figure out the best way to go about making a -1/x function in hardware. From googling around I see 2 methods, > >1. Inverting log -> Anti-log >2. OpAmp with multiplier in the feedback loop > >I have +/-5V rails available, and my input is from 0.4V to 2V (which should give me an output of (-2.5 to -0.5). All DC values. > >Can anyone point me in the right direction here, I'm trying to do this with as few parts (no microcontroller) and as painlessly as possible, it doesn't have to be very accurate (2-5% error it ok). > >Much Thanks!
New and improved Voltage-to-Period Converter... See "Voltage-to-Period_Converter_555_4.png" on the S.E.D/Schematics Page of my website. ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance
On 23/04/2016 15:05, Jim Thompson wrote:
> > Did you miss my post that produces V-to-Period... > > <http://www.analog-innovations.com/SED/OneOverV_Using_555_Better_2016-04-19_09-02-49.png> > > Then run this output thru an F-to-V to get the 1/V function. > > LTspice has many issues with initial convergence. Try setting > Solver=Alternate and adding "Spice Directive"... > > .options plotwinsize=0 > > But don't hold your breath, LTspice still chokes. > > ...Jim Thompson >
Thanks Jim, will try spice tricks. Yes I saw your 555 solution and I think it is pretty neat. What F to V would you suggest feeding it with - just so we offer the OP and end-to-end solution? piglet
On Sat, 23 Apr 2016 16:42:56 +0100, piglet <erichpwagner@hotmail.com>
wrote:

>On 23/04/2016 15:05, Jim Thompson wrote: >> >> Did you miss my post that produces V-to-Period... >> >> <http://www.analog-innovations.com/SED/OneOverV_Using_555_Better_2016-04-19_09-02-49.png> >> >> Then run this output thru an F-to-V to get the 1/V function. >> >> LTspice has many issues with initial convergence. Try setting >> Solver=Alternate and adding "Spice Directive"... >> >> .options plotwinsize=0 >> >> But don't hold your breath, LTspice still chokes. >> >> ...Jim Thompson >> > >Thanks Jim, will try spice tricks. Yes I saw your 555 solution and I >think it is pretty neat. What F to V would you suggest feeding it with - >just so we offer the OP and end-to-end solution? > >piglet
That's a chip function that's available off-the-shelf, but to keep the ignorati braying, I'll try making one from a 555 >:-} ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance
On 23/04/2016 16:57, Jim Thompson wrote:
>> Thanks Jim, will try spice tricks. Yes I saw your 555 solution and I >> think it is pretty neat. What F to V would you suggest feeding it with - >> just so we offer the OP and end-to-end solution? >> >> piglet > > That's a chip function that's available off-the-shelf, but to keep the > ignorati braying, I'll try making one from a 555 >:-} > > > ...Jim Thompson >
Yes, and I was thinking an LM2907 kind of thing a bit overkill. Can you do something minimalist with just a C and Q and arrange the transistor temp coeff in the F-V to cancel with Vbe TCs in the current sources around the 555 ? :> piglet
On Sat, 23 Apr 2016 17:04:40 +0100, piglet <erichpwagner@hotmail.com>
wrote:

>On 23/04/2016 16:57, Jim Thompson wrote: >>> Thanks Jim, will try spice tricks. Yes I saw your 555 solution and I >>> think it is pretty neat. What F to V would you suggest feeding it with - >>> just so we offer the OP and end-to-end solution? >>> >>> piglet >> >> That's a chip function that's available off-the-shelf, but to keep the >> ignorati braying, I'll try making one from a 555 >:-} >> >> >> ...Jim Thompson >> > >Yes, and I was thinking an LM2907 kind of thing a bit overkill. Can you >do something minimalist with just a C and Q and arrange the transistor >temp coeff in the F-V to cancel with Vbe TCs in the current sources >around the 555 ? :> > >piglet >
There's an ultra-simple "tachometer" F-to-V circuit using one transistor, one diode, two capacitors and one resistor, but it has a 2-Vbe offset. I used it a gezillion years ago in a smog control element for automobiles. I'll see if I can adapt it. (The effect of the Vbe TC's in the current mirrors is pretty small... and it's trivial to add an OpAmp to make it approach zero, so I think it's better to make the F-to-V TC zero as well.) ...Jim Thompson -- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at http://www.analog-innovations.com | 1962 | The touchstone of liberalism is intolerance