0
\$\begingroup\$

I am trying to make a Analog-to-Digital Converter for my MKS Type 250E Controller (data sheet). This would be the first time I've every attempted to make an ADC, as the company does not sell any. It is also an odd connector, with 14-pin SCSI connector... not an Amphenol connector.

Now, I have an Arduino UNO with 6 Analog pins, A0->A5, and I wanted to see if it is possible for it to both act as a ADC and connect it with Labview (along with a series of other serial devices that I have already interfaced with) to read the values.

I can probably find some Labview package for Arduino, so the main issue is the ADC. I've added an image for the Interface Pinout (the 14-pin SCSI connector) and I was wondering if anyone has any insight to physically connecting it to the Arduino, can I just straight take the wires, that I connect to the pin that I need, to the Arduino?

The pin's I think I will need are 1 and 8 (+,- of Setpoint) and pin 9. Would I also need to connect to one of the Grounds?

Thanks, in advance, for any help.

enter image description here

\$\endgroup\$
3
  • \$\begingroup\$ What signal are you wanting to feed into the arduino's ADC input. Max voltage, Min voltage, frequency etc.. \$\endgroup\$
    – Andy aka
    Commented Jun 1, 2015 at 17:45
  • \$\begingroup\$ The Set Point is 0-5V, 10V DC (into a >10K load). The Pressure Controller (pin 9) is a 0-10V DC \$\endgroup\$
    – Shahab
    Commented Jun 1, 2015 at 18:43
  • \$\begingroup\$ In the unlikely case you still need a bed time story that's certain to put you asleep: I have fixed my answer. \$\endgroup\$
    – Asmyldof
    Commented Jun 1, 2015 at 20:48

1 Answer 1

0
\$\begingroup\$

NOTICE:

When first posting this answer, the story was in most respects exactly the same, but a CircuitLab/Stack interaction or glitch effectively removed the middle bit. I have now completely rewritten and redrawn that. I hope the story line is still sufficiently there, since there was a 2 hour gap between the moments I had time to write.


No, you cannot connect them directly.

As you can see in your table all the signals go from 0 to 10V. Your Arduino (or, better: the Atmel inside it) can only work with signals up to a maximum of its supply voltage. Anything higher can damage it.

So, you need to attenuate the signal, so to speak, into something suitable. I am assuming you are using an Arduino on 5V, so take that into account if you are using it at a different voltage. (I will try to "show my workings" as much as possible).

The simplest way would be:

schematic

simulate this circuit – Schematic created using CircuitLab

Here the resistors stack up to 20kOhm together, so if the input is 10V (maximum) the resistors will pull I = V / R = 10V / 20000Ohm = 0.5mA out of the measuring device. The I = V/R is called Ohm's law. Also written as V = I*R and R = V/I.

Now that current, if the device can supply it will go through the bottom resistor, where we are measuring and it will induce a voltage: V = I*R = 0.5mA * 10kOhm = 5V, which is exactly what we want.

I leave it to the reader to verify that as drawn, the output will be exactly half the input voltage for each voltage applied.

There is two important things though:

  1. The ADC that you use should have a high input impedance (>100kOhm, preferably >1MOhm), for the Atmel/Arduino, that is satisfied. - But if you switch ADC channels quickly with the Atmel, give it a few microseconds time between changing channels and assuming the data is right.
  2. You need to be sure the voltage is never more than 10V.

If you aren't sure about that last one, or you think "better safe than sorry", you can make this modification:

schematic

simulate this circuit

Now there is a zener diode on the output, if the input tries to go to 12V, in stead of the output just becomming 6V, the zener will drain some current, to try and keep it at its specified voltage.

If the zener diode is a perfect zener diode, that would be great. In theory a perfect zener exists and starts conducting at 5.10000000001V and then also conducts infinite current, but conducts nothing at 5.09999999999V. Of course, reality is different.

A zener diode will start conducting a little bit below its specified voltage, stealing some of the current away that should make the measurement voltage across the bottom resistor. So at higher output voltages (say above 4V) the response will no longer be exactly divide by two, but it will be a very slightly bent curve.

The effect can be negligible if you use a small-signal zener, with its zener voltage defined at 1mA or 2mA.


End of the power-less (and very simple) designs, start of some more fancy tricks to be added on

((if nothing of the conditions above worries you, you can stop reading here if you fear you might fall asleep reading all this))


Now, there could be another question: What if the measurement device can't source 0.5mA? Or what if I don't know if it can? What if the device has a high output impedance, effectively adding another 2k or even 10k resistor, completely messing up the maths?

You could add an op-amp, if you also have a higher voltage supply, such as a 12V driving the Arduino (since that automatically also shares the ground with its internal 5V). Or a separate 15V adaptor, as long as it is a couple of volts above your input signal's maximum voltage. Only make sure that the supply voltage is below the maximum specified for your op-amp:

schematic

simulate this circuit The op-amp I added just buffers the signal, nothing else. It tries to get the same voltage on its - input as on its + input, when there is negative feedback, which connecting the output back to - is. So if the +input becomes 6V, the op-amp wants to get 6V on the - input as well, the only way it can do that is by making the output 6V. So too for any other voltage in its range.

I have decreased the resistors, because we can expect a modern op-amp to be able to source 1mA with a 2V higher supply than its desired output or input levels. If the supply is at least 4V higher (in this case >= 14VDC) it should always be able to source that in mid to low frequencies and most still at quite high frequencies (that the Atmel can't capture anyway).

1mA gives a better response with the same zener than 0.5mA, because the Zener will still try to steal almost the same current as before, but the effect across the bottom resistor will be only half as bad.

For this to work nearly perfectly at the 0V end you would need a rail-to-rail Op-Amp (they can be found by that name easy enough). But if you don't mind the lower 1V input range (lowest 10%) being distorted you can easily try with a normal one, like the LM358 and see if it can handle your requirements well enough.

The extra resistor (R1) isn't absolutely necessary, I just added it as a "in case the device at switch-on does something silly". If it does very silly stuff the op-amp might still not like it, but at least in this set-up it's much more likely your Arduino will survive it.


More ways to protect input and output

((yet more blabber))


Of course there are many other ways to handle input safety, you could add another zener diode valued at 12V on the op-amp's + pin, if you like, for example, but I suspect that's moving into the overkill domain.

You can also protect your output by adding a diode to VCC (the Arduino's internal power supply), which has one big advantage: If the Arduino's voltage falls, at turn off or because of a heavy load, the protection voltage will fall with it. The best diode would be one with a low forward voltage, such as a Schottky.

Schottky diodes aren't always the best choice, by the way, because they usually have a higher reverse leak current. But since we are working with a 1mA signal in the last schematic, the leakage would have to be more than 10uA to be really noticeable and most diodes rated for 20V or more, when blocking only 5V fall well below that. But if your signal current through the resistors is very small, this is something to watch out for.

It would look like this:

schematic

simulate this circuit

I left out the op-amp, because I'm starting to get a bit lazy. I suspect it's still clear enough though.

You can use the Diode and the Zener both, but it should be sufficient to choose one.


More buffering

((With two op-amps you get twice the cool, easily!))


If your op-amp (final drawing/option) comes with two amps in one box, like with the 358, you could put the second one to good use to get your signal more accurate, especially in the case of the zener diode:

schematic

simulate this circuit

I have left out the power supply to the amps, but again, laziness sets in.

Now the first amp, again buffers the incoming signal, then the resistors divide that neatly by two, but that signal is then fed into another buffering op-amp. Because the input of the op-amp leaks nearly no current, in this case we can assume it to be zero, even for the adjusted resistors. That is why I made them larger: Wastes littler power. The second amp is again just a buffer, doesn't do anything else, so the signal stays the same, but "gets stronger".

Because the zener will try to clamp the output, we do need a protection resistor to keep the op-amp from melting. But, since this resistor can be very small compared to earlier designs you will notice much less of the little leak below it's rated voltage.

Why else is this a cooler design?

Because the resistance between a decent source of voltage and current (the op-amp) and the Atmel/Arduino input is now much smaller, which means that if you change channels, you can wait only a microsecond or less for the signal to "arrive as is" at the internal ADC system. So you can switch a channel and start the measurement just about right away. The way Arduino will compile your functions it's very likely a 2us delay is already there, so definitely no worrying about that!

One problem though: Now the lower 1V of your 5V signal might get somewhat distorted, so while this helps the higher end stay neater, it will influence the lower end, because before it was the lower 1V of the input, which is 0.5V in the 5V output, or 10%. Now it has become 1V in your 5V output, which is the lower 20%, because there's also an op-amp in the 5V signal path that might not be perfect all the way at its lower supply voltage.

(I re-itterate, a rail-to-rail op-amp has those problems much less. If the signal isn't way too quick, you will probably not notice it. But with a normal LM358 or similar, which is not designed for rail-to-rail, you may notice some weirdness in the lower volt.)

If you want the op-amps to be as perfect as possible from 0V to 5V output signal, you will always have to power them with -2V to -5V on their negative power supply, in stead of the GND of the system, but that requires a whole extra supply voltage.

Conclusion:

All the solutions in the drawings can be used in your situation, each has its own set of drawbacks (extra supply wires, more components, less safety, more distortion, etc) and advantages and what you think you can build and feel sufficient is up to you.

\$\endgroup\$
4
  • \$\begingroup\$ Great, thank you for the in depth answer! I appreciate it. But it may just take me a day or two to implement it \$\endgroup\$
    – Shahab
    Commented Jun 1, 2015 at 20:52
  • \$\begingroup\$ @artyfrost I tried to make it additive, of course the safest solution isn't the very first one and each has drawbacks, but in a way you could stop reading at any point. Every schematic here has been implemented in a device sold on a market somewhere at least a couple of times. \$\endgroup\$
    – Asmyldof
    Commented Jun 1, 2015 at 20:55
  • \$\begingroup\$ Thanks a lot for your help. Although I used the first option as a prototype, it worked great!! I can't thank you enough. \$\endgroup\$
    – Shahab
    Commented Jun 2, 2015 at 20:59
  • \$\begingroup\$ @artyfrost No worries at all. I seem completely incapable of short answers, but at least you have some trying options left now ;-) \$\endgroup\$
    – Asmyldof
    Commented Jun 2, 2015 at 21:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.