User Tools

Site Tools


common_code_v1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
common_code_v1 [2016/08/26 12:49] – [Variables] hakcentercommon_code_v1 [2016/08/26 12:52] (current) – [Timer1] hakcenter
Line 245: Line 245:
 ==== Timer1 ==== ==== Timer1 ====
 <code> <code>
-void set_turbo_position() { +void sweep() { 
-  // Keep vane position within constraints +  if (turbo_feedback > 110) { 
-  constrain(vane_position, min_position, max_position); +    Serial.print(F("POS: ")); 
-  final_vane_position = vane_position+    Serial.print(turbo_cmd_position)
-  // Vane smoothing between large values +    Serial.print(F(" | Feedback : ")); 
-  if (turbo_rpm < top_end_rpm && turbo_rpm >= curve_rpm[0] && !brake_mode{ +    Serial.print(turbo_feedback); 
-    if (vane_position >= last_vane_position + 20 && last_vane_position < max_position - 10+    Serial.println(F("%")); 
-      final_vane_position = last_vane_position + 10+  } 
-    else if (vane_position <= last_vane_position - 20 && last_vane_position > min_position + 10) { +  if (sweep_update) { 
-      final_vane_position last_vane_position - 10+    sweep_update false
-    } else if (vane_position - 10 >= last_vane_position || vane_position + 10 <= last_vane_position) { +    if (sweep_position && sweep_counter < 2) { 
-      if (vane_position > last_vane_position + 2 && last_vane_position max_position - 2) { +      if (sweep_counter 1) { 
-        final_vane_position = last_vane_position + 2; +        vane_position++;
-      } else if (vane_position last_vane_position - 2 && last_vane_position > min_position + 2) { +
-        final_vane_position = last_vane_position - 2;+
       }       }
 +      if (vane_position > 960) { sweep_counter++; }
 +      if (sweep_counter > 0) {
 +        vane_position--;
 +      }
 +      if (vane_position < 40) { sweep_counter++; }
 +    }
 +    if (sweep_counter == 2 || !sweep_position) {
 +      sweep_position = false;
 +      sweep_update = false;
 +      sweep_counter = 0;
 +      Serial.println(F("Sweep done.."));
 +    }
 +  } else { sweep_update = true; }
 +}
 +
 +void set_turbo_position() {
 +  // if not sweeping smoothe vane changes
 +  if (!sweep_position) {
 +    // Keep vane position within constraints
 +    constrain(vane_position, min_position, max_position);
 +    final_vane_position = vane_position;
 +    // Vane smoothing between large values
 +       //if (turbo_rpm < curve_rpm[0] && (vane_position <= last_vane_position - 20 && last_vane_position > min_position + 10)) { final_vane_position = last_vane_position - 10; }
 +         if (turbo_rpm < curve_rpm[0] && (vane_position <= last_vane_position - half_cm)) { final_vane_position = last_vane_position - quarter_cm; }
 +    else if (!brake_mode && turbo_rpm >= curve_rpm[0] && turbo_rpm < top_end_rpm) {
 +    // if vane_position change is 20 or more, move by half the difference
 +         if (vane_position >= last_vane_position + 20) { final_vane_position = vane_position + ((last_vane_position - vane_position) >> 2); }
 +    else if (vane_position <= last_vane_position - 20) { final_vane_position = vane_position - ((last_vane_position - vane_position) >> 2); }
 +    // if vane_position change is 10 or less, move by 2
 +         if (vane_position - 10 >= last_vane_position) { final_vane_position = last_vane_position + 2; }
 +    else if (vane_position + 10 <= last_vane_position) { final_vane_position = last_vane_position - 2; }
 +    // end smoothing
 +    } else if (turbo_rpm > top_end_rpm) {
 +      // remove jitter during top end turbo speeds
 +      if (vane_position - 5 >= last_vane_position || vane_position + 5 <= last_vane_position) { final_vane_position = vane_position; } else { final_vane_position = last_vane_position; }
 +    }
 +    /*
 +    // Decel position on decel
 +    if (turbo_accel[2] < -20 && turbo_rpm > 30000) {
 +      vane_position = deceleration_position;
 +      final_vane_position = deceleration_position;
     }     }
-  else if (turbo_rpm top_end_rpm) { +    */ 
-    if (vane_position 5 >= last_vane_position || vane_position + 5 <= last_vane_position) { final_vane_position vane_position} else { final_vane_position = last_vane_position}+    // Constrain and update last_vane_position 
 +    constrain(final_vane_position, min_position, max_position); 
 +    last_vane_position = final_vane_position; 
 +  } 
 +  // Ignore vane changes until startup is complete 
 +  if (startup 1 && !sweep_position) { 
 +    startup--; 
 +    vane_position = min_position; 
 +    last_vane_position = min_position; 
 +    final_vane_position = min_position;
   }   }
-  // Update last_vane_position 
-  last_vane_position = final_vane_position; 
   byte lo_byte = lowByte(final_vane_position);   byte lo_byte = lowByte(final_vane_position);
   byte hi_byte = highByte(final_vane_position);   byte hi_byte = highByte(final_vane_position);
Line 272: Line 318:
   // data[2] = 0x02 for recalibrating gearbox   // data[2] = 0x02 for recalibrating gearbox
   // Load message and send   // Load message and send
-  CAN1.send (0x0CFFC600, extID, 8, data);+  send_turbo_position(data);
 } }
 </code> </code>
Line 280: Line 326:
 void keep_time() { void keep_time() {
   timer++;   timer++;
 +  // Startup Timer
 +  if (turbo_rpm < minimum_turbo_rpm) {
 +    if (startup > 249) { startup = 250; }
 +    startup++;
 +  }
   // Update vane_position every 10ms 100k+ / 25ms 60k - 100k / 100ms 0 - 60k   // Update vane_position every 10ms 100k+ / 25ms 60k - 100k / 100ms 0 - 60k
        if (timer % 10 == 0 && turbo_rpm > top_end_rpm) { update_vane_position = true; }        if (timer % 10 == 0 && turbo_rpm > top_end_rpm) { update_vane_position = true; }
Line 294: Line 345:
     if (turbo_rpm < top_end_rpm) { turbo_accel[2] = turbo_accel[1]; } else { turbo_accel[2] = turbo_accel[0]; }     if (turbo_rpm < top_end_rpm) { turbo_accel[2] = turbo_accel[1]; } else { turbo_accel[2] = turbo_accel[0]; }
   }   }
 +  // Read Serial Input
 +  if (timer % 10 == 0 && check_serial()) { read_serial(); }
 +  // Read CAN BUS
 +  if (timer % 25 == 0) { read_can_data(can_id, can_length); }
   // Modes   // Modes
   if (timer % 100 == 0 && turbo_rpm < top_end_rpm) { calculate_modes(); }   if (timer % 100 == 0 && turbo_rpm < top_end_rpm) { calculate_modes(); }
 +  // Sweep vane_position
 +  if (timer % 25 == 0 && sweep_position) { sweep(); }
   // Calculate vane_position   // Calculate vane_position
-  if (update_vane_position) {+  if (update_vane_position && !sweep_position) {
     update_vane_position = false;     update_vane_position = false;
     calculate_vane_position();     calculate_vane_position();
common_code_v1.txt · Last modified: 2016/08/26 12:52 by hakcenter