From 3D printer from scratch

## Requirements for the Controller

- The head has to be moved along a given curve. Currently the curve consists of segments of lines, clothoids and arcs. Later on they may also be described by Bezier-Splines/B-Splines/NURBS.
- The movement speed is independent from the parameterization of the curve. Most of the time the head is required to move at constant |v|, but it also accelerates/decelerates.
- Head movement has to be continuous in position, speed and acceleration and bounded in jerk. The source curves are at least C2.
- The path the head is moved along should not deviate from the given curve more than, 0.01mm, total range of motion is 300mm. So a accuracy of 10^-5 is striven for.
- The velocity of the head should not deviate by more than 10^-4, the acceleration has to be continuous and bounded, the jerk has only to be bounded.
- The motor controller is implemented in an FPGA and communicates with the host via UART.
- Required step frequency up to 6 MHz, FPGA running at 20MHz