diff --git a/README.md b/README.md index e6a2736322c8124cc58b549ae8eb2e28f1dfa46a..fdc9865aa75e3091f7f2798a54fc4cf7013404cc 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,18 @@ These are stepper drivers! They run: - 1x AS5147 if you want to get closed-loop-fancy - RS485 input and 40W 24V into one 10-pin IDC +To build one w/ a motor, for closed loop stepping, I do: + +- N17 Motor 17HS19-2004S1 +- IDC, Plug, 2x15 609-5106-ND +- IDC, Plug, 2x5 609-1746-ND +- Magnet 469-1076-ND +- Spacer 6mm Tall 94669A101 +- M3 SHCS 50mm 91292A026 +- DIP Switch 219-8LPSTRF +- 2x5 Latching 732-2679-ND +- Two Part Epoxy + The hardware is set up to run on the 'UCBus', a synchronous embedded protocol that establishes a bus clock *and* data lines on one RS485/UART Phy. Details are not documented anywhere ATM, but it w o r k s. ## Closed Loop diff --git a/firmware/cl-step-controller/src/osape b/firmware/cl-step-controller/src/osape index 763c64b623c30fa245ddecc45ac03d1c1c8f5b17..41c6b76ffb321c0e596fac7034c5c45353a6514a 160000 --- a/firmware/cl-step-controller/src/osape +++ b/firmware/cl-step-controller/src/osape @@ -1 +1 @@ -Subproject commit 763c64b623c30fa245ddecc45ac03d1c1c8f5b17 +Subproject commit 41c6b76ffb321c0e596fac7034c5c45353a6514a diff --git a/firmware/osape-smoothieroll-drop-stepper/src/osape b/firmware/osape-smoothieroll-drop-stepper/src/osape index 7bbcbf8d8364d9beaf501d1acf6b34a77e4086f3..c940ac7425b5d544590caeeca4b49ce95b16ec76 160000 --- a/firmware/osape-smoothieroll-drop-stepper/src/osape +++ b/firmware/osape-smoothieroll-drop-stepper/src/osape @@ -1 +1 @@ -Subproject commit 7bbcbf8d8364d9beaf501d1acf6b34a77e4086f3 +Subproject commit c940ac7425b5d544590caeeca4b49ce95b16ec76 diff --git a/log/cl-step-control-log.md b/log/cl-step-control-log.md index 4e282641a8913b19d9e04405e8dc4a4fc8d856b6..f955865f8136c56076468a6fe9bd246d1003dcb3 100644 --- a/log/cl-step-control-log.md +++ b/log/cl-step-control-log.md @@ -14,8 +14,28 @@ With 2x A4950s on the DAC, AS5047P on the encoder, etc. ## Likely Improvements - encoder value filtering is a PITA, see note from 2021-02-17 about filtering and time constant. change loop structure so that we (1) sample the encoder as fast as possible, always, maybe 50kHz, and then (2) filter that with a heavier first exponential filter (keeping some small time constant as a target), and (3) run the actual control loop with this filtered value +- use a rejection term instead of this filter... if delX > 200 encoder ticks, just use last... +- bring phase advance back - even better, run an [alpha beta filter](https://en.wikipedia.org/wiki/Alpha_beta_filter) underneath the control loop, as fast as possible, always. +## Writing the Paper + +- holding torque open loop vs closed loop: given disturbance, the open loop motor probably shows more real measured error than a well tuned closed loop controller +- total integral of motor output along the torque curve from 0->10kRPM, + - probably finding resonant dips in open loop, + - maybe extending operating range in the closed loop (more RPM) + +Paper List + - microsteps are not real, and we can measure this i.e. with zach's setup: + - closed loop would eliminate microsteps + - wider torque band: potentially higher RPM + - low end torque / torque density: should robotics industry be using BLDCs 3-phase or BLDCs bipolar stepper? + - saturation: we can drive higher peak torque into i.e. N17 when we do closed loop control, offering potentially higher performance overall than open loop fixed-current control + - efficiency: open loop wastes energy, always dissipating + - just gathering motor data: + - torque curve, that includes efficiency - for both approaches + - closed loop can actually hold position better: open loop will only apply best torque when the rotor has deviated from stator's static field by 90degs phase, cl can react + ## Evaluation - static holding, watch encoder wobble when torque applied (can see ticks moving around even w/o motor torque being overcome), measure again with closed loop: can we hold *better* than static pointing?