99 000 RPM Contact-Less Digital Tachometer: Featuring LCD Display and Automatic DATA Hold Function
99 000 RPM Contact-Less Digital Tachometer: Featuring LCD Display and Automatic DATA Hold Function
Overview
This article describes how to build a
contact -less tachometer (device used
to count the revolutions per minute of
a rotating shaft) using a 8051
microcontroller and a proximity
sensor.
Important: this tachometer uses a proximity sensor. In case you don't know
how to make a proximity sensors, and/or how to operate them, please refer
to this article first.
To understand how a
micro
controller counts pulses, and deduce the frequency of those pulse, please refer to
this tutorial about building a frequency meter, that elaborates the process of
frequency counting.
The main difference between this tutorial about tachometer and frequency meters,
is that we need the reading in pulses per minutes (to count revolutions per minutes),
but in the same time, we don't want to wait a whole minute before getting a correct
reading. Thus we need some additional processing to predict the number of
revolutions per minute in less than a second.
The part in the blue shading is also standard in any 8051 microcontroller circuit,
which includes the reset circuitry along with the crystal resonator that generates the
clock pulses required.
The switch SW1, shown in the upper yellow circle, is used to enable/disable the
measurement or the counting process. When the switch is pressed, the device
measures the RPM of the shaft under test, and constantly updates the reading on the
LCD, when the switch is released, the last reading is held unchanged on the display,
as long as the device stays on. When the switch is pressed again the old reading is
replaced by the new one.
The wire connection P1, which is connected to the output of the sensor, is connected
to the pin 3.4 of the microcontroller, this pin has a dual function which is to count
incoming pulses and increment a 8, 13, or 16 bit register according to the
configuration of the timer T0.
As you may have noticed, this schematics misses tow important items to be called a
tachometer: The C code loaded into the microcontroller, which will be discussed
later, and the proximity sensor, which will feed the pulses to be counted.
This schematic show the slight modification over the one proposed in this tutorial,
which is the fact that the emitter LED uses a current limiting resistor of a higher
value, to allow it to be turned on for a long period of time, because in this specific
application, we need to turn the IR emissions on or off, but we don't need to inject
high currents to reach high ranges... I recommend the reading of this article that
fully covers all the aspects of this sensor.
The CTRL line, is an input coming from the microcontroller (at the wire connection:
P4), turning the IR emissions ON and OFF, and the OUT line, is the output of the
sensor, which is fed to the microcontroller (at the wire connection: P1).
After analyzing both the main board holding the microcontroller and the sensor, here
is a simple
diagram showing how
they are connected
together. You will have to
refer to the above
schematics to see where
P1, P2, P3 and P4 goes in
the main board, as well
as the other lines
concerning the sensor.
The software
Here are only small relevant parts of the full C program, that was loaded into the
microcontroller after being compiled to a HEX file. Those part of the code were
selected as the ones that emphasize the main purpose of a microcontroller in such
an application. For examples, function dealing with the LCD operation are not
included in this description. Comments in green explains the program. The full code
is available in the Project folder, downloadable at the bottom of this article .
#include <REGX51.h>
#include <math.h>
void main(){
scale = 10 ;
P3_3 = 0; // ini proximity sensor, OFF
P3_4 = 1; // ini sensor input
P1_1 = 0; //turn LCD backlight ON
P2_0 = 1; //ini count/hold button
ini_lcd(); // ini the LCD
setup_interrupts();
while(1){
P3_3 = ~P2_0;
if (P2_0 == 1){
scale= 4;
}
}
}
To understand the functioning of this source code, you must have some basic
microcontroller and C language skills.
The variable scale is used to control the rate at which the tachometer reads and
resets the counter.