Depending on your expectations for dimensional accuracy, there are several steps to take. Each one is progressively more advanced. I personally have not gone through them all. What I have done may be of some use however.
One of my earliest cripes for accuracy was the Z axis. It still remains the most difficult to control.
I'll address this issue first.
What I found to be the biggest culprit (IMO) is deflection of the tray. This is related to how the ember is designed and the resin viscosity. It also is the most apparent in the first few layers.
Before getting into the meat of my message, I find the following calibration routine is an important step for Z height accuracy: (first layer Separation Speed set to 1 RPM)
1. Remove most resin from the tray
2. Squeegee all resin off the PDMS window.
3. Put a few SMALL drops or lines of resin on the window, enough that the build head will press flat easily with no excessive resin squishing out.
4. Start the calibration routine.
5. When the head stops, lossen the lock screen to drop the head.
6. Press the head down a little and feel it jam in place.
7. Tighten the lock screen and close the door.
8. Press done on the front panel. The tray may jam, but should unstick itself.
9. Open the door to stop the cycle before it returns for the next layer.
10. Fill the resin tray and close the door.
This gives you the thinnest possible first layer. Without this process I find the first layer is always 2x to 4x thicker than desired.
Now for the rest...
What is happening is the each time the build head comes down into position it is basically a hydraulic ram. With the tray being supported by a catalievered aluminum plate, each time the head comes down and presses into the resin, the whole thing deflects down. It will slowly return to equilibrium as the resin is squeezed out through the sides.
You may notice there is a relationship between surface area and resin viscosity. The closer you are too the build head (first few layer) or the larger the cross sectional area of the slice being exposed is, the longer it will take to squeeze the excess resin out.
For the burn in layers, I increase the ApproachWait times to over 20 seconds usually. I do the same to the Model Layers if the model has large cross sections. Obviously this makes the print take alot longer. The more thick slices in your model, the longer it will take.
I did write a bit of code in Processing that looks at each layer, calculates the amount of white area, and applies a dwell factor for each slice. It's not perfect, and I haven't been back to it in a while to fine tune the value. Optimally I would input the viscosity value and have it adjust the dwell based on that. Maybe when I have nothing better to do....
However there is one thing I did recently that has helped tremendously, but it requires a new tray mounting plate. What I did was design a new plate to add a couple of set screws on the outside edge. These bear and slide against the main plate during g the separation routine. By adjusting the height of the set screws I can remove nearly all slop and prevent the plate from deflecting when the build head come down for each layer. This puts a lot more pressure on the PDMS window but I've had no failures there to date. The big benefit is I don't have to wait as long, usually 5 seconds or less for slices with large surface areas. I'll add a link to the solidworks file when I'm back in the office next.
With these steps, my Z accuracy is greatly improved and usually slightly undersized whereas before all my prints were too thick.
Hope this helps!!