diff --git a/.gitmodules b/.gitmodules index 0bb89b4c4cdf3b1c089eab64733f5bbe9fbf80f1..01b26ce108ea88a071e34944dacd184946e0787d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,3 +31,6 @@ [submodule "firmware/axl-stepper/src/utils_samd51"] path = firmware/axl-stepper/src/utils_samd51 url = https://github.com/jakeread/utils_samd51.git +[submodule "firmware/axl-stepper/src/osape_ucbus"] + path = firmware/axl-stepper/src/osape_ucbus + url = https://github.com/jakeread/osape_ucbus.git diff --git a/firmware/axl-stepper/src/axl b/firmware/axl-stepper/src/axl index c874b7afa9102ae3e5c150e444b01703c7143303..2e5fc8fc207938607933be3c7b06326573265139 160000 --- a/firmware/axl-stepper/src/axl +++ b/firmware/axl-stepper/src/axl @@ -1 +1 @@ -Subproject commit c874b7afa9102ae3e5c150e444b01703c7143303 +Subproject commit 2e5fc8fc207938607933be3c7b06326573265139 diff --git a/firmware/axl-stepper/src/main.cpp b/firmware/axl-stepper/src/main.cpp index 460f8bac738574457eb4ba0a7b4fb85dfb61d80f..ceaaccca990cda67f705f75666e2ab06ae212607 100644 --- a/firmware/axl-stepper/src/main.cpp +++ b/firmware/axl-stepper/src/main.cpp @@ -10,11 +10,14 @@ #include "osape/core/ts.h" #include "osape/vertices/endpoint.h" #include "osape_arduino/vp_arduinoSerial.h" +#include "osape_ucbus/vb_ucBusDrop.h" OSAP osap("hmc-motor"); VPort_ArduinoSerial vpUSBSerial(&osap, "arduinoUSBSerial", &Serial); +VBus_UCBusDrop vbUCBusDrop(&osap, "ucBusDrop"); + // -------------------------------------------------------- 2: States EP_ONDATA_RESPONSES onStateData(uint8_t* data, uint16_t len){ @@ -77,6 +80,73 @@ void updateStatesEP(void){ statesEP.write(stash, numBytes); } +// -------------------------------------------------------- 3: Moves -> Queue + +EP_ONDATA_RESPONSES onMoveData(uint8_t* data, uint16_t len){ + // this (and states-input) could watch <len> to make sure that + // this code & transmitter code are agreeing on how many DOFs are specd + if(axl_hasQueueSpace()){ + uint16_t rptr = 0; + float rate = ts_readFloat32(data, &rptr); + dofs targ; + for(uint8_t a = 0; a < AXL_NUM_DOF; a ++){ + targ.axis[a] = ts_readFloat32(data, &rptr); + } + axl_addMoveToQueue(targ, rate); + return EP_ONDATA_ACCEPT; + } else { + return EP_ONDATA_WAIT; + } +} + +Endpoint moveEP(&osap, "moves", onMoveData); + +// -------------------------------------------------------- 4: AXL Settings + +EP_ONDATA_RESPONSES onAXLSettingsData(uint8_t* data, uint16_t len){ + // jd, then pairs of accel & vel limits, + float jd; + dofs accelLimits; + dofs velLimits; + uint16_t rptr = 0; + jd = ts_readFloat32(data, &rptr); + for(uint8_t a = 0; a < AXL_NUM_DOF; a ++){ + accelLimits.axis[a] = ts_readFloat32(data, &rptr); + velLimits.axis[a] = ts_readFloat32(data, &rptr); + } + axl_setJunctionDeviation(jd); + axl_setAccelLimits(accelLimits); + axl_setVelLimits(velLimits); + return EP_ONDATA_ACCEPT; +} + +Endpoint axlSettingsEP(&osap, "axlSettings", onAXLSettingsData); + +// -------------------------------------------------------- 5: Motor Settings + +uint8_t axisPick = 0; +boolean invert = false; +uint16_t microstep = 4; +float spu = 100.0F; +float cscale = 0.1F; + +// aye, there should be a void onData overload... less confusing +EP_ONDATA_RESPONSES onMotorSettingsData(uint8_t* data, uint16_t len){ + uint16_t rptr = 0; + axisPick = data[rptr ++]; + ts_readBoolean(&invert, data, &rptr); + ts_readUint16(µstep, data, &rptr); + spu = ts_readFloat32(data, &rptr); + cscale = ts_readFloat32(data, &rptr); + stepper_hw->setMicrostep(microstep); + stepper_hw->setCurrent(cscale); + stepper_hw->setInversion(invert); + return EP_ONDATA_ACCEPT; +} + +Endpoint motorSettingsEP(&osap, "motorSettings", onMotorSettingsData); + +// -------------------------------------------------------- Arduino Setup void setup() { CLKLIGHT_SETUP; @@ -86,7 +156,7 @@ void setup() { // port begin vpUSBSerial.begin(); // setup stepper machine - stepper_hw->init(false, 0.35F); + stepper_hw->init(false, 0.0F); stepper_hw->setMicrostep(4); // setup controller axl_setup(); @@ -94,6 +164,8 @@ void setup() { d51ClockUtils->start_ticker_a(AXL_TICKER_INTERVAL_US); } +// -------------------------------------------------------- Das Loop + uint32_t lastBlink = 0; uint32_t blinkInterval = 50; // ms @@ -107,8 +179,7 @@ void loop() { } } -uint8_t axisPick = 0; -float spu = 100.0F; +// -------------------------------------------------------- Small-Time Ops volatile float stepRatchet = 0.0F; void axl_onPositionDelta(uint8_t axis, float delta){ @@ -132,4 +203,10 @@ void TC0_Handler(void){ // run the loop, axl_integrator(); DEBUG1PIN_OFF; -} \ No newline at end of file +} + +// deadies, unused ATM + +void ucBusDrop_onRxISR(void){} + +void ucBusDrop_onPacketARx(uint8_t* data, uint16_t len){} \ No newline at end of file diff --git a/firmware/axl-stepper/src/osape_ucbus b/firmware/axl-stepper/src/osape_ucbus new file mode 160000 index 0000000000000000000000000000000000000000..ba7240a9f473f3df114cccfd3c393cc9f5ea1074 --- /dev/null +++ b/firmware/axl-stepper/src/osape_ucbus @@ -0,0 +1 @@ +Subproject commit ba7240a9f473f3df114cccfd3c393cc9f5ea1074 diff --git a/firmware/axl-stepper/src/ucbus_config.h b/firmware/axl-stepper/src/ucbus_config.h index 2b84fba6edf04a4d5ad1fc9fd5a11bfee67d08f6..eee24b0289a8649bc3543cd3dc759ebd0b131d97 100644 --- a/firmware/axl-stepper/src/ucbus_config.h +++ b/firmware/axl-stepper/src/ucbus_config.h @@ -16,8 +16,8 @@ no warranty is provided, and users accept all liability. #define UCBUS_CONFIG_H_ #define UCBUS_MAX_DROPS 32 -//#define UCBUS_IS_DROP -#define UCBUS_IS_HEAD +#define UCBUS_IS_DROP +//#define UCBUS_IS_HEAD #define UCBUS_BAUD 2