As per the title I am trying to control a mechanically driven car speedometer with a motor, I'm assuming either stepper or BLDC.
I have searched and found several projects similar to this but none I've viewed have reached a successful conclusion; they typically fizzle out.
This is a 'classic' car which has a speedometer driven via a cable the gearbox, the gauge is the typical rotary needle type.
My reason for doing this is because the gearbox and final drive have been changed so speedo’ no longer accurate.
Before I get involved with coding issues (I'm expecting a few!) I want to work out what type of motor (if any) would be suitable.
Having done some testing on the speedometer I’ve found that following
Input RPM Speedo’ reading (MPH)
150 10
1350 100
2650 200
I don’t really need to run up to 200MPH, this is just the maximum reading of the speedo’, if I could run up to 100MPH/1350RPM this would be good enough, with the style of car I don’t want to go faster! The car would probably top out at around 130MPH which would require 1700RPM.
The spindle of the speedo’ offers very little resistance hence torque requirement is very low, so low I don’t even have any way to measure, spins easily between finger and thumb.
I have an understanding and a little experience with stepper motors so this would be my first choice, but my understanding is that these have limited high RPM capability and are not recommended for constant RPM. So the first thing I’m looking for is a recommendation for a relatively small stepper which can be used at up to 1350RPM or higher and will allow constant rotation. Alternatively, a good source of specification documentation as I’m struggling to find this type of figure online.
If a stepper is not practical my next choice is a BLDC, I’ve never worked with these but have had a look into them and it seems I may run into issues getting low enough RPM, most I’ve seen seem to be rated in the 1000s and I’m struggling to find any information on how low they can go so, again, any recommendation or link to source of information would be appreciated.
This is probably an "eddy current" type speedo - input shaft spins a magnet which couples to a conductor through its lines of force. At it moves eddy currents are induced which try to "drag" the conductor after the magnet. This torque acts against a spring so the needle eflects more the faster the input shaft.
There's no reason why a stepper can't run continuously except that they get hot, but more importantly are horribly noisy! 1700rpm = 28rps x 200steps/rev = 5.6kHz. You could use a NEMA 08 or 17 type but you would have to live with it screaming in your face while you drive.
You might consider an ordinary dc motor, the only problem is brush life but if you spend a bit more on a decent "servo" type motor it could last quite a long time. DC motors are easy to drive using PWM at variable speed, speed is nearly proportional to applied voltage so should be easy to calibrate.
Longest life would be a "brushless servo" motor, not the kind of thing used in model planes but more in servo drives for machine tools. These have to be able to run at very low speeds as well as high. I'm fairly certain there will be drive chips around for them.
Or you could dismantle the speedo and replace it with a small stepper motor driving the needle direct .
I’ve thought of a similar thing and thought of using a geared dc motor with an opto pickup so I can control the rpm according to the speed I want to display .
A stepper might not be quick enough .
There are companies which recalibrate your existing speedo , or the there maybe an alternative driven gear for it .
Hi Jhaine, thanks for the feedback.
The description you've given of the speedo' is correct as I understand it.
Stepper motor
In terms of the stepper motor I think the heat may be more of an issue (to me) than the sound, this is an open cockpit car with 4L V8 engine using minimal silencing so there is already plenty of noise present although I do take your point and it would probably better not to be there.
At the moment I'm treating the stepper as my 'fall-back' position, the more I look at it the more I'm beginning to think it is not an 'elegant' solution, not really the correct thing to use, I also think it may be the more complex to code when I get to that.
Ordinary DC motor
I must admit I'd discounted this option as I'm not sure how accurate or repeatable it would be (although I've been surprised before). I'd also not be too happy about brush wear although, as this is an occasional use car rather than a daily driver it would be unlikely to be a problem.
BLDC
I've been doing a bit of reading on these this afternoon, I still have many blanks to fill in and would have to find a suitable candidate motor but, at least at the moment, this feels like the most appropriate solution as long as I can get the RPM range I need. I see that they can be driven in FOC mode at very low (including zero) RPM but I'm not sure if this would then allow the upper RPM I'm after, still a bit/lot more reading to do. Again I still need to identify an appropriate motor. I do have one of these sitting on my desk but I believe it is a drone/model aircraft oriented style so may not be suitable.
Thanks Hammy, I did think of this route but don't really want to canibalise a good unit. Then I thought "If I'm going to do that why not simply get a disk of metal, mount a motor behind driving a needle and fit it in a case" that way I could keep or sell on my current unit. But then I though "Well if I'm going to do that why bother with a mechanical unit at all, simply fit a display into a case and model a speedo face on to it". There would be other advantages to this such as being able to show whatever information I would like (including Sat Nav) and I may look into this further down the line. It would be a more involved project as it would really need doing the same with the Tachometer and ideally the 3 other gauges so possibly for the future.
All in all I need to set some scope parameters and I've decided that this project is to drive the existing speedo' unmodified. The other advantage is this would be a more generic solution and I'm aware of a number of people in a simlar situation who I could help out.
One other thing is if I drive the speedo needle directly I'd have to also take care of the odometer which I know is do-able but I'd rather not at the moment.
I'm aware of the possibility to re-cal' my speedo' but I'm likely to change other things further down the line and the ability to tweak at will is also in my plans
Thanks JCA34F, speed reduction or increase via wheels and belt or gears could be part of the plan also but I still need to identify a suitalbe motor, I'd rather not do this if I can avoid it though as I'd like to keep the assembly as simple as possible.
I may be trying to solve a problem which doesn't actually exist!
Thanks for your advice GoForSmoke, I accept that it is well intentioned but please accept that I'm extremely responsible and would not do anything which would be likely to result in harm to anybody.
In any case the only way I can see a speedometer modification causing a problem is if I got the reading wrong resulting in me travelling faster than indicated and getting a fine/points for that.
Any change I make will be thoroughly tested and proven with GPS so I don't foresee any court cases.
I appreciate your input GoForSmoke, let's just say for the moment I want to see if I can do this, when that's sorted I'll examine whether I should.
If you were aware of the constructoin of this car I suspect the last thing you'd be questioning is the speedometer!
First thing is determine minimum RPM that will allow the needle to just start moving off the zero pin (will prob'ly be greater than zero), then the RPM for 125 MPH.
That will give you a "span" like 50 to 1 to work with. Span = max / min.
I've had my share where the wreck I might have caused would be my fault for taking it out!
When you mod a vehicle, the maker no longer has responsibility 'when a lawyer gets involved'. Lawyers do to sense what I do to food. I can't help it, it's all money-power-excuses.
Hi JCA34F, I've run the speedo' on a CNC lathe spindle to read at 10MPH increments, I've given spindle RPMs for 10, 100 & 200MPH in my original post, I can supply the full list if that helps. This is how I've determined that I need a 150-2650RPM range to allow the full scale of the gauge. The needle actually starts moving as soon as the input spindle does so if I could get down to, let's say, 10RPM even better but at speeds below 10MPH I'm not really too interested in what the speedo' is indicating. Obviously if I were using a stepper I could control speeds in the low range.
Likewise the high RPM does not really need to go up to 2650 as the car is not capable of 200MPH and if it were I would still not be looking at the speedo' at that point!
If I could read up to 130MPH this would cover the top speed of the car but if I could only manage to 100 it would be acceptalbe as I'm unlikely even to venture that high and on any public road in the UK that's already breaking the limit by some margin!
So the overall ratio would be around 20:1 (150*20=3000), actually closer to 18:1. The scale is slightly non-linear which should be controllable in software but that's fine detail which can be tweaked later on.
So, if you had a BLDC motor with a top speed of say 5kRPM a 2:1 reduction would get you down to 2500 and I would think a decent motor driver could manage a low speed of 200 / 100.
JCA34F, I guess that really gets back to my original question regarding lower speed BLDCs. I'd rather not have to reduce the speed so ideally I'd like a motor which would max out at 2500RPM but be controllable down to 100 or 150 but I don't know if such a motor or controller is available.
I also don't quite understand how the speed is controlled, on the one hand I'm reading that it is down to the voltage supplied and the KA figure but that doesn't seem to align with the PWM switching duration which is what is controlled in the software.
It makes me think the voltage will control how fast the motor will move between each coil switch but the switching frequency would control the overall speed. But that would imply that the motor would move in a series of pulses, not unlike a stepper motor, so I'm assuming I'm missing something there.
Then I've been reading into FOC control which seems to indicate that the motor can be controlled down to zero RPM where the spindle would be (loosely) clamped, in many ways this is similar to a stepper and, as long as this would still allow higher RPM would appear to be exactly what I need.
If that's the case all I need to do is find a suitable motor and controller. Got to hate it when a sentence starts with 'If' though?
The PWM freq is prob'ly the switching speed of the output transistors and that will produce an audible whine when running.
If you can get one up in the 16kHz range or above, that will be above most people's hearing range.
JCA34F, from what I can tell the PWM frequency is 50HZ (20msec period), the speed is controlled by the duty cycle which is 1-2msec. I'm going to have a play with the motor and controller I have on a breadboard and see what I can get out of it, once I get some kit wired up and see what it will/won't do I should better understand.
You are I think looking at ESC type speed controllers made for RC applications which is not what you need for the type of bldc motor I suggested. They are all essentially 3phase motors and the controller needs to generate 3 phases at variable frequency, the speed being set by that frequency and the number of poles. I think Allegro Microsystems make driver chips for bldc motors, check then out.