|
|
|
|
@ -13,7 +13,7 @@ volatile uint16_t windings_wakeup = 0;
|
|
|
|
|
int32_t spule_trans_pos = 0;
|
|
|
|
|
uint8_t spule_trans_homed = 0;
|
|
|
|
|
|
|
|
|
|
#define TRANS_ROT_FACTOR 0.14
|
|
|
|
|
#define TRANS_ROT_FACTOR 0.07
|
|
|
|
|
|
|
|
|
|
void timer1_init()
|
|
|
|
|
{
|
|
|
|
|
@ -59,7 +59,7 @@ void set_spooling_speed(uint16_t speed){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void do_spule(){
|
|
|
|
|
// Translatoric axis homeing code
|
|
|
|
|
//PORTH &= ~(1<<5);
|
|
|
|
|
if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){
|
|
|
|
|
spule_trans_homed = 1;
|
|
|
|
|
spule_trans_pos = 0;
|
|
|
|
|
@ -71,15 +71,12 @@ void do_spule(){
|
|
|
|
|
OCR1A = ICR1/2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if not homed goto home
|
|
|
|
|
if(!spule_trans_homed){
|
|
|
|
|
ICR1 = 100;
|
|
|
|
|
OCR1A = 50;
|
|
|
|
|
set_Output(MOTOR_TRANS_DIR, 1); // direction: front
|
|
|
|
|
TCCR1B |= _BV(CS11); //TURN ON
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// manual forwarding if button is held
|
|
|
|
|
else if(!get_abzug_state()){
|
|
|
|
|
if(read_Input(BTN_WICKELN_EIN, LEVEL)){
|
|
|
|
|
set_spooling_speed(300);
|
|
|
|
|
@ -88,28 +85,24 @@ void do_spule(){
|
|
|
|
|
else
|
|
|
|
|
spule_onoff(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// normal operation
|
|
|
|
|
else{
|
|
|
|
|
/* speed regulation - keep taenzer at 10% */
|
|
|
|
|
float p = 100.0/(int32_t)(taenzer_state.pos/1000);
|
|
|
|
|
p-=1;
|
|
|
|
|
p/=2;
|
|
|
|
|
p+=1;
|
|
|
|
|
//tmp = (int32_t)(taenzer_state.pos/10000);
|
|
|
|
|
//printf("%ld\n", tmp);
|
|
|
|
|
|
|
|
|
|
//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(p < 0.5)
|
|
|
|
|
p = 0.5;
|
|
|
|
|
if(p > 2)
|
|
|
|
|
p = 2;
|
|
|
|
|
if(p < 0.75)
|
|
|
|
|
p = 0.75;
|
|
|
|
|
if(p > 1.5)
|
|
|
|
|
p = 1.5;
|
|
|
|
|
|
|
|
|
|
uint16_t base_speed = (14000/abzug_speed);
|
|
|
|
|
uint16_t base_speed = (7500/abzug_speed);
|
|
|
|
|
uint16_t ctrl_speed = base_speed * p;
|
|
|
|
|
|
|
|
|
|
if(ctrl_speed <= 70)
|
|
|
|
|
@ -118,7 +111,6 @@ void do_spule(){
|
|
|
|
|
ICR5 = ctrl_speed;
|
|
|
|
|
OCR5C = ICR5/2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
|
|
|
|
OCR1A = ICR1/2;
|
|
|
|
|
|
|
|
|
|
@ -156,11 +148,10 @@ ISR(TIMER5_OVF_vect) {
|
|
|
|
|
//PORTH &= ~(1<<5);
|
|
|
|
|
static uint16_t steps = 0;
|
|
|
|
|
steps++;
|
|
|
|
|
if(steps == 25000){
|
|
|
|
|
if(steps == 50000){
|
|
|
|
|
windings++;
|
|
|
|
|
steps=0;
|
|
|
|
|
printf("windungen: %d\t", windings);
|
|
|
|
|
printf("trans pos: %ld\n", taenzer_state.pos);
|
|
|
|
|
printf("windungen: %d\n", windings);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(windings == windings_wakeup){
|
|
|
|
|
@ -188,5 +179,5 @@ ISR(TIMER5_OVF_vect) {
|
|
|
|
|
OCR1A = ICR1/2;
|
|
|
|
|
printf("nachlauf abbauen\n");
|
|
|
|
|
}
|
|
|
|
|
//;PORTH |= (1<<5);
|
|
|
|
|
//PORTH |= (1<<5);
|
|
|
|
|
}
|
|
|
|
|
|