# A clever way to emulate an LVDT?

• posted

I have a project where I have a digital value, which can be a single float or whatever, representing a displacement of an imaginary LVDT.

I now want to emulate this LVDT. I have a board with two DACs.

The circuit will have a reference (excitation) input which is traditionally 400Hz but can be as much as 600Hz so the circuit has to not depend on that for accuracy. That input can be assumed to be ground referenced; in fact only the zero crossings are of relevance. (With a real LVDT, the output obviously depends on the excitation power but in this case that can be disregarded).

Then it will have two outputs, but since a real LVDT has two output windings, one has to emulate those windings. This is a bastard, because I have no control over the common mode voltage there, so the output has to float, so I think the output will have to be a transformer i.e. two transformers. I can see there is a possible clever solution, sensing the Vcm, but it's not worth the hassle when a couple of RM6 cores will do.

I can also see that the variable frequency input means that the sinewave generator will need to be frequency- and phase-locked onto the reference input, but I can sort that.

Is there some super-cunning way to do this, preferably in software?

I have what is basically an arbitrary waveform generator already, where there is a 1024-value table in RAM which is fed by DMA to a DAC. That table can be regenerated pretty fast with a different amplitude, so no analog "multiplier" is needed, and the sample rate can be tweaked to achieve a frequency match to the input.

• posted

We do that, all digitally. We digitize (or generate) the reference, do some math in an FPGA, and drive a dac per output channel, transformer coupled.

We use some commercial audio transformers in this one.

You could amplify/buffer the reference, drive a couple of MDACs, and then transformers. You could do the math in a uP, and use regular DACs, but you'd have to run it pretty often, 5 KHz or so.

• posted

[Does this imaginary LVDT monitor the position of an imaginary "control surface", by chance?]

These sound low -- by an order of magnitude -- wrt the devices I've used. Are you sure they will never need to be revised upwards?

You can buy 4, 5 and 6 wire LVDTs. Are you trying to design a generic solution that can be (externally) adapted to any of these 3 different configurations? I.e., consider how your two output "windings" might be wired externally.

Again harping on just how "generic" you want your emulation to be... do you know if the detector will use a synchronous demodulator or just ratiometric (excite/return or A-B/A+B)?

Also, have you considered the rate of change of input ("sensor position")? How quickly your "digital value" can be *expected* to change (in the environment you are emulating)? Or, do you just assume it always changes at a zero crossing and that stepwise change is small enough to not be noticeable in the decoder?

Presumably, the excitation is at a constant freq and that freq doesn't drift much over the short term (but, may, in fact, drift so you will have to track it continuously).

[And, of course, first cycle all bets are off -- unless you know the frequency /a priori/ from some other means]

Let the excitation drive the D/ACs' references so your D/AC output values are just fraction of full scale excitation

You'd want to drive both outputs synchronously and not risk letting one get out of lock-step with the other.

Depending on the processor being used, I'd actually consider doing the math ("digital value" * sin_lookup) in the output routine (buffered a sample earlier than needed so it appears at the D/ACs with no time jitter) so any effects of changes in input "position" are directly reflected to the signals generated.

This would also let you keep the sample rate constant and interpolate between table entries.

• posted

It's a bit puzzling; if this is to be an LVDT simulator, then two DACs will model two output coils, perhaps? But what about the stray inductance and perhaps DC offset sensitvity of the input coil? There's some nonlinearity in many magnetic materials, too, and that input load is going to be a variable in some small ways. In particular, there's an R-L current lag, and output follows the current OR voltage, or somewhere inbetween, depending on load.

• posted

I don't believe it is intended to be a (generic) LVDT simulator but, rather, simulate an LVDT in a particular application (so some other bit of kit can be exercised AS IF it was connected to the LVDT in the application with which *it* was intended to interface.

So, some liberties can be taken.

(it likely also won't *weigh* what the simulated LVDT would weigh but you didn't object to that...)

• posted

Sounds like simulating an LVDT is impossible. I'm glad I didn't know that.

• posted

