Hard drives report their RPM via word 217 of their 512-byte Identify Device data block, but nowadays Western Digital obfuscates the issue with its Intellipower marketing speak. Intellipower drives have a zero in word 217. Therefore we need to detect the RPM by other means.
The best method I have been able to find is to examine the spread of data points in HD Tune's read or write benchmark graphs. AISI, the total access time is the time required to seek to the target track, plus the time required for the target sector to appear under the head. The rotational latency can vary from 0 msec up to the time required for one complete revolution. Hence the width of the access time graph must correspond to the latency of one rotation. For example, a 7200 RPM drive would have an 8 msec wide access time graph.
Here are more HD Tune results which show how RPM affects access time:
WD15EADS-00P8B0 - 5400 RPM ? (11 msec)
ST32000542AS Barracuda LP - 5900 RPM: (10 msec)
WD2001FASS-00U0B0 - 7200 RPM: (8 msec)
WD5001AALS-00L3B - 7200 RPM: (8 msec)
WD1500HLFS-01G6U0 - 10K RPM: (6 msec)
ST3600057SS - 15K RPM: (4 msec)
Here are benchmark results for various makes and models:
The following article shows how to measure the speed using a microphone, soundcard, and Fourier analysis software: