The initial efforts for piezo control were "Open Loop" where no position feedback was employed. The results were quite good and operation very smooth an monotonic in one direction. This would satisfy almost any macro use and user requirement when teamed with a small computer or in my case the Raspberry Pi.
For "Closed Loop" operation a means for position feedback capable of resolving sub-micron levels of movement are required in addition to dealing with the highly complex multiple interfaces between the electronics, piezo elements, feedback sensors and mechanical flexure mechanisms. For those interested in Control Theory, the open loop equations would fill an entire page, and closed form solution for these in "Close Loop Operation" format is almost impossible to solve. So computer simulation becomes an important tool in analyzing these devices in Closed Loop arrangement to allow stable operation with high precision, resolution and repeatability.
Piezo elements have a complex "memory effect" which basically means they remember where they've been, and applied forces and voltages all play into this memory which creates a hysteresis effect (similar to backlash) which would be detrimental for our use. To squash this memory effect an ultra-high open gain loop is employed which will integrate over the memory and reduce it's effects to noise levels. Another issue is the multiple resonances between the mechanical, piezo elements and electronics, these can and will cause severe instability if not dealt with properly in the control loop. The piezo elements have a very high capacitance, many microfarads, which is highly non-linear with extreme hysteresis and mentioned memory effects. The driver amplifier must be stable and capable of driving such a load, conventional amplifiers will oscillate under these load conditions and must be avoided.
In additional to all these issues, at nanometer levels the effects of system noise much be considered and how it impacts the final position of the stage. This requires very low levels of thermal noise design as well as dealing with the other sources of noise such as power supplies and voltage references. The position sensors are strain gauges attached to the mechanical flexures which only produce a millivolt or so differential output full scale with a common mode voltage of 2~3 volts. This requires a high gain, precision, fully differential with very high common mode rejection (CMR) feedback amplifier to raise this position voltage to a more reasonable level of a few volts to feed into the control loop.
So a daunting task is ahead for operation in Closed Loop fashion, and normally would just be avoided and these devices used as Open Loop systems. However, obsession with precision and the never concede mentality of scientists and engineers prevails and efforts have pushed forward in spite of these obstacles!
Computer models have been developed for the various sections of the Piezo Stage, and good approximations for the electronics been created and simulated. Initial simulations seem reasonable and loop behavior predictable.
Just to verify that things are not too far off a quick setup was kludged together to "see" if things appear to be in order since the latest 2 closed loop PCBs are in fab and should be here in a week or so. This setup doesn't have ground isolation, high resolution DAC (only 12bits which will be augmented to 20~24 bits) and other precision components and is just a quick setup on a Wemacro Vertical Stand operated horizontally sitting on a cardboard box next to my desk. The Piezo Stage has a laser printed random pattern paper attached to a old SD card with double sided sticky tape, held with an alligator clip. I wrote a quick routine in Python to sweep the Piezo Stage and trigger the camera shutter. The camera is fixed and not moved other than to achieve coarse focus horizontally.
The subject is raised by the Piezo Stage vertically in Y axis and the images were imported into Zerene which used the Align All Images and Save Registration Parameters (thanks for pointing to this Rik!). Then the text file is imported to Excel and a graph created.
I can't run the entire ~100um range of the piezo stage as my kludge setup can only control ~40 microns.
Here's the 1st run of ~39um total range with ~40 steps.

2nd run of ~1um total range with ~50 steps

3rd run of ~200nm total range with 25 steps, yes 8~10 nanometer steps


More to come when the new PCBs arrive, and hopefully these graphs will look even better with a 20 + Bit DAC, proper ground isolation and so on, but for now this is an encouraging start IMO.
Best,