The STM scanner can be calibrated from atomic resolution images, since the distance between atoms is well known. For the Z-axis, I’ll use this scan that I’ve taken of a gold surface:
Although I’m not able to resolve individual atoms in metals, I can easily resolve height differences between larger atomically-flat planes, as shown in the image above. Here’s a plot of the sample topography taken along the line shown in the image above:
Ignore the x- and y-axis values, they aren’t yet calibrated so they’re wrong! I first leveled the image by leveling one of the atomic planes, so as to align the atomic planes horizontally. There is some noise in the image though, making this procedure somewhat inaccurate. This won’t be a precise calibration but it should at least give us a reasonable estimate of the Z-axis displacement.
You can count the atomic steps in the graph and (perhaps more easily) in the image. There are 9 of them along the line, and the height difference between the top and bottom is 210 LSBs at 16-bit resolution.
I don’t know the crystal orientation of this particular surface, but the step height should be close to 0.24 nm regardless, which puts the Z-axis displacement at about 670 nm (or 34 nm/V), quite a bit less than I had expected. This wasn’t a very precise measurement though since there isn’t really a large enough plane in the image which I could use to accurately level the image. Maybe I’ll repeat this sometime with a smaller scan.
The horizontal axes can be calibrated with HOPG at atomic resolution. The scan below was taken in constant current mode. I gaussian filtered the image to get rid of some high frequency noise, and plotted the height profile across a line of 11 atoms. This line is 106 LSBs (at 16-bit) long, and the distance between atoms along this direction is 0.246 nm. This puts the horizontal scanner displacement at 1670 nm, or 83 nm/V.
Here’s the same image with scale information: