Hi Guys,
This is only my second project using arduino, so any help and advice you can give me would be really welcome.
Basically I want to control the speed fairly precisely of a Universal motor from a washing machine running on 240V AC. In the past I have made and used a simple triac controller to do this, but the speed regulation is quite poor under heavy load (I am using it to drive a lathe spindle).
What I want to do is take the signal coming from the tachometer that is on the end of the motor (washing machine motors seem to typically come bundled with these) and make sense of it with the arduino. Doing this on its own, would be quite cool as a spindle speed calculation and display should then be quite easy. Question is, how do I have to treat the signal from the tacho before feeding it in? From measuring it with the multimeter I can see it goes up to about 20V with the motor spinning fast (although the current always stays very low), so presumably I would need a voltage regulator of some kind? Or would a simple resistor do?
I am guessing that it may be best to use the pulse to trigger the gate of a transistor and use that to give nice clean 5V pulses that the arduino can count? But what kind of transistor to use?
From what I have read the taco is likely to provide 8 pulses per revolution of the motor shaft. Considering the motor can spin over about 20k RPM (it has a large reduction gear on it so the lathe spindle speed is a fraction of that) that’s a lot of pulses...
I have had some success in using the arduino to control the triac circuit, by replacing the POT with a photo resistor which is paired with an LED I vary from the arduino. So once I can reliably read form the tacometer I can then start thinking about using the information to provide feedback for speed regulation.
Any help most welcome!
1: Rectify and filter the AC from the Tach and use a pair of resistors to get the DC voltage into a safe range. Use an analog input to measure the DC voltage.
2: Amplify and clamp the AC and measure time between pulses (rising edges). You could use an interrupt to measure the time.
It's not clear to me which solution would be the best for you.
Hay John, thanks for the reply. Its not clear to me either :~
I think that the tachometer is usually used with its frequency. I am not sure, for example, that the voltage would rise proportionally with the RPM - making the first option difficult.
So amplifying and clamping the AC... Can you give me any clues or point me towards the basics of a circuit?
Thanks again, Bongo.
umm, I don't think so but am not sure :~ ? Would the meter read varying voltage if just the pulse frequency was increasing? If so how can I test this without a scope?
If you can force the motor to run really slowly and it is a PFM signal on the output of the tach, you may be able to see the meter swing back and forth between zero and some voltage. It will be easier to see on an analog meter. - Scotty
It would be nice to get a 'scope on the tachometer output to see what's going on. If you can figure out how to resolve the output into a pulse train, you could take the approach of feeding this into one of the hardware counters and then use a software loop to simply sample time counter at intervals. The hardware counters can count very fast indeed. Here's a really thorough write-up that mentions how to use the hardware counters: Advanced Arduino: direct use of ATmega counter/timers
Thanks for this. Yep, I am certainly stuck at the 'resolving the output into a pulse train' stage.. If anyone could give me any pointers, example circuits that would be very helpful.
Do you have a manufacturer and part number for your motor? Have you tried looking it up for specs?
Are you able to dissect the tachometer part at all to look and see what's in there?
Thanks for the reply. I have tried, yes. No luck I am afraid. I am just swamped with spare parts suppliers, and am not getting anywhere finding a datasheet of any kind. Dissecting the tachometer looks kinda difficult, unless I crack open the whole motor.
After a little more research it looks like maybe I should be rectifying the signal, then running it through an opp amp (like the 741) and a voltage regulator. Would something like that give me a pulse train that arduino could read?
Given that you are not looking for a high precision RPM signal and have a lot of problems to solve before you can use the motor's built-in RPM output, it might be more pragmatic to add a separate sensor. It would only take a dab of paint on the shaft and an optical pickup.
Can you tell us the make and model of washing machine motor your talking about here. I always considered washing machines to be simple devices until I saw this http://cache.freescale.com/files/microcontrollers/doc/ref_manual/DRM110.pdf so I figure without knowing what the motor is we have almost zero chance of figuring it out.
Maybe I'm a little bit too late, but here is the schematic for coupling the tacho generator signal to a microcontroller (from a Samsung washing machine). And if you want to controll the speed of that motor using a triac, I post the zero crossing detector from the same Samsung.