Identifying (and hopefully controlling) a motor used in a car dashboard

Hi everyone!

I'm trying to build a GPS-controlled Speedo, and I'm using an Arduino to do it. I've got all the GPS reading and decoding working ... but I'm having some difficulty with the actual display.

The speedo is going into a rebuild of a classic truck, and my father-in-law (who is doing it) wants the speedo to look authentic - so a digital display is obviously out! :slight_smile:

Instead, I've found a dashboard from a Rover, and have extracted the motors that move the speedo and rev-counter needles, with the intention of driving them with the Arduino.

I've attached a picture of one of the motors. I was hoping someone would be able to help me identify it. I'd assumed that it would be a bipolar stepper motor, but after wiring up an Arduino with a SN754410 H-bridge I'm confused. There are no serial numbers on the motor, so I have nothing to Google for.

I'd assumed it was a bipolar motor, because of the four connections. But after some experimentation, I've noticed that it only needs two of the connections in order to move. I started with the stepper_oneRotation example.

It behaves like this:

  1. During the delay() part of the program, the needle settles about 1/3rd through its range.
  2. When myStepper.step() is called, the needle tends to drop a bit. It doesn't seem to matter whether it is in the clockwise or anticlockwise part of the program.
  3. Back to the delay ... it returns to 1/3rd position.

I'd wondered if it might want something as simple as an analogue voltage across it (like a VU meter) ... but on wiring it directly to a lab power-supply, I've found it doesn't seem to move proportionally to the voltage increase. It rises quickly in the first couple of volts, then makes little progress afterwards.

Has anyone come across one of these before?

I suppose you could call it a stepper motor but it's only one step per revolution.

Take a look at the MC33977 "gauge driver" and the signals it sends to the motor. You might be able to replicate it with four pins on the Arduino.

This type of instrument is known as an air core guage

There are two coils mounted at right angles.

If you pass a current through either coil, a magnet attached to the pointer will align itself with the magnetic field produced by that coil.

If you pass current through both coils, the magnet aligns with the resultant magnetic field. By varying the two currents, you can vary the direction of the resultant magnetic field.

To move the pointer to a particular angle, you have to feed one coil with a voltage that is proportional to the sine of the required angle, and the other with a voltage that is proportional to the cosine of the angle.

Note, that both the sine and cosine of an angle have a range of values between +1 and -1 so you have to be able to supply voltages of both polarities to the two coils.

There are ICs dedicated to driving speedometer/tachometer guages such as CS8190.

Many thanks to you guys for responding! Your description explains why the needle moves a bit using just two of the connections, and why simple voltage adjustment doesn't make any difference.

I'm having difficulty finding a supplier of that 8190 in the UK, though. It seems that particular model is discontinued. I'll keep looking (it doesn't help that I need DIP rather than anything surface mount, because I have fat fingers).

Thanks chaps!

Do you have a small, dual motor driver like an L293D available? Like the datasheets for the two chips show (and John just mentioned) it's just a matter of driving one coil with a voltage proportional to the cosine of the desired pointer angle and the other with the sine of the angle.

Since the current through the coils of these motors is quite low (tens of milliamps) you can also drive it from the Arduino pins directly - no motor driver - but you'll need eight flyback diodes in order to protect your Arduino pins from inductive spikes. I found a post by MarkT with a schematic demonstrating the layout to protect your pins. That post was pertinent to a tiny stepper motor but it's identical to what you'd use here.

You might check out this page. An Arduino breakout board to convert analog guages to stepper motor.
You can also buy just the board and the stepper motors are available on E-Bay.

You'll note each coil is in two parts - this is the Helmholtz arrangement that gives a nearly
uniform magnetic field between the two parts of the coil. Thus the area between the 2 coils
should give a reasonably constant field at an angle given by the arc tangent of the ratio of
currents. Thus you drive the coils with signals proportional to the sine and cosine of the angle
you want. As they are air-cored you'll probably need a high PWM frequency