diff --git a/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo b/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo index 55e60fb340b458c9138b47408fd1140916de7ca5..0871b8c868f38dfd65e529bf3b267f96084d33da 100644 Binary files a/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo and b/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo differ diff --git a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c index ae796b24588979e22622fe25411d915f299abbc1..36ab2b207b6a14040d34f594d5759422b76f2673 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c +++ b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c @@ -31,51 +31,51 @@ void apa_handle_packet(uint8_t *packet, uint8_t length){ case APA_HANDLER_INSIDE: switch (packet[i]){ case DELIM_KEY_POSITION_FLOAT: - if(i + 5 < length){ - break; // broken data + if(i + 5 > length){ + i ++; } else { float position = 0; position = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb stepper_targetposition_float(&stepper, position); i += 5; // bring packet ptr to next key (should) - break; } + break; case DELIM_KEY_POSITION_STEPS: - if(i + 5 < length){ - break; // broken data + if(i + 5 > length){ + i ++; } else { int32_t steps = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb stepper_targetposition_steps(&stepper, steps); i += 5; // bring packet ptr to next key (should) - break; } + break; case DELIM_KEY_SPEED_FLOAT: - if(i + 5 < length){ - break; // broken data + if(i + 5 > length){ + i ++; } else { float speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb stepper_targetspeed_float(&stepper, speed); i += 5; // bring packet ptr to next key (should) - break; } + break; case DELIM_KEY_SPEED_STEPS: - if(i + 5 < length){ - break; // broken data + if(i + 5 > length){ + i ++; // avoiding hangup } else { - int32_t speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb + uint32_t speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb stepper_targetspeed_steps(&stepper, speed); i += 5; // bring packet ptr to next key (should) - break; } + break; default: // probably an error + i ++; break; } // end interior switch - i ++; break; default: @@ -88,6 +88,8 @@ void apa_handle_packet(uint8_t *packet, uint8_t length){ void apa_return_packet(uint8_t *packet, uint8_t length){ + //uart_sendchar_buffered(ups[1], 120); + //uart_sendchars_buffered(ups[1], packet, length); uint8_t ackpack[length]; ackpack[0] = length; // find route header @@ -114,5 +116,10 @@ void apa_return_packet(uint8_t *packet, uint8_t length){ ackpack[u] = packet[u]; } uart_sendchars_buffered(ups[ackpack[1]], ackpack, length); + // NOW: + // looking for justice: why no return packet on double length hop? + // debug with 2nd ftdi + //uart_sendchar_buffered(ups[1], 121); + //uart_sendchars_buffered(ups[1], ackpack, length); } } \ No newline at end of file diff --git a/embedded/mkstepper-v011/mkstepper-v011/main.c b/embedded/mkstepper-v011/mkstepper-v011/main.c index ddf48c88b602719fc010a60f059e71f7b5967a9e..80565ea457dcacdb7c86249d43e65ad8df0ab961 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/main.c +++ b/embedded/mkstepper-v011/mkstepper-v011/main.c @@ -247,8 +247,9 @@ int main(void) pin_output(&dir_pin); stepper = stepper_new(&step_pin, &dir_pin, 360.0, 64); + stepper_reset(&stepper); - stepper_targetspeed_steps(&stepper, 400); + stepper_targetspeed_steps(&stepper, 500); // so slow uint8_t lpcnt = 0; uint8_t stpcnt = 0; @@ -260,18 +261,21 @@ int main(void) if(stepper.position_ticks_target == stepper.position_ticks){ stpcnt ++; - stepper_targetposition_steps(&stepper, 1000 * (stpcnt %2)); - stepper_targetspeed_steps(&stepper, 500); + pin_clear(&stlr); + //stepper_targetposition_steps(&stepper, 1000 * (stpcnt %2)); + //stepper_targetspeed_steps(&stepper, 500); //stepper_goto(&stepper, 360 * (stpcnt % 2), 1200); + } else { + pin_set(&stlr); } } } /* next steps (haha) -- mkteriminal to write float values for keys ... -- do float positions / conversions / speeds / etc -> setup and doc values, types, what units are -- make sure you can run -ve positions +- do steps, steps/s speed checking, and direction +- unit test all commands on all ports using mkterminal + - this quickly so that you can mods compose further reading: diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.c b/embedded/mkstepper-v011/mkstepper-v011/stepper.c index eabea0cebc437196e5c59e0e003e28960a24321b..53d2df978b03ea8e33dd947eb374c7ec88dc91d3 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/stepper.c +++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.c @@ -59,14 +59,19 @@ void stepper_targetspeed_float(stepper_t *stepper, float speed){ // do more business } -void stepper_targetspeed_steps(stepper_t *stepper, int32_t speed){ - stepper->speed_period = 3000000 / ((speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps); +void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed){ + uint32_t speedmin = ((speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps); // enforce no division by 0 + (speedmin < 1) ? speedmin = 1 : (0); + // timing not accurate to real-world yet + stepper->speed_period = 300000000 / speedmin; } void stepper_update(stepper_t *stepper){ if(stepper->position_ticks_target != stepper->position_ticks){ // still have somewhere to go TICKER_SYNC; uint32_t now = TICKER; + // check if it's time to step + // todo: do timer update to fire this f'n at precisely the right time: nice for accel, deccel etc if(now - stepper->last_time > stepper->speed_period){ int32_t gap = stepper->position_ticks_target - stepper->position_ticks; if(gap < 0){ @@ -82,5 +87,6 @@ void stepper_update(stepper_t *stepper){ } stepper->last_time = now; } // end step cycle - } + + }// end step if not there cycle } \ No newline at end of file diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.h b/embedded/mkstepper-v011/mkstepper-v011/stepper.h index e9462d1a1c34470a86a2c020439a98d0f3930891..581023aefb96254b423f5aae2a37f17d89067692 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/stepper.h +++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.h @@ -24,6 +24,7 @@ typedef struct { uint32_t last_time; // float conversions + // not used in runtime, only during command calls float position_per_200_steps; // units (mm or deg, probably) moved per full rotation uint32_t microsteps; float position; @@ -40,7 +41,7 @@ void stepper_reset(stepper_t *stepper); void stepper_goto(stepper_t *stepper, float position, float speed); void stepper_targetposition_steps(stepper_t *stepper, int32_t steps); void stepper_targetposition_float(stepper_t *stepper, float position); -void stepper_targetspeed_steps(stepper_t *stepper, int32_t speed); +void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed); void stepper_targetspeed_float(stepper_t *stepper, float speed); void stepper_update(stepper_t *stepper);