|
|
|
|
@ -77,7 +77,10 @@ void do_steps(){
|
|
|
|
|
timer++;
|
|
|
|
|
|
|
|
|
|
for(uint8_t i=0; i<(sizeof(steppers)/sizeof(stepper_T)); i++){
|
|
|
|
|
if(steppers[i].ramp_to_speed != 0 && steppers[i].next_step == timer){
|
|
|
|
|
if((steppers[i].ramp_to_speed != 0 && steppers[i].next_step == timer) || steppers[i].trigger_step){
|
|
|
|
|
/* reset trigger */
|
|
|
|
|
steppers[i].trigger_step = 0;
|
|
|
|
|
|
|
|
|
|
/* ramp speed */
|
|
|
|
|
if(steppers[i].speed < steppers[i].ramp_to_speed)
|
|
|
|
|
steppers[i].speed++;
|
|
|
|
|
@ -96,26 +99,38 @@ void do_steps(){
|
|
|
|
|
if(steppers[i].speed<0)
|
|
|
|
|
steppers[i].dir_port->BSRR |= 1 << (steppers[i].dir_pin + 16);
|
|
|
|
|
|
|
|
|
|
/* calculate next step time */
|
|
|
|
|
steppers[i].next_step = timer + (1000/abs(steppers[i].speed)); // should be safe for 1 overflow
|
|
|
|
|
// avoid division by zero
|
|
|
|
|
if(steppers[i].speed != 0){
|
|
|
|
|
/* calculate next step time
|
|
|
|
|
*
|
|
|
|
|
* should be safe for 1 overflow; speeds which
|
|
|
|
|
* require longer wait times than uint32_max not supported
|
|
|
|
|
* */
|
|
|
|
|
steppers[i].next_step = timer + (1000/abs(steppers[i].speed));
|
|
|
|
|
|
|
|
|
|
/* step and count position */
|
|
|
|
|
steppers[i].step_port->ODR ^= 1 << steppers[i].step_pin;
|
|
|
|
|
if(steppers[i].speed>0)
|
|
|
|
|
steppers[i].pos++;
|
|
|
|
|
if(steppers[i].speed<0)
|
|
|
|
|
steppers[i].pos--;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
// dont send step at speed == 0
|
|
|
|
|
steppers[i].next_step = timer + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* step and count position */
|
|
|
|
|
steppers[i].step_port->ODR ^= 1 << steppers[i].step_pin;
|
|
|
|
|
if(steppers[i].speed>0)
|
|
|
|
|
steppers[i].pos++;
|
|
|
|
|
if(steppers[i].speed<0)
|
|
|
|
|
steppers[i].pos--;
|
|
|
|
|
|
|
|
|
|
printf("pos %d\tspeed %d\n", steppers[i].pos, steppers[i].speed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(steppers[i].homed){
|
|
|
|
|
int16_t old_ramp_to_speed = steppers[i].ramp_to_speed;
|
|
|
|
|
|
|
|
|
|
static uint16_t old_ramp_to_speed;
|
|
|
|
|
old_ramp_to_speed = steppers[i].ramp_to_speed;
|
|
|
|
|
steppers[i].ramp_to_speed = rxBuffer[1] - steppers[i].pos;
|
|
|
|
|
|
|
|
|
|
if(steppers[i].ramp_to_speed != 0 && old_ramp_to_speed == 0)
|
|
|
|
|
steppers[i].next_step = timer+1;
|
|
|
|
|
if(old_ramp_to_speed == 0 && steppers[i].ramp_to_speed != 0)
|
|
|
|
|
steppers[i].trigger_step = 1;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(~(steppers[i].home_port->IDR) & (1 << steppers[i].home_pin)){
|
|
|
|
|
@ -128,7 +143,7 @@ void do_steps(){
|
|
|
|
|
else{
|
|
|
|
|
if(steppers[i].ramp_to_speed == 0){
|
|
|
|
|
steppers[i].ramp_to_speed=10;
|
|
|
|
|
steppers[i].next_step = timer+1;
|
|
|
|
|
steppers[i].trigger_step = 1; // trigger first step
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|