浏览代码

Merge branch 'Development' into planner_oh_planner

Latest upstream commits
Scott Lahteine 10 年前
父节点
当前提交
01740fd9c6

二进制
Documentation/Logo/marlinwiki.png 查看文件


+ 15
- 64
Marlin/Marlin_main.cpp 查看文件

@@ -4052,18 +4052,13 @@ inline void gcode_M303() {
4052 4052
 }
4053 4053
 
4054 4054
 #ifdef SCARA
4055
-
4056
-  /**
4057
-   * M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
4058
-   */
4059
-  inline bool gcode_M360() {
4060
-    SERIAL_ECHOLN(" Cal: Theta 0 ");
4055
+  bool SCARA_move_to_cal(uint8_t delta_x, uint8_t delta_y) {
4061 4056
     //SoftEndsEnabled = false;              // Ignore soft endstops during calibration
4062 4057
     //SERIAL_ECHOLN(" Soft endstops disabled ");
4063 4058
     if (! Stopped) {
4064 4059
       //get_coordinates(); // For X Y Z E F
4065
-      delta[X_AXIS] = 0;
4066
-      delta[Y_AXIS] = 120;
4060
+      delta[X_AXIS] = delta_x;
4061
+      delta[Y_AXIS] = delta_y;
4067 4062
       calculate_SCARA_forward_Transform(delta);
4068 4063
       destination[X_AXIS] = delta[X_AXIS]/axis_scaling[X_AXIS];
4069 4064
       destination[Y_AXIS] = delta[Y_AXIS]/axis_scaling[Y_AXIS];
@@ -4075,24 +4070,19 @@ inline void gcode_M303() {
4075 4070
   }
4076 4071
 
4077 4072
   /**
4073
+   * M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
4074
+   */
4075
+  inline bool gcode_M360() {
4076
+    SERIAL_ECHOLN(" Cal: Theta 0 ");
4077
+    return SCARA_move_to_cal(0, 120);
4078
+  }
4079
+
4080
+  /**
4078 4081
    * M361: SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
4079 4082
    */
4080 4083
   inline bool gcode_M361() {
4081 4084
     SERIAL_ECHOLN(" Cal: Theta 90 ");
4082
-    //SoftEndsEnabled = false;              // Ignore soft endstops during calibration
4083
-    //SERIAL_ECHOLN(" Soft endstops disabled ");
4084
-    if (! Stopped) {
4085
-      //get_coordinates(); // For X Y Z E F
4086
-      delta[X_AXIS] = 90;
4087
-      delta[Y_AXIS] = 130;
4088
-      calculate_SCARA_forward_Transform(delta);
4089
-      destination[X_AXIS] = delta[X_AXIS]/axis_scaling[X_AXIS];
4090
-      destination[Y_AXIS] = delta[Y_AXIS]/axis_scaling[Y_AXIS];
4091
-      prepare_move();
4092
-      //ClearToSend();
4093
-      return true;
4094
-    }
4095
-    return false;
4085
+    return SCARA_move_to_cal(90, 130);
4096 4086
   }
4097 4087
 
4098 4088
   /**
@@ -4100,20 +4090,7 @@ inline void gcode_M303() {
4100 4090
    */
4101 4091
   inline bool gcode_M362() {
4102 4092
     SERIAL_ECHOLN(" Cal: Psi 0 ");
4103
-    //SoftEndsEnabled = false;              // Ignore soft endstops during calibration
4104
-    //SERIAL_ECHOLN(" Soft endstops disabled ");
4105
-    if (! Stopped) {
4106
-      //get_coordinates(); // For X Y Z E F
4107
-      delta[X_AXIS] = 60;
4108
-      delta[Y_AXIS] = 180;
4109
-      calculate_SCARA_forward_Transform(delta);
4110
-      destination[X_AXIS] = delta[X_AXIS]/axis_scaling[X_AXIS];
4111
-      destination[Y_AXIS] = delta[Y_AXIS]/axis_scaling[Y_AXIS];
4112
-      prepare_move();
4113
-      //ClearToSend();
4114
-      return true;
4115
-    }
4116
-    return false;
4093
+    return SCARA_move_to_cal(60, 180);
4117 4094
   }
4118 4095
 
4119 4096
   /**
@@ -4121,20 +4098,7 @@ inline void gcode_M303() {
4121 4098
    */
4122 4099
   inline bool gcode_M363() {
4123 4100
     SERIAL_ECHOLN(" Cal: Psi 90 ");
4124
-    //SoftEndsEnabled = false;              // Ignore soft endstops during calibration
4125
-    //SERIAL_ECHOLN(" Soft endstops disabled ");
4126
-    if (! Stopped) {
4127
-      //get_coordinates(); // For X Y Z E F
4128
-      delta[X_AXIS] = 50;
4129
-      delta[Y_AXIS] = 90;
4130
-      calculate_SCARA_forward_Transform(delta);
4131
-      destination[X_AXIS] = delta[X_AXIS]/axis_scaling[X_AXIS];
4132
-      destination[Y_AXIS] = delta[Y_AXIS]/axis_scaling[Y_AXIS];
4133
-      prepare_move();
4134
-      //ClearToSend();
4135
-      return true;
4136
-    }
4137
-    return false;
4101
+    return SCARA_move_to_cal(50, 90);
4138 4102
   }
4139 4103
 
4140 4104
   /**
@@ -4142,20 +4106,7 @@ inline void gcode_M303() {
4142 4106
    */
4143 4107
   inline bool gcode_M364() {
4144 4108
     SERIAL_ECHOLN(" Cal: Theta-Psi 90 ");
4145
-   // SoftEndsEnabled = false;              // Ignore soft endstops during calibration
4146
-    //SERIAL_ECHOLN(" Soft endstops disabled ");
4147
-    if (! Stopped) {
4148
-      //get_coordinates(); // For X Y Z E F
4149
-      delta[X_AXIS] = 45;
4150
-      delta[Y_AXIS] = 135;
4151
-      calculate_SCARA_forward_Transform(delta);
4152
-      destination[X_AXIS] = delta[X_AXIS] / axis_scaling[X_AXIS];
4153
-      destination[Y_AXIS] = delta[Y_AXIS] / axis_scaling[Y_AXIS];
4154
-      prepare_move();
4155
-      //ClearToSend();
4156
-      return true;
4157
-    }
4158
-    return false;
4109
+    return SCARA_move_to_cal(45, 135);
4159 4110
   }
4160 4111
 
4161 4112
   /**

+ 0
- 1
Marlin/example_configurations/Felix/Configuration.h 查看文件

@@ -403,7 +403,6 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
403 403
   // Note: this feature occupies 10'206 byte
404 404
   #ifdef AUTO_BED_LEVELING_GRID
405 405
 
406
-home_offset    // set the rectangle in which to probe
407 406
     #define LEFT_PROBE_BED_POSITION 15
408 407
     #define RIGHT_PROBE_BED_POSITION 170
409 408
     #define BACK_PROBE_BED_POSITION 180

+ 0
- 1
Marlin/example_configurations/Felix/Configuration_DUAL.h 查看文件

@@ -403,7 +403,6 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
403 403
   // Note: this feature occupies 10'206 byte
404 404
   #ifdef AUTO_BED_LEVELING_GRID
405 405
 
406
-home_offset    // set the rectangle in which to probe
407 406
     #define LEFT_PROBE_BED_POSITION 15
408 407
     #define RIGHT_PROBE_BED_POSITION 170
409 408
     #define BACK_PROBE_BED_POSITION 180

+ 46
- 41
Marlin/temperature.cpp 查看文件

@@ -177,7 +177,7 @@ static volatile bool temp_meas_ready = false;
177 177
 // Init min and max temp with extreme values to prevent false errors during startup
178 178
 static int minttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_LO_TEMP , HEATER_1_RAW_LO_TEMP , HEATER_2_RAW_LO_TEMP, HEATER_3_RAW_LO_TEMP);
179 179
 static int maxttemp_raw[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_RAW_HI_TEMP , HEATER_1_RAW_HI_TEMP , HEATER_2_RAW_HI_TEMP, HEATER_3_RAW_HI_TEMP);
180
-static int minttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS( 0, 0, 0, 0 );
180
+static int minttemp[EXTRUDERS] = { 0 };
181 181
 static int maxttemp[EXTRUDERS] = ARRAY_BY_EXTRUDERS( 16383, 16383, 16383, 16383 );
182 182
 //static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP; /* No bed mintemp error implemented?!? */
183 183
 #ifdef BED_MAXTEMP
@@ -197,8 +197,8 @@ static float analog2tempBed(int raw);
197 197
 static void updateTemperaturesFromRawValues();
198 198
 
199 199
 #ifdef WATCH_TEMP_PERIOD
200
-  int watch_start_temp[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0,0);
201
-  unsigned long watchmillis[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0,0);
200
+  int watch_start_temp[EXTRUDERS] = { 0 };
201
+  unsigned long watchmillis[EXTRUDERS] = { 0 };
202 202
 #endif //WATCH_TEMP_PERIOD
203 203
 
204 204
 #ifndef SOFT_PWM_SCALE
@@ -661,12 +661,6 @@ void manage_heater() {
661 661
 
662 662
   updateTemperaturesFromRawValues();
663 663
 
664
-  #ifdef HEATER_0_USES_MAX6675
665
-    float ct = current_temperature[0];
666
-    if (ct > min(HEATER_0_MAXTEMP, 1023)) max_temp_error(0);
667
-    if (ct < max(HEATER_0_MINTEMP, 0.01)) min_temp_error(0);
668
-  #endif //HEATER_0_USES_MAX6675
669
-
670 664
   unsigned long ms = millis();
671 665
 
672 666
   // Loop through all extruders
@@ -1145,28 +1139,28 @@ void disable_heater() {
1145 1139
   for (int i=0; i<EXTRUDERS; i++) setTargetHotend(0, i);
1146 1140
   setTargetBed(0);
1147 1141
 
1142
+  #define DISABLE_HEATER(NR) { \
1143
+    target_temperature[NR] = 0; \
1144
+    soft_pwm[NR] = 0; \
1145
+    WRITE_HEATER_ ## NR (LOW); \
1146
+  }
1147
+
1148 1148
   #if HAS_TEMP_0
1149 1149
     target_temperature[0] = 0;
1150 1150
     soft_pwm[0] = 0;
1151
-    WRITE_HEATER_0P(LOW); // If HEATERS_PARALLEL should apply, change to WRITE_HEATER_0
1151
+    WRITE_HEATER_0P(LOW); // Should HEATERS_PARALLEL apply here? Then change to DISABLE_HEATER(0)
1152 1152
   #endif
1153 1153
 
1154 1154
   #if EXTRUDERS > 1 && HAS_TEMP_1
1155
-    target_temperature[1] = 0;
1156
-    soft_pwm[1] = 0;
1157
-    WRITE_HEATER_1(LOW);
1155
+    DISABLE_HEATER(1);
1158 1156
   #endif
1159 1157
 
1160 1158
   #if EXTRUDERS > 2 && HAS_TEMP_2
1161
-    target_temperature[2] = 0;
1162
-    soft_pwm[2] = 0;
1163
-    WRITE_HEATER_2(LOW);
1159
+    DISABLE_HEATER(2);
1164 1160
   #endif
1165 1161
 
1166 1162
   #if EXTRUDERS > 3 && HAS_TEMP_3
1167
-    target_temperature[3] = 0;
1168
-    soft_pwm[3] = 0;
1169
-    WRITE_HEATER_3(LOW);
1163
+    DISABLE_HEATER(3);
1170 1164
   #endif
1171 1165
 
1172 1166
   #if HAS_TEMP_BED
@@ -1257,9 +1251,15 @@ enum TempState {
1257 1251
 // Timer 0 is shared with millies
1258 1252
 //
1259 1253
 ISR(TIMER0_COMPB_vect) {
1254
+  #ifdef TEMP_SENSOR_1_AS_REDUNDANT
1255
+    #define TEMP_SENSOR_COUNT 2
1256
+  #else 
1257
+    #define TEMP_SENSOR_COUNT EXTRUDERS
1258
+  #endif
1259
+
1260 1260
   //these variables are only accesible from the ISR, but static, so they don't lose their value
1261 1261
   static unsigned char temp_count = 0;
1262
-  static unsigned long raw_temp_value[EXTRUDERS] = { 0 };
1262
+  static unsigned long raw_temp_value[TEMP_SENSOR_COUNT] = { 0 };
1263 1263
   static unsigned long raw_temp_bed_value = 0;
1264 1264
   static TempState temp_state = StartupDelay;
1265 1265
   static unsigned char pwm_count = BIT(SOFT_PWM_SCALE);
@@ -1475,6 +1475,7 @@ ISR(TIMER0_COMPB_vect) {
1475 1475
       #endif
1476 1476
       temp_state = PrepareTemp_BED;
1477 1477
       break;
1478
+
1478 1479
     case PrepareTemp_BED:
1479 1480
       #if HAS_TEMP_BED
1480 1481
         START_ADC(TEMP_BED_PIN);
@@ -1488,6 +1489,7 @@ ISR(TIMER0_COMPB_vect) {
1488 1489
       #endif
1489 1490
       temp_state = PrepareTemp_1;
1490 1491
       break;
1492
+
1491 1493
     case PrepareTemp_1:
1492 1494
       #if HAS_TEMP_1
1493 1495
         START_ADC(TEMP_1_PIN);
@@ -1501,6 +1503,7 @@ ISR(TIMER0_COMPB_vect) {
1501 1503
       #endif
1502 1504
       temp_state = PrepareTemp_2;
1503 1505
       break;
1506
+
1504 1507
     case PrepareTemp_2:
1505 1508
       #if HAS_TEMP_2
1506 1509
         START_ADC(TEMP_2_PIN);
@@ -1514,6 +1517,7 @@ ISR(TIMER0_COMPB_vect) {
1514 1517
       #endif
1515 1518
       temp_state = PrepareTemp_3;
1516 1519
       break;
1520
+
1517 1521
     case PrepareTemp_3:
1518 1522
       #if HAS_TEMP_3
1519 1523
         START_ADC(TEMP_3_PIN);
@@ -1527,6 +1531,7 @@ ISR(TIMER0_COMPB_vect) {
1527 1531
       #endif
1528 1532
       temp_state = Prepare_FILWIDTH;
1529 1533
       break;
1534
+
1530 1535
     case Prepare_FILWIDTH:
1531 1536
       #if HAS_FILAMENT_SENSOR
1532 1537
         START_ADC(FILWIDTH_PIN);
@@ -1545,6 +1550,7 @@ ISR(TIMER0_COMPB_vect) {
1545 1550
       temp_state = PrepareTemp_0;
1546 1551
       temp_count++;
1547 1552
       break;
1553
+
1548 1554
     case StartupDelay:
1549 1555
       temp_state = PrepareTemp_0;
1550 1556
       break;
@@ -1554,7 +1560,7 @@ ISR(TIMER0_COMPB_vect) {
1554 1560
     //   SERIAL_ERRORLNPGM("Temp measurement error!");
1555 1561
     //   break;
1556 1562
   } // switch(temp_state)
1557
-    
1563
+
1558 1564
   if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256)  = 164ms.
1559 1565
     if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading.
1560 1566
       #ifndef HEATER_0_USES_MAX6675
@@ -1579,52 +1585,53 @@ ISR(TIMER0_COMPB_vect) {
1579 1585
     #if HAS_FILAMENT_SENSOR
1580 1586
       current_raw_filwidth = raw_filwidth_value >> 10;  // Divide to get to 0-16384 range since we used 1/128 IIR filter approach
1581 1587
     #endif
1582
-    
1588
+
1583 1589
     temp_meas_ready = true;
1584 1590
     temp_count = 0;
1585
-    for (int i = 0; i < EXTRUDERS; i++) raw_temp_value[i] = 0;
1591
+    for (int i = 0; i < TEMP_SENSOR_COUNT; i++) raw_temp_value[i] = 0;
1586 1592
     raw_temp_bed_value = 0;
1587 1593
 
1588
-    #if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
1589
-      #define GE0 <=
1590
-      #define LE0 >=
1594
+    #ifdef HEATER_0_USES_MAX6675
1595
+      float ct = current_temperature[0];
1596
+      if (ct > min(HEATER_0_MAXTEMP, 1023)) max_temp_error(0);
1597
+      if (ct < max(HEATER_0_MINTEMP, 0.01)) min_temp_error(0);
1591 1598
     #else
1592
-      #define GE0 >=
1593
-      #define LE0 <=
1599
+      #if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
1600
+        #define GE0 <=
1601
+      #else
1602
+        #define GE0 >=
1603
+      #endif
1604
+      if (current_temperature_raw[0] GE0 maxttemp_raw[0]) max_temp_error(0);
1605
+      if (minttemp_raw[0] GE0 current_temperature_raw[0]) min_temp_error(0);
1594 1606
     #endif
1595
-    if (current_temperature_raw[0] GE0 maxttemp_raw[0]) max_temp_error(0);
1596
-    if (current_temperature_raw[0] LE0 minttemp_raw[0]) min_temp_error(0);
1597 1607
 
1598 1608
     #if EXTRUDERS > 1
1599 1609
       #if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
1600 1610
         #define GE1 <=
1601
-        #define LE1 >=
1602 1611
       #else
1603 1612
         #define GE1 >=
1604
-        #define LE1 <=
1605 1613
       #endif
1606 1614
       if (current_temperature_raw[1] GE1 maxttemp_raw[1]) max_temp_error(1);
1607
-      if (current_temperature_raw[1] LE1 minttemp_raw[1]) min_temp_error(1);
1615
+      if (minttemp_raw[1] GE0 current_temperature_raw[1]) min_temp_error(1);
1616
+
1608 1617
       #if EXTRUDERS > 2
1609 1618
         #if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
1610 1619
           #define GE2 <=
1611
-          #define LE2 >=
1612 1620
         #else
1613 1621
           #define GE2 >=
1614
-          #define LE2 <=
1615 1622
         #endif
1616 1623
         if (current_temperature_raw[2] GE2 maxttemp_raw[2]) max_temp_error(2);
1617
-        if (current_temperature_raw[2] LE2 minttemp_raw[2]) min_temp_error(2);
1624
+        if (minttemp_raw[2] GE0 current_temperature_raw[2]) min_temp_error(2);
1625
+
1618 1626
         #if EXTRUDERS > 3
1619 1627
           #if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
1620 1628
             #define GE3 <=
1621
-            #define LE3 >=
1622 1629
           #else
1623 1630
             #define GE3 >=
1624
-            #define LE3 <=
1625 1631
           #endif
1626 1632
           if (current_temperature_raw[3] GE3 maxttemp_raw[3]) max_temp_error(3);
1627
-          if (current_temperature_raw[3] LE3 minttemp_raw[3]) min_temp_error(3);
1633
+          if (minttemp_raw[3] GE0 current_temperature_raw[3]) min_temp_error(3);
1634
+
1628 1635
         #endif // EXTRUDERS > 3
1629 1636
       #endif // EXTRUDERS > 2
1630 1637
     #endif // EXTRUDERS > 1
@@ -1632,10 +1639,8 @@ ISR(TIMER0_COMPB_vect) {
1632 1639
     #if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
1633 1640
       #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
1634 1641
         #define GEBED <=
1635
-        #define LEBED >=
1636 1642
       #else
1637 1643
         #define GEBED >=
1638
-        #define LEBED <=
1639 1644
       #endif
1640 1645
       if (current_temperature_bed_raw GEBED bed_maxttemp_raw) {
1641 1646
         target_temperature_bed = 0;

+ 3
- 3
Marlin/ultralcd.cpp 查看文件

@@ -912,9 +912,9 @@ static void lcd_control_motion_menu() {
912 912
   START_MENU();
913 913
   MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
914 914
   #ifdef ENABLE_AUTO_BED_LEVELING
915
-    MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, 0.5, 50);
915
+    MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, 0.0, 50);
916 916
   #endif
917
-  MENU_ITEM_EDIT(float5, MSG_ACC, &acceleration, 500, 99000);
917
+  MENU_ITEM_EDIT(float5, MSG_ACC, &acceleration, 10, 99000);
918 918
   MENU_ITEM_EDIT(float3, MSG_VXY_JERK, &max_xy_jerk, 1, 990);
919 919
   MENU_ITEM_EDIT(float52, MSG_VZ_JERK, &max_z_jerk, 0.1, 990);
920 920
   MENU_ITEM_EDIT(float3, MSG_VE_JERK, &max_e_jerk, 1, 990);
@@ -926,7 +926,7 @@ static void lcd_control_motion_menu() {
926 926
   MENU_ITEM_EDIT(float3, MSG_VTRAV_MIN, &mintravelfeedrate, 0, 999);
927 927
   MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_X, &max_acceleration_units_per_sq_second[X_AXIS], 100, 99000, reset_acceleration_rates);
928 928
   MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_Y, &max_acceleration_units_per_sq_second[Y_AXIS], 100, 99000, reset_acceleration_rates);
929
-  MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_Z, &max_acceleration_units_per_sq_second[Z_AXIS], 100, 99000, reset_acceleration_rates);
929
+  MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_Z, &max_acceleration_units_per_sq_second[Z_AXIS], 10, 99000, reset_acceleration_rates);
930 930
   MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &max_acceleration_units_per_sq_second[E_AXIS], 100, 99000, reset_acceleration_rates);
931 931
   MENU_ITEM_EDIT(float5, MSG_A_RETRACT, &retract_acceleration, 100, 99000);
932 932
   MENU_ITEM_EDIT(float5, MSG_A_TRAVEL, &travel_acceleration, 100, 99000);

正在加载...
取消
保存