How about an RVDT and a hobby servo?

If it's an actual product, an MDAC and two op amps maybe? (Depending on how 'floating' it really needs to be.)

Cheers

Phil Hobbs

• posted

snipped-for-privacy@highlandsniptechnology.com wrote

Thank you - obviously you have done it all :)

This is not a commercial product. It is a sort of hobby project although I might build a few of them.

And thanks the other too. All good stuff to think about. I am trying to do it without MDACs etc i.e. mostly in software.

Yes. It is to simulate a product which contains an LDVTs and takes in a 400-500Hz excitation waveform (which is supposed to be sine but is often a really crappy squarish one) which is referenced to GND.

The two output coils (phase and antiphase) are also GND referenced and the output of each one goes, AC coupled, to a voltage follower.

I do have the circuit diagram of the bit of kit which demodulates this stuff. It is basically a precision full wave rectifier which feeds an ADC. It contains a lowpass filter with a 10Hz corner so obviously this thing doesn't need to sense fast changes. The digital data determining the position of the emulated LVDT will arrive in packets at 50Hz or so. Even if I implement the full 50Hz, I need to regenerate the whole table in 20ms, which with 1024 values is 20us per value which is dead easy because I am using a 32F4 ARM at 168MHz with a single float multiply in 1 clock. And I don't need 1024 values; 256 would be plenty for a smooth output.

So, with reference to the input waveform, I need to generate a sinewave which ranges from max amplitude in phase, through zero, to max amplitude antiphase. But there is no "variable" phase shift - an LVDT (or any other simple transformer) can't achieve that.

I can see how this can be done with some MDACs and a few op-amps.

• posted

Phil Hobbs snipped-for-privacy@electrooptical.net wrote

It is an excellent point - the receiving thingy has its inputs GND-referenced, so floating outputs aren't needed. They can be single-ended.

• posted

Good point; one can use the input signal to modulate the reference input to a multiplying DAC, the digital input is just a gain setting that can be readjusted in leisurely fashion... no time lost in getting an output proportional to the drive, if you do it that way.

Coilcraft makes some loosely-coupled inductors, which would simulate and isolate output drive pretty well.

• posted

<snip>

How about a 1:2 transformer. Excite the 1 primary and put a pot across the 2 secondary. Use the pot wiper as if it were the LVDT centre tap.

Never tried it, it seems like it should work I think?

If it does, of course the pot could be digital.

• posted

Actually two secondaries in antiphase series.

• posted

No, that's nonsense too.

• posted

Version 4 SHEET 1 880 680 WIRE 448 64 240 64 WIRE 240 80 240 64 WIRE 448 80 448 64 WIRE 144 160 32 160 WIRE 240 176 240 160 WIRE 304 176 240 176 WIRE 448 176 448 160 WIRE 448 176 416 176 WIRE 448 192 448 176 WIRE 240 208 240 176 WIRE 144 240 32 240 WIRE 240 304 240 288 WIRE 448 304 448 272 WIRE 448 304 240 304 FLAG 304 176 0 FLAG 416 176 out IOPIN 416 176 Out SYMBOL ind2 128 144 R0 SYMATTR InstName L1 SYMATTR Value 1m SYMATTR Type ind SYMATTR SpiceLine Rser=1 SYMBOL ind2 224 64 R0 SYMATTR InstName L2 SYMATTR Value 1m SYMATTR Type ind SYMBOL ind2 224 192 R0 SYMATTR InstName L3 SYMATTR Value 1m SYMATTR Type ind SYMBOL voltage 32 144 R0 WINDOW 3 -205 53 Left 2 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR InstName V1 SYMATTR Value SINE(0 1 600) SYMBOL res 432 64 R0 SYMATTR InstName R1 SYMATTR Value R=time*1k SYMBOL res 432 176 R0 SYMATTR InstName R2 SYMATTR Value R=1k-(time*1k) TEXT 144 16 Left 2 !k1 l1 l2 l3 1 TEXT -174 310 Left 2 !.tran 0.999

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.