Logic level conversion for servos

logic-levelpwmservo

I'm trying to spy on the state of servo communications with a RC receiver and optionally change the output. Unfortunately my controller is 3.3v while the servo logic is ~5v. I'm trying to figure out what the easiest way of doing this is.

The circuit I've come up with is as follows:
reciever -> translator -> mux (translator/controller) -> translator -> servo

Does this make sense and will it maintain a reasonable level of signal integrity?

I know the Ardupilot does something similar but as far as I can tell, the whole device operates on 5v so no logic level shifting is needed

Best Answer

I would start off by converting your 3.3V signal to 5V. This can be fairly easy, depending on the input impedance of the servo's control line.

If you have several lines to convert from 3.3V to 5V, I would look for a single-chip solution. For example, the 74HCT244 is an 8-channel buffer with TTL input thresholds. A logic zero is an input voltage less than 0.8V and a logic one is an input voltage greater than 2.1V. This fits nicely with your 3.3V signals.

Note that the level translator chip is powered from the 5V rail.

If you have only a few channels (or only one), one simple method is to use a small N-channel MOSFET and pullup resistor as a non-inverting level shifter. You do this by connecting to MOSFET gate to the 3.3V rail, the source goes to your 3.3V signal, the drain goes to a pullup resistor from the 5V rail. Obviously, the 5V signal comes from the drain.

schematic

simulate this circuit – Schematic created using CircuitLab

This is inexpensive and can be very tiny - only two components per channel.