Voltage Sensing Circuit

I've decided to use a BMW i3 LIM to manage the CCS Fast DC Charging handshake. There are other solutions, but in comparison they are expensive, or require lots of software development, or the company doesn't reply to my requests for information.

The LIM is mostly self-contained: You hook it up to the signals it needs, the charge port, and it does the rest. You do need to give it information about voltage present on the charging side of the Fast DC Charging contactors, which isn't 100% straightforward for safety reasons. This post is about figuring out the right way to give the LIM the information it needs.

So, first to our task: Create an analog circuit which takes 0-500V and creates an isolated voltage between 1.42 and 4.8v with a linear response. There are a few different ways to accomplish this, but I chose to use a part from TI which keeps the part count to a minimum, the AMC3330.

The AMC3330 is a precision, isolated amplifier with a fully-integrated, isolated DC/DC converter that allows single-supply operation with an input optimized for directly connecting to high-impedance, voltage-signal sources like resistor-divider networks to sense high-voltage signals.

... perfect.

This is what we have to work with: Output vs Input AMC3330

If we read the datasheet, we learn that the AMC3330 is "happiest" (read: most linear, least distortion) between 0 and 0.725V of differential input. So we need to create a high-impedance voltage divider which turns 0-500v into something that the AMC3330 is happy to read. A bit of resistor math yields a divider with 560k and 1k1 ohm. I added an additional 200k ohm to ground for extra impedance so that the total impedance is ~750k ohm, which would result in a total of 0.44 mA current (aka, nothing).

Next, given we know the input to the AMC3330 will be 0v - 0.722v, let's figure out what the output will be. Figure 6-8, above, shows a summary: The outputs will both be 1.45V when Vin = 0v, and they will diverge to Voutp = 2.22v and Voutn = 0.77v (a differential voltage of 1.45v) at Vin = 0.722v. We need to turn this into a single-ended (referenced to 0v) signal for the LIM. To do this, we use a rail-to-rail op-amp, the TLV9001. We want to shift the signal up by 1.42V (so 0v -> 1.42V) and scale the output to max at 4.8V (so 1.45v -> 3.35V. I was never really good at analog, so I opened up the trusty Falstad Circuit Simulator to try some resistor values.

Falstad

After roughly recreating the AMC3330 input and output (left side), I set up a circuit with the TLV9001 on the right side. The simulator confirms that with 500Vin, Vout=4.807V and with 0Vin, Vout=1.415V. According to Wolfram Alpha, that's within 0.005v of correct across the entire range. You can play with the simulation yourself by clicking here.

Final Circuit

Here's the final circuit (the resistor values are those from the Falstad circuit, mapped onto 5% resistor values which is why there are a few in series in places).