Winder.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "Winder.h"
  2. Winder::Winder(Stepper &_spindle, Stepper &_feeder)
  3. : spindle(_spindle), feeder(_feeder), feederCtrl(5, 1000), spindleCtrl(5, 1000)
  4. {
  5. }
  6. Winder& Winder::setSpindleParams(unsigned stepsPerRev, unsigned acc)
  7. {
  8. spindleStpPerRev = stepsPerRev;
  9. spindleAcc = acc;
  10. spindle.setMaxSpeed(1); // -> parameter of overrideSpeed equals real speed
  11. spindle.setAcceleration(spindleAcc);
  12. oldSpindleSpeed = 0.0f;
  13. oldPitch = 1.0f;
  14. return *this;
  15. }
  16. Winder& Winder::setFeederParams(unsigned stpPerMM, unsigned acc)
  17. {
  18. feederStpPerMM = stpPerMM;
  19. feederAcc = acc;
  20. feeder.setMaxSpeed(1);
  21. feeder.setAcceleration(spindleAcc);
  22. return *this;
  23. }
  24. void Winder::begin()
  25. {
  26. pitchFactor = (float)feederStpPerMM / spindleStpPerRev;
  27. // startup controllers
  28. feederCtrl.rotateAsync(feeder);
  29. feederCtrl.overrideSpeed(0.0f);
  30. spindleCtrl.rotateAsync(spindle);
  31. spindleCtrl.overrideSpeed(0.0f);
  32. }
  33. void Winder::setSpindleSpeed(float rpm)
  34. {
  35. targetSpindleSpeed = rpm / 60.0f * spindleStpPerRev;
  36. }
  37. void Winder::setPitch(float pitch)
  38. {
  39. if(pitch > 0) targetPitch = pitch;
  40. }
  41. void Winder::updateSpeeds()
  42. {
  43. float targetFeederSpeed = targetPitch * pitchFactor * targetSpindleSpeed;
  44. if(targetSpindleSpeed != oldSpindleSpeed) // if target speed changed -> update all
  45. {
  46. oldSpindleSpeed = targetSpindleSpeed;
  47. float feederAccFactor = targetPitch * pitchFactor;
  48. //Serial.println(feederAccFactor);
  49. feederCtrl.overrideAcceleration(feederAccFactor);
  50. feederCtrl.overrideSpeed(targetFeederSpeed);
  51. spindleCtrl.overrideSpeed(targetSpindleSpeed);
  52. }
  53. else if(targetPitch != oldPitch) // if only target pitch changed, update feeder speed only
  54. {
  55. oldPitch = targetPitch;
  56. feederCtrl.overrideAcceleration(feederAcc / spindleAcc);
  57. feederCtrl.overrideSpeed(targetFeederSpeed);
  58. }
  59. }