-
Notifications
You must be signed in to change notification settings - Fork 10
Delta V Stroke
The delta-velocity stroke coordinates motion along a 4-axis path specified by a series of acceleration increments over equal time intervals. Each acceleration increment describes how much to change the current step velocity. As an example, suppose we wish to traverse the following path along the y-axis, and be at a particular Y-position at a given time:
Time | Y | V=dY | dV | Description |
---|---|---|---|---|
0 | 0 | 0 | 0 | start position |
1 | 1 | 1 | 1 | accelerating |
2 | 4 | 3 | 2 | accelerating |
3 | 8 | 4 | 1 | accelerating |
4 | 12 | 4 | 0 | cruising |
5 | 16 | 4 | 0 | cruising |
6 | 20 | 4 | 0 | cruising |
7 | 23 | 3 | -1 | decelerating |
8 | 25 | 2 | -1 | decelerating |
9 | 26 | 1 | -1 | decelerating |
Although we could represent the stroke as a vector of (Time,Y) pairs, it is actually more compact if we compute the differences (V=dY) and represent the stroke as a vector of (Time,V) pairs. Indeed, we can go further and represent the stroke as a vector of (Time, dV) pairs. A Delta-V Stroke is therefore just a vector of (Time,dV) pairs.
Memory on an Arduino is at a premium. An Atmega2560 only has 8KiB of SRAM. Using (Time,dV) pairs gives us a way to maximize storage use. Specifically, we can store an int8_t (Time,dV) stroke with twice as many points as an int16_t (Time,Y) stroke in the same amount of SRAM. Using more points, we can approximate complex curves with great accuracy. Lastly, we can coordinate the motion of 4-axes along the entire stroke using smooth acceleration and high precision independently of the host computer, since the DeltaV stroke is a single FireStep command.