|
|
|
|
@ -50,6 +50,14 @@ static void spule_onoff(uint8_t state){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set_spooling_speed(uint16_t speed){
|
|
|
|
|
ICR5=speed;
|
|
|
|
|
OCR5C = ICR5/2;
|
|
|
|
|
|
|
|
|
|
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
|
|
|
|
OCR1A = ICR1/2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void do_spule(){
|
|
|
|
|
//PORTH &= ~(1<<5);
|
|
|
|
|
if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){
|
|
|
|
|
@ -69,22 +77,38 @@ void do_spule(){
|
|
|
|
|
set_Output(MOTOR_TRANS_DIR, 1); // direction: front
|
|
|
|
|
TCCR1B |= _BV(CS11); //TURN ON
|
|
|
|
|
}
|
|
|
|
|
else if(taenzer_state.pos <= 10){
|
|
|
|
|
spule_onoff(0);
|
|
|
|
|
else if(!get_abzug_state()){
|
|
|
|
|
if(read_Input(BTN_WICKELN_EIN, LEVEL)){
|
|
|
|
|
set_spooling_speed(300);
|
|
|
|
|
spule_onoff(1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
spule_onoff(0);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
/* speed regulation - keep taenzer at 10% */
|
|
|
|
|
int32_t tmp = 0;//(100 - (int32_t)taenzer_state.pos/1000);
|
|
|
|
|
float p = 100.0/(int32_t)(taenzer_state.pos/1000);
|
|
|
|
|
p-=1;
|
|
|
|
|
p/=2;
|
|
|
|
|
p+=1;
|
|
|
|
|
|
|
|
|
|
//printf("temp1: %d\n", tmp);
|
|
|
|
|
//TODO fix bounds
|
|
|
|
|
//if(tmp < -7500/abzug_speed/2)
|
|
|
|
|
// tmp = -7500/abzug_speed/2;
|
|
|
|
|
//printf("temp2: %d\n", tmp);
|
|
|
|
|
if(tmp < -35)
|
|
|
|
|
tmp = -35;
|
|
|
|
|
if(p < 0.75)
|
|
|
|
|
p = 0.75;
|
|
|
|
|
if(p > 1.5)
|
|
|
|
|
p = 1.5;
|
|
|
|
|
|
|
|
|
|
ICR5=7500/abzug_speed + tmp;
|
|
|
|
|
uint16_t base_speed = (7500/abzug_speed);
|
|
|
|
|
uint16_t ctrl_speed = base_speed * p;
|
|
|
|
|
|
|
|
|
|
if(ctrl_speed <= 70)
|
|
|
|
|
ctrl_speed = 70;
|
|
|
|
|
|
|
|
|
|
ICR5 = ctrl_speed;
|
|
|
|
|
OCR5C = ICR5/2;
|
|
|
|
|
|
|
|
|
|
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
|
|
|
|
@ -96,14 +120,13 @@ void do_spule(){
|
|
|
|
|
if (read_Input(BTN_WICKELN_AUS, RISING)) {
|
|
|
|
|
spule_onoff(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (read_Input(BTN_INIT, RISING)) {
|
|
|
|
|
spule_trans_homed = 0;
|
|
|
|
|
taenzer_state.homed = 0;
|
|
|
|
|
taenzer_state.active = 0;
|
|
|
|
|
windings = 0;
|
|
|
|
|
windings_wakeup = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (read_Input(BTN_INIT, RISING)) {
|
|
|
|
|
spule_trans_homed = 0;
|
|
|
|
|
taenzer_state.homed = 0;
|
|
|
|
|
taenzer_state.active = 0;
|
|
|
|
|
windings = 0;
|
|
|
|
|
windings_wakeup = 0;
|
|
|
|
|
}
|
|
|
|
|
//PORTH |= (1<<5);
|
|
|
|
|
}
|
|
|
|
|
|