stepper position calibration

Tachometers and speedometers on contemporary vehicles are often driven by stepper motors. On startup they go through a self calibration to find a known rotary position. I'm trying to find out how that is typically done. There seems to be a few possibilities:

  1. Drive the needle to a stop at max scale reading and somehow determine when that stop is hit (read motor current or what?)
  2. Use an electrical contact at some point on the scale
  3. Detect the position optically/use an encoder.

Anyone know how this is done?

Thanks.

Yes all three are used. 1) Just step the motor, the end stop will stop it from moving, then step back and you have your reference. 2) Use a micro switch to detect the position of the shaft. 3) Use an opto slot.

Thanks for the quick response.

So, if I command the motor to step forward 360 degrees and wait long enough for it to do that I can be sure it has hit the stop. Then I have my reference. That sounds simple enough but it requires that the torque doesn't tear off the indicator needle.

Yes that is right. Some CD drives have a mechanism that allows rotation against an end stop without stalling, it sor of just clicks.

and wait long enough for it to do that

Normally when you give a pulse the controller does the pulsing so your program will not have to wait.

mbohn: Thanks for the quick response.

So, if I command the motor to step forward 360 degrees and wait long enough for it to do that I can be sure it has hit the stop. Then I have my reference. That sounds simple enough but it requires that the torque doesn't tear off the indicator needle.

No, the Needle is not the stop, the stop is hidden behind the panel and attached to the motor shaft and the motor frame. The needle is just there for looks.

I tried first the hitting-a-stop method. This worked but eventually the fine pointer I was using (as an indicator rotated by the stepper) broke off, likely due to the repeated impact with the hard stop.

I replaced the needle with a more robust one but found that the added mass hitting the hard stop made it very difficult to get repeatable stops.

So I replaced the hard stop with a limit switch. I think the limit switch is a much better choice, especially if you need to precisely locate the rotary position.

BTW, I never mentioned my project. I've built an accurate outdoor thermometer and use the Arduino to drive an analog temperature gauge. The sensor (AD590) is inside a triple radiation shield with forced air ventilation.

Well done for getting it going. :